CSqliteSchema
CSqliteSchema is the class for retrieving metadata information from a SQLite (2/3) database.
Property Details
columnTypes
public array $columnTypes;
the abstract column types mapped to physical column types.
Method Details
public string addForeignKey(string $name, string $table, string $columns, string $refTable, string $refColumns, string $delete=NULL, string $update=NULL) |
$name | string | the name of the foreign key constraint. |
$table | string | the table that the foreign key constraint will be added to. |
$columns | string | the name of the column to that the constraint will be added on. If there are multiple columns, separate them with commas. |
$refTable | string | the table that the foreign key references to. |
$refColumns | string | the name of the column that the foreign key references to. If there are multiple columns, separate them with commas. |
$delete | string | the ON DELETE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL |
$update | string | the ON UPDATE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL |
{return} | string | the SQL statement for adding a foreign key constraint to an existing table. |
Source Code: framework/db/schema/sqlite/CSqliteSchema.php#264 (
show)
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.'));
}
Builds a SQL statement for adding a foreign key constraint to an existing table. Because SQLite does not support adding foreign key to an existing table, calling this method will throw an exception.
public string addPrimaryKey(string $name, string $table, string|array $columns) |
$name | string | the name of the primary key constraint. |
$table | string | the table that the primary key constraint will be added to. |
$columns | string|array | comma separated string or array of columns that the primary key will consist of. |
{return} | string | the SQL statement for adding a primary key constraint to an existing table. |
Builds a SQL statement for adding a primary key constraint to an existing table. Because SQLite does not support adding a primary key on an existing table this method will throw an exception.
alterColumn()
public string alterColumn(string $table, string $column, string $type) |
$table | string | the table whose column is to be changed. The table name will be properly quoted by the method. |
$column | string | the name of the column to be changed. The name will be properly quoted by the method. |
$type | string | the new column type. The getColumnType method will be invoked to convert abstract column type (if any) into the physical one. Anything that is not recognized as abstract type will be kept in the generated SQL. For example, 'string' will be turned into 'varchar(255)', while 'string not null' will become 'varchar(255) not null'. |
{return} | string | the SQL statement for changing the definition of a column. |
Builds a SQL statement for changing the definition of a column. Because SQLite does not support altering a DB column, calling this method will throw an exception.
public void checkIntegrity(boolean $check=true, string $schema='') |
$check | boolean | whether to turn on or off the integrity check. |
$schema | string | the schema of the tables. Defaults to empty string, meaning the current or default schema. |
Enables or disables integrity check. Note that this method used to do nothing before 1.1.14. Since 1.1.14 it changes integrity check state as expected.
createColumn()
Source Code: framework/db/schema/sqlite/CSqliteSchema.php#184 (
show)
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->comment=null; // SQLite does not support column comments at all
$c->init(strtolower($column['type']),$column['dflt_value']);
return $c;
}
Creates a table column.
createCommandBuilder()
Creates a command builder for the database.
dropColumn()
public string dropColumn(string $table, string $column) |
$table | string | the table whose column is to be dropped. The name will be properly quoted by the method. |
$column | string | the name of the column to be dropped. The name will be properly quoted by the method. |
{return} | string | the SQL statement for dropping a DB column. |
Builds a SQL statement for dropping a DB column. Because SQLite does not support dropping a DB column, calling this method will throw an exception.
public string dropForeignKey(string $name, string $table) |
$name | string | the name of the foreign key constraint to be dropped. The name will be properly quoted by the method. |
$table | string | the table whose foreign is to be dropped. The name will be properly quoted by the method. |
{return} | string | the SQL statement for dropping a foreign key constraint. |
Builds a SQL statement for dropping a foreign key constraint. Because SQLite does not support dropping a foreign key constraint, calling this method will throw an exception.
public string dropIndex(string $name, string $table) |
$name | string | the name of the index to be dropped. The name will be properly quoted by the method. |
$table | string | the table whose index is to be dropped. The name will be properly quoted by the method. |
{return} | string | the SQL statement for dropping an index. |
Builds a SQL statement for dropping an index.
public string dropPrimaryKey(string $name, string $table) |
$name | string | the name of the primary key constraint to be removed. |
$table | string | the table that the primary key constraint will be removed from. |
{return} | string | the SQL statement for removing a primary key constraint from an existing table. |
Builds a SQL statement for removing a primary key constraint to an existing table. Because SQLite does not support dropping a primary key from an existing table this method will throw an exception
findColumns()
protected boolean findColumns(CDbTableSchema $table) |
$table | CDbTableSchema | the table metadata |
{return} | boolean | whether the table exists in the database |
Source Code: framework/db/schema/sqlite/CSqliteSchema.php#131 (
show)
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;
elseif(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;
}
Collects the table column metadata.
Source Code: framework/db/schema/sqlite/CSqliteSchema.php#165 (
show)
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;
}
Collects the foreign key column details for the given table.
protected array findTableNames(string $schema='') |
$schema | string | the schema of the tables. This is not used for sqlite database. |
{return} | array | all table names in the database. |
Source Code: framework/db/schema/sqlite/CSqliteSchema.php#91 (
show)
protected function findTableNames($schema='')
{
$sql="SELECT DISTINCT tbl_name FROM sqlite_master WHERE tbl_name<>'sqlite_sequence'";
return $this->getDbConnection()->createCommand($sql)->queryColumn();
}
Returns all table names in the database.
protected CDbTableSchema loadTable(string $name) |
$name | string | table name |
{return} | CDbTableSchema | driver dependent table metadata. Null if the table does not exist. |
Source Code: framework/db/schema/sqlite/CSqliteSchema.php#111 (
show)
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;
}
Loads the metadata for the specified table.
renameColumn()
public string renameColumn(string $table, string $name, string $newName) |
$table | string | the table whose column is to be renamed. The name will be properly quoted by the method. |
$name | string | the old name of the column. The name will be properly quoted by the method. |
$newName | string | the new name of the column. The name will be properly quoted by the method. |
{return} | string | the SQL statement for renaming a DB column. |
Builds a SQL statement for renaming a column. Because SQLite does not support renaming a DB column, calling this method will throw an exception.
public string renameTable(string $table, string $newName) |
$table | string | the table to be renamed. The name will be properly quoted by the method. |
$newName | string | the new table name. The name will be properly quoted by the method. |
{return} | string | the SQL statement for renaming a DB table. |
Builds a SQL statement for renaming a DB table.
public void resetSequence(CDbTableSchema $table, integer|null $value=NULL) |
$table | CDbTableSchema | the table schema whose primary key sequence will be reset |
$value | integer|null | the value for the primary key of the next new row inserted. If this is not set, the next new row's primary key will have the max value of a primary key plus one (i.e. sequence trimming). |
Source Code: framework/db/schema/sqlite/CSqliteSchema.php#52 (
show)
public function resetSequence($table,$value=null)
{
if($table->sequenceName===null)
return;
if($value!==null)
$value=(int)($value)-1;
else
$value=(int)$this->getDbConnection()
->createCommand("SELECT MAX(`{$table->primaryKey}`) FROM {$table->rawName}")
->queryScalar();
try
{
// it's possible that 'sqlite_sequence' does not exist
$this->getDbConnection()
->createCommand("UPDATE sqlite_sequence SET seq='$value' WHERE name='{$table->name}'")
->execute();
}
catch(Exception $e)
{
}
}
Resets the sequence value of a table's primary key. The sequence will be reset such that the primary key of the next new row inserted will have the specified value or max value of a primary key plus one (i.e. sequence trimming).
public string truncateTable(string $table) |
$table | string | the table to be truncated. The name will be properly quoted by the method. |
{return} | string | the SQL statement for truncating a DB table. |
Builds a SQL statement for truncating a DB table.