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