From 332f2a07ee1b81e600b530a30c68d9b9c5592f05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B3th=20S=C3=A1ndor?= Date: Thu, 26 Jun 2014 15:49:47 +0200 Subject: [PATCH] OCI/Schema getlastinsertedid function fix and i add const oracle column type to schema --- framework/db/oci/Schema.php | 53 +++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/framework/db/oci/Schema.php b/framework/db/oci/Schema.php index 23381376ba..7de0709990 100644 --- a/framework/db/oci/Schema.php +++ b/framework/db/oci/Schema.php @@ -20,6 +20,19 @@ use yii\db\ColumnSchema; */ class Schema extends \yii\db\Schema { + const TYPE_PK = 'NUMBER(10) NOT NULL PRIMARY KEY'; + const TYPE_STRING = 'VARCHAR2(255)'; + const TYPE_TEXT = 'CLOB'; + const TYPE_INTEGER = 'NUMBER(10)'; + const TYPE_FLOAT = 'NUMBER'; + const TYPE_DECIMAL = 'NUMBER'; + const TYPE_DATETIME = 'TIMESTAMP'; + const TYPE_TIMESTAMP = 'TIMESTAMP'; + const TYPE_TIME = 'TIMESTAMP'; + const TYPE_DATE = 'DATE'; + const TYPE_BINARY = 'BLOB'; + const TYPE_BOOLEAN = 'NUMBER(1)'; + const TYPE_MONEY = 'NUMBER(19,4)'; /** * @inheritdoc */ @@ -151,14 +164,50 @@ EOD; $table->columns[$c->name] = $c; if ($c->isPrimaryKey) { $table->primaryKey[] = $c->name; - $table->sequenceName = ''; + $table->sequenceName = $this->getTableSequenceName($table->name); $c->autoIncrement = true; } } - return true; } + /** + * Sequence name of table + * + * @param $tablename + * @internal param \yii\db\TableSchema $table ->name the table schema + * @return string whether the sequence exists + */ + + protected function getTableSequenceName($tablename){ + + $seq_name_sql="select ud.referenced_name as sequence_name + from user_dependencies ud + join user_triggers ut on (ut.trigger_name = ud.name) + where ut.table_name='{$tablename}' + and ud.type='TRIGGER' + and ud.referenced_type='SEQUENCE'"; + return $this->db->createCommand($seq_name_sql)->queryScalar(); + } + + /* + * @Overrides method in class 'Schema' + * @see http://www.php.net/manual/en/function.PDO-lastInsertId.php -> Oracle does not support this + * + * Returns the ID of the last inserted row or sequence value. + * @param string $sequenceName name of the sequence object (required by some DBMS) + * @return string the row ID of the last row inserted, or the last value retrieved from the sequence object + * @throws InvalidCallException if the DB connection is not active + */ + public function getLastInsertID($sequenceName = '') + { + if ($this->db->isActive) { + return $this->db->createCommand("SELECT {$sequenceName}.CURRVAL FROM DUAL")->queryScalar(); + } else { + throw new InvalidCallException('DB Connection is not active.'); + } + } + protected function createColumn($column) { $c = new ColumnSchema();