Spec-Zone.ru › Yii 1.1

COciSchema

Пакет system.db.schema.oci
Наследование class COciSchema » CDbSchema » CComponent
Исходный код framework/db/schema/oci/COciSchema.php
COciSchema — класс для получения метаданных из базы данных Oracle.

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

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

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

Метод Описание Определено в
__call() Вызывает именованный метод, который не является методом класса. CComponent
__construct() Конструктор. CDbSchema
__get() Возвращает значение свойства, список обработчиков событий или поведение по его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
addColumn() Создаёт SQL-запрос для добавления новой колонки в БД. CDbSchema
addForeignKey() Создаёт SQL-запрос для добавления внешнего ключа к существующей таблице. CDbSchema
addPrimaryKey() Создаёт SQL-запрос для добавления первичного ключа к существующей таблице. CDbSchema
alterColumn() Создаёт SQL-запрос для изменения определения колонки. COciSchema
asa() Возвращает объект поведения с заданным именем. CComponent
attachBehavior() Прикрепляет поведение к компоненту. CComponent
attachBehaviors() Прикрепляет список поведений к компоненту. CComponent
attachEventHandler() Прикрепляет обработчик событий к событию. CComponent
canGetProperty() Определяет, может ли свойство быть прочитано. CComponent
canSetProperty() Определяет, может ли свойство быть установлено. CComponent
checkIntegrity() Включает или отключает проверку целостности. COciSchema
compareTableNames() Сравнивает два имени таблиц. CDbSchema
createIndex() Создаёт SQL-запрос для создания нового индекса. CDbSchema
createTable() Создаёт SQL-запрос для создания новой таблицы в БД. CDbSchema
detachBehavior() Открепляет поведение от компонента. CComponent
detachBehaviors() Открепляет все поведения от компонента. CComponent
detachEventHandler() Открепляет существующий обработчик событий. CComponent
disableBehavior() Отключает прикрепленное поведение. CComponent
disableBehaviors() Отключает все поведения, прикреплённые к этому компоненту. CComponent
dropColumn() Создаёт SQL-запрос для удаления колонки из БД. CDbSchema
dropForeignKey() Создаёт SQL-запрос для удаления внешнего ключа. CDbSchema
dropIndex() Создаёт SQL-запрос для удаления индекса. COciSchema
dropPrimaryKey() Создаёт SQL-запрос для удаления ограничения первичного ключа из существующей таблицы. CDbSchema
dropTable() Создаёт SQL-запрос для удаления таблицы из БД. CDbSchema
enableBehavior() Включает прикреплённое поведение. CComponent
enableBehaviors() Включает все прикреплённые поведения. CComponent
evaluateExpression() Вычисляет PHP выражение или обратный вызов в контексте этого компонента. CComponent
getColumnType() Преобразует абстрактный тип колонки в физический тип колонки. CDbSchema
getCommandBuilder() Возвращает билдер SQL-команд для этого соединения. CDbSchema
getDbConnection() Возвращает соединение с базой данных. Соединение активно. CDbSchema
getDefaultSchema() Возвращает схему по умолчанию. COciSchema
getEventHandlers() Возвращает список прикреплённых обработчиков событий для события. CComponent
getTable() Получает метаданные для указанной таблицы. CDbSchema
getTableNames() Возвращает все имена таблиц в базе данных. CDbSchema
getTables() Возвращает метаданные для всех таблиц в базе данных. CDbSchema
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли для события прикреплённые обработчики. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
quoteColumnName() Приводит имя колонки к виду, пригодного для использования в запросе. CDbSchema
quoteSimpleColumnName() Приводит имя колонки к виду, пригодного для использования в запросе. COciSchema
quoteSimpleTableName() Приводит имя таблицы к виду, пригодного для использования в запросе. COciSchema
quoteTableName() Приводит имя таблицы к виду, пригодного для использования в запросе. CDbSchema
raiseEvent() Возбуждает событие. CComponent
refresh() Обновляет схему. CDbSchema
renameColumn() Создаёт SQL-запрос для переименования колонки. CDbSchema
renameTable() Создаёт SQL-запрос для переименования таблицы в БД. COciSchema
resetSequence() Сбрасывает значение последовательности первичного ключа таблицы. COciSchema
setDefaultSchema() Устанавливает схему по умолчанию. COciSchema
truncateTable() Создаёт SQL-запрос для усечения таблицы БД. CDbSchema

Защищённые методы

Метод Описание Определено в
createColumn() Создаёт столбец таблицы. COciSchema
createCommandBuilder() Создаёт конструктор команд для базы данных. COciSchema
findColumns() Собирает метаданные столбцов таблицы. COciSchema
findConstraints() Собирает данные о столбцах первичных и внешних ключей для заданной таблицы. COciSchema
findTableNames() Возвращает все имена таблиц в базе данных. COciSchema
getSchemaTableName() Возвращает кортеж ($имя_схемы,$имя_таблицы) COciSchema
loadTable() Загружает метаданные для указанной таблицы. COciSchema
resolveTableNames() Генерирует различные типы имён таблиц. COciSchema

