クラス yii\db\oci\Schema
Schemaは、Oracleデータベースからメタデータを取得するためのクラスです。
パブリックプロパティ
パブリックメソッド
保護されたメソッド
定数
定数 | 値 | 説明 | 定義元 |
---|---|---|---|
SCHEMA_CACHE_VERSION | 1 | スキーマキャッシュのバージョン。キャッシュのデータ形式が変更されたときに、キャッシュされた値の非互換性を検出します。 | yii\db\Schema |
TYPE_BIGINT | 'bigint' | yii\db\Schema | |
TYPE_BIGPK | 'bigpk' | yii\db\Schema | |
TYPE_BINARY | 'binary' | yii\db\Schema | |
TYPE_BOOLEAN | 'boolean' | yii\db\Schema | |
TYPE_CHAR | 'char' | yii\db\Schema | |
TYPE_DATE | 'date' | yii\db\Schema | |
TYPE_DATETIME | 'datetime' | yii\db\Schema | |
TYPE_DECIMAL | 'decimal' | yii\db\Schema | |
TYPE_DOUBLE | 'double' | yii\db\Schema | |
TYPE_FLOAT | 'float' | yii\db\Schema | |
TYPE_INTEGER | 'integer' | yii\db\Schema | |
TYPE_JSON | 'json' | yii\db\Schema | |
TYPE_MONEY | 'money' | yii\db\Schema | |
TYPE_PK | 'pk' | yii\db\Schema | |
TYPE_SMALLINT | 'smallint' | yii\db\Schema | |
TYPE_STRING | 'string' | yii\db\Schema | |
TYPE_TEXT | 'text' | yii\db\Schema | |
TYPE_TIME | 'time' | yii\db\Schema | |
TYPE_TIMESTAMP | 'timestamp' | yii\db\Schema | |
TYPE_TINYINT | 'tinyint' | yii\db\Schema | |
TYPE_UBIGPK | 'ubigpk' | yii\db\Schema | |
TYPE_UPK | 'upk' | yii\db\Schema |
プロパティの詳細
DBエラーと対応する例外のマッピング。左側の部分がDBエラーメッセージに見つかった場合、右側の部分の例外クラスが使用されます。
最後に挿入された行の行ID、またはシーケンスオブジェクトから取得した最後の値。
スキーマ、テーブルなどの名前を引用符で囲むために使用される文字。開始文字と終了文字が異なる場合、2文字の配列を使用できます。
メソッドの詳細
定義元: yii\base\BaseObject::__call()
クラスメソッドではない名前付きメソッドを呼び出します。
不明なメソッドが呼び出されたときに暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
public mixed __call ( $name, $params ) | ||
$name | 文字列 |
メソッド名 |
$params | 配列 |
メソッドパラメータ |
return | mixed |
メソッドの戻り値 |
---|---|---|
throws | yii\base\UnknownMethodException |
不明なメソッドを呼び出す場合 |
public function __call($name, $params)
{
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
定義元: yii\base\BaseObject::__construct()
コンストラクター。
デフォルトの実装では、次の2つのことを行います。
- 指定された設定
$config
でオブジェクトを初期化します。 - init()を呼び出します。
このメソッドが子クラスでオーバーライドされている場合は、次のことを推奨します。
- コンストラクタの最後のパラメータが、ここにある
$config
のような設定配列であること。 - コンストラクタの最後に親の実装を呼び出すこと。
public void __construct ( $config = [] ) | ||
$config | 配列 |
オブジェクトのプロパティを初期化するために使用される名前と値のペア |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
定義元: yii\base\BaseObject::__get()
オブジェクトプロパティの値を返します。
$value = $object->property;
を実行したときに暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
__set()も参照してください。
public mixed __get ( $name ) | ||
$name | 文字列 |
プロパティ名 |
return | mixed |
プロパティ値 |
---|---|---|
throws | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
throws | yii\base\InvalidCallException |
プロパティが書き込み専用の場合 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter();
} elseif (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
定義元: yii\base\BaseObject::__isset()
プロパティが設定されているか、つまり定義されていてnullでないかを確認します。
このメソッドは、isset($object->property)
を実行するときに暗黙的に呼び出される PHP のマジックメソッドであるため、直接呼び出さないでください。
プロパティが定義されていない場合、false が返されることに注意してください。
public boolean __isset ( $name ) | ||
$name | 文字列 |
プロパティ名またはイベント名 |
return | boolean |
指定された名前のプロパティが設定されている (null ではない) かどうか。 |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
return false;
}
定義元: yii\base\BaseObject::__set()
オブジェクトプロパティの値を設定します。
このメソッドは、$object->property = $value;
を実行するときに暗黙的に呼び出される PHP のマジックメソッドであるため、直接呼び出さないでください。
参照: __get()。
public void __set ( $name, $value ) | ||
$name | 文字列 |
プロパティ名またはイベント名 |
$value | mixed |
プロパティ値 |
throws | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
---|---|---|
throws | yii\base\InvalidCallException |
プロパティが読み取り専用の場合 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter($value);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
} else {
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
}
定義元: yii\base\BaseObject::__unset()
オブジェクトプロパティをnullに設定します。
このメソッドは、unset($object->property)
を実行するときに暗黙的に呼び出される PHP のマジックメソッドであるため、直接呼び出さないでください。
プロパティが定義されていない場合、このメソッドは何もしません。プロパティが読み取り専用の場合、例外をスローします。
public void __unset ( $name ) | ||
$name | 文字列 |
プロパティ名 |
throws | yii\base\InvalidCallException |
プロパティが読み取り専用の場合。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
}
}
定義元: yii\base\BaseObject::canGetProperty()
プロパティを読み取ることができるかどうかを示す値を返します。
プロパティは次の場合に読み取り可能です。
- クラスに、指定された名前に関連付けられたゲッターメソッドがある場合 (この場合、プロパティ名は大文字と小文字を区別しません)。
- クラスに、指定された名前のメンバー変数がある場合 (
$checkVars
が true の場合)。
参照: canSetProperty()。
public boolean canGetProperty ( $name, $checkVars = true ) | ||
$name | 文字列 |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
return | boolean |
プロパティが読み取れるかどうか |
---|
public function canGetProperty($name, $checkVars = true)
{
return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}
定義元: yii\base\BaseObject::canSetProperty()
プロパティを設定できるかどうかを示す値を返します。
プロパティは次の場合に書き込み可能です。
- クラスに、指定された名前に関連付けられたセッターメソッドがある場合 (この場合、プロパティ名は大文字と小文字を区別しません)。
- クラスに、指定された名前のメンバー変数がある場合 (
$checkVars
が true の場合)。
参照: canGetProperty()。
public boolean canSetProperty ( $name, $checkVars = true ) | ||
$name | 文字列 |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
return | boolean |
プロパティが書き込み可能かどうか |
---|
public function canSetProperty($name, $checkVars = true)
{
return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}
::class
を使用してください。
定義元: yii\base\BaseObject::className()
このクラスの完全修飾名を返します。
public static string className ( ) | ||
return | 文字列 |
このクラスの完全修飾名。 |
---|
public static function className()
{
return get_called_class();
}
定義元: yii\db\Schema::convertException()
可能であれば、DB例外をより具体的な例外に変換します。
public yii\db\Exception convertException ( Exception $e, $rawSql ) | ||
$e | 例外 | |
$rawSql | 文字列 |
例外を生成した SQL |
public function convertException(\Exception $e, $rawSql)
{
if ($e instanceof Exception) {
return $e;
}
$exceptionClass = '\yii\db\Exception';
foreach ($this->exceptionMap as $error => $class) {
if (strpos($e->getMessage(), $error) !== false) {
$exceptionClass = $class;
}
}
$message = $e->getMessage() . "\nThe SQL being executed was: $rawSql";
$errorInfo = $e instanceof \PDOException ? $e->errorInfo : null;
return new $exceptionClass($message, $errorInfo, $e->getCode(), $e);
}
ColumnSchemaインスタンスを作成します。
protected yii\db\ColumnSchema createColumn ( $column ) | ||
$column | 配列 |
protected function createColumn($column)
{
$c = $this->createColumnSchema();
$c->name = $column['COLUMN_NAME'];
$c->allowNull = $column['NULLABLE'] === 'Y';
$c->comment = $column['COLUMN_COMMENT'] === null ? '' : $column['COLUMN_COMMENT'];
$c->isPrimaryKey = false;
$this->extractColumnType($c, $column['DATA_TYPE'], $column['DATA_PRECISION'], $column['DATA_SCALE'], $column['DATA_LENGTH']);
$this->extractColumnSize($c, $column['DATA_TYPE'], $column['DATA_PRECISION'], $column['DATA_SCALE'], $column['DATA_LENGTH']);
$c->phpType = $this->getColumnPhpType($c);
if (!$c->isPrimaryKey) {
if (stripos((string) $column['DATA_DEFAULT'], 'timestamp') !== false) {
$c->defaultValue = null;
} else {
$defaultValue = (string) $column['DATA_DEFAULT'];
if ($c->type === 'timestamp' && $defaultValue === 'CURRENT_TIMESTAMP') {
$c->defaultValue = new Expression('CURRENT_TIMESTAMP');
} else {
if ($defaultValue !== null) {
if (
strlen($defaultValue) > 2
&& strncmp($defaultValue, "'", 1) === 0
&& substr($defaultValue, -1) === "'"
) {
$defaultValue = substr($defaultValue, 1, -1);
} else {
$defaultValue = trim($defaultValue);
}
}
$c->defaultValue = $c->phpTypecast($defaultValue);
}
}
}
return $c;
}
定義元: yii\db\Schema::createColumnSchema()
データベースのカラムスキーマを作成します。
このメソッドは、DBMS 固有のカラムスキーマを作成するために、子クラスによってオーバーライドされる場合があります。
protected yii\db\ColumnSchema createColumnSchema ( ) | ||
return | yii\db\ColumnSchema |
カラムスキーマのインスタンス。 |
---|---|---|
throws | yii\base\InvalidConfigException |
カラムスキーマクラスを作成できない場合。 |
protected function createColumnSchema()
{
return Yii::createObject($this->columnSchemaClass);
}
型と値の精度を指定して、カラムスキーマビルダーインスタンスを作成します。
このメソッドは、DBMS 固有のカラムスキーマビルダーを作成するために、子クラスによってオーバーライドされる場合があります。
public yii\db\ColumnSchemaBuilder createColumnSchemaBuilder ( $type, $length = null ) | ||
$type | 文字列 |
カラムのタイプ。参照: yii\db\oci\ColumnSchemaBuilder::$type。 |
$length | integer|string|array|null |
カラムの長さまたは精度。参照: yii\db\oci\ColumnSchemaBuilder::$length。 |
return | yii\db\ColumnSchemaBuilder |
カラムスキーマビルダーのインスタンス |
---|
public function createColumnSchemaBuilder($type, $length = null)
{
return Yii::createObject(ColumnSchemaBuilder::className(), [$type, $length]);
}
データベースのクエリビルダーを作成します。
このメソッドは、DBMS 固有のクエリビルダーを作成するために、子クラスによってオーバーライドされる場合があります。
public yii\db\QueryBuilder createQueryBuilder ( ) | ||
return | yii\db\QueryBuilder |
クエリビルダーのインスタンス |
---|
public function createQueryBuilder()
{
return Yii::createObject(QueryBuilder::className(), [$this->db]);
}
定義元: yii\db\Schema::createSavepoint()
新しいセーブポイントを作成します。
public void createSavepoint ( $name ) | ||
$name | 文字列 |
セーブポイント名 |
public function createSavepoint($name)
{
$this->db->createCommand("SAVEPOINT $name")->execute();
}
カラムのDBタイプからサイズ、精度、スケールの情報を抽出します。
protected void extractColumnSize ( $column, $dbType, $precision, $scale, $length ) | ||
$column | yii\db\ColumnSchema | |
$dbType | 文字列 |
カラムのDB型 |
$precision | 文字列 |
桁数の合計。このパラメータはバージョン2.0.4から利用可能です。 |
$scale | 文字列 |
小数点以下の桁数。このパラメータはバージョン2.0.4から利用可能です。 |
$length | 文字列 |
文字型の長さ。このパラメータはバージョン2.0.4から利用可能です。 |
protected function extractColumnSize($column, $dbType, $precision, $scale, $length)
{
$column->size = trim((string) $length) === '' ? null : (int) $length;
$column->precision = trim((string) $precision) === '' ? null : (int) $precision;
$column->scale = trim((string) $scale) === '' ? null : (int) $scale;
}
指定されたカラムのデータ型を抽出します。
protected void extractColumnType ( $column, $dbType, $precision, $scale, $length ) | ||
$column | yii\db\ColumnSchema | |
$dbType | 文字列 |
DB型 |
$precision | 文字列 |
桁数の合計。このパラメータはバージョン2.0.4から利用可能です。 |
$scale | 文字列 |
小数点以下の桁数。このパラメータはバージョン2.0.4から利用可能です。 |
$length | 文字列 |
文字型の長さ。このパラメータはバージョン2.0.4から利用可能です。 |
protected function extractColumnType($column, $dbType, $precision, $scale, $length)
{
$column->dbType = $dbType;
if (strpos($dbType, 'FLOAT') !== false || strpos($dbType, 'DOUBLE') !== false) {
$column->type = 'double';
} elseif (strpos($dbType, 'NUMBER') !== false) {
if ($scale === null || $scale > 0) {
$column->type = 'decimal';
} else {
$column->type = 'integer';
}
} elseif (strpos($dbType, 'INTEGER') !== false) {
$column->type = 'integer';
} elseif (strpos($dbType, 'BLOB') !== false) {
$column->type = 'binary';
} elseif (strpos($dbType, 'CLOB') !== false) {
$column->type = 'text';
} elseif (strpos($dbType, 'TIMESTAMP') !== false) {
$column->type = 'timestamp';
} else {
$column->type = 'string';
}
}
テーブルカラムのメタデータを収集します。
protected boolean findColumns ( $table ) | ||
$table | yii\db\TableSchema |
テーブルスキーマ |
return | boolean |
テーブルが存在するかどうか |
---|
protected function findColumns($table)
{
$sql = <<<'SQL'
CT
A.COLUMN_NAME,
A.DATA_TYPE,
A.DATA_PRECISION,
A.DATA_SCALE,
(
CASE A.CHAR_USED WHEN 'C' THEN A.CHAR_LENGTH
ELSE A.DATA_LENGTH
END
) AS DATA_LENGTH,
A.NULLABLE,
A.DATA_DEFAULT,
COM.COMMENTS AS COLUMN_COMMENT
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)
E
A.OWNER = :schemaName
AND B.OBJECT_TYPE IN ('TABLE', 'VIEW', 'MATERIALIZED VIEW')
AND B.OBJECT_NAME = :tableName
R BY A.COLUMN_ID
try {
$columns = $this->db->createCommand($sql, [
':tableName' => $table->name,
':schemaName' => $table->schemaName,
])->queryAll();
} catch (\Exception $e) {
return false;
}
if (empty($columns)) {
return false;
}
foreach ($columns as $column) {
if ($this->db->slavePdo->getAttribute(\PDO::ATTR_CASE) === \PDO::CASE_LOWER) {
$column = array_change_key_case($column, CASE_UPPER);
}
$c = $this->createColumn($column);
$table->columns[$c->name] = $c;
}
return true;
}
制約を見つけ、渡されたTableSchemaオブジェクトに入力します。
protected void findConstraints ( $table ) | ||
$table | yii\db\TableSchema |
protected function findConstraints($table)
{
$sql = <<<'SQL'
CT
/*+ PUSH_PRED(C) PUSH_PRED(D) PUSH_PRED(E) */
D.CONSTRAINT_NAME,
D.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
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
E
C.OWNER = :schemaName
AND C.TABLE_NAME = :tableName
R BY D.CONSTRAINT_NAME, C.POSITION
$command = $this->db->createCommand($sql, [
':tableName' => $table->name,
':schemaName' => $table->schemaName,
]);
$constraints = [];
foreach ($command->queryAll() as $row) {
if ($this->db->slavePdo->getAttribute(\PDO::ATTR_CASE) === \PDO::CASE_LOWER) {
$row = array_change_key_case($row, CASE_UPPER);
}
if ($row['CONSTRAINT_TYPE'] === 'P') {
$table->columns[$row['COLUMN_NAME']]->isPrimaryKey = true;
$table->primaryKey[] = $row['COLUMN_NAME'];
if (empty($table->sequenceName)) {
$table->sequenceName = $this->getTableSequenceName($table->name);
}
}
if ($row['CONSTRAINT_TYPE'] !== 'R') {
// this condition is not checked in SQL WHERE because of an Oracle Bug:
// see https://github.com/yiisoft/yii2/pull/8844
continue;
}
$name = $row['CONSTRAINT_NAME'];
if (!isset($constraints[$name])) {
$constraints[$name] = [
'tableName' => $row['TABLE_REF'],
'columns' => [],
];
}
$constraints[$name]['columns'][$row['COLUMN_NAME']] = $row['COLUMN_REF'];
}
foreach ($constraints as $constraint) {
$name = current(array_keys($constraint));
$table->foreignKeys[$name] = array_merge([$constraint['tableName']], $constraint['columns']);
}
}
デフォルトのスキーマを含む、データベース内のすべてのスキーマ名を返しますが、システムスキーマは除きます。
デフォルトの実装は例外をスローするだけなので、この機能をサポートするためには、子クラスでこのメソッドをオーバーライドする必要があります。
こちらも参照してください https://docs.oracle.com/cd/B28359_01/server.111/b28337/tdpsg_user_accounts.htm。
protected array findSchemaNames ( ) | ||
return | 配列 |
システムスキーマを除く、データベース内のすべてのスキーマ名。 |
---|---|---|
throws | yii\base\NotSupportedException |
このメソッドがDBMSでサポートされていない場合。 |
protected function findSchemaNames()
{
static $sql = <<<'SQL'
CT "u"."USERNAME"
"DBA_USERS" "u"
E "u"."DEFAULT_TABLESPACE" NOT IN ('SYSTEM', 'SYSAUX')
R BY "u"."USERNAME" ASC
return $this->db->createCommand($sql)->queryColumn();
}
データベース内のすべてのテーブル名を返します。
デフォルトの実装は例外をスローするだけなので、この機能をサポートするためには、子クラスでこのメソッドをオーバーライドする必要があります。
protected array findTableNames ( $schema = '' ) | ||
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマまたはデフォルトのスキーマを意味します。 |
return | 配列 |
データベース内のすべてのテーブル名。名前にはスキーマ名のプレフィックスは含まれません。 |
---|---|---|
throws | yii\base\NotSupportedException |
このメソッドがDBMSでサポートされていない場合。 |
protected function findTableNames($schema = '')
{
if ($schema === '') {
$sql = <<<'SQL'
CT
TABLE_NAME
USER_TABLES
N ALL
CT
VIEW_NAME AS TABLE_NAME
USER_VIEWS
N ALL
CT
MVIEW_NAME AS TABLE_NAME
USER_MVIEWS
R BY TABLE_NAME
$command = $this->db->createCommand($sql);
} else {
$sql = <<<'SQL'
CT
OBJECT_NAME AS TABLE_NAME
ALL_OBJECTS
E
OBJECT_TYPE IN ('TABLE', 'VIEW', 'MATERIALIZED VIEW')
AND OWNER = :schema
R BY OBJECT_NAME
$command = $this->db->createCommand($sql, [':schema' => $schema]);
}
$rows = $command->queryAll();
$names = [];
foreach ($rows as $row) {
if ($this->db->slavePdo->getAttribute(\PDO::ATTR_CASE) === \PDO::CASE_LOWER) {
$row = array_change_key_case($row, CASE_UPPER);
}
$names[] = $row['TABLE_NAME'];
}
return $names;
}
指定されたテーブルのすべての一意インデックスを返します。
各配列要素は、次の構造になります:。
[
'IndexName1' => ['col1' [, ...]],
'IndexName2' => ['col2' [, ...]],
]
public array findUniqueIndexes ( $table ) | ||
$table | yii\db\TableSchema |
テーブルメタデータ |
return | 配列 |
指定されたテーブルのすべてのユニークインデックス。 |
---|
public function findUniqueIndexes($table)
{
$query = <<<'SQL'
CT
DIC.INDEX_NAME,
DIC.COLUMN_NAME
ALL_INDEXES DI
INNER JOIN ALL_IND_COLUMNS DIC ON DI.TABLE_NAME = DIC.TABLE_NAME AND DI.INDEX_NAME = DIC.INDEX_NAME
E
DI.UNIQUENESS = 'UNIQUE'
AND DIC.TABLE_OWNER = :schemaName
AND DIC.TABLE_NAME = :tableName
R BY DIC.TABLE_NAME, DIC.INDEX_NAME, DIC.COLUMN_POSITION
$result = [];
$command = $this->db->createCommand($query, [
':tableName' => $table->name,
':schemaName' => $table->schemaName,
]);
foreach ($command->queryAll() as $row) {
$result[$row['INDEX_NAME']][] = $row['COLUMN_NAME'];
}
return $result;
}
定義元: yii\db\Schema::getCacheKey()
指定されたテーブル名のキャッシュキーを返します。
protected mixed getCacheKey ( $name ) | ||
$name | 文字列 |
テーブル名。 |
return | mixed |
キャッシュキー。 |
---|
protected function getCacheKey($name)
{
return [
__CLASS__,
$this->db->dsn,
$this->db->username,
$this->getRawTableName($name),
];
}
protected string getCacheTag ( ) | ||
return | 文字列 |
キャッシュタグ名 |
---|
protected function getCacheTag()
{
return md5(serialize([
__CLASS__,
$this->db->dsn,
$this->db->username,
]));
}
定義元: yii\db\Schema::getColumnPhpType()
抽象DBタイプからPHPタイプを抽出します。
protected string getColumnPhpType ( $column ) | ||
$column | yii\db\ColumnSchema |
カラムスキーマ情報 |
return | 文字列 |
PHPの型名 |
---|
protected function getColumnPhpType($column)
{
static $typeMap = [
// abstract type => php type
self::TYPE_TINYINT => 'integer',
self::TYPE_SMALLINT => 'integer',
self::TYPE_INTEGER => 'integer',
self::TYPE_BIGINT => 'integer',
self::TYPE_BOOLEAN => 'boolean',
self::TYPE_FLOAT => 'double',
self::TYPE_DOUBLE => 'double',
self::TYPE_BINARY => 'resource',
self::TYPE_JSON => 'array',
];
if (isset($typeMap[$column->type])) {
if ($column->type === 'bigint') {
return PHP_INT_SIZE === 8 && !$column->unsigned ? 'integer' : 'string';
} elseif ($column->type === 'integer') {
return PHP_INT_SIZE === 4 && $column->unsigned ? 'string' : 'integer';
}
return $typeMap[$column->type];
}
return 'string';
}
こちらも参照してください https://www.php.net/manual/en/function.PDO-lastInsertId.php -> Oracle はこれをサポートしていません。最後に挿入された行またはシーケンス値のIDを返します。
public string getLastInsertID ( $sequenceName = '' ) | ||
$sequenceName | 文字列 |
シーケンスオブジェクトの名前(一部のDBMSで必須) |
return | 文字列 |
最後に挿入された行の行 ID、またはシーケンスオブジェクトから取得された最後の値 |
---|---|---|
throws | yii\base\InvalidCallException |
DB接続がアクティブでない場合 |
public function getLastInsertID($sequenceName = '')
{
if ($this->db->isActive) {
// get the last insert id from the master connection
$sequenceName = $this->quoteSimpleTableName($sequenceName);
return $this->db->useMaster(function (Connection $db) use ($sequenceName) {
return $db->createCommand("SELECT {$sequenceName}.CURRVAL FROM DUAL")->queryScalar();
});
} else {
throw new InvalidCallException('DB Connection is not active.');
}
}
定義場所: yii\db\Schema::getPdoType()
指定されたPHPデータ値のPDO型を決定します。
こちらも参照してください https://www.php.net/manual/en/pdo.constants.php.
public integer getPdoType ( $data ) | ||
$data | mixed |
PDO型を判定する対象のデータ |
return | integer |
PDO型 |
---|
public function getPdoType($data)
{
static $typeMap = [
// php type => PDO type
'boolean' => \PDO::PARAM_BOOL,
'integer' => \PDO::PARAM_INT,
'string' => \PDO::PARAM_STR,
'resource' => \PDO::PARAM_LOB,
'NULL' => \PDO::PARAM_NULL,
];
$type = gettype($data);
return isset($typeMap[$type]) ? $typeMap[$type] : \PDO::PARAM_STR;
}
public yii\db\QueryBuilder getQueryBuilder ( ) | ||
return | yii\db\QueryBuilder |
この接続のクエリビルダー。 |
---|
public function getQueryBuilder()
{
if ($this->_builder === null) {
$this->_builder = $this->createQueryBuilder();
}
return $this->_builder;
}
定義場所: yii\db\Schema::getRawTableName()
指定されたテーブル名の実際の名前を返します。
このメソッドは、指定されたテーブル名から中括弧を削除し、パーセント文字 '%' を yii\db\Connection::$tablePrefix に置き換えます。
public string getRawTableName ( $name ) | ||
$name | 文字列 |
変換対象のテーブル名 |
return | 文字列 |
指定されたテーブル名の実際の名前 |
---|
public function getRawTableName($name)
{
if (strpos($name, '{{') !== false) {
$name = preg_replace('/\\{\\{(.*?)\\}\\}/', '\1', $name);
return str_replace('%', $this->db->tablePrefix, $name);
}
return $name;
}
定義場所: yii\db\ConstraintFinderTrait::getSchemaChecks()
データベース内のすべてのテーブルのチェック制約を返します。
public \yii\db\CheckConstraint[][] getSchemaChecks ( $schema = '', $refresh = false ) | ||
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマ名またはデフォルトのスキーマ名を意味します。 |
$refresh | boolean |
利用可能な最新のテーブルスキーマをフェッチするかどうか。これが false の場合、キャッシュされたデータが利用可能であれば返される場合があります。 |
return | \yii\db\CheckConstraint[][] |
データベース内のすべてのテーブルのチェック制約。yii\db\CheckConstraint またはその子クラスの配列の配列です。 |
---|
public function getSchemaChecks($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'checks', $refresh);
}
定義場所: yii\db\ConstraintFinderTrait::getSchemaDefaultValues()
データベース内のすべてのテーブルのデフォルト値制約を返します。
public yii\db\DefaultValueConstraint[] getSchemaDefaultValues ( $schema = '', $refresh = false ) | ||
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマ名またはデフォルトのスキーマ名を意味します。 |
$refresh | boolean |
利用可能な最新のテーブルスキーマをフェッチするかどうか。これが false の場合、キャッシュされたデータが利用可能であれば返される場合があります。 |
return | yii\db\DefaultValueConstraint[] |
データベース内のすべてのテーブルのデフォルト値制約。 各配列要素は yii\db\DefaultValueConstraint またはその子クラスの配列です。 |
---|
public function getSchemaDefaultValues($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'defaultValues', $refresh);
}
定義場所: yii\db\ConstraintFinderTrait::getSchemaForeignKeys()
データベース内のすべてのテーブルの外部キーを返します。
public \yii\db\ForeignKeyConstraint[][] getSchemaForeignKeys ( $schema = '', $refresh = false ) | ||
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマ名またはデフォルトのスキーマ名を意味します。 |
$refresh | boolean |
利用可能な最新のテーブルスキーマをフェッチするかどうか。これが false の場合、キャッシュされたデータが利用可能であれば返される場合があります。 |
return | \yii\db\ForeignKeyConstraint[][] |
データベース内のすべてのテーブルの外部キー。 各配列要素は yii\db\ForeignKeyConstraint またはその子クラスの配列です。 |
---|
public function getSchemaForeignKeys($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'foreignKeys', $refresh);
}
定義場所: yii\db\ConstraintFinderTrait::getSchemaIndexes()
データベース内のすべてのテーブルのインデックスを返します。
public \yii\db\IndexConstraint[][] getSchemaIndexes ( $schema = '', $refresh = false ) | ||
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマ名またはデフォルトのスキーマ名を意味します。 |
$refresh | boolean |
利用可能な最新のテーブルスキーマをフェッチするかどうか。これが false の場合、キャッシュされたデータが利用可能であれば返される場合があります。 |
return | \yii\db\IndexConstraint[][] |
データベース内のすべてのテーブルのインデックス。 各配列要素は yii\db\IndexConstraint またはその子クラスの配列です。 |
---|
public function getSchemaIndexes($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'indexes', $refresh);
}
定義場所: yii\db\ConstraintFinderTrait::getSchemaMetadata()
指定されたスキーマ内のすべてのテーブルについて、指定されたタイプのメタデータを返します。
protected abstract array getSchemaMetadata ( $schema, $type, $refresh ) | ||
$schema | 文字列 |
メタデータのスキーマ。デフォルトは空文字列で、現在のスキーマ名またはデフォルトのスキーマ名を意味します。 |
$type | 文字列 |
メタデータ型。 |
$refresh | boolean |
利用可能な最新のテーブルメタデータをフェッチするかどうか。これが |
return | 配列 |
メタデータの配列。 |
---|
abstract protected function getSchemaMetadata($schema, $type, $refresh);
定義場所: yii\db\Schema::getSchemaNames()
システムスキーマを除く、データベース内のすべてのスキーマ名を返します。
public string[] getSchemaNames ( $refresh = false ) | ||
$refresh | boolean |
利用可能な最新のスキーマ名をフェッチするかどうか。これが false の場合、以前にフェッチされたスキーマ名(利用可能な場合)が返されます。 |
return | 文字列[] |
システムスキーマを除く、データベース内のすべてのスキーマ名。 |
---|
public function getSchemaNames($refresh = false)
{
if ($this->_schemaNames === null || $refresh) {
$this->_schemaNames = $this->findSchemaNames();
}
return $this->_schemaNames;
}
定義場所: yii\db\ConstraintFinderTrait::getSchemaPrimaryKeys()
データベース内のすべてのテーブルの主キーを返します。
public yii\db\Constraint[] getSchemaPrimaryKeys ( $schema = '', $refresh = false ) | ||
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマ名またはデフォルトのスキーマ名を意味します。 |
$refresh | boolean |
利用可能な最新のテーブルスキーマをフェッチするかどうか。これが |
return | yii\db\Constraint[] |
データベース内のすべてのテーブルの主キー。各配列要素は、yii\db\Constraint またはその子クラスのインスタンスです。 |
---|
public function getSchemaPrimaryKeys($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'primaryKey', $refresh);
}
定義場所: yii\db\ConstraintFinderTrait::getSchemaUniques()
データベース内のすべてのテーブルの一意制約を返します。
public \yii\db\Constraint[][] getSchemaUniques ( $schema = '', $refresh = false ) | ||
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマ名またはデフォルトのスキーマ名を意味します。 |
$refresh | boolean |
利用可能な最新のテーブルスキーマをフェッチするかどうか。これが false の場合、キャッシュされたデータが利用可能であれば返される場合があります。 |
return | \yii\db\Constraint[][] |
データベース内のすべてのテーブルの一意制約。 各配列要素は yii\db\Constraint またはその子クラスの配列です。 |
---|
public function getSchemaUniques($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'uniques', $refresh);
}
定義元: yii\db\Schema::getServerVersion()
\version_compare()で比較可能な文字列としてサーバーバージョンを返します。
public string getServerVersion ( ) | ||
return | 文字列 |
文字列としてのサーバーバージョン。 |
---|
public function getServerVersion()
{
if ($this->_serverVersion === null) {
$this->_serverVersion = $this->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_SERVER_VERSION);
}
return $this->_serverVersion;
}
定義元: yii\db\ConstraintFinderTrait::getTableChecks()
名前付きテーブルのチェック制約情報を取得します。
public yii\db\CheckConstraint[] getTableChecks ( $name, $refresh = false ) | ||
$name | 文字列 |
テーブル名。テーブル名にはスキーマ名が含まれる場合があります。テーブル名を引用符で囲まないでください。 |
$refresh | boolean |
キャッシュで見つかった場合でも情報をリロードするかどうか。 |
return | yii\db\CheckConstraint[] |
テーブルのチェック制約。 |
---|
public function getTableChecks($name, $refresh = false)
{
return $this->getTableMetadata($name, 'checks', $refresh);
}
定義元: yii\db\ConstraintFinderTrait::getTableDefaultValues()
名前付きテーブルのデフォルト値制約情報を取得します。
public yii\db\DefaultValueConstraint[] getTableDefaultValues ( $name, $refresh = false ) | ||
$name | 文字列 |
テーブル名。テーブル名にはスキーマ名が含まれる場合があります。テーブル名を引用符で囲まないでください。 |
$refresh | boolean |
キャッシュで見つかった場合でも情報をリロードするかどうか。 |
return | yii\db\DefaultValueConstraint[] |
テーブルのデフォルト値制約。 |
---|
public function getTableDefaultValues($name, $refresh = false)
{
return $this->getTableMetadata($name, 'defaultValues', $refresh);
}
定義元: yii\db\ConstraintFinderTrait::getTableForeignKeys()
名前付きテーブルの外部キー情報を取得します。
public yii\db\ForeignKeyConstraint[] getTableForeignKeys ( $name, $refresh = false ) | ||
$name | 文字列 |
テーブル名。テーブル名にはスキーマ名が含まれる場合があります。テーブル名を引用符で囲まないでください。 |
$refresh | boolean |
キャッシュで見つかった場合でも情報をリロードするかどうか。 |
return | yii\db\ForeignKeyConstraint[] |
テーブルの外部キー。 |
---|
public function getTableForeignKeys($name, $refresh = false)
{
return $this->getTableMetadata($name, 'foreignKeys', $refresh);
}
定義元: yii\db\ConstraintFinderTrait::getTableIndexes()
名前付きテーブルのインデックス情報を取得します。
public yii\db\IndexConstraint[] getTableIndexes ( $name, $refresh = false ) | ||
$name | 文字列 |
テーブル名。テーブル名にはスキーマ名が含まれる場合があります。テーブル名を引用符で囲まないでください。 |
$refresh | boolean |
キャッシュで見つかった場合でも情報をリロードするかどうか。 |
return | yii\db\IndexConstraint[] |
テーブルのインデックス。 |
---|
public function getTableIndexes($name, $refresh = false)
{
return $this->getTableMetadata($name, 'indexes', $refresh);
}
定義元: yii\db\ConstraintFinderTrait::getTableMetadata()
指定されたテーブルについて、指定されたタイプのメタデータを返します。
protected abstract mixed getTableMetadata ( $name, $type, $refresh ) | ||
$name | 文字列 |
テーブル名。テーブル名にはスキーマ名が含まれる場合があります。テーブル名を引用符で囲まないでください。 |
$type | 文字列 |
メタデータ型。 |
$refresh | boolean |
テーブルメタデータがキャッシュで見つかった場合でもリロードするかどうか。 |
return | mixed |
メタデータ。 |
---|
abstract protected function getTableMetadata($name, $type, $refresh);
定義元: yii\db\Schema::getTableNameParts()
完全なテーブル名を部分に分割します
protected array getTableNameParts ( $name ) | ||
$name | 文字列 |
protected function getTableNameParts($name)
{
return explode('.', $name);
}
定義元: yii\db\Schema::getTableNames()
データベース内のすべてのテーブル名を返します。
public string[] getTableNames ( $schema = '', $refresh = false ) | ||
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマ名またはデフォルトのスキーマ名を意味します。空でない場合、返されるテーブル名にはスキーマ名がプレフィックスとして付加されます。 |
$refresh | boolean |
最新のテーブル名を取得するかどうか。これが false の場合、以前に取得したテーブル名(利用可能な場合)が返されます。 |
return | 文字列[] |
データベース内のすべてのテーブル名。 |
---|
public function getTableNames($schema = '', $refresh = false)
{
if (!isset($this->_tableNames[$schema]) || $refresh) {
$this->_tableNames[$schema] = $this->findTableNames($schema);
}
return $this->_tableNames[$schema];
}
定義元: yii\db\ConstraintFinderTrait::getTablePrimaryKey()
名前付きテーブルの主キーを取得します。
public yii\db\Constraint|null getTablePrimaryKey ( $name, $refresh = false ) | ||
$name | 文字列 |
テーブル名。テーブル名にはスキーマ名が含まれる場合があります。テーブル名を引用符で囲まないでください。 |
$refresh | boolean |
キャッシュで見つかった場合でも情報をリロードするかどうか。 |
return | yii\db\Constraint|null |
テーブルの主キー。テーブルに主キーがない場合は |
---|
public function getTablePrimaryKey($name, $refresh = false)
{
return $this->getTableMetadata($name, 'primaryKey', $refresh);
}
定義元: yii\db\Schema::getTableSchema()
名前付きテーブルのメタデータを取得します。
public yii\db\TableSchema|null getTableSchema ( $name, $refresh = false ) | ||
$name | 文字列 |
テーブル名。テーブル名にはスキーマ名が含まれる場合があります。テーブル名を引用符で囲まないでください。 |
$refresh | boolean |
テーブルスキーマがキャッシュで見つかった場合でもリロードするかどうか。 |
return | yii\db\TableSchema|null |
テーブルのメタデータ。指定されたテーブルが存在しない場合は |
---|
public function getTableSchema($name, $refresh = false)
{
return $this->getTableMetadata($name, 'schema', $refresh);
}
定義元: yii\db\Schema::getTableSchemas()
データベース内のすべてのテーブルのメタデータを返します。
public yii\db\TableSchema[] getTableSchemas ( $schema = '', $refresh = false ) | ||
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマ名またはデフォルトのスキーマ名を意味します。 |
$refresh | boolean |
利用可能な最新のテーブルスキーマをフェッチするかどうか。これが |
return | yii\db\TableSchema[] |
データベース内のすべてのテーブルのメタデータ。各配列要素は、yii\db\TableSchema またはその子クラスのインスタンスです。 |
---|
public function getTableSchemas($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'schema', $refresh);
}
定義元: yii\db\ConstraintFinderTrait::getTableUniques()
名前付きテーブルの一意制約情報を取得します。
public yii\db\Constraint[] getTableUniques ( $name, $refresh = false ) | ||
$name | 文字列 |
テーブル名。テーブル名にはスキーマ名が含まれる場合があります。テーブル名を引用符で囲まないでください。 |
$refresh | boolean |
キャッシュで見つかった場合でも情報をリロードするかどうか。 |
return | yii\db\Constraint[] |
テーブルの一意制約。 |
---|
public function getTableUniques($name, $refresh = false)
{
return $this->getTableMetadata($name, 'uniques', $refresh);
}
定義元: yii\base\BaseObject::hasMethod()
メソッドが定義されているかどうかを示す値を返します。
デフォルトの実装は、PHP関数method_exists()
を呼び出すことです。PHPのマジックメソッド__call()
を実装した場合は、このメソッドをオーバーライドすることができます。
public boolean hasMethod ( $name ) | ||
$name | 文字列 |
メソッド名 |
return | boolean |
メソッドが定義されているかどうか |
---|
public function hasMethod($name)
{
return method_exists($this, $name);
}
定義元: yii\base\BaseObject::hasProperty()
プロパティが定義されているかどうかを示す値を返します。
プロパティは、以下の場合に定義されます。
- クラスが、指定された名前に関連付けられたゲッターまたはセッターメソッドを持っている(この場合、プロパティ名は大文字と小文字を区別しません)。
- クラスに、指定された名前のメンバー変数がある場合 (
$checkVars
が true の場合)。
こちらも参照してください
public boolean hasProperty ( $name, $checkVars = true ) | ||
$name | 文字列 |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
return | boolean |
プロパティが定義されているかどうか |
---|
public function hasProperty($name, $checkVars = true)
{
return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}
オブジェクトを初期化します。
このメソッドは、オブジェクトが指定された構成で初期化された後、コンストラクタの最後に呼び出されます。
public void init ( ) |
public function init()
{
parent::init();
if ($this->defaultSchema === null) {
$username = $this->db->username;
if (empty($username)) {
$username = isset($this->db->masters[0]['username']) ? $this->db->masters[0]['username'] : '';
}
$this->defaultSchema = strtoupper($username);
}
}
INSERTコマンドを実行し、主キーの値を返します。
public array|false insert ( $table, $columns ) | ||
$table | 文字列 |
新しい行が挿入されるテーブル。 |
$columns | 配列 |
テーブルに挿入される列データ(名前 => 値)。 |
return | array|false |
コマンドが失敗した場合は、主キーの値または false |
---|
public function insert($table, $columns)
{
$params = [];
$returnParams = [];
$sql = $this->db->getQueryBuilder()->insert($table, $columns, $params);
$tableSchema = $this->getTableSchema($table);
$returnColumns = $tableSchema->primaryKey;
if (!empty($returnColumns)) {
$columnSchemas = $tableSchema->columns;
$returning = [];
foreach ((array) $returnColumns as $name) {
$phName = QueryBuilder::PARAM_PREFIX . (count($params) + count($returnParams));
$returnParams[$phName] = [
'column' => $name,
'value' => '',
];
if (!isset($columnSchemas[$name]) || $columnSchemas[$name]->phpType !== 'integer') {
$returnParams[$phName]['dataType'] = \PDO::PARAM_STR;
} else {
$returnParams[$phName]['dataType'] = \PDO::PARAM_INT;
}
$returnParams[$phName]['size'] = isset($columnSchemas[$name]->size) ? $columnSchemas[$name]->size : -1;
$returning[] = $this->quoteColumnName($name);
}
$sql .= ' RETURNING ' . implode(', ', $returning) . ' INTO ' . implode(', ', array_keys($returnParams));
}
$command = $this->db->createCommand($sql, $params);
$command->prepare(false);
foreach ($returnParams as $name => &$value) {
$command->pdoStatement->bindParam($name, $value['value'], $value['dataType'], $value['size']);
}
if (!$command->execute()) {
return false;
}
$result = [];
foreach ($returnParams as $value) {
$result[$value['column']] = $value['value'];
}
return $result;
}
定義元: yii\db\Schema::isReadQuery()
SQLステートメントが読み取り目的かどうかを示す値を返します。
public boolean isReadQuery ( $sql ) | ||
$sql | 文字列 |
SQLステートメント |
return | boolean |
SQLステートメントが読み取り目的であるかどうか。 |
---|
public function isReadQuery($sql)
{
$pattern = '/^\s*(SELECT|SHOW|DESCRIBE)\b/i';
return preg_match($pattern, $sql) > 0;
}
protected void loadTableChecks ( $tableName ) | ||
$tableName |
protected function loadTableChecks($tableName)
{
return $this->loadTableConstraints($tableName, 'checks');
}
protected void loadTableDefaultValues ( $tableName ) | ||
$tableName | ||
throws | yii\base\NotSupportedException |
このメソッドが呼び出された場合。 |
---|
protected function loadTableDefaultValues($tableName)
{
throw new NotSupportedException('Oracle does not support default value constraints.');
}
protected void loadTableForeignKeys ( $tableName ) | ||
$tableName |
protected function loadTableForeignKeys($tableName)
{
return $this->loadTableConstraints($tableName, 'foreignKeys');
}
protected void loadTableIndexes ( $tableName ) | ||
$tableName |
protected function loadTableIndexes($tableName)
{
static $sql = <<<'SQL'
CT
/*+ PUSH_PRED("ui") PUSH_PRED("uicol") PUSH_PRED("uc") */
"ui"."INDEX_NAME" AS "name",
"uicol"."COLUMN_NAME" AS "column_name",
CASE "ui"."UNIQUENESS" WHEN 'UNIQUE' THEN 1 ELSE 0 END AS "index_is_unique",
CASE WHEN "uc"."CONSTRAINT_NAME" IS NOT NULL THEN 1 ELSE 0 END AS "index_is_primary"
"SYS"."USER_INDEXES" "ui"
JOIN "SYS"."USER_IND_COLUMNS" "uicol"
ON "uicol"."INDEX_NAME" = "ui"."INDEX_NAME"
JOIN "SYS"."USER_CONSTRAINTS" "uc"
ON "uc"."OWNER" = "ui"."TABLE_OWNER" AND "uc"."CONSTRAINT_NAME" = "ui"."INDEX_NAME" AND "uc"."CONSTRAINT_TYPE" = 'P'
E "ui"."TABLE_OWNER" = :schemaName AND "ui"."TABLE_NAME" = :tableName
R BY "uicol"."COLUMN_POSITION" ASC
$resolvedName = $this->resolveTableName($tableName);
$indexes = $this->db->createCommand($sql, [
':schemaName' => $resolvedName->schemaName,
':tableName' => $resolvedName->name,
])->queryAll();
$indexes = $this->normalizePdoRowKeyCase($indexes, true);
$indexes = ArrayHelper::index($indexes, null, 'name');
$result = [];
foreach ($indexes as $name => $index) {
$result[] = new IndexConstraint([
'isPrimary' => (bool) $index[0]['index_is_primary'],
'isUnique' => (bool) $index[0]['index_is_unique'],
'name' => $name,
'columnNames' => ArrayHelper::getColumn($index, 'column_name'),
]);
}
return $result;
}
protected void loadTablePrimaryKey ( $tableName ) | ||
$tableName |
protected function loadTablePrimaryKey($tableName)
{
return $this->loadTableConstraints($tableName, 'primaryKey');
}
指定されたテーブルのメタデータをロードします。
protected yii\db\TableSchema|null loadTableSchema ( $name ) | ||
$name | 文字列 |
テーブル名 |
return | yii\db\TableSchema|null |
DBMS依存のテーブルメタデータ。テーブルが存在しない場合は |
---|
protected function loadTableSchema($name)
{
$table = new TableSchema();
$this->resolveTableNames($table, $name);
if ($this->findColumns($table)) {
$this->findConstraints($table);
return $table;
}
return null;
}
protected void loadTableUniques ( $tableName ) | ||
$tableName |
protected function loadTableUniques($tableName)
{
return $this->loadTableConstraints($tableName, 'uniques');
}
定義元: yii\db\Schema::normalizePdoRowKeyCase()
PDOのキーが大文字に設定されている場合、行の配列キーのケースを小文字に変更します。
protected array normalizePdoRowKeyCase ( array $row, $multiple ) | ||
$row | 配列 |
行の配列、または行の配列の配列。 |
$multiple | boolean |
複数の行が渡されたか、単一行が渡されたか。 |
return | 配列 |
正規化された行または行の配列。 |
---|
protected function normalizePdoRowKeyCase(array $row, $multiple)
{
if ($this->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_CASE) !== \PDO::CASE_UPPER) {
return $row;
}
if ($multiple) {
return array_map(function (array $row) {
return array_change_key_case($row, CASE_LOWER);
}, $row);
}
return array_change_key_case($row, CASE_LOWER);
}
定義元: yii\db\Schema::quoteColumnName()
クエリで使用するために、カラム名を引用符で囲みます。
カラム名にプレフィックスが含まれている場合、プレフィックスも適切にクォートされます。カラム名がすでにクォートされているか、'('、'[['、'{{'が含まれている場合、このメソッドは何もしません。
関連項目 quoteSimpleColumnName()。
public string quoteColumnName ( $name ) | ||
$name | 文字列 |
カラム名 |
return | 文字列 |
適切にクォートされたカラム名 |
---|
public function quoteColumnName($name)
{
if (strpos($name, '(') !== false || strpos($name, '[[') !== false) {
return $name;
}
if (($pos = strrpos($name, '.')) !== false) {
$prefix = $this->quoteTableName(substr($name, 0, $pos)) . '.';
$name = substr($name, $pos + 1);
} else {
$prefix = '';
}
if (strpos($name, '{{') !== false) {
return $name;
}
return $prefix . $this->quoteSimpleColumnName($name);
}
定義元: yii\db\Schema::quoteSimpleColumnName()
クエリで使用するために、単純なカラム名を引用符で囲みます。
単純なカラム名には、プレフィックスなしのカラム名のみが含まれる必要があります。カラム名が既にクォートされているか、アスタリスク文字'*'である場合、このメソッドは何もしません。
public string quoteSimpleColumnName ( $name ) | ||
$name | 文字列 |
カラム名 |
return | 文字列 |
適切にクォートされたカラム名 |
---|
public function quoteSimpleColumnName($name)
{
if (is_string($this->columnQuoteCharacter)) {
$startingCharacter = $endingCharacter = $this->columnQuoteCharacter;
} else {
list($startingCharacter, $endingCharacter) = $this->columnQuoteCharacter;
}
return $name === '*' || strpos($name, $startingCharacter) !== false ? $name : $startingCharacter . $name . $endingCharacter;
}
クエリで使用するために、単純なテーブル名を引用符で囲みます。
単純なテーブル名には、スキーマプレフィックスなしのテーブル名のみが含まれる必要があります。テーブル名が既にクォートされている場合、このメソッドは何もしません。
public string quoteSimpleTableName ( $name ) | ||
$name | 文字列 |
テーブル名 |
return | 文字列 |
適切にクォートされたテーブル名 |
---|
public function quoteSimpleTableName($name)
{
return strpos($name, '"') !== false ? $name : '"' . $name . '"';
}
定義元: yii\db\Schema::quoteTableName()
クエリで使用するために、テーブル名を引用符で囲みます。
テーブル名にスキーマプレフィックスが含まれている場合、プレフィックスも適切にクォートされます。テーブル名が既にクォートされているか、'('または'{{'が含まれている場合、このメソッドは何もしません。
関連項目 quoteSimpleTableName()。
public string quoteTableName ( $name ) | ||
$name | 文字列 |
テーブル名 |
return | 文字列 |
適切にクォートされたテーブル名 |
---|
public function quoteTableName($name)
{
if (strncmp($name, '(', 1) === 0 && strpos($name, ')') === strlen($name) - 1) {
return $name;
}
if (strpos($name, '{{') !== false) {
return $name;
}
if (strpos($name, '.') === false) {
return $this->quoteSimpleTableName($name);
}
$parts = $this->getTableNameParts($name);
foreach ($parts as $i => $part) {
$parts[$i] = $this->quoteSimpleTableName($part);
}
return implode('.', $parts);
}
public string quoteValue ( $str ) | ||
$str | 文字列 |
クォートされる文字列 |
return | 文字列 |
適切にクォートされた文字列 |
---|
public function quoteValue($str)
{
if (!is_string($str)) {
return $str;
}
if (mb_stripos((string)$this->db->dsn, 'odbc:') === false && ($value = $this->db->getSlavePdo(true)->quote($str)) !== false) {
return $value;
}
// the driver doesn't support quote (e.g. oci)
return "'" . addcslashes(str_replace("'", "''", $str), "\000\n\r\\\032") . "'";
}
スキーマをリフレッシュします。
このメソッドは、キャッシュされたすべてのテーブルスキーマをクリーンアップし、データベーススキーマの変更を反映するために後で再作成できるようにします。
public void refresh ( ) |
public function refresh()
{
/* @var $cache CacheInterface */
$cache = is_string($this->db->schemaCache) ? Yii::$app->get($this->db->schemaCache, false) : $this->db->schemaCache;
if ($this->db->enableSchemaCache && $cache instanceof CacheInterface) {
TagDependency::invalidate($cache, $this->getCacheTag());
}
$this->_tableNames = [];
$this->_tableMetadata = [];
}
定義元: yii\db\Schema::refreshTableSchema()
特定のテーブルスキーマをリフレッシュします。
このメソッドは、キャッシュされたテーブルスキーマをクリーンアップし、データベーススキーマの変更を反映するために後で再作成できるようにします。
public void refreshTableSchema ( $name ) | ||
$name | 文字列 |
テーブル名。 |
public function refreshTableSchema($name)
{
$rawName = $this->getRawTableName($name);
unset($this->_tableMetadata[$rawName]);
$this->_tableNames = [];
/* @var $cache CacheInterface */
$cache = is_string($this->db->schemaCache) ? Yii::$app->get($this->db->schemaCache, false) : $this->db->schemaCache;
if ($this->db->enableSchemaCache && $cache instanceof CacheInterface) {
$cache->delete($this->getCacheKey($rawName));
}
}
既存のセーブポイントを解放します。
public void releaseSavepoint ( $name ) | ||
$name | 文字列 |
セーブポイント名 |
public function releaseSavepoint($name)
{
// does nothing as Oracle does not support this
}
テーブル名とスキーマ名(存在する場合)を解決します。
protected yii\db\TableSchema resolveTableName ( $name ) | ||
$name | 文字列 |
テーブル名 |
return | yii\db\TableSchema |
解決されたテーブル、スキーマなどの名前を持つyii\db\TableSchema。 |
---|---|---|
throws | yii\base\NotSupportedException |
このメソッドがDBMSでサポートされていない場合。 |
protected function resolveTableName($name)
{
$resolvedName = new TableSchema();
$parts = explode('.', str_replace('"', '', $name));
if (isset($parts[1])) {
$resolvedName->schemaName = $parts[0];
$resolvedName->name = $parts[1];
} else {
$resolvedName->schemaName = $this->defaultSchema;
$resolvedName->name = $name;
}
$resolvedName->fullName = ($resolvedName->schemaName !== $this->defaultSchema ? $resolvedName->schemaName . '.' : '') . $resolvedName->name;
return $resolvedName;
}
テーブル名とスキーマ名(存在する場合)を解決します。
protected void resolveTableNames ( $table, $name ) | ||
$table | yii\db\TableSchema |
テーブルメタデータオブジェクト |
$name | 文字列 |
テーブル名 |
protected function resolveTableNames($table, $name)
{
$parts = explode('.', str_replace('"', '', $name));
if (isset($parts[1])) {
$table->schemaName = $parts[0];
$table->name = $parts[1];
} else {
$table->schemaName = $this->defaultSchema;
$table->name = $name;
}
$table->fullName = $table->schemaName !== $this->defaultSchema ? $table->schemaName . '.' . $table->name : $table->name;
}
定義元: yii\db\Schema::rollBackSavepoint()
以前に作成されたセーブポイントまでロールバックします。
public void rollBackSavepoint ( $name ) | ||
$name | 文字列 |
セーブポイント名 |
public function rollBackSavepoint($name)
{
$this->db->createCommand("ROLLBACK TO SAVEPOINT $name")->execute();
}
定義元: yii\db\Schema::setTableMetadata()
指定されたテーブルについて、指定されたタイプのメタデータを設定します。
protected void setTableMetadata ( $name, $type, $data ) | ||
$name | 文字列 |
テーブル名。 |
$type | 文字列 |
メタデータ型。 |
$data | mixed |
メタデータ。 |
protected function setTableMetadata($name, $type, $data)
{
$this->_tableMetadata[$this->getRawTableName($name)][$type] = $data;
}
定義元: yii\db\Schema::setTransactionIsolationLevel()
現在のトランザクションの分離レベルを設定します。
参照: https://en.wikipedia.org/wiki/Isolation_(database_systems)#Isolation_levels.
public void setTransactionIsolationLevel ( $level ) | ||
$level | 文字列 |
このトランザクションで使用するトランザクション分離レベル。 yii\db\Transaction::READ_UNCOMMITTED, yii\db\Transaction::READ_COMMITTED, yii\db\Transaction::REPEATABLE_READ, および yii\db\Transaction::SERIALIZABLE のいずれか、または |
public function setTransactionIsolationLevel($level)
{
$this->db->createCommand("SET TRANSACTION ISOLATION LEVEL $level")->execute();
}
public boolean supportsSavepoint ( ) | ||
return | boolean |
このDBMSがセーブポイントをサポートしているかどうか。 |
---|
public function supportsSavepoint()
{
return $this->db->enableSavepoint;
}
定義元: yii\db\Schema::unquoteSimpleColumnName()
単純なカラム名の引用符を外します。
シンプルなカラム名は、プレフィックスなしのカラム名のみを含む必要があります。カラム名がクォートされていない場合、またはアスタリスク文字 '*' の場合、このメソッドは何もしません。
public string unquoteSimpleColumnName ( $name ) | ||
$name | 文字列 |
カラム名。 |
return | 文字列 |
クォートされていないカラム名。 |
---|
public function unquoteSimpleColumnName($name)
{
if (is_string($this->columnQuoteCharacter)) {
$startingCharacter = $this->columnQuoteCharacter;
} else {
$startingCharacter = $this->columnQuoteCharacter[0];
}
return strpos($name, $startingCharacter) === false ? $name : substr($name, 1, -1);
}
定義元: yii\db\Schema::unquoteSimpleTableName()
単純なテーブル名の引用符を外します。
シンプルなテーブル名は、スキーマプレフィックスなしのテーブル名のみを含む必要があります。テーブル名がクォートされていない場合、このメソッドは何もしません。
public string unquoteSimpleTableName ( $name ) | ||
$name | 文字列 |
テーブル名。 |
return | 文字列 |
クォートされていないテーブル名。 |
---|
public function unquoteSimpleTableName($name)
{
if (is_string($this->tableQuoteCharacter)) {
$startingCharacter = $this->tableQuoteCharacter;
} else {
$startingCharacter = $this->tableQuoteCharacter[0];
}
return strpos($name, $startingCharacter) === false ? $name : substr($name, 1, -1);
}
サインアップ または ログイン してコメントしてください。