Fix #18000: PK value of Oracle ActiveRecord is missing after save

This commit is contained in:
Kwok
2020-05-02 07:17:27 +08:00
committed by GitHub
parent c32811887a
commit 89ded8c82a
5 changed files with 46 additions and 1 deletions

View File

@ -13,6 +13,7 @@ Yii Framework 2 Change Log
- Bug #17960: Fix unsigned primary key type mapping for SQLite (bizley)
- Enh #17758: `Query::withQuery()` can be used for CTE (sartor)
- Bug #17974: Fix ActiveRelationTrait compatibility with PHP 7.4 (Ximich)
- Bug #18000: PK value of Oracle ActiveRecord is missing after save (mankwok)
- Enh #18006: Allow SameSite cookie pre PHP 7.3 (scottix)

View File

@ -614,7 +614,7 @@ SQL;
$phName = QueryBuilder::PARAM_PREFIX . (count($params) + count($returnParams));
$returnParams[$phName] = [
'column' => $name,
'value' => null,
'value' => '',
];
if (!isset($columnSchemas[$name]) || $columnSchemas[$name]->phpType !== 'integer') {
$returnParams[$phName]['dataType'] = \PDO::PARAM_STR;

View File

@ -0,0 +1,24 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yiiunit\data\ar;
/**
* DefaultMultiplePk.
*
* @author mankwok <astleykwok@gmail.com>
* @property int $id
* @property string $second_key_column
* @property string $type
*/
class DefaultMultiplePk extends ActiveRecord
{
public static function tableName()
{
return 'default_multiple_pk';
}
}

View File

@ -18,6 +18,7 @@ BEGIN EXECUTE IMMEDIATE 'DROP TABLE "constraints"'; EXCEPTION WHEN OTHERS THEN I
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "bool_values"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;--
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "animal"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;--
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "default_pk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;--
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "default_multiple_pk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;--
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "document"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;--
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "dossier"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;--
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "employee"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;--
@ -194,6 +195,13 @@ CREATE TABLE "default_pk" (
CONSTRAINT "default_pk_PK" PRIMARY KEY ("id") ENABLE
);
CREATE TABLE "default_multiple_pk" (
"id" integer not null,
"second_key_column" char(10) not null,
"type" varchar2(255) not null,
CONSTRAINT "default_multiple_pk_PK" PRIMARY KEY ("id", "second_key_column") ENABLE
);
CREATE TABLE "document" (
"id" integer,
"title" varchar2(255) not null,

View File

@ -8,6 +8,7 @@
namespace yiiunit\framework\db\oci;
use yiiunit\data\ar\DefaultPk;
use yiiunit\data\ar\DefaultMultiplePk;
use yiiunit\data\ar\Type;
/**
@ -121,4 +122,15 @@ class ActiveRecordTest extends \yiiunit\framework\db\ActiveRecordTest
$record->save(false);
$this->assertEquals(5, $record->primaryKey);
}
public function testMultiplePrimaryKeyAfterSave()
{
$record = new DefaultMultiplePk();
$record->id = 5;
$record->second_key_column = 'secondKey';
$record->type = 'type';
$record->save(false);
$this->assertEquals(5, $record->id);
$this->assertEquals('secondKey', $record->second_key_column);
}
}