250 lines
11 KiB
PHP
250 lines
11 KiB
PHP
<?php
|
|
|
|
class Doctrine_Metadata_Factory_TestCase extends Doctrine_UnitTestCase
|
|
{
|
|
public function prepareData()
|
|
{ }
|
|
|
|
public function prepareTables()
|
|
{
|
|
$this->tables[] = 'Metadata_User';
|
|
$this->tables[] = 'Metadata_Manager';
|
|
$this->tables[] = 'Metadata_Customer';
|
|
$this->tables[] = 'Metadata_SuperManager';
|
|
parent::prepareTables();
|
|
}
|
|
|
|
public function setUp()
|
|
{
|
|
parent::setUp();
|
|
$this->prepareTables();
|
|
}
|
|
|
|
public function testMetadataSetupOnClassTableInheritanceHierarchy()
|
|
{
|
|
$userClass = $this->conn->getClassMetadata('Metadata_User');
|
|
$this->assertTrue($userClass instanceof Doctrine_ClassMetadata);
|
|
$this->assertEqual('cti_user', $userClass->getTableName());
|
|
$this->assertEqual(4, count($userClass->getMappedColumns()));
|
|
$this->assertIdentical(array(), $userClass->getParentClasses());
|
|
$this->assertEqual('type', $userClass->getInheritanceOption('discriminatorColumn'));
|
|
$this->assertIdentical(array(
|
|
1 => 'CTI_User',
|
|
2 => 'CTI_Manager',
|
|
3 => 'CTI_Customer',
|
|
4 => 'CTI_SuperManager'), $userClass->getInheritanceOption('discriminatorMap'));
|
|
|
|
|
|
$managerClass = $this->conn->getMetadata('Metadata_Manager');
|
|
$this->assertTrue($managerClass instanceof Doctrine_ClassMetadata);
|
|
$this->assertIdentical(array('Metadata_User'), $managerClass->getParentClasses());
|
|
$this->assertEqual('cti_manager', $managerClass->getTableName());
|
|
$this->assertEqual(5, count($managerClass->getMappedColumns()));
|
|
$this->assertEqual('type', $managerClass->getInheritanceOption('discriminatorColumn'));
|
|
$this->assertIdentical(array(
|
|
1 => 'CTI_User',
|
|
2 => 'CTI_Manager',
|
|
3 => 'CTI_Customer',
|
|
4 => 'CTI_SuperManager'), $managerClass->getInheritanceOption('discriminatorMap'));
|
|
|
|
|
|
$suManagerClass = $this->conn->getMetadata('Metadata_SuperManager');
|
|
$this->assertTrue($suManagerClass instanceof Doctrine_ClassMetadata);
|
|
$this->assertIdentical(array('Metadata_Manager', 'Metadata_User'), $suManagerClass->getParentClasses());
|
|
$this->assertEqual('cti_supermanager', $suManagerClass->getTableName());
|
|
$this->assertEqual(6, count($suManagerClass->getMappedColumns()));
|
|
$this->assertEqual('type', $suManagerClass->getInheritanceOption('discriminatorColumn'));
|
|
$this->assertIdentical(array(
|
|
1 => 'CTI_User',
|
|
2 => 'CTI_Manager',
|
|
3 => 'CTI_Customer',
|
|
4 => 'CTI_SuperManager'), $suManagerClass->getInheritanceOption('discriminatorMap'));
|
|
|
|
//var_dump($suManagerClass->getColumns());
|
|
}
|
|
|
|
public function testExportableFormatOfClassInClassTableInheritanceHierarchy()
|
|
{
|
|
$userClass = $this->conn->getClassMetadata('Metadata_User');
|
|
$userClassExportableFormat = $userClass->getExportableFormat();
|
|
$this->assertEqual(4, count($userClassExportableFormat['columns']));
|
|
$this->assertTrue(isset($userClassExportableFormat['columns']['cti_id']));
|
|
$this->assertTrue(isset($userClassExportableFormat['columns']['cti_id']['primary']));
|
|
$this->assertTrue(isset($userClassExportableFormat['columns']['cti_id']['autoincrement']));
|
|
$this->assertTrue(isset($userClassExportableFormat['columns']['cti_foo']));
|
|
$this->assertTrue(isset($userClassExportableFormat['columns']['cti_name']));
|
|
$this->assertTrue(isset($userClassExportableFormat['columns']['type']));
|
|
|
|
$managerClass = $this->conn->getClassMetadata('Metadata_Manager');
|
|
$managerClassExportableFormat = $managerClass->getExportableFormat();
|
|
$this->assertEqual(2, count($managerClassExportableFormat['columns']));
|
|
$this->assertTrue(isset($managerClassExportableFormat['columns']['cti_id']));
|
|
$this->assertTrue(isset($managerClassExportableFormat['columns']['cti_id']['primary']));
|
|
$this->assertFalse(isset($managerClassExportableFormat['columns']['cti_id']['autoincrement']));
|
|
|
|
$customerClass = $this->conn->getClassMetadata('Metadata_Customer');
|
|
$customerClassExportableFormat = $customerClass->getExportableFormat();
|
|
$this->assertEqual(2, count($customerClassExportableFormat['columns']));
|
|
$this->assertTrue(isset($customerClassExportableFormat['columns']['cti_id']));
|
|
$this->assertTrue(isset($customerClassExportableFormat['columns']['cti_id']['primary']));
|
|
$this->assertFalse(isset($customerClassExportableFormat['columns']['cti_id']['autoincrement']));
|
|
|
|
$superManagerClass = $this->conn->getClassMetadata('Metadata_SuperManager');
|
|
$superManagerClassExportableFormat = $superManagerClass->getExportableFormat();
|
|
$this->assertEqual(2, count($superManagerClassExportableFormat['columns']));
|
|
$this->assertTrue(isset($superManagerClassExportableFormat['columns']['cti_id']));
|
|
$this->assertTrue(isset($superManagerClassExportableFormat['columns']['cti_id']['primary']));
|
|
$this->assertFalse(isset($superManagerClassExportableFormat['columns']['cti_id']['autoincrement']));
|
|
}
|
|
|
|
public function testMetadataSetupOnSingleTableInheritanceHierarchy()
|
|
{
|
|
$userClass = $this->conn->getClassMetadata('Metadata_STI_User');
|
|
$this->assertTrue($userClass instanceof Doctrine_ClassMetadata);
|
|
$this->assertEqual('cti_user', $userClass->getTableName());
|
|
$this->assertEqual(4, count($userClass->getMappedColumns()));
|
|
$this->assertIdentical(array(), $userClass->getParentClasses());
|
|
$this->assertEqual('type', $userClass->getInheritanceOption('discriminatorColumn'));
|
|
$this->assertIdentical(array(
|
|
1 => 'CTI_User',
|
|
2 => 'CTI_Manager',
|
|
3 => 'CTI_Customer',
|
|
4 => 'CTI_SuperManager'), $userClass->getInheritanceOption('discriminatorMap'));
|
|
|
|
$managerClass = $this->conn->getClassMetadata('Metadata_STI_Manager');
|
|
$this->assertTrue($managerClass instanceof Doctrine_ClassMetadata);
|
|
$this->assertIdentical(array('Metadata_STI_User'), $managerClass->getParentClasses());
|
|
$this->assertEqual('cti_user', $managerClass->getTableName());
|
|
$this->assertEqual(5, count($managerClass->getMappedColumns()));
|
|
$this->assertEqual('type', $managerClass->getInheritanceOption('discriminatorColumn'));
|
|
$this->assertIdentical(array(
|
|
1 => 'CTI_User',
|
|
2 => 'CTI_Manager',
|
|
3 => 'CTI_Customer',
|
|
4 => 'CTI_SuperManager'), $managerClass->getInheritanceOption('discriminatorMap'));
|
|
|
|
|
|
$suManagerClass = $this->conn->getClassMetadata('Metadata_STI_SuperManager');
|
|
$this->assertTrue($suManagerClass instanceof Doctrine_ClassMetadata);
|
|
$this->assertIdentical(array('Metadata_STI_Manager', 'Metadata_STI_User'), $suManagerClass->getParentClasses());
|
|
$this->assertEqual('cti_user', $suManagerClass->getTableName());
|
|
$this->assertEqual(6, count($suManagerClass->getMappedColumns()));
|
|
$this->assertEqual('type', $suManagerClass->getInheritanceOption('discriminatorColumn'));
|
|
$this->assertIdentical(array(
|
|
1 => 'CTI_User',
|
|
2 => 'CTI_Manager',
|
|
3 => 'CTI_Customer',
|
|
4 => 'CTI_SuperManager'), $suManagerClass->getInheritanceOption('discriminatorMap'));
|
|
|
|
//var_dump($suManagerClass->getColumns());
|
|
}
|
|
}
|
|
|
|
|
|
class Metadata_User extends Doctrine_Record
|
|
{
|
|
public static function initMetadata(Doctrine_ClassMetadata $class)
|
|
{
|
|
$class->setTableName('cti_user');
|
|
$class->setInheritanceType(Doctrine::INHERITANCE_TYPE_JOINED,
|
|
array('discriminatorColumn' => 'type',
|
|
'discriminatorMap' => array(
|
|
1 => 'CTI_User',
|
|
2 => 'CTI_Manager',
|
|
3 => 'CTI_Customer',
|
|
4 => 'CTI_SuperManager')
|
|
)
|
|
);
|
|
$class->setSubclasses(array('Metadata_Manager', 'Metadata_Customer', 'Metadata_SuperManager'));
|
|
$class->mapColumn('cti_id as id', 'integer', 4, array('primary' => true, 'autoincrement' => true));
|
|
$class->mapColumn('cti_foo as foo', 'integer', 4);
|
|
$class->mapColumn('cti_name as name', 'string', 50);
|
|
$class->mapColumn('type', 'integer', 1);
|
|
|
|
//$class->setNamedQuery('findByName', 'SELECT u.* FROM User u WHERE u.name = ?');
|
|
}
|
|
}
|
|
|
|
class Metadata_Manager extends Metadata_User
|
|
{
|
|
public static function initMetadata(Doctrine_ClassMetadata $class)
|
|
{
|
|
$class->setTableName('cti_manager');
|
|
$class->setSubclasses(array('Metadata_SuperManager'));
|
|
$class->mapColumn('ctim_salary as salary', 'varchar', 50, array());
|
|
}
|
|
}
|
|
|
|
class Metadata_Customer extends Metadata_User
|
|
{
|
|
public static function initMetadata(Doctrine_ClassMetadata $class)
|
|
{
|
|
$class->setTableName('cti_customer');
|
|
$class->mapColumn('ctic_bonuspoints as bonuspoints', 'varchar', 50, array());
|
|
}
|
|
}
|
|
|
|
class Metadata_SuperManager extends Metadata_Manager
|
|
{
|
|
public static function initMetadata(Doctrine_ClassMetadata $class)
|
|
{
|
|
$class->setTableName('cti_supermanager');
|
|
$class->mapColumn('ctism_gosutitle as gosutitle', 'varchar', 50, array());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
class Metadata_STI_User extends Doctrine_Record
|
|
{
|
|
public static function initMetadata($class)
|
|
{
|
|
$class->setTableName('cti_user');
|
|
$class->setInheritanceType(Doctrine::INHERITANCE_TYPE_SINGLE_TABLE,
|
|
array('discriminatorColumn' => 'type',
|
|
'discriminatorMap' => array(
|
|
1 => 'CTI_User',
|
|
2 => 'CTI_Manager',
|
|
3 => 'CTI_Customer',
|
|
4 => 'CTI_SuperManager')
|
|
)
|
|
);
|
|
$class->setSubclasses(array('Metadata_STI_Manager', 'Metadata_STI_Customer', 'Metadata_STI_SuperManager'));
|
|
$class->mapColumn('cti_id as id', 'integer', 4, array('primary' => true, 'autoincrement' => true));
|
|
$class->mapColumn('cti_foo as foo', 'integer', 4);
|
|
$class->mapColumn('cti_name as name', 'string', 50);
|
|
$class->mapColumn('type', 'integer', 1);
|
|
|
|
//$class->setNamedQuery('findByName', 'SELECT u.* FROM User u WHERE u.name = ?');
|
|
}
|
|
}
|
|
|
|
class Metadata_STI_Manager extends Metadata_STI_User
|
|
{
|
|
public static function initMetadata($class)
|
|
{
|
|
$class->setTableName('cti_manager');
|
|
$class->setSubclasses(array('Metadata_STI_SuperManager'));
|
|
$class->mapColumn('ctim_salary as salary', 'varchar', 50, array());
|
|
}
|
|
}
|
|
|
|
class Metadata_STI_Customer extends Metadata_STI_User
|
|
{
|
|
public static function initMetadata($class)
|
|
{
|
|
$class->setTableName('cti_customer');
|
|
$class->mapColumn('ctic_bonuspoints as bonuspoints', 'varchar', 50, array());
|
|
}
|
|
}
|
|
|
|
class Metadata_STI_SuperManager extends Metadata_STI_Manager
|
|
{
|
|
public static function initMetadata($class)
|
|
{
|
|
$class->setTableName('cti_supermanager');
|
|
$class->mapColumn('ctism_gosutitle as gosutitle', 'varchar', 50, array());
|
|
}
|
|
}
|
|
|