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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user