Spec-Zone.ru › Yii 1.1

CSqliteSchema

Пакет system.db.schema.sqlite
Наследование class CSqliteSchema » CDbSchema » CComponent
С 1.0
Исходный код framework/db/schema/sqlite/CSqliteSchema.php
CSqliteSchema — класс для извлечения метаданных из базы данных SQLite (2/3).

Общественные свойства

Свойство Тип Описание Определено
columnTypes массив абстрактные типы столбцов, сопоставленные с физическими типами столбцов. CSqliteSchema
commandBuilder CDbCommandBuilder построитель SQL-команд для этого соединения. CDbSchema
dbConnection CDbConnection соединение с базой данных. CDbSchema
tableNames массив Возвращает все имена таблиц в базе данных. CDbSchema
tables массив Возвращает метаданные всех таблиц в базе данных. CDbSchema

Общедоступные методы

Метод Описание Определено в
__call() Вызывает именованный метод, который не является методом класса. CComponent
__construct() Конструктор. CDbSchema
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
addColumn() Строит SQL-запрос для добавления нового столбца БД. CDbSchema
addForeignKey() Строит SQL-запрос для добавления внешнего ключа к существующей таблице. CSqliteSchema
addPrimaryKey() Строит SQL-запрос для добавления первичного ключа к существующей таблице. CSqliteSchema
alterColumn() Строит SQL-запрос для изменения определения столбца. CSqliteSchema
asa() Возвращает объект поведения с указанным именем. CComponent
attachBehavior() Прикрепляет поведение к этому компоненту. CComponent
attachBehaviors() Прикрепляет список поведений к компоненту. CComponent
attachEventHandler() Прикрепляет обработчик событий к событию. CComponent
canGetProperty() Определяет, можно ли прочитать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
checkIntegrity() Включает или отключает проверку целостности. Обратите внимание, что этот метод ранее ничего не делал до версии 1.1.14. С версии 1.1.14 CSqliteSchema
compareTableNames() Сравнивает два имени таблиц. CDbSchema
createIndex() Строит SQL-запрос для создания нового индекса. CDbSchema
createTable() Строит SQL-запрос для создания новой таблицы БД. CDbSchema
detachBehavior() Открепляет поведение от компонента. CComponent
detachBehaviors() Открепляет все поведения от компонента. CComponent
detachEventHandler() Открепляет существующий обработчик событий. CComponent
disableBehavior() Отключает прикрепленное поведение. CComponent
disableBehaviors() Отключает все поведения, прикрепленные к этому компоненту. CComponent
dropColumn() Строит SQL-запрос для удаления столбца БД. CSqliteSchema
dropForeignKey() Строит SQL-запрос для удаления внешнего ключа. CSqliteSchema
dropIndex() Строит SQL-запрос для удаления индекса. CSqliteSchema
dropPrimaryKey() Строит SQL-запрос для удаления ограничения первичного ключа в существующей таблице. CSqliteSchema
dropTable() Строит SQL-запрос для удаления таблицы БД. CDbSchema
enableBehavior() Включает прикрепленное поведение. CComponent
enableBehaviors() Включает все поведения, прикрепленные к этому компоненту. CComponent
evaluateExpression() Вычисляет PHP-выражение или обратный вызов в контексте этого компонента. CComponent
getColumnType() Преобразует абстрактный тип столбца в физический тип столбца. CDbSchema
getCommandBuilder() Возвращает конструктор SQL-команд для этого подключения. CDbSchema
getDbConnection() Возвращает подключение к базе данных. Подключение активное. CDbSchema
getEventHandlers() Возвращает список прикрепленных обработчиков событий для события. CComponent
getTable() Получает метаданные для указанной таблицы. CDbSchema
getTableNames() Возвращает все имена таблиц в базе данных. CDbSchema
getTables() Возвращает метаданные для всех таблиц в базе данных. CDbSchema
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли прикрепленные обработчики для указанного события. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
quoteColumnName() Приводит имя столбца к цитируемому виду для использования в запросе. CDbSchema
quoteSimpleColumnName() Приводит простое имя столбца к цитируемому виду для использования в запросе. CDbSchema
quoteSimpleTableName() Приводит простое имя таблицы к цитируемому виду для использования в запросе. CDbSchema
quoteTableName() Приводит имя таблицы к цитируемому виду для использования в запросе. CDbSchema
raiseEvent() Вызывает событие. CComponent
refresh() Обновляет схему. CDbSchema
renameColumn() Строит SQL-запрос для переименования столбца. CSqliteSchema
renameTable() Строит SQL-запрос для переименования таблицы БД. CSqliteSchema
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 строка имя ограничения внешнего ключа.
$table строка таблица, к которой будет добавлено ограничение внешнего ключа.
$columns строка имя столбца, к которому будет добавлено ограничение. Если столбцов несколько, разделяйте их запятыми.
$refTable строка таблица, к которой ссылается внешний ключ.
$refColumns строка имя столбца, к которому ссылается внешний ключ. Если столбцов несколько, разделяйте их запятыми.
$delete строка опция ON DELETE. Большинство СУБД поддерживают эти варианты: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL
$update строка опция ON UPDATE. Большинство СУБД поддерживают эти варианты: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL
{return} строка SQL-запрос для добавления ограничения внешнего ключа в существующую таблицу.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#264 (показать)
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 не поддерживает добавление внешнего ключа в существующую таблицу, вызов этого метода вызовет исключение.

