Commit f5dbd9a0 by Qiang Xue

Fixes #3564: Fixed the bug that primary key columns should not take default values from schema

parent 6e7713ec
...@@ -30,6 +30,7 @@ Yii Framework 2 Change Log ...@@ -30,6 +30,7 @@ Yii Framework 2 Change Log
- Bug #3458: Fixed the bug that the image rendered by `CaptchaAction` was using a wrong content type (MDMunir, qiangxue) - Bug #3458: Fixed the bug that the image rendered by `CaptchaAction` was using a wrong content type (MDMunir, qiangxue)
- Bug #3522: Fixed BaseFileHelper::normalizePath to allow a (.) for the current path. (skotos) - Bug #3522: Fixed BaseFileHelper::normalizePath to allow a (.) for the current path. (skotos)
- Bug #3548: Fixed the bug that X-Rate-Limit-Remaining header is always zero when using RateLimiter (qiangxue) - Bug #3548: Fixed the bug that X-Rate-Limit-Remaining header is always zero when using RateLimiter (qiangxue)
- Bug #3564: Fixed the bug that primary key columns should not take default values from schema (qiangxue)
- Bug #3567: Fixed the bug that smallint was treated as string for PostgreSQL (qiangxue) - Bug #3567: Fixed the bug that smallint was treated as string for PostgreSQL (qiangxue)
- Bug: Fixed inconsistent return of `\yii\console\Application::runAction()` (samdark) - Bug: Fixed inconsistent return of `\yii\console\Application::runAction()` (samdark)
- Enh #2264: `CookieCollection::has()` will return false for expired or removed cookies (qiangxue) - Enh #2264: `CookieCollection::has()` will return false for expired or removed cookies (qiangxue)
......
...@@ -227,6 +227,10 @@ class Schema extends \yii\db\Schema ...@@ -227,6 +227,10 @@ class Schema extends \yii\db\Schema
$column->phpType = $this->getColumnPhpType($column); $column->phpType = $this->getColumnPhpType($column);
if ($column->isPrimaryKey) {
return $column;
}
if ($column->type === 'timestamp' && $info['Default'] === 'CURRENT_TIMESTAMP' || if ($column->type === 'timestamp' && $info['Default'] === 'CURRENT_TIMESTAMP' ||
$column->type === 'datetime' && $info['Default'] === 'SYS_DATETIME' || $column->type === 'datetime' && $info['Default'] === 'SYS_DATETIME' ||
$column->type === 'date' && $info['Default'] === 'SYS_DATE' || $column->type === 'date' && $info['Default'] === 'SYS_DATE' ||
......
...@@ -221,7 +221,7 @@ class Schema extends \yii\db\Schema ...@@ -221,7 +221,7 @@ class Schema extends \yii\db\Schema
if ($info['column_default'] == '(NULL)') { if ($info['column_default'] == '(NULL)') {
$info['column_default'] = null; $info['column_default'] = null;
} }
if ($column->type !== 'timestamp' || $info['column_default'] !== 'CURRENT_TIMESTAMP') { if (!$column->isPrimaryKey && ($column->type !== 'timestamp' || $info['column_default'] !== 'CURRENT_TIMESTAMP')) {
$column->defaultValue = $column->typecast($info['column_default']); $column->defaultValue = $column->typecast($info['column_default']);
} }
......
...@@ -168,7 +168,7 @@ class Schema extends \yii\db\Schema ...@@ -168,7 +168,7 @@ class Schema extends \yii\db\Schema
$column->phpType = $this->getColumnPhpType($column); $column->phpType = $this->getColumnPhpType($column);
if ($column->type !== 'timestamp' || $info['Default'] !== 'CURRENT_TIMESTAMP') { if (!$column->isPrimaryKey && ($column->type !== 'timestamp' || $info['Default'] !== 'CURRENT_TIMESTAMP')) {
$column->defaultValue = $column->typecast($info['Default']); $column->defaultValue = $column->typecast($info['Default']);
} }
......
...@@ -170,11 +170,13 @@ EOD; ...@@ -170,11 +170,13 @@ EOD;
$this->extractColumnType($c, $column['DATA_TYPE']); $this->extractColumnType($c, $column['DATA_TYPE']);
$this->extractColumnSize($c, $column['DATA_TYPE']); $this->extractColumnSize($c, $column['DATA_TYPE']);
if (!$column->isPrimaryKey) {
if (stripos($column['DATA_DEFAULT'], 'timestamp') !== false) { if (stripos($column['DATA_DEFAULT'], 'timestamp') !== false) {
$c->defaultValue = null; $c->defaultValue = null;
} else { } else {
$c->defaultValue = $c->typecast($column['DATA_DEFAULT']); $c->defaultValue = $c->typecast($column['DATA_DEFAULT']);
} }
}
return $c; return $c;
} }
......
...@@ -367,14 +367,12 @@ SQL; ...@@ -367,14 +367,12 @@ SQL;
foreach ($columns as $column) { foreach ($columns as $column) {
$column = $this->loadColumnSchema($column); $column = $this->loadColumnSchema($column);
$table->columns[$column->name] = $column; $table->columns[$column->name] = $column;
if ($column->isPrimaryKey === true) { if ($column->isPrimaryKey) {
$table->primaryKey[] = $column->name; $table->primaryKey[] = $column->name;
if ($table->sequenceName === null && preg_match("/nextval\\('\"?\\w+\"?\.?\"?\\w+\"?'(::regclass)?\\)/", $column->defaultValue) === 1) { if ($table->sequenceName === null && preg_match("/nextval\\('\"?\\w+\"?\.?\"?\\w+\"?'(::regclass)?\\)/", $column->defaultValue) === 1) {
$table->sequenceName = preg_replace(['/nextval/', '/::/', '/regclass/', '/\'\)/', '/\(\'/'], '', $column->defaultValue); $table->sequenceName = preg_replace(['/nextval/', '/::/', '/regclass/', '/\'\)/', '/\(\'/'], '', $column->defaultValue);
} }
} } elseif ($column->defaultValue) {
if ($column->defaultValue) {
if (preg_match("/^'(.*?)'::/", $column->defaultValue, $matches) || preg_match("/^(.*?)::/", $column->defaultValue, $matches)) { if (preg_match("/^'(.*?)'::/", $column->defaultValue, $matches) || preg_match("/^(.*?)::/", $column->defaultValue, $matches)) {
$column->defaultValue = $matches[1]; $column->defaultValue = $matches[1];
} }
......
...@@ -238,12 +238,14 @@ class Schema extends \yii\db\Schema ...@@ -238,12 +238,14 @@ class Schema extends \yii\db\Schema
} }
$column->phpType = $this->getColumnPhpType($column); $column->phpType = $this->getColumnPhpType($column);
if (!$column->isPrimaryKey) {
$value = trim($info['dflt_value'], "'\""); $value = trim($info['dflt_value'], "'\"");
if ($column->type === 'string') { if ($column->type === 'string') {
$column->defaultValue = $value; $column->defaultValue = $value;
} else { } else {
$column->defaultValue = $column->typecast(strcasecmp($value, 'null') ? $value : null); $column->defaultValue = $column->typecast(strcasecmp($value, 'null') ? $value : null);
} }
}
return $column; return $column;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment