Browse Source

Fixes issue #514.

tags/2.0.0-beta
Qiang Xue 11 years ago
parent
commit
cf1e12ad11
  1. 28
      framework/yii/db/pgsql/Schema.php

28
framework/yii/db/pgsql/Schema.php

@ -76,7 +76,8 @@ class Schema extends \yii\db\Schema
* Creates a query builder for the MySQL database. * Creates a query builder for the MySQL database.
* @return QueryBuilder query builder instance * @return QueryBuilder query builder instance
*/ */
public function createQueryBuilder() { public function createQueryBuilder()
{
return new QueryBuilder($this->db); return new QueryBuilder($this->db);
} }
@ -85,7 +86,8 @@ class Schema extends \yii\db\Schema
* @param TableSchema $table the table metadata object * @param TableSchema $table the table metadata object
* @param string $name the table name * @param string $name the table name
*/ */
protected function resolveTableNames($table, $name) { protected function resolveTableNames($table, $name)
{
$parts = explode('.', str_replace('"', '', $name)); $parts = explode('.', str_replace('"', '', $name));
if (isset($parts[1])) { if (isset($parts[1])) {
$table->schemaName = $parts[0]; $table->schemaName = $parts[0];
@ -104,7 +106,8 @@ class Schema extends \yii\db\Schema
* @param string $name table name * @param string $name table name
* @return string the properly quoted table name * @return string the properly quoted table name
*/ */
public function quoteSimpleTableName($name) { public function quoteSimpleTableName($name)
{
return strpos($name, '"') !== false ? $name : '"' . $name . '"'; return strpos($name, '"') !== false ? $name : '"' . $name . '"';
} }
@ -113,12 +116,15 @@ class Schema extends \yii\db\Schema
* @param string $name table name * @param string $name table name
* @return TableSchema|null driver dependent table metadata. Null if the table does not exist. * @return TableSchema|null driver dependent table metadata. Null if the table does not exist.
*/ */
public function loadTableSchema($name) { public function loadTableSchema($name)
{
$table = new TableSchema(); $table = new TableSchema();
$this->resolveTableNames($table, $name); $this->resolveTableNames($table, $name);
if ($this->findColumns($table)) { if ($this->findColumns($table)) {
$this->findConstraints($table); $this->findConstraints($table);
return $table; return $table;
} else {
return null;
} }
} }
@ -126,7 +132,8 @@ class Schema extends \yii\db\Schema
* Collects the foreign key column details for the given table. * Collects the foreign key column details for the given table.
* @param TableSchema $table the table metadata * @param TableSchema $table the table metadata
*/ */
protected function findConstraints($table) { protected function findConstraints($table)
{
$tableName = $this->quoteValue($table->name); $tableName = $this->quoteValue($table->name);
$tableSchema = $this->quoteValue($table->schemaName); $tableSchema = $this->quoteValue($table->schemaName);
@ -175,7 +182,8 @@ SQL;
* @param TableSchema $table the table metadata * @param TableSchema $table the table metadata
* @return boolean whether the table exists in the database * @return boolean whether the table exists in the database
*/ */
protected function findColumns($table) { protected function findColumns($table)
{
$tableName = $this->db->quoteValue($table->name); $tableName = $this->db->quoteValue($table->name);
$schemaName = $this->db->quoteValue($table->schemaName); $schemaName = $this->db->quoteValue($table->schemaName);
$sql = <<<SQL $sql = <<<SQL
@ -234,11 +242,11 @@ ORDER BY
a.attnum; a.attnum;
SQL; SQL;
try {
$columns = $this->db->createCommand($sql)->queryAll(); $columns = $this->db->createCommand($sql)->queryAll();
} catch (\Exception $e) { if (empty($columns)) {
return false; return false;
} }
foreach ($columns as $column) { foreach ($columns as $column) {
$column = $this->loadColumnSchema($column); $column = $this->loadColumnSchema($column);
$table->columns[$column->name] = $column; $table->columns[$column->name] = $column;
@ -257,7 +265,8 @@ SQL;
* @param array $info column information * @param array $info column information
* @return ColumnSchema the column schema object * @return ColumnSchema the column schema object
*/ */
protected function loadColumnSchema($info) { protected function loadColumnSchema($info)
{
$column = new ColumnSchema(); $column = new ColumnSchema();
$column->allowNull = $info['is_nullable']; $column->allowNull = $info['is_nullable'];
$column->autoIncrement = $info['is_autoinc']; $column->autoIncrement = $info['is_autoinc'];
@ -280,5 +289,4 @@ SQL;
$column->phpType = $this->getColumnPhpType($column); $column->phpType = $this->getColumnPhpType($column);
return $column; return $column;
} }
} }
Loading…
Cancel
Save