From b4b2c7e5e2eadd48b344538823dcf5645939ba44 Mon Sep 17 00:00:00 2001 From: rojaro <> Date: Mon, 13 Jul 2009 13:56:07 +0000 Subject: - removed old schema directory - some cleanups --- framework/Db/schema/pgsql/TPgsqlSchema.php | 284 ----------------------------- 1 file changed, 284 deletions(-) delete mode 100755 framework/Db/schema/pgsql/TPgsqlSchema.php (limited to 'framework/Db/schema/pgsql/TPgsqlSchema.php') diff --git a/framework/Db/schema/pgsql/TPgsqlSchema.php b/framework/Db/schema/pgsql/TPgsqlSchema.php deleted file mode 100755 index a539dce2..00000000 --- a/framework/Db/schema/pgsql/TPgsqlSchema.php +++ /dev/null @@ -1,284 +0,0 @@ - - * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2009 Yii Software LLC - * @license http://www.yiiframework.com/license/ - */ - -prado::using('System.db.schema.TDbSchema'); - -/** - * TPgsqlSchema is the class for retrieving metadata information from a PostgreSQL database. - * - * @author Qiang Xue - * @version $Id$ - * @package system.db.schema.pgsql - * @since 1.0 - */ -class TPgsqlSchema extends TDbSchema -{ - const DEFAULT_SCHEMA='public'; - private $_sequences=array(); - - /** - * Quotes a table name for use in a query. - * @param string table name - * @return string the properly quoted table name - */ - public function quoteTableName($name) - { - return '"'.$name.'"'; - } - - /** - * Creates a table instance representing the metadata for the named table. - * @return TDbTableSchema driver dependent table metadata. - */ - protected function createTable($name) - { - $table=new TPgsqlTableSchema; - $this->resolveTableNames($table,$name); - if(!$this->findColumns($table)) - return null; - $this->findConstraints($table); - - if(is_string($table->primaryKey) && isset($this->_sequences[$table->primaryKey])) - $table->sequenceName=$this->_sequences[$table->primaryKey]; - - return $table; - } - - /** - * Generates various kinds of table names. - * @param TPgsqlTableSchema the table instance - * @param string the unquoted table name - */ - protected function resolveTableNames($table,$name) - { - $parts=explode('.',str_replace('"','',$name)); - if(isset($parts[1])) - { - $schemaName=$parts[0]; - $tableName=$parts[1]; - } - else - { - $schemaName=self::DEFAULT_SCHEMA; - $tableName=$parts[0]; - } - - $table->name=$tableName; - $table->schemaName=$schemaName; - if($schemaName===self::DEFAULT_SCHEMA) - $table->rawName=$this->quoteTableName($tableName); - else - $table->rawName=$this->quoteTableName($schemaName).'.'.$this->quoteTableName($tableName); - } - - /** - * Collects the table column metadata. - * @param TPgsqlTableSchema the table metadata - * @return boolean whether the table exists in the database - */ - protected function findColumns($table) - { - $sql=<< 0 AND NOT a.attisdropped - AND a.attrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname=:table - AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = :schema)) -ORDER BY a.attnum -EOD; - $command=$this->getDbConnection()->createCommand($sql); - $command->bindValue(':table',$table->name); - $command->bindValue(':schema',$table->schemaName); - - if(($columns=$command->queryAll())===array()) - return false; - - foreach($columns as $column) - { - $c=$this->createColumn($column); - $table->columns[$c->name]=$c; - - if(stripos($column['adsrc'],'nextval')===0 && preg_match('/nextval\([^\']*\'([^\']+)\'[^\)]*\)/i',$column['adsrc'],$matches)) - { - if(strpos($matches[1],'.')!==false || $table->schemaName===self::DEFAULT_SCHEMA) - $this->_sequences[$c->name]=$matches[1]; - else - $this->_sequences[$c->name]=$table->schemaName.'.'.$matches[1]; - } - } - return true; - } - - /** - * Creates a table column. - * @param array column metadata - * @return TDbColumnSchema normalized column metadata - */ - protected function createColumn($column) - { - $c=new TPgsqlColumnSchema; - $c->name=$column['attname']; - $c->rawName=$this->quoteColumnName($c->name); - $c->allowNull=!$column['attnotnull']; - $c->isPrimaryKey=false; - $c->isForeignKey=false; - - $c->init($column['type'],$column['atthasdef'] ? $column['adsrc'] : null); - - return $c; - } - - /** - * Collects the primary and foreign key column details for the given table. - * @param TPgsqlTableSchema the table metadata - */ - protected function findConstraints($table) - { - $sql=<<getDbConnection()->createCommand($sql); - $command->bindValue(':table',$table->name); - $command->bindValue(':schema',$table->schemaName); - foreach($command->queryAll() as $row) - { - if($row['contype']==='p') // primary key - $this->findPrimaryKey($table,$row['indkey']); - else if($row['contype']==='f') // foreign key - $this->findForeignKey($table,$row['consrc']); - } - } - - /** - * Collects primary key information. - * @param TPgsqlTableSchema the table metadata - * @param string pgsql primary key index list - */ - protected function findPrimaryKey($table,$indices) - { - $indices=implode(', ',preg_split('/\s+/',$indices)); - $sql=<<getDbConnection()->createCommand($sql); - $command->bindValue(':table',$table->name); - $command->bindValue(':schema',$table->schemaName); - foreach($command->queryAll() as $row) - { - $name=$row['attname']; - if(isset($table->columns[$name])) - { - $table->columns[$name]->isPrimaryKey=true; - if($table->primaryKey===null) - $table->primaryKey=$name; - else if(is_string($table->primaryKey)) - $table->primaryKey=array($table->primaryKey,$name); - else - $table->primaryKey[]=$name; - } - } - } - - /** - * Collects foreign key information. - * @param TPgsqlTableSchema the table metadata - * @param string pgsql foreign key definition - */ - protected function findForeignKey($table,$src) - { - $matches=array(); - $brackets='\(([^\)]+)\)'; - $pattern="/FOREIGN\s+KEY\s+{$brackets}\s+REFERENCES\s+([^\(]+){$brackets}/i"; - if(preg_match($pattern,str_replace('"','',$src),$matches)) - { - $keys=preg_split('/,\s+/', $matches[1]); - $tableName=$matches[2]; - $fkeys=preg_split('/,\s+/', $matches[3]); - foreach($keys as $i=>$key) - { - $table->foreignKeys[$key]=array($tableName,$fkeys[$i]); - if(isset($table->columns[$key])) - $table->columns[$key]->isForeignKey=true; - } - } - } - - /** - * Returns all table names in the database. - * @return array all table names in the database. - * @since 1.0.2 - */ - protected function findTableNames($schema='') - { - if($schema==='') - $schema=self::DEFAULT_SCHEMA; - $sql=<<getDbConnection()->createCommand($sql); - $command->bindParam(':schema',$schema); - $rows=$command->queryAll(); - $names=array(); - foreach($rows as $row) - { - if($schema===self::DEFAULT_SCHEMA) - $names[]=$row['table_name']; - else - $names[]=$row['schema_name'].'.'.$row['table_name']; - } - return $names; - } -} -- cgit v1.2.3