diff --git a/dibi/libs/DibiDatabaseInfo.php b/dibi/libs/DibiDatabaseInfo.php index b9b37133..25a344c2 100644 --- a/dibi/libs/DibiDatabaseInfo.php +++ b/dibi/libs/DibiDatabaseInfo.php @@ -25,7 +25,7 @@ class DibiDatabaseInfo extends DibiObject { /** @var IDibiReflector */ - private $driver; + private $reflector; /** @var string */ private $name; @@ -35,9 +35,9 @@ class DibiDatabaseInfo extends DibiObject - public function __construct(IDibiReflector $driver, $name) + public function __construct(IDibiReflector $reflector, $name) { - $this->driver = $driver; + $this->reflector = $reflector; $this->name = $name; } @@ -118,8 +118,8 @@ class DibiDatabaseInfo extends DibiObject { if ($this->tables === NULL) { $this->tables = array(); - foreach ($this->driver->getTables() as $info) { - $this->tables[strtolower($info['name'])] = new DibiTableInfo($this->driver, $info); + foreach ($this->reflector->getTables() as $info) { + $this->tables[strtolower($info['name'])] = new DibiTableInfo($this->reflector, $info); } } } @@ -146,7 +146,7 @@ class DibiDatabaseInfo extends DibiObject class DibiTableInfo extends DibiObject { /** @var IDibiReflector */ - private $driver; + private $reflector; /** @var string */ private $name; @@ -168,9 +168,9 @@ class DibiTableInfo extends DibiObject - public function __construct(IDibiReflector $driver, array $info) + public function __construct(IDibiReflector $reflector, array $info) { - $this->driver = $driver; + $this->reflector = $reflector; $this->name = $info['name']; $this->view = !empty($info['view']); } @@ -295,8 +295,8 @@ class DibiTableInfo extends DibiObject { if ($this->columns === NULL) { $this->columns = array(); - foreach ($this->driver->getColumns($this->name) as $info) { - $this->columns[strtolower($info['name'])] = new DibiColumnInfo($this->driver, $info); + foreach ($this->reflector->getColumns($this->name) as $info) { + $this->columns[strtolower($info['name'])] = new DibiColumnInfo($this->reflector, $info); } } } @@ -311,7 +311,7 @@ class DibiTableInfo extends DibiObject if ($this->indexes === NULL) { $this->initColumns(); $this->indexes = array(); - foreach ($this->driver->getIndexes($this->name) as $info) { + foreach ($this->reflector->getIndexes($this->name) as $info) { foreach ($info['columns'] as $key => $name) { $info['columns'][$key] = $this->columns[strtolower($name)]; } @@ -433,8 +433,9 @@ class DibiResultInfo extends DibiObject { if ($this->columns === NULL) { $this->columns = array(); + $reflector = $this->driver instanceof IDibiReflector ? $this->driver : NULL; foreach ($this->driver->getResultColumns() as $info) { - $this->columns[] = $this->names[$info['name']] = new DibiColumnInfo($this->driver, $info); + $this->columns[] = $this->names[$info['name']] = new DibiColumnInfo($reflector, $info); } } } @@ -466,17 +467,17 @@ class DibiColumnInfo extends DibiObject /** @var array */ private static $types; - /** @var IDibiReflector */ - private $driver; + /** @var IDibiReflector|NULL when created by DibiResultInfo */ + private $reflector; /** @var array (name, nativetype, [table], [fullname], [size], [nullable], [default], [autoincrement], [vendor]) */ private $info; - public function __construct(IDibiReflector $driver, array $info) + public function __construct(IDibiReflector $reflector = NULL, array $info) { - $this->driver = $driver; + $this->reflector = $reflector; $this->info = $info; } @@ -517,10 +518,20 @@ class DibiColumnInfo extends DibiObject */ public function getTable() { - if (empty($this->info['table'])) { - throw new DibiException("Table name is unknown."); + if (empty($this->info['table']) || !$this->reflector) { + throw new DibiException("Table is unknown or not available."); } - return new DibiTableInfo($this->driver, array('name' => $this->info['table'])); + return new DibiTableInfo($this->reflector, array('name' => $this->info['table'])); + } + + + + /** + * @return string + */ + public function getTableName() + { + return isset($this->info['table']) ? $this->info['table'] : NULL; }