Yii Framework v1.1.10 类参考
CSqliteSchema
包 | system.db.schema.sqlite |
---|---|
继承 | class CSqliteSchema » CDbSchema » CComponent |
源自 | 1.0 |
版本 | $Id: CSqliteSchema.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 | framework/db/schema/sqlite/CSqliteSchema.php |
CSqliteSchema是从SQLite(2/3)数据库检索元数据信息的类。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
columnTypes | array | 映射到实体列类型的抽象列类型。 | CSqliteSchema |
commandBuilder | CDbCommandBuilder | the SQL command builder for this connection. | CDbSchema |
dbConnection | CDbConnection | database connection. | CDbSchema |
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() | 构造往某个存在的表添加外键约束的SQL语句。 | CSqliteSchema |
alterColumn() | 构造改变列定义的SQL语句。 | CSqliteSchema |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
checkIntegrity() | 启用或禁用完整性检查。 | CSqliteSchema |
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() | 构造删除列的SQL语句。 | CSqliteSchema |
dropForeignKey() | 构造删除外键约束的SQL语句。 | CSqliteSchema |
dropIndex() | 构造删除索引的SQL语句。 | CSqliteSchema |
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 |
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() | Quotes a simple column name for use in a query. | CDbSchema |
quoteSimpleTableName() | Quotes a simple table name for use in a query. | CDbSchema |
quoteTableName() | Quotes a table name for use in a query. | CDbSchema |
raiseEvent() | 发起一个事件。 | CComponent |
refresh() | Refreshes the schema. | CDbSchema |
renameColumn() | 构造重命名列的SQL语句。 | CSqliteSchema |
renameTable() | Builds a SQL statement for renaming a DB table. | CDbSchema |
resetSequence() | 重置表的主键的序列值。 | CSqliteSchema |
truncateTable() | 构造清空数据表的SQL语句。 | CSqliteSchema |
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
createColumn() | 创建一个列。 | CSqliteSchema |
createCommandBuilder() | 为数据库创建命令构造器。 | CSqliteSchema |
findColumns() | 收集列的元数据。 | CSqliteSchema |
findConstraints() | 收集给定表主键列和外键列的详细信息。 | CSqliteSchema |
findTableNames() | 返回所有数据库里的表名。 | CSqliteSchema |
loadTable() | 为指定表载入元数据。 | CSqliteSchema |
属性详细
columnTypes
属性
(可用自 v1.1.6)
public array $columnTypes;
映射到实体列类型的抽象列类型。
方法详细
addForeignKey()
方法
(可用自 v1.1.6)
public string addForeignKey(string $name, string $table, string $columns, string $refTable, string $refColumns, string $delete=NULL, string $update=NULL)
| ||
$name | string | 外键约束名。 |
$table | string | 要添加外键约束的表。 |
$columns | string | 要添加约束的列名。若有多个列,则以逗号分隔。 |
$refTable | string | 外键涉及的表。 |
$refColumns | string | 外键涉及的列名。若有多个列,则以逗号分隔。 |
$delete | string | ON DELETE选项。大部分DBMS支持如下选项:RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL。 |
$update | string | ON UPDATE选项。大部分DBMS支持如下选项:RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL。 |
{return} | string | 往某个存在的表添加外键约束的SQL语句。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#242 (显示)
public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete=null, $update=null)
{
throw new CDbException(Yii::t('yii', 'Adding a foreign key constraint to an existing table is not supported by SQLite.'));
}
构造往某个存在的表添加外键约束的SQL语句。 调用此方法会抛出异常因为SQLite不支持添加外键约束。
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语句。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#271 (显示)
public function alterColumn($table, $column, $type)
{
throw new CDbException(Yii::t('yii', 'Altering a DB column is not supported by SQLite.'));
}
构造改变列定义的SQL语句。 调用此方法会抛出异常因为SQLite不支持改变列。
checkIntegrity()
方法
(可用自 v1.1)
public void checkIntegrity(boolean $check=true, string $schema='')
| ||
$check | boolean | 是否开启完整性检查。 |
$schema | string | 各表schema。默认为空字符串,意味着当前或默认schema。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#75 (显示)
public function checkIntegrity($check=true,$schema='')
{
// SQLite doesn't enforce integrity
return;
}
启用或禁用完整性检查。
createColumn()
方法
protected CDbColumnSchema createColumn(array $column)
| ||
$column | array | 列元数据 |
{return} | CDbColumnSchema | 规范的列元数据 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#179 (显示)
protected function createColumn($column)
{
$c=new CSqliteColumnSchema;
$c->name=$column['name'];
$c->rawName=$this->quoteColumnName($c->name);
$c->allowNull=!$column['notnull'];
$c->isPrimaryKey=$column['pk']!=0;
$c->isForeignKey=false;
$c->init(strtolower($column['type']),$column['dflt_value']);
return $c;
}
创建一个列。
createCommandBuilder()
方法
protected CSqliteCommandBuilder createCommandBuilder()
| ||
{return} | CSqliteCommandBuilder | 命令构造器实例 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#96 (显示)
protected function createCommandBuilder()
{
return new CSqliteCommandBuilder($this);
}
为数据库创建命令构造器。
dropColumn()
方法
(可用自 v1.1.6)
public string dropColumn(string $table, string $column)
| ||
$table | string | 要删除的列所在表。该表名会被指定方法正确引用。 |
$column | string | 要删除的列。该列名会被指定方法正确引用。 |
{return} | string | 删除列的SQL语句。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#210 (显示)
public function dropColumn($table, $column)
{
throw new CDbException(Yii::t('yii', 'Dropping DB column is not supported by SQLite.'));
}
构造删除列的SQL语句。 调用此方法会抛出异常因为SQLite不支持删除列。
dropForeignKey()
方法
(可用自 v1.1.6)
public string dropForeignKey(string $name, string $table)
| ||
$name | string | 要删除的外键约束名。该键名会被指定方法正确引用。 |
$table | string | 要删除的外键约束所在表。该表名会被指定方法正确引用。 |
{return} | string | 删除外键约束的SQL语句。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#255 (显示)
public function dropForeignKey($name, $table)
{
throw new CDbException(Yii::t('yii', 'Dropping a foreign key constraint is not supported by SQLite.'));
}
构造删除外键约束的SQL语句。 调用此方法会抛出异常因为SQLite不支持删除外键约束。
dropIndex()
方法
(可用自 v1.1.6)
public string dropIndex(string $name, string $table)
| ||
$name | string | 要删除的索引名。该索引名会被指定方法正确引用。 |
$table | string | 要删除的索引所在表。该表名会被指定方法正确引用。 |
{return} | string | 删除索引的SQL语句。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#283 (显示)
public function dropIndex($name, $table)
{
return 'DROP INDEX '.$this->quoteTableName($name);
}
构造删除索引的SQL语句。
findColumns()
方法
protected boolean findColumns(CDbTableSchema $table)
| ||
$table | CDbTableSchema | 表元数据 |
{return} | boolean | 表是否存在于数据库里 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#126 (显示)
protected function findColumns($table)
{
$sql="PRAGMA table_info({$table->rawName})";
$columns=$this->getDbConnection()->createCommand($sql)->queryAll();
if(empty($columns))
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;
}
}
if(is_string($table->primaryKey) && !strncasecmp($table->columns[$table->primaryKey]->dbType,'int',3))
{
$table->sequenceName='';
$table->columns[$table->primaryKey]->autoIncrement=true;
}
return true;
}
收集列的元数据。
findConstraints()
方法
protected void findConstraints(CDbTableSchema $table)
| ||
$table | CDbTableSchema | 表元数据 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#160 (显示)
protected function findConstraints($table)
{
$foreignKeys=array();
$sql="PRAGMA foreign_key_list({$table->rawName})";
$keys=$this->getDbConnection()->createCommand($sql)->queryAll();
foreach($keys as $key)
{
$column=$table->columns[$key['from']];
$column->isForeignKey=true;
$foreignKeys[$key['from']]=array($key['table'],$key['to']);
}
$table->foreignKeys=$foreignKeys;
}
收集给定表主键列和外键列的详细信息。
findTableNames()
方法
protected array findTableNames(string $schema='')
| ||
$schema | string | 表schema。这并不被SQLite数据库使用。 |
{return} | array | 数据库里的所有表名。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#86 (显示)
protected function findTableNames($schema='')
{
$sql="SELECT DISTINCT tbl_name FROM sqlite_master WHERE tbl_name<>'sqlite_sequence'";
return $this->getDbConnection()->createCommand($sql)->queryColumn();
}
返回所有数据库里的表名。
loadTable()
方法
protected CDbTableSchema loadTable(string $name)
| ||
$name | string | 表名 |
{return} | CDbTableSchema | 取决于表元数据的驱动。若表不存在则返回null。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#106 (显示)
protected function loadTable($name)
{
$table=new CDbTableSchema;
$table->name=$name;
$table->rawName=$this->quoteTableName($name);
if($this->findColumns($table))
{
$this->findConstraints($table);
return $table;
}
else
return null;
}
为指定表载入元数据。
renameColumn()
方法
(可用自 v1.1.6)
public string renameColumn(string $table, string $name, string $newName)
| ||
$table | string | 要重命名的列所在表。该表名会被指定方法正确引用。 |
$name | string | 原有列名。该列名会被指定方法正确引用。 |
$newName | string | 新列名。该列名会被指定方法正确引用。 |
{return} | string | 重命名列的SQL语句。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#224 (显示)
public function renameColumn($table, $name, $newName)
{
throw new CDbException(Yii::t('yii', 'Renaming a DB column is not supported by SQLite.'));
}
构造重命名列的SQL语句。 调用此方法会抛出异常因为SQLite不支持重命名列。
resetSequence()
方法
(可用自 v1.1)
public void resetSequence(CDbTableSchema $table, mixed $value=NULL)
| ||
$table | CDbTableSchema | 要重置主键序列的表schema |
$value | mixed | 新插入行的主键值。如果未设置, 则新行主键值为1。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#50 (显示)
public function resetSequence($table,$value=null)
{
if($table->sequenceName!==null)
{
if($value===null)
$value=$this->getDbConnection()->createCommand("SELECT MAX(`{$table->primaryKey}`) FROM {$table->rawName}")->queryScalar();
else
$value=(int)$value-1;
try
{
// it's possible sqlite_sequence does not exist
$this->getDbConnection()->createCommand("UPDATE sqlite_sequence SET seq='$value' WHERE name='{$table->name}'")->execute();
}
catch(Exception $e)
{
}
}
}
重置表的主键的序列值。 序列会被充值,这样一来,新插入行的主键值 将会是指定值或者1。
truncateTable()
方法
(可用自 v1.1.6)
public string truncateTable(string $table)
| ||
$table | string | 要清空的表。该表名会被指定方法正确引用。 |
{return} | string | 清空数据表的SQL语句。 |
源码: framework/db/schema/sqlite/CSqliteSchema.php#197 (显示)
public function truncateTable($table)
{
return "DELETE FROM ".$this->quoteTableName($table);
}
构造清空数据表的SQL语句。