addPrimaryKey() метод (доступно начиная с v1.1.13)

public string addPrimaryKey(string $name, string $table, string|array $columns)
$name строка имя ограничения первичного ключа.
$table строка таблица, к которой будет добавлено ограничение первичного ключа.
$columns строка|массив строка со значениями столбцов, разделенных запятыми, или массив столбцов, из которых будет состоять первичный ключ.
{return} строка SQL-запрос для добавления ограничения первичного ключа в существующую таблицу.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#322 (показать)
public function addPrimaryKey($name,$table,$columns)
{
    throw new 
CDbException(Yii::t('yii', 'Adding a primary key after table has been created is not supported by SQLite.'));
}

Создает SQL-запрос для добавления ограничения первичного ключа в существующую таблицу. Поскольку SQLite не поддерживает добавление первичного ключа в существующую таблицу, вызов этого метода вызовет исключение.

alterColumn() метод (доступно начиная с v1.1.6)

public string alterColumn(string $table, string $column, string $type)
$table строка таблица, столбец которой нужно изменить. Имя таблицы будет должным образом заключено в кавычки методом.
$column строка имя столбца, который нужно изменить. Имя будет должным образом заключено в кавычки методом.
$type строка новый тип столбца. Метод getColumnType будет вызван для преобразования абстрактного типа столбца (если есть) в физический. Все, что не распознается как абстрактный тип, будет сохранено в сгенерированном SQL. Например, 'строка' будет преобразовано в 'varchar(255)', а 'строка не null' — в 'varchar(255) не null'.
{return} строка SQL-запрос для изменения определения столбца.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#295 (показать)
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 логическое включить или отключить проверку целостности.
$schema строка схема таблиц. По умолчанию пустая строка, что означает текущую или стандартную схему.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#81 (показать)
public function checkIntegrity($check=true,$schema='')
{
    
$this->getDbConnection()->createCommand('PRAGMA foreign_keys='.(int)$check)->execute();
}

Включает или отключает проверку целостности. Обратите внимание, что до версии 1.1.14 этот метод ничего не делал. С версии 1.1.14 он меняет состояние проверки целостности, как ожидается.

createColumn() метод

protected CDbColumnSchema createColumn(array $column)
$column массив метаданные столбца
{return} CDbColumnSchema нормализованные метаданные столбца
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#184 (показать)
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;
}

Создает столбец таблицы.

createCommandBuilder() метод

protected CSqliteCommandBuilder createCommandBuilder()
{return} CSqliteCommandBuilder экземпляр создателя команд
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#101 (показать)
protected function createCommandBuilder()
{
    return new 
CSqliteCommandBuilder($this);
}

Создает создатель команд для базы данных.

dropColumn() метод (доступно начиная с v1.1.6)

public string dropColumn(string $table, string $column)
$table строка таблица, столбец которой нужно удалить. Имя таблицы будет должным образом заключено в кавычки методом.
$column строка имя столбца, который нужно удалить. Имя будет должным образом заключено в кавычки методом.
{return} строка SQL-запрос для удаления столбца базы данных.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#230 (показать)
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 строка имя ограничения внешнего ключа, которое нужно удалить. Имя будет должным образом заключено в кавычки методом.
$table строка таблица, из которой нужно удалить внешний ключ. Имя будет должным образом заключено в кавычки методом.
{return} строка SQL-запрос для удаления ограничения внешнего ключа.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#278 (показать)
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 строка имя индекса, который нужно удалить. Метод корректно добавит кавычки к имени.
$table строка таблица, из которой нужно удалить индекс. Метод корректно добавит кавычки к имени.
{return} строка SQL-запрос для удаления индекса.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#307 (показать)
public function dropIndex($name, $table)
{
    return 
'DROP INDEX '.$this->quoteTableName($name);
}

