1
0
mirror of https://github.com/dg/dibi.git synced 2025-08-04 13:17:58 +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
{
/** @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;
}