Подробное описание свойств

columnTypes свойство (доступно начиная с v1.1.6)

public array $columnTypes;

абстрактные типы столбцов, сопоставленные с физическими типами столбцов.

defaultSchema свойство

public string getDefaultSchema()
public void setDefaultSchema(string $schema)

схема по умолчанию.

Подробное описание методов

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

public string alterColumn(string $table, string $column, string $type)
$table строка таблица, столбец которой необходимо изменить. Имя таблицы будет корректно обрамлено кавычками методом.
$column строка имя столбца, который необходимо изменить. Имя будет корректно обрамлено кавычками методом.
$type строка новый тип столбца. Метод getColumnType будет вызван для преобразования абстрактного типа столбца (если таковой имеется) в физический. Всё, что не распознаётся как абстрактный тип, останется в сгенерированном SQL. Например, 'строка' преобразуется в 'varchar(255)', а 'строка не null' станет 'varchar(255) not null'.
{return} строка SQL-запрос для изменения определения столбца.
Исходный код: framework/db/schema/oci/COciSchema.php#334 (показать)
public function alterColumn($table, $column, $type)
{
    
$type=$this->getColumnType($type);
    
$sql='ALTER TABLE ' . $this->quoteTableName($table) . ' MODIFY '
        
. $this->quoteColumnName($column) . ' '
        
. $this->getColumnType($type);
    return 
$sql;
}

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

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

public void checkIntegrity(boolean $check=true, string $schema='')
$check логическое включить или выключить проверку целостности.
$schema строка схема таблиц. По умолчанию пустая строка, что означает текущую или схему по умолчанию.
Исходный код: framework/db/schema/oci/COciSchema.php#397 (показать)
public function checkIntegrity($check=true,$schema='')
{
    if(
$schema==='')
        
$schema=$this->getDefaultSchema();
    
$mode=$check ? 'ENABLE' : 'DISABLE';
    foreach(
$this->getTableNames($schema) as $table)
    {
        
$constraints=$this->getDbConnection()
            ->
createCommand("SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME=:t AND OWNER=:o")
            ->
queryColumn(array(':t'=>$table,':o'=>$schema));
        foreach(
$constraints as $constraint)
            
$this->getDbConnection()
                ->
createCommand("ALTER TABLE \"{$schema}\".\"{$table}\" {$mode} CONSTRAINT \"{$constraint}\"")
                ->
execute();
    }
}

Включает или выключает проверку целостности.

createColumn() метод

protected CDbColumnSchema createColumn(array $column)
$column массив метаданные столбца
{return} CDbColumnSchema нормализованные метаданные столбца
Исходный код: framework/db/schema/oci/COciSchema.php#228 (показать)
protected function createColumn($column)
{
    
$c=new COciColumnSchema;
    
$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']);
    
$c->comment=$column['COLUMN_COMMENT']===null ? '' : $column['COLUMN_COMMENT'];

    return 
$c;
}

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

createCommandBuilder() метод

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

Создаёт конструктор команд для базы данных. Этот метод может быть переопределён дочерними классами для создания конструктора команд, специфичного для СУБД.

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

public string dropIndex(string $name, string $table)
$name строка имя индекса, который необходимо удалить. Имя будет корректно обрамлено кавычками методом.
$table строка таблица, индекс которой необходимо удалить. Имя будет корректно обрамлено кавычками методом.
{return} строка SQL-запрос для удаления индекса.
Исходный код: framework/db/schema/oci/COciSchema.php#350 (показать)
public function dropIndex($name, $table)
{
    return 
'DROP INDEX '.$this->quoteTableName($name);
}

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

findColumns() метод

protected boolean findColumns(COciTableSchema $table)
$table COciTableSchema метаданные таблицы
{return} логическое существует ли таблица в базе данных
Исходный код: framework/db/schema/oci/COciSchema.php#162 (показать)
protected function findColumns($table)
{
    
$schemaName=$table->schemaName;
    
$tableName=$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 ''
    when data_type = 'NUMBER' 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,
com.comments as column_comment
FROM ALL_TAB_COLUMNS A
inner join ALL_OBJECTS B ON b.owner = a.owner and ltrim(B.OBJECT_NAME) = ltrim(A.TABLE_NAME)
LEFT JOIN all_col_comments com ON (A.owner = com.owner AND A.table_name = com.table_name AND A.column_name = com.column_name)
WHERE
a.owner = '
{$schemaName}'
and (b.object_type = 'TABLE' or b.object_type = 'VIEW')
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;
            elseif(
is_string($table->primaryKey))
                
$table->primaryKey=array($table->primaryKey,$c->name);
            else
                
$table->primaryKey[]=$c->name;
            
$table->sequenceName='';
            
$c->autoIncrement=true;
        }
    }
    return 
true;
}

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

findConstraints() метод

