1
0
mirror of https://github.com/dg/dibi.git synced 2025-08-05 05:37:39 +02:00

DibiDatabaseInfo: better IDibiReflector vs. IDibiResultDriver handling

This commit is contained in:
David Grudl
2010-08-04 15:30:17 +02:00
parent de85d3814e
commit 76783b3872

View File

@@ -25,7 +25,7 @@
class DibiDatabaseInfo extends DibiObject class DibiDatabaseInfo extends DibiObject
{ {
/** @var IDibiReflector */ /** @var IDibiReflector */
private $driver; private $reflector;
/** @var string */ /** @var string */
private $name; 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; $this->name = $name;
} }
@@ -118,8 +118,8 @@ class DibiDatabaseInfo extends DibiObject
{ {
if ($this->tables === NULL) { if ($this->tables === NULL) {
$this->tables = array(); $this->tables = array();
foreach ($this->driver->getTables() as $info) { foreach ($this->reflector->getTables() as $info) {
$this->tables[strtolower($info['name'])] = new DibiTableInfo($this->driver, $info); $this->tables[strtolower($info['name'])] = new DibiTableInfo($this->reflector, $info);
} }
} }
} }
@@ -146,7 +146,7 @@ class DibiDatabaseInfo extends DibiObject
class DibiTableInfo extends DibiObject class DibiTableInfo extends DibiObject
{ {
/** @var IDibiReflector */ /** @var IDibiReflector */
private $driver; private $reflector;
/** @var string */ /** @var string */
private $name; 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->name = $info['name'];
$this->view = !empty($info['view']); $this->view = !empty($info['view']);
} }
@@ -295,8 +295,8 @@ class DibiTableInfo extends DibiObject
{ {
if ($this->columns === NULL) { if ($this->columns === NULL) {
$this->columns = array(); $this->columns = array();
foreach ($this->driver->getColumns($this->name) as $info) { foreach ($this->reflector->getColumns($this->name) as $info) {
$this->columns[strtolower($info['name'])] = new DibiColumnInfo($this->driver, $info); $this->columns[strtolower($info['name'])] = new DibiColumnInfo($this->reflector, $info);
} }
} }
} }
@@ -311,7 +311,7 @@ class DibiTableInfo extends DibiObject
if ($this->indexes === NULL) { if ($this->indexes === NULL) {
$this->initColumns(); $this->initColumns();
$this->indexes = array(); $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) { foreach ($info['columns'] as $key => $name) {
$info['columns'][$key] = $this->columns[strtolower($name)]; $info['columns'][$key] = $this->columns[strtolower($name)];
} }
@@ -433,8 +433,9 @@ class DibiResultInfo extends DibiObject
{ {
if ($this->columns === NULL) { if ($this->columns === NULL) {
$this->columns = array(); $this->columns = array();
$reflector = $this->driver instanceof IDibiReflector ? $this->driver : NULL;
foreach ($this->driver->getResultColumns() as $info) { 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 */ /** @var array */
private static $types; private static $types;
/** @var IDibiReflector */ /** @var IDibiReflector|NULL when created by DibiResultInfo */
private $driver; private $reflector;
/** @var array (name, nativetype, [table], [fullname], [size], [nullable], [default], [autoincrement], [vendor]) */ /** @var array (name, nativetype, [table], [fullname], [size], [nullable], [default], [autoincrement], [vendor]) */
private $info; 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; $this->info = $info;
} }
@@ -517,10 +518,20 @@ class DibiColumnInfo extends DibiObject
*/ */
public function getTable() public function getTable()
{ {
if (empty($this->info['table'])) { if (empty($this->info['table']) || !$this->reflector) {
throw new DibiException("Table name is unknown."); 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;
} }