diff options
Diffstat (limited to 'framework/Db/Schema/oci')
-rwxr-xr-x | framework/Db/Schema/oci/TOciColumnSchema.php | 56 | ||||
-rwxr-xr-x | framework/Db/Schema/oci/TOciCommandBuilder.php | 122 | ||||
-rwxr-xr-x | framework/Db/Schema/oci/TOciSchema.php | 278 | ||||
-rwxr-xr-x | framework/Db/Schema/oci/TOciTableSchema.php | 28 |
4 files changed, 0 insertions, 484 deletions
diff --git a/framework/Db/Schema/oci/TOciColumnSchema.php b/framework/Db/Schema/oci/TOciColumnSchema.php deleted file mode 100755 index d609d14d..00000000 --- a/framework/Db/Schema/oci/TOciColumnSchema.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/** - * TOciColumnSchema class file. - * - * @author Ricardo Grana <rickgrana@yahoo.com.br> - * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2009 Yii Software LLC - * @license http://www.yiiframework.com/license/ - */ - -prado::using('System.Db.Schema.TDbColumnSchema'); - -/** - * TOciColumnSchema class describes the column meta data of a Oracle table. - * - * @author Ricardo Grana <rickgrana@yahoo.com.br> - * @version $Id: TOciColumnSchema.php - * @package System.Db.Schema.oci - * @since 1.0.5 - */ -class TOciColumnSchema extends TDbColumnSchema -{ - /** - * Extracts the PHP type from DB type. - * @param string DB type - */ - protected function extractOraType($dbType){ - if(strpos($dbType,'FLOAT')!==false) return 'double'; - - if ((strpos($dbType,'NUMBER')!==false) or - (strpos($dbType,'INTEGER')!==false)) - { - if(strpos($dbType,'(') && preg_match('/\((.*)\)/',$dbType,$matches)) - { - $values=explode(',',$matches[1]); - if(isset($values[1]) and (((int)$values[1]) > 0)) - return 'double'; - else return 'integer'; - } - }else{ - return 'string'; - } - } - protected function extractType($dbType) - { - $this->type=$this->extractOraType($dbType); - } - - protected function extractDefault($defaultValue) - { - if(strpos($dbType,'timestamp')!==false) - $this->defaultValue=null; - else - parent::extractDefault($defaultValue); - } -} diff --git a/framework/Db/Schema/oci/TOciCommandBuilder.php b/framework/Db/Schema/oci/TOciCommandBuilder.php deleted file mode 100755 index 807b7271..00000000 --- a/framework/Db/Schema/oci/TOciCommandBuilder.php +++ /dev/null @@ -1,122 +0,0 @@ -<?php -/** - * TOciCommandBuilder class file. - * - * @author Ricardo Grana <rickgrana@yahoo.com.br> - * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2009 Yii Software LLC - * @license http://www.yiiframework.com/license/ - */ - -prado::using('System.Db.Schema.TDbCommandBuilder'); - -/** - * TOciCommandBuilder provides basic methods to create query commands for tables. - * - * @author Ricardo Grana <rickgrana@yahoo.com.br> - * @version $Id: TOciCommandBuilder.php 2679 2009-06-15 07:49:42Z Christophe.Boulain $ - * @package System.Db.Schema.oci - * @since 1.0.5 - */ -class TOciCommandBuilder extends TDbCommandBuilder -{ - /** - * @var integer the last insertion ID - */ - public $returnID; - - /** - * Returns the last insertion ID for the specified table. - * @param mixed the table schema ({@link TDbTableSchema}) or the table name (string). - * @return mixed last insertion id. Null is returned if no sequence name. - */ - public function getLastInsertID($table) - { - return $this->returnID; - } - - /** - * Alters the SQL to apply LIMIT and OFFSET. - * Default implementation is applicable for PostgreSQL, MySQL and SQLite. - * @param string SQL query string without LIMIT and OFFSET. - * @param integer maximum number of rows, -1 to ignore limit. - * @param integer row offset, -1 to ignore offset. - * @return string SQL with LIMIT and OFFSET - */ - public function applyLimit($sql,$limit,$offset) - { - if (($limit < 0) and ($offset < 0)) return $sql; - - $filters = array(); - if($offset>0){ - $filters[] = 'rowNumId >= '.(int)$offset; - } - - if($limit>=0){ - $filters[]= 'rownum <= '.(int)$limit; - } - - if (count($filters) > 0){ - $filter = implode(' and ', $filters); - $filter= " WHERE ".$filter; - }else{ - $filter = ''; - } - - - $sql = <<<EOD - WITH USER_SQL AS ({$sql}), - PAGINATION AS (SELECT USER_SQL.*, rownum as rowNumId FROM USER_SQL) - SELECT * - FROM PAGINATION - {$filter} -EOD; - - return $sql; - } - - /** - * Creates an INSERT command. - * @param mixed the table schema ({@link TDbTableSchema}) or the table name (string). - * @param array data to be inserted (column name=>column value). If a key is not a valid column name, the corresponding value will be ignored. - * @return TDbCommand insert command - */ - public function createInsertCommand($table,$data) - { - $this->ensureTable($table); - $fields=array(); - $values=array(); - $placeholders=array(); - foreach($data as $name=>$value) - { - if(($column=$table->getColumn($name))!==null && ($value!==null || $column->allowNull)) - { - $fields[]=$column->rawName; - if($value instanceof TDbExpression) - $placeholders[]=(string)$value; - else - { - $placeholders[]=':'.$name; - $values[':'.$name]=$column->typecast($value); - } - } - } - - $sql="INSERT INTO {$table->rawName} (".implode(', ',$fields).') VALUES ('.implode(', ',$placeholders).')'; - - if(is_string($table->primaryKey)) - { - $sql.=" RETURNING ".$table->primaryKey." INTO :RETURN_ID"; - $command=$this->getDbConnection()->createCommand($sql); - $command->bindParam(':RETURN_ID', $this->returnID, PDO::PARAM_INT, 12); - $table->sequenceName='RETURN_ID'; - } - else - $command=$this->getDbConnection()->createCommand($sql); - - foreach($values as $name=>$value) - $command->bindValue($name,$value); - - return $command; - } -} diff --git a/framework/Db/Schema/oci/TOciSchema.php b/framework/Db/Schema/oci/TOciSchema.php deleted file mode 100755 index 50de0626..00000000 --- a/framework/Db/Schema/oci/TOciSchema.php +++ /dev/null @@ -1,278 +0,0 @@ -<?php -/** - * TOciSchema class file. - * - * @author Ricardo Grana <rickgrana@yahoo.com.br> - * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2009 Yii Software LLC - * @license http://www.yiiframework.com/license/ - */ - -prado::using('System.Db.Schema.TDbSchema'); - -/** - * TOciSchema is the class for retrieving metadata information from a PostgreSQL database. - * - * @author Ricardo Grana <qiang.xue@gmail.com> - * @version $Id: TOciSchema.php 2679 2009-06-15 07:49:42Z Christophe.Boulain $ - * @package System.Db.Schema.oci - * @since 1.0.5 - */ -class TOciSchema extends TDbSchema -{ - private $_defaultSchema = ''; - 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; - } - - /** - * Quotes a column name for use in a query. - * @param string column name - * @return string the properly quoted column name - */ - public function quoteColumnName($name) - { - return $name; - } - - /** - * Creates a command builder for the database. - * This method may be overridden by child classes to create a DBMS-specific command builder. - * @return TDbCommandBuilder command builder instance - */ - protected function createCommandBuilder() - { - return new TOciCommandBuilder($this); - } - - /** - * @param string default schema. - */ - public function setDefaultSchema($schema) - { - $this->_defaultSchema=$schema; - } - - /** - * @return string default schema. - */ - public function getDefaultSchema() - { - if (!strlen($this->_defaultSchema)) - { - $this->setDefaultSchema(strtoupper($this->getDbConnection()->username)); - } - - return $this->_defaultSchema; - } - - /** - * @param string table name with optional schema name prefix, uses default schema name prefix is not provided. - * @return array tuple as ($schemaName,$tableName) - */ - protected function getSchemaTableName($table) - { - $table = strtoupper($table); - if(count($parts= explode('.', str_replace('"','',$table))) > 1) - return array($parts[0], $parts[1]); - else - return array($this->getDefaultSchema(),$parts[0]); - } - - /** - * Creates a table instance representing the metadata for the named table. - * @return TDbTableSchema driver dependent table metadata. - */ - protected function createTable($name) - { - $table=new TOciTableSchema; - $this->resolveTableNames($table,$name); - - if(!$this->findColumns($table)) - return null; - $this->findConstraints($table); - - return $table; - } - - /** - * Generates various kinds of table names. - * @param TOciTableSchema 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=$this->getDefaultSchema(); - $tableName=$parts[0]; - } - - $table->name=$tableName; - $table->schemaName=$schemaName; - if($schemaName===$this->getDefaultSchema()) - $table->rawName=$this->quoteTableName($tableName); - else - $table->rawName=$this->quoteTableName($schemaName).'.'.$this->quoteTableName($tableName); - } - - /** - * Collects the table column metadata. - * @param TOciTableSchema the table metadata - * @return boolean whether the table exists in the database - */ - protected function findColumns($table) - { - list($schemaName,$tableName) = $this->getSchemaTableName($table->name); - - $sql=<<<EOD -SELECT a.column_name, a.data_type || - case - when data_precision is not null - then '(' || a.data_precision || - case when a.data_scale > 0 then ',' || a.data_scale else '' end - || ')' - when data_type = 'DATE' then '' - else '(' || to_char(a.data_length) || ')' - end as data_type, - a.nullable, a.data_default, - ( SELECT D.constraint_type - FROM ALL_CONS_COLUMNS C - inner join ALL_constraints D on D.OWNER = C.OWNER and D.constraint_name = C.constraint_name - WHERE C.OWNER = B.OWNER - and C.table_name = B.object_name - and C.column_name = A.column_name - and D.constraint_type = 'P') as Key -FROM ALL_TAB_COLUMNS A -inner join ALL_OBJECTS B ON b.owner = a.owner and ltrim(B.OBJECT_NAME) = ltrim(A.TABLE_NAME) -WHERE - a.owner = '{$schemaName}' - and b.object_type = 'TABLE' - and b.object_name = '{$tableName}' -ORDER by a.column_id -EOD; - - $command=$this->getDbConnection()->createCommand($sql); - - if(($columns=$command->queryAll())===array()){ - return false; - } - - foreach($columns as $column) - { - $c=$this->createColumn($column); - - $table->columns[$c->name]=$c; - if($c->isPrimaryKey) - { - if($table->primaryKey===null) - $table->primaryKey=$c->name; - else if(is_string($table->primaryKey)) - $table->primaryKey=array($table->primaryKey,$c->name); - else - $table->primaryKey[]=$c->name; - } - } - return true; - } - - /** - * Creates a table column. - * @param array column metadata - * @return TDbColumnSchema normalized column metadata - */ - protected function createColumn($column) - { - $c=new TOciColumnSchema; - $c->name=$column['COLUMN_NAME']; - $c->rawName=$this->quoteColumnName($c->name); - $c->allowNull=$column['NULLABLE']==='Y'; - $c->isPrimaryKey=strpos($column['KEY'],'P')!==false; - $c->isForeignKey=false; - $c->init($column['DATA_TYPE'],$column['DATA_DEFAULT']); - - return $c; - } - - /** - * Collects the primary and foreign key column details for the given table. - * @param TOciTableSchema the table metadata - */ - protected function findConstraints($table) - { - $sql=<<<EOD - SELECT D.constraint_type, C.COLUMN_NAME, C.position, D.r_constraint_name, - E.table_name as table_ref, f.column_name as column_ref - FROM ALL_CONS_COLUMNS C - inner join ALL_constraints D on D.OWNER = C.OWNER and D.constraint_name = C.constraint_name - left join ALL_constraints E on E.OWNER = D.r_OWNER and E.constraint_name = D.r_constraint_name - left join ALL_cons_columns F on F.OWNER = E.OWNER and F.constraint_name = E.constraint_name and F.position = c.position - WHERE C.OWNER = '{$table->schemaName}' - and C.table_name = '{$table->name}' - and D.constraint_type <> 'P' - order by d.constraint_name, c.position -EOD; - $command=$this->getDbConnection()->createCommand($sql); - foreach($command->queryAll() as $row) - { - if($row['constraint_type']==='R') // foreign key - { - $name = $row["COLUMN_NAME"]; - $table->foreignKeys[$name]=array($row["TABLE_REF"], array($row["COLUMN_REF"])); - if(isset($table->columns[$name])) - $table->columns[$name]->isForeignKey=true; - } - - } - } - - - /** - * Returns all table names in the database. - * @return array all table names in the database. - */ - protected function findTableNames($schema='') - { - if($schema==='') - { - $sql=<<<EOD -SELECT table_name, '{$schema}' as table_schema FROM user_tables -EOD; - $command=$this->getDbConnection()->createCommand($sql); - } - else - { - $sql=<<<EOD -SELECT object_name as table_name, owner as table_schema FROM all_objects -WHERE object_type = 'TABLE' AND owner=:schema -EOD; - $command=$this->getDbConnection()->createCommand($sql); - $command->bindParam(':schema',$schema); - } - - $rows=$command->queryAll(); - $names=array(); - foreach($rows as $row) - { - if($schema===$this->getDefaultSchema()) - $names[]=$row['table_name']; - else - $names[]=$row['schema_name'].'.'.$row['table_name']; - } - return $names; - } -} diff --git a/framework/Db/Schema/oci/TOciTableSchema.php b/framework/Db/Schema/oci/TOciTableSchema.php deleted file mode 100755 index 9fe73624..00000000 --- a/framework/Db/Schema/oci/TOciTableSchema.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * TOciTableSchema class file. - * - * @author Ricardo Grana <rickgrana@yahoo.com.br> - * @link http://www.yiiframework.com/ - * @copyright Copyright © 2008-2009 Yii Software LLC - * @license http://www.yiiframework.com/license/ - */ - -prado::using('System.Db.Schema.TDbTableSchame'); - -/** - * TOciTableSchema represents the metadata for a Ora table. - * - * @author Ricardo Grana <rickgrana@yahoo.com.br> - * @version $Id: TOciTableSchema.php 2679 2009-06-15 07:49:42Z Christophe.Boulain $ - * @package System.Db.Schema.oci - * @since 1.0.5 - */ -class TOciTableSchema extends TDbTableSchema -{ - /** - * @var string name of the schema (database) that this table belongs to. - * Defaults to null, meaning no schema (or the current database). - */ - public $schemaName; -} |