protected void findConstraints(COciTableSchema $table)
$table COciTableSchema метаданные таблицы
Исходный код: framework/db/schema/oci/COciSchema.php#246 (показать)
protected function findConstraints($table)
{
    
$sql=<<<EOD
    SELECT D.constraint_type as CONSTRAINT_TYPE, C.COLUMN_NAME, C.position, D.r_constraint_name,
            E.table_name as table_ref, f.column_name as column_ref,
            C.table_name
    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"], $row["COLUMN_REF"]);
            if(isset(
$table->columns[$name]))
                
$table->columns[$name]->isForeignKey=true;
        }

    }
}

Собирает данные о столбцах первичных и внешних ключей для заданной таблицы.

findTableNames() метод

protected array findTableNames(string $schema='')
$schema строка схема таблиц. По умолчанию пустая строка, что означает текущую или схему по умолчанию. Если не пустая, возвращаемые имена таблиц будут префиксными именем схемы.
{return} массив все имена таблиц в базе данных.
Исходный код: framework/db/schema/oci/COciSchema.php#281 (показать)
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() || $schema==='')
            
$names[]=$row['TABLE_NAME'];
        else
            
$names[]=$row['TABLE_SCHEMA'].'.'.$row['TABLE_NAME'];
    }
    return 
$names;
}

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

getDefaultSchema() метод

public string getDefaultSchema()
{return} строка схема по умолчанию.
Исходный код: framework/db/schema/oci/COciSchema.php#90 (показать)
public function getDefaultSchema()
{
    if (!
strlen($this->_defaultSchema))
    {
        
$this->setDefaultSchema(strtoupper($this->getDbConnection()->username));
    }

    return 
$this->_defaultSchema;
}

getSchemaTableName() метод

protected array getSchemaTableName(string $table)
$table строка имя таблицы с необязательным префиксом имени схемы, использует схему по умолчанию, если префикс не указан.
{return} массив кортеж ($имя_схемы,$имя_таблицы)
Исходный код: framework/db/schema/oci/COciSchema.php#104 (показать)
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]);
}

loadTable() метод

protected CDbTableSchema loadTable(string $name)
$name string имя таблицы
{return} CDbTableSchema зависимые от драйвера метаданные таблицы.
Исходный код: framework/db/schema/oci/COciSchema.php#118 (показать)
protected function loadTable($name)
{
    
$table=new COciTableSchema;
    
$this->resolveTableNames($table,$name);

    if(!
$this->findColumns($table))
        return 
null;
    
$this->findConstraints($table);

    return 
$table;
}

Загружает метаданные для указанной таблицы.

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

public string quoteSimpleColumnName(string $name)
$name string имя столбца
{return} string правильно обрамлённое имя столбца
Исходный код: framework/db/schema/oci/COciSchema.php#64 (показать)
public function quoteSimpleColumnName($name)
{
    return 
'"'.$name.'"';
}

Обрамляет имя столбца для использования в запросе. Простое имя столбца не содержит префикс.

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

public string quoteSimpleTableName(string $name)
$name string имя таблицы
{return} string правильно обрамлённое имя таблицы
Исходный код: framework/db/schema/oci/COciSchema.php#52 (показать)
public function quoteSimpleTableName($name)
{
    return 
'"'.$name.'"';
}

Обрамляет имя таблицы для использования в запросе. Простое имя таблицы не содержит префикс схемы.

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

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

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

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

public void resetSequence(CDbTableSchema $table, integer|null $value=NULL)
$table CDbTableSchema схема таблицы, последовательность первичного ключа которой будет сброшена
$value integer|null значение для первичного ключа следующей новой строки. Если не установлено, первичный ключ следующей новой строки будет иметь максимальное значение первичного ключа плюс один (т.е. обрезка последовательности).
Исходный код: framework/db/schema/oci/COciSchema.php#369 (показать)
public function resetSequence($table,$value=null)
{
    if(
$table->sequenceName===null)
        return;

    if(
$value!==null)
        
$value=(int)$value;
    else
    {
        
$value=(int)$this->getDbConnection()
            ->
createCommand("SELECT MAX(\"{$table->primaryKey}\") FROM {$table->rawName}")
            ->
queryScalar();
        
$value++;
    }
    
$this->getDbConnection()
        ->
createCommand("DROP SEQUENCE \"{$table->name}_SEQ\"")
        ->
execute();
    
$this->getDbConnection()
        ->
createCommand("CREATE SEQUENCE \"{$table->name}_SEQ\" START WITH {$value} INCREMENT BY 1 NOMAXVALUE NOCACHE")
        ->
execute();
}

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

Обратите внимание, поведение этого метода изменилось с момента выпуска 1.1.14. Подробнее см. в следующем вопросе: https://github.com/yiisoft/yii/issues/2241

resolveTableNames() метод

protected void resolveTableNames(COciTableSchema $table, string $name)
$table COciTableSchema экземпляр таблицы
$name string необрамённое имя таблицы
Исходный код: framework/db/schema/oci/COciSchema.php#135 (показать)
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);
}

Генерирует различные виды имён таблиц.

setDefaultSchema() метод

public void setDefaultSchema(string $schema)
$schema string схема по умолчанию.
Исходный код: framework/db/schema/oci/COciSchema.php#82 (показать)
public function setDefaultSchema($schema)
{
    
$this->_defaultSchema=$schema;
}

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

Spec-Zone.ru

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