COciSchema
优质
小牛编辑
135浏览
2023-12-01
所有包 | 属性 | 方法
COciSchema是从Oracle数据库检索元数据信息的类。
public void setDefaultSchema(string $schema)
源码: framework/db/schema/oci/COciSchema.php#330 (显示)
源码: framework/db/schema/oci/COciSchema.php#225 (显示)
源码: framework/db/schema/oci/COciSchema.php#73 (显示)
源码: framework/db/schema/oci/COciSchema.php#346 (显示)
源码: framework/db/schema/oci/COciSchema.php#161 (显示)
源码: framework/db/schema/oci/COciSchema.php#242 (显示)
源码: framework/db/schema/oci/COciSchema.php#277 (显示)
源码: framework/db/schema/oci/COciSchema.php#89 (显示)
源码: framework/db/schema/oci/COciSchema.php#103 (显示)
源码: framework/db/schema/oci/COciSchema.php#117 (显示)
源码: framework/db/schema/oci/COciSchema.php#63 (显示)
源码: framework/db/schema/oci/COciSchema.php#51 (显示)
源码: framework/db/schema/oci/COciSchema.php#315 (显示)
源码: framework/db/schema/oci/COciSchema.php#134 (显示)
源码: framework/db/schema/oci/COciSchema.php#81 (显示)
包 | system.db.schema.oci |
---|---|
继承 | class COciSchema » CDbSchema » CComponent |
版本 | $Id: COciSchema.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 | framework/db/schema/oci/COciSchema.php |
公共属性
隐藏继承属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
columnTypes | array | 映射到实体列类型的抽象列类型。 | COciSchema |
commandBuilder | CDbCommandBuilder | the SQL command builder for this connection. | CDbSchema |
dbConnection | CDbConnection | database connection. | CDbSchema |
defaultSchema | string | 默认schema。 | COciSchema |
tableNames | array | Returns all table names in the database. | CDbSchema |
tables | array | Returns the metadata for all tables in the database. | CDbSchema |
公共方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__construct() | Constructor. | CDbSchema |
__get() | 返回一个属性值、一个事件处理程序列表或一个行为名称。 | CComponent |
__isset() | 检查一个属性是否为null。 | CComponent |
__set() | 设置一个组件的属性值。 | CComponent |
__unset() | 设置一个组件的属性为null。 | CComponent |
addColumn() | Builds a SQL statement for adding a new DB column. | CDbSchema |
addForeignKey() | Builds a SQL statement for adding a foreign key constraint to an existing table. | CDbSchema |
alterColumn() | 构造改变列定义的SQL语句。 | COciSchema |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
checkIntegrity() | Enables or disables integrity check. | CDbSchema |
compareTableNames() | Compares two table names. | CDbSchema |
createIndex() | Builds a SQL statement for creating a new index. | CDbSchema |
createTable() | Builds a SQL statement for creating a new DB table. | CDbSchema |
detachBehavior() | 从组件中分离一个行为。 | CComponent |
detachBehaviors() | 从组件中分离所有行为。 | CComponent |
detachEventHandler() | 分离一个存在的事件处理程序。 | CComponent |
disableBehavior() | 禁用一个附加行为。 | CComponent |
disableBehaviors() | 禁用组件附加的所有行为。 | CComponent |
dropColumn() | Builds a SQL statement for dropping a DB column. | CDbSchema |
dropForeignKey() | Builds a SQL statement for dropping a foreign key constraint. | CDbSchema |
dropIndex() | 构造删除索引的SQL语句。 | COciSchema |
dropTable() | Builds a SQL statement for dropping a DB table. | CDbSchema |
enableBehavior() | 启用一个附加行为。 | CComponent |
enableBehaviors() | 启用组件附加的所有行为。 | CComponent |
evaluateExpression() | 计算一个PHP表达式,或根据组件上下文执行回调。 | CComponent |
getColumnType() | Converts an abstract column type into a physical column type. | CDbSchema |
getCommandBuilder() | 返回the SQL command builder for this connection. | CDbSchema |
getDbConnection() | 返回database connection. The connection is active. | CDbSchema |
getDefaultSchema() | 返回默认schema。 | COciSchema |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
getTable() | Obtains the metadata for the named table. | CDbSchema |
getTableNames() | Returns all table names in the database. | CDbSchema |
getTables() | Returns the metadata for all tables in the database. | CDbSchema |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
quoteColumnName() | Quotes a column name for use in a query. | CDbSchema |
quoteSimpleColumnName() | 用引号引用列名以便查询时使用。 | COciSchema |
quoteSimpleTableName() | 用引号引用表名以便查询时使用。 | COciSchema |
quoteTableName() | Quotes a table name for use in a query. | CDbSchema |
raiseEvent() | 发起一个事件。 | CComponent |
refresh() | Refreshes the schema. | CDbSchema |
renameColumn() | Builds a SQL statement for renaming a column. | CDbSchema |
renameTable() | 构造重命名数据表的SQL语句。 | COciSchema |
resetSequence() | Resets the sequence value of a table's primary key. | CDbSchema |
setDefaultSchema() | 设置默认schema。 | COciSchema |
truncateTable() | Builds a SQL statement for truncating a DB table. | CDbSchema |
受保护方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
createColumn() | 创建一个列。 | COciSchema |
createCommandBuilder() | 为数据库创建命令构建器。 | COciSchema |
findColumns() | 收集列的元数据。 | COciSchema |
findConstraints() | 收集给定表主键列和外键列的详细信息。 | COciSchema |
findTableNames() | 返回所有数据库里的表名。 | COciSchema |
getSchemaTableName() | 返回($schemaName,$tableName)形式的数组 | COciSchema |
loadTable() | 为指定表载入元数据。 | COciSchema |
resolveTableNames() | 生成各种表名。 | COciSchema |
属性详细
columnTypes 属性 (可用自 v1.1.6) public array $columnTypes;映射到实体列类型的抽象列类型。
defaultSchema 属性 public string getDefaultSchema()public void setDefaultSchema(string $schema)
默认schema。
方法详细
alterColumn() 方法 (可用自 v1.1.6)public string alterColumn(string $table, string $column, string $type) | ||
$table | string | 要改变的列所在表。该表名会被指定方法正确引用。 |
$column | string | 要改变的列名。该列名会被指定方法正确引用。 |
$type | string | 新的列类型。getColumnType方法会被调用来将虚拟列类型(若存在) 转换为对应的实体列类型。任何未被识别为虚拟类型的类型会被保留在生成的SQL中。 例如,‘string’会被转为‘varchar(255)’,而‘string not null’会被转为‘varchar(255) not null’。 |
{return} | string | 改变列定义的SQL语句。 |
publicfunctionalterColumn($table,$column,$type)
{
$type=$this->getColumnType($type);
$sql='ALTERTABLE'.$this->quoteTableName($table).'MODIFY'
.$this->quoteColumnName($column).''
.$this->getColumnType($type);
return$sql;
}
构造改变列定义的SQL语句。
createColumn() 方法protected CDbColumnSchema createColumn(array $column) | ||
$column | array | 列元数据 |
{return} | CDbColumnSchema | 规范的列元数据 |
protectedfunctioncreateColumn($column)
{
$c=newCOciColumnSchema;
$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;
}
创建一个列。
createCommandBuilder() 方法protected CDbCommandBuilder createCommandBuilder() | ||
{return} | CDbCommandBuilder | 命令构建器实例 |
protectedfunctioncreateCommandBuilder()
{
returnnewCOciCommandBuilder($this);
}
为数据库创建命令构建器。 该方法可以被子类重写以创建一个指定DBMS的命令构建器。
dropIndex() 方法 (可用自 v1.1.6)public string dropIndex(string $name, string $table) | ||
$name | string | 要删除的索引名。该索引名会被指定方法正确引用。 |
$table | string | 要删除的索引所在表。该表名会被指定方法正确引用。 |
{return} | string | 删除索引的SQL语句。 |
publicfunctiondropIndex($name,$table)
{
return'DROPINDEX'.$this->quoteTableName($name);
}
构造删除索引的SQL语句。
findColumns() 方法protected boolean findColumns(COciTableSchema $table) | ||
$table | COciTableSchema | 表元数据 |
{return} | boolean | 表是否存在于数据库里 |
protectedfunctionfindColumns($table)
{
$schemaName=$table->schemaName;
$tableName=$table->name;
$sql=<<<EOD
SELECTa.column_name,a.data_type||
case
whendata_precisionisnotnull
then'('||a.data_precision||
casewhena.data_scale>0then','||a.data_scaleelse''end
||')'
whendata_type='DATE'then''
whendata_type='NUMBER'then''
else'('||to_char(a.data_length)||')'
endasdata_type,
a.nullable,a.data_default,
(SELECTD.constraint_type
FROMALL_CONS_COLUMNSC
innerjoinALL_constraintsDonD.OWNER=C.OWNERandD.constraint_name=C.constraint_name
WHEREC.OWNER=B.OWNER
andC.table_name=B.object_name
andC.column_name=A.column_name
andD.constraint_type='P')asKey
FROMALL_TAB_COLUMNSA
innerjoinALL_OBJECTSBONb.owner=a.ownerandltrim(B.OBJECT_NAME)=ltrim(A.TABLE_NAME)
WHERE
a.owner='{$schemaName}'
and(b.object_type='TABLE'orb.object_type='VIEW')
andb.object_name='{$tableName}'
ORDERbya.column_id
EOD;
$command=$this->getDbConnection()->createCommand($sql);
if(($columns=$command->queryAll())===array()){
returnfalse;
}
foreach($columnsas$column)
{
$c=$this->createColumn($column);
$table->columns[$c->name]=$c;
if($c->isPrimaryKey)
{
if($table->primaryKey===null)
$table->primaryKey=$c->name;
elseif(is_string($table->primaryKey))
$table->primaryKey=array($table->primaryKey,$c->name);
else
$table->primaryKey[]=$c->name;
$table->sequenceName='';
$c->autoIncrement=true;
}
}
returntrue;
}
收集列的元数据。
findConstraints() 方法protected void findConstraints(COciTableSchema $table) | ||
$table | COciTableSchema | 表元数据 |
protectedfunctionfindConstraints($table)
{
$sql=<<<EOD
SELECTD.constraint_typeasCONSTRAINT_TYPE,C.COLUMN_NAME,C.position,D.r_constraint_name,
E.table_nameastable_ref,f.column_nameascolumn_ref,
C.table_name
FROMALL_CONS_COLUMNSC
innerjoinALL_constraintsDonD.OWNER=C.OWNERandD.constraint_name=C.constraint_name
leftjoinALL_constraintsEonE.OWNER=D.r_OWNERandE.constraint_name=D.r_constraint_name
leftjoinALL_cons_columnsFonF.OWNER=E.OWNERandF.constraint_name=E.constraint_nameandF.position=c.position
WHEREC.OWNER='{$table->schemaName}'
andC.table_name='{$table->name}'
andD.constraint_type<>'P'
orderbyd.constraint_name,c.position
EOD;
$command=$this->getDbConnection()->createCommand($sql);
foreach($command->queryAll()as$row)
{
if($row['CONSTRAINT_TYPE']==='R')//foreignkey
{
$name=$row["COLUMN_NAME"];
$table->foreignKeys[$name]=array($row["TABLE_REF"],$row["COLUMN_REF"]);
if(isset($table->columns[$name]))
$table->columns[$name]->isForeignKey=true;
}
}
}
收集给定表主键列和外键列的详细信息。
findTableNames() 方法protected array findTableNames(string $schema='') | ||
$schema | string | 表schema。默认是空字符串,意味着当前或默认schema。 若为空,则返回的表名会被加上schema名前缀。 |
{return} | array | 数据库里的所有表名。 |
protectedfunctionfindTableNames($schema='')
{
if($schema==='')
{
$sql=<<<EOD
SELECTtable_name,'{$schema}'astable_schemaFROMuser_tables
EOD;
$command=$this->getDbConnection()->createCommand($sql);
}
else
{
$sql=<<<EOD
SELECTobject_nameastable_name,ownerastable_schemaFROMall_objects
WHEREobject_type='TABLE'ANDowner=:schema
EOD;
$command=$this->getDbConnection()->createCommand($sql);
$command->bindParam(':schema',$schema);
}
$rows=$command->queryAll();
$names=array();
foreach($rowsas$row)
{
if($schema===$this->getDefaultSchema()||$schema==='')
$names[]=$row['TABLE_NAME'];
else
$names[]=$row['TABLE_SCHEMA'].'.'.$row['TABLE_NAME'];
}
return$names;
}
返回所有数据库里的表名。
getDefaultSchema() 方法public string getDefaultSchema() | ||
{return} | string | 默认schema。 |
publicfunctiongetDefaultSchema()
{
if(!strlen($this->_defaultSchema))
{
$this->setDefaultSchema(strtoupper($this->getDbConnection()->username));
}
return$this->_defaultSchema;
}
getSchemaTableName() 方法protected array getSchemaTableName(string $table) | ||
$table | string | 带有可选schema名作为前缀的表名,不提供使用默认schema名作为前缀的表名。 |
{return} | array | ($schemaName,$tableName)形式的数组 |
protectedfunctiongetSchemaTableName($table)
{
$table=strtoupper($table);
if(count($parts=explode('.',str_replace('"','',$table)))>1)
returnarray($parts[0],$parts[1]);
else
returnarray($this->getDefaultSchema(),$parts[0]);
}
loadTable() 方法protected CDbTableSchema loadTable(string $name) | ||
$name | string | 表名 |
{return} | CDbTableSchema | 取决于表元数据的驱动。 |
protectedfunctionloadTable($name)
{
$table=newCOciTableSchema;
$this->resolveTableNames($table,$name);
if(!$this->findColumns($table))
returnnull;
$this->findConstraints($table);
return$table;
}
为指定表载入元数据。
quoteSimpleColumnName() 方法 (可用自 v1.1.6)public string quoteSimpleColumnName(string $name) | ||
$name | string | 列名 |
{return} | string | 正确引用的列名 |
publicfunctionquoteSimpleColumnName($name)
{
return'"'.$name.'"';
}
用引号引用列名以便查询时使用。 一个不包括前缀的简单列名。
quoteSimpleTableName() 方法 (可用自 v1.1.6)public string quoteSimpleTableName(string $name) | ||
$name | string | 表名 |
{return} | string | 正确引用的表名 |
publicfunctionquoteSimpleTableName($name)
{
return'"'.$name.'"';
}
用引号引用表名以便查询时使用。 一个不包括前缀的简单表名。
renameTable() 方法 (可用自 v1.1.6)public string renameTable(string $table, string $newName) | ||
$table | string | 要重命名的表。该表名会被指定方法正确引用。 |
$newName | string | 新表名。 该表名会被指定方法正确引用。 |
{return} | string | 重命名数据表的SQL语句。 |
publicfunctionrenameTable($table,$newName)
{
return'ALTERTABLE'.$this->quoteTableName($table).'RENAMETO'.$this->quoteTableName($newName);
}
构造重命名数据表的SQL语句。
resolveTableNames() 方法protected void resolveTableNames(COciTableSchema $table, string $name) | ||
$table | COciTableSchema | 表元数据 |
$name | string | 未引用的表名 |
protectedfunctionresolveTableNames($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);
}
生成各种表名。
setDefaultSchema() 方法public void setDefaultSchema(string $schema) | ||
$schema | string | 默认schema。 |
publicfunctionsetDefaultSchema($schema)
{
$this->_defaultSchema=$schema;
}