mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-17 14:57:23 +08:00
Merge branch 'master' into 7374-inserting-ar-without-values
This commit is contained in:
@@ -678,6 +678,14 @@ class ActiveRecordTest extends DatabaseTestCase
|
||||
$this->assertEquals(2, count($orders[0]->orderItems));
|
||||
$this->assertEquals(3, count($orders[1]->orderItems));
|
||||
$this->assertEquals(1, count($orders[2]->orderItems));
|
||||
|
||||
// https://github.com/yiisoft/yii2/issues/8149
|
||||
$model = new Customer();
|
||||
$model->name = 'test';
|
||||
$model->email = 'test';
|
||||
$model->save(false);
|
||||
$model->updateCounters(['status' => 1]);
|
||||
$this->assertEquals(1, $model->status);
|
||||
}
|
||||
|
||||
public function testPopulateRecordCallWhenQueryingOnParentClass()
|
||||
|
||||
@@ -332,6 +332,16 @@ SQL;
|
||||
$command->execute();
|
||||
}
|
||||
|
||||
public function testLastInsertId()
|
||||
{
|
||||
$db = $this->getConnection();
|
||||
|
||||
$sql = 'INSERT INTO {{profile}}([[description]]) VALUES (\'non duplicate\')';
|
||||
$command = $db->createCommand($sql);
|
||||
$command->execute();
|
||||
$this->assertEquals(3, $db->getSchema()->getLastInsertID());
|
||||
}
|
||||
|
||||
public function testQueryCache()
|
||||
{
|
||||
$db = $this->getConnection();
|
||||
|
||||
@@ -11,6 +11,7 @@ use yii\db\sqlite\QueryBuilder as SqliteQueryBuilder;
|
||||
use yii\db\mssql\QueryBuilder as MssqlQueryBuilder;
|
||||
use yii\db\pgsql\QueryBuilder as PgsqlQueryBuilder;
|
||||
use yii\db\cubrid\QueryBuilder as CubridQueryBuilder;
|
||||
use yii\db\oci\QueryBuilder as OracleQueryBuilder;
|
||||
|
||||
/**
|
||||
* @group db
|
||||
@@ -35,6 +36,8 @@ class QueryBuilderTest extends DatabaseTestCase
|
||||
return new PgsqlQueryBuilder($this->getConnection(true, false));
|
||||
case 'cubrid':
|
||||
return new CubridQueryBuilder($this->getConnection(true, false));
|
||||
case 'oci':
|
||||
return new OracleQueryBuilder($this->getConnection(true, false));
|
||||
}
|
||||
throw new \Exception('Test is not implemented for ' . $this->driverName);
|
||||
}
|
||||
@@ -144,7 +147,7 @@ class QueryBuilderTest extends DatabaseTestCase
|
||||
foreach ($this->columnTypes() as $item) {
|
||||
list ($column, $expected) = $item;
|
||||
if (strncmp($column, 'pk', 2) !== 0) {
|
||||
$columns['col' . ++$i] = str_replace('CHECK (value', 'CHECK (col' . $i, $column);
|
||||
$columns['col' . ++$i] = str_replace('CHECK (value', 'CHECK ([[col' . $i . ']]', $column);
|
||||
}
|
||||
}
|
||||
$this->getConnection(false)->createCommand($qb->createTable('column_type_table', $columns))->execute();
|
||||
|
||||
@@ -216,7 +216,7 @@ class QueryTest extends DatabaseTestCase
|
||||
$count = (new Query)->from('customer')->where(['status' => 2])->count('*', $db);
|
||||
$this->assertEquals(1, $count);
|
||||
|
||||
$count = (new Query)->select('status, COUNT(id)')->from('customer')->groupBy('status')->count('*', $db);
|
||||
$count = (new Query)->select('[[status]], COUNT([[id]])')->from('customer')->groupBy('status')->count('*', $db);
|
||||
$this->assertEquals(2, $count);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,4 +19,14 @@ class OracleCommandTest extends CommandTest
|
||||
$command = $db->createCommand($sql);
|
||||
$this->assertEquals('SELECT "id", "t"."name" FROM "customer" t', $command->sql);
|
||||
}
|
||||
|
||||
public function testLastInsertId()
|
||||
{
|
||||
$db = $this->getConnection();
|
||||
|
||||
$sql = 'INSERT INTO {{profile}}([[description]]) VALUES (\'non duplicate\')';
|
||||
$command = $db->createCommand($sql);
|
||||
$command->execute();
|
||||
$this->assertEquals(3, $db->getSchema()->getLastInsertID('profile_SEQ'));
|
||||
}
|
||||
}
|
||||
|
||||
87
tests/framework/db/oci/OracleQueryBuilderTest.php
Normal file
87
tests/framework/db/oci/OracleQueryBuilderTest.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
namespace yiiunit\framework\db\oci;
|
||||
|
||||
use yii\db\oci\Schema;
|
||||
use yiiunit\framework\db\QueryBuilderTest;
|
||||
|
||||
/**
|
||||
* @group db
|
||||
* @group oci
|
||||
*/
|
||||
class OracleQueryBuilderTest extends QueryBuilderTest
|
||||
{
|
||||
public $driverName = 'oci';
|
||||
|
||||
/**
|
||||
* this is not used as a dataprovider for testGetColumnType to speed up the test
|
||||
* when used as dataprovider every single line will cause a reconnect with the database which is not needed here
|
||||
*/
|
||||
public function columnTypes()
|
||||
{
|
||||
return [
|
||||
[Schema::TYPE_PK, 'NUMBER(10) NOT NULL PRIMARY KEY'],
|
||||
[Schema::TYPE_PK . '(8)', 'NUMBER(8) NOT NULL PRIMARY KEY'],
|
||||
[Schema::TYPE_PK . ' CHECK (value > 5)', 'NUMBER(10) NOT NULL PRIMARY KEY CHECK (value > 5)'],
|
||||
[Schema::TYPE_PK . '(8) CHECK (value > 5)', 'NUMBER(8) NOT NULL PRIMARY KEY CHECK (value > 5)'],
|
||||
[Schema::TYPE_STRING, 'VARCHAR2(255)'],
|
||||
[Schema::TYPE_STRING . '(32)', 'VARCHAR2(32)'],
|
||||
[Schema::TYPE_STRING . ' CHECK (value LIKE \'test%\')', 'VARCHAR2(255) CHECK (value LIKE \'test%\')'],
|
||||
[Schema::TYPE_STRING . '(32) CHECK (value LIKE \'test%\')', 'VARCHAR2(32) CHECK (value LIKE \'test%\')'],
|
||||
[Schema::TYPE_STRING . ' NOT NULL', 'VARCHAR2(255) NOT NULL'],
|
||||
[Schema::TYPE_TEXT, 'CLOB'],
|
||||
[Schema::TYPE_TEXT . '(255)', 'CLOB'],
|
||||
[Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')', 'CLOB CHECK (value LIKE \'test%\')'],
|
||||
[Schema::TYPE_TEXT . '(255) CHECK (value LIKE \'test%\')', 'CLOB CHECK (value LIKE \'test%\')'],
|
||||
[Schema::TYPE_TEXT . ' NOT NULL', 'CLOB NOT NULL'],
|
||||
[Schema::TYPE_TEXT . '(255) NOT NULL', 'CLOB NOT NULL'],
|
||||
[Schema::TYPE_SMALLINT, 'NUMBER(5)'],
|
||||
[Schema::TYPE_SMALLINT . '(8)', 'NUMBER(8)'],
|
||||
[Schema::TYPE_INTEGER, 'NUMBER(10)'],
|
||||
[Schema::TYPE_INTEGER . '(8)', 'NUMBER(8)'],
|
||||
[Schema::TYPE_INTEGER . ' CHECK (value > 5)', 'NUMBER(10) CHECK (value > 5)'],
|
||||
[Schema::TYPE_INTEGER . '(8) CHECK (value > 5)', 'NUMBER(8) CHECK (value > 5)'],
|
||||
[Schema::TYPE_INTEGER . ' NOT NULL', 'NUMBER(10) NOT NULL'],
|
||||
[Schema::TYPE_BIGINT, 'NUMBER(20)'],
|
||||
[Schema::TYPE_BIGINT . '(8)', 'NUMBER(8)'],
|
||||
[Schema::TYPE_BIGINT . ' CHECK (value > 5)', 'NUMBER(20) CHECK (value > 5)'],
|
||||
[Schema::TYPE_BIGINT . '(8) CHECK (value > 5)', 'NUMBER(8) CHECK (value > 5)'],
|
||||
[Schema::TYPE_BIGINT . ' NOT NULL', 'NUMBER(20) NOT NULL'],
|
||||
[Schema::TYPE_FLOAT, 'NUMBER'],
|
||||
[Schema::TYPE_FLOAT . '(16,5)', 'NUMBER'],
|
||||
[Schema::TYPE_FLOAT . ' CHECK (value > 5.6)', 'NUMBER CHECK (value > 5.6)'],
|
||||
[Schema::TYPE_FLOAT . '(16,5) CHECK (value > 5.6)', 'NUMBER CHECK (value > 5.6)'],
|
||||
[Schema::TYPE_FLOAT . ' NOT NULL', 'NUMBER NOT NULL'],
|
||||
[Schema::TYPE_DOUBLE, 'NUMBER'],
|
||||
[Schema::TYPE_DOUBLE . '(16,5)', 'NUMBER'],
|
||||
[Schema::TYPE_DOUBLE . ' CHECK (value > 5.6)', 'NUMBER CHECK (value > 5.6)'],
|
||||
[Schema::TYPE_DOUBLE . '(16,5) CHECK (value > 5.6)', 'NUMBER CHECK (value > 5.6)'],
|
||||
[Schema::TYPE_DOUBLE . ' NOT NULL', 'NUMBER NOT NULL'],
|
||||
[Schema::TYPE_DECIMAL, 'NUMBER'],
|
||||
[Schema::TYPE_DECIMAL . '(12,4)', 'NUMBER'],
|
||||
[Schema::TYPE_DECIMAL . ' CHECK (value > 5.6)', 'NUMBER CHECK (value > 5.6)'],
|
||||
[Schema::TYPE_DECIMAL . '(12,4) CHECK (value > 5.6)', 'NUMBER CHECK (value > 5.6)'],
|
||||
[Schema::TYPE_DECIMAL . ' NOT NULL', 'NUMBER NOT NULL'],
|
||||
[Schema::TYPE_DATETIME, 'TIMESTAMP'],
|
||||
//[Schema::TYPE_DATETIME . " CHECK (value BETWEEN '2011-01-01' AND '2013-01-01')", "TIMESTAMP CHECK (value BETWEEN '2011-01-01' AND '2013-01-01')"],
|
||||
[Schema::TYPE_DATETIME . ' NOT NULL', 'TIMESTAMP NOT NULL'],
|
||||
[Schema::TYPE_TIMESTAMP, 'TIMESTAMP'],
|
||||
//[Schema::TYPE_TIMESTAMP . " CHECK (value BETWEEN '2011-01-01' AND '2013-01-01')", "TIMESTAMP CHECK (value BETWEEN '2011-01-01' AND '2013-01-01')"],
|
||||
[Schema::TYPE_TIMESTAMP . ' NOT NULL', 'TIMESTAMP NOT NULL'],
|
||||
[Schema::TYPE_TIME, 'TIMESTAMP'],
|
||||
//[Schema::TYPE_TIME . " CHECK (value BETWEEN '12:00:00' AND '13:01:01')", "TIMESTAMP CHECK (value BETWEEN '12:00:00' AND '13:01:01')"],
|
||||
[Schema::TYPE_TIME . ' NOT NULL', 'TIMESTAMP NOT NULL'],
|
||||
[Schema::TYPE_DATE, 'DATE'],
|
||||
//[Schema::TYPE_DATE . " CHECK (value BETWEEN '2011-01-01' AND '2013-01-01')", "DATE CHECK (value BETWEEN '2011-01-01' AND '2013-01-01')"],
|
||||
[Schema::TYPE_DATE . ' NOT NULL', 'DATE NOT NULL'],
|
||||
[Schema::TYPE_BINARY, 'BLOB'],
|
||||
[Schema::TYPE_BOOLEAN, 'NUMBER(1)'],
|
||||
[Schema::TYPE_BOOLEAN . ' DEFAULT 1 NOT NULL', 'NUMBER(1) DEFAULT 1 NOT NULL'],
|
||||
[Schema::TYPE_MONEY, 'NUMBER(19,4)'],
|
||||
[Schema::TYPE_MONEY . '(16,2)', 'NUMBER(16,2)'],
|
||||
[Schema::TYPE_MONEY . ' CHECK (value > 0.0)', 'NUMBER(19,4) CHECK (value > 0.0)'],
|
||||
[Schema::TYPE_MONEY . '(16,2) CHECK (value > 0.0)', 'NUMBER(16,2) CHECK (value > 0.0)'],
|
||||
[Schema::TYPE_MONEY . ' NOT NULL', 'NUMBER(19,4) NOT NULL'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -54,4 +54,19 @@ class PostgreSQLCommandTest extends CommandTest
|
||||
$command = $db->createCommand('SELECT COUNT(*) FROM "bool_values" WHERE bool_col = FALSE;');
|
||||
$this->assertEquals(1, $command->queryScalar());
|
||||
}
|
||||
|
||||
public function testLastInsertId()
|
||||
{
|
||||
$db = $this->getConnection();
|
||||
|
||||
$sql = 'INSERT INTO {{profile}}([[description]]) VALUES (\'non duplicate\')';
|
||||
$command = $db->createCommand($sql);
|
||||
$command->execute();
|
||||
$this->assertEquals(3, $db->getSchema()->getLastInsertID('public.profile_id_seq'));
|
||||
|
||||
$sql = 'INSERT INTO {{schema1.profile}}([[description]]) VALUES (\'non duplicate\')';
|
||||
$command = $db->createCommand($sql);
|
||||
$command->execute();
|
||||
$this->assertEquals(3, $db->getSchema()->getLastInsertID('schema1.profile_id_seq'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user