Строит SQL-запрос для удаления индекса.

dropPrimaryKey() метод (доступен с версии v1.1.13)

public string dropPrimaryKey(string $name, string $table)
$name строка имя ограничения первичного ключа, которое нужно удалить.
$table строка таблица, из которой нужно удалить ограничение первичного ключа.
{return} строка SQL-запрос для удаления ограничения первичного ключа из существующей таблицы.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#337 (показать)
public function dropPrimaryKey($name,$table)
{
    throw new 
CDbException(Yii::t('yii', 'Removing a primary key after table has been created is not supported by SQLite.'));

}

Строит SQL-запрос для удаления ограничения первичного ключа из существующей таблицы. Поскольку SQLite не поддерживает удаление первичного ключа из существующей таблицы, этот метод выбросит исключение.

findColumns() метод

protected boolean findColumns(CDbTableSchema $table)
$table CDbTableSchema метаданные таблицы
{return} boolean существует ли таблица в базе данных
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#131 (показать)
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;
}

Сбор метаданных столбцов таблицы.

findConstraints() метод

protected void findConstraints(CDbTableSchema $table)
$table CDbTableSchema метаданные таблицы
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#165 (показать)
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 строка схема таблиц. Для базы данных sqlite не используется.
{return} массив все имена таблиц в базе данных.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#91 (показать)
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 строка имя таблицы
{return} CDbTableSchema зависимые от драйвера метаданные таблицы. Null, если таблица не существует.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#111 (показать)
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 строка таблица, столбец которой нужно переименовать. Метод корректно добавит кавычки к имени.
$name строка старое имя столбца. Метод корректно добавит кавычки к имени.
$newName строка новое имя столбца. Метод корректно добавит кавычки к имени.
{return} строка SQL-запрос для переименования столбца БД.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#245 (показать)
public function renameColumn($table, $name, $newName)
{
    throw new 
CDbException(Yii::t('yii', 'Renaming a DB column is not supported by SQLite.'));
}

Строит SQL-запрос для переименования столбца. Поскольку SQLite не поддерживает переименование столбца БД, вызов этого метода вызовет исключение.

renameTable() метод (доступен с версии v1.1.13)

public string renameTable(string $table, string $newName)
$table строка таблица, которую нужно переименовать. Метод корректно добавит кавычки к имени.
$newName строка новое имя таблицы. Метод корректно добавит кавычки к имени.
{return} строка SQL-запрос для переименования таблицы БД.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#205 (показать)
public function renameTable($table, $newName)
{
    return 
'ALTER TABLE ' . $this->quoteTableName($table) . ' RENAME TO ' . $this->quoteTableName($newName);
}

Строит SQL-запрос для переименования таблицы БД.

resetSequence() метод (доступен с версии v1.1)

public void resetSequence(CDbTableSchema $table, integer|null $value=NULL)
$table CDbTableSchema схема таблицы, последовательность первичного ключа которой будет сброшена
$value целое число|null значение для первичного ключа следующей новой вставленной строки. Если это не задано, первичный ключ следующей новой строки будет иметь максимальное значение первичного ключа плюс один (т.е. обрезка последовательности).
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#52 (показать)
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)
    {
    }
}

Сбрасывает значение последовательности первичного ключа таблицы. Последовательность будет сброшена таким образом, что первичный ключ следующей новой вставленной строки будет иметь указанное значение или максимальное значение первичного ключа плюс один (т.е. обрезка последовательности).

truncateTable() метод (доступен с версии v1.1.6)

public string truncateTable(string $table)
$table строка таблица, которую нужно обнулить. Метод корректно добавит кавычки к имени.
{return} строка SQL-запрос для обнуления таблицы БД.
Исходный код: framework/db/schema/sqlite/CSqliteSchema.php#216 (показать)
public function truncateTable($table)
{
    return 
"DELETE FROM ".$this->quoteTableName($table);
}

Строит SQL-запрос для обнуления таблицы БД.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CSqliteSchema

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API