From abd59d42e996589ee8361cb0e701a6fef28e9bcc Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 17 Oct 2024 09:57:45 +0530 Subject: [PATCH 01/10] Create pull request --- .../mysql/x_db_default_expression_mysql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/specs/x_db_default_expression/mysql/x_db_default_expression_mysql.php b/tests/specs/x_db_default_expression/mysql/x_db_default_expression_mysql.php index 5fd47d1b..dc4ebbb8 100644 --- a/tests/specs/x_db_default_expression/mysql/x_db_default_expression_mysql.php +++ b/tests/specs/x_db_default_expression/mysql/x_db_default_expression_mysql.php @@ -3,7 +3,7 @@ return [ 'openApiPath' => '@specs/x_db_default_expression/mysql/x_db_default_expression_mysql.yaml', 'generateUrls' => false, - 'generateModels' => false, + 'generateModels' => true, 'excludeModels' => [ 'Error', ], From 6ac19dcecb6d74b3e8197a7a8f0185d0ea4b147d Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Wed, 30 Oct 2024 17:58:01 +0530 Subject: [PATCH 02/10] Fix this issue --- src/generator/default/dbmodel.php | 8 ++++---- src/lib/ValidationRulesBuilder.php | 20 ++++++++++++++------ src/lib/items/DbModel.php | 13 +++++++++++-- tests/unit/IssueFixTest.php | 14 ++++++++++++++ 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/generator/default/dbmodel.php b/src/generator/default/dbmodel.php index 17fa4a84..a3d269b6 100644 --- a/src/generator/default/dbmodel.php +++ b/src/generator/default/dbmodel.php @@ -49,8 +49,8 @@ */ abstract class getClassName() ?> extends \yii\db\ActiveRecord { -getScenarios()): -foreach($scenarios as $scenario): ?> +getScenarios()): +foreach ($scenarios as $scenario): ?> /** * @@ -76,7 +76,7 @@ public static function tableName() { return getTableAlias()) ?>; } - + /** * Automatically generated scenarios from the model 'x-scenarios'. @@ -92,7 +92,7 @@ public function scenarios() $default = parent::scenarios()[self::SCENARIO_DEFAULT]; return [ - + self:: => $default, /** diff --git a/src/lib/ValidationRulesBuilder.php b/src/lib/ValidationRulesBuilder.php index 3f3c1398..f8e3bacf 100644 --- a/src/lib/ValidationRulesBuilder.php +++ b/src/lib/ValidationRulesBuilder.php @@ -10,8 +10,7 @@ use cebe\yii2openapi\lib\items\Attribute; use cebe\yii2openapi\lib\items\DbModel; use cebe\yii2openapi\lib\items\ValidationRule; -use yii\helpers\VarDumper; -use yii\validators\DateValidator; +use yii\db\Expression; use function count; use function implode; use function in_array; @@ -192,12 +191,11 @@ private function defaultRule(Attribute $attribute):void if ($attribute->defaultValue === null) { return; } - if ($attribute->defaultValue instanceof \yii\db\Expression) { - return; - } $params = []; - $params['value'] = $attribute->defaultValue; + $params['value'] = ($attribute->defaultValue instanceof \yii\db\Expression) ? + $this->f($attribute->defaultValue) : + $attribute->defaultValue; $key = $attribute->columnName . '_default'; $this->rules[$key] = new ValidationRule([$attribute->columnName], 'default', $params); } @@ -251,4 +249,14 @@ private function prepareTypeScope():void $this->typeScope['safe'][$attribute->columnName] = $attribute->columnName; } } + + private function f($dbExpr) // TODO rename + { + return new class($dbExpr->expression) extends Expression { + public function __toString() + { + return '-yii-db-expression-starts-("' . $this->expression . '")-yii-db-expression-ends-'; + } + }; + } } diff --git a/src/lib/items/DbModel.php b/src/lib/items/DbModel.php index 5c33c09b..2dbb3581 100644 --- a/src/lib/items/DbModel.php +++ b/src/lib/items/DbModel.php @@ -13,7 +13,6 @@ use yii\base\BaseObject; use yii\db\ColumnSchema; use yii\helpers\Inflector; -use yii\helpers\StringHelper; use yii\helpers\VarDumper; use function array_filter; use function array_map; @@ -109,7 +108,8 @@ public function getValidationRules():string $rules = Yii::createObject(ValidationRulesBuilder::class, [$this])->build(); $rules = array_map('strval', $rules); $rules = VarDumper::export($rules); - return str_replace([ + + $rules = str_replace([ PHP_EOL, "\'", "'[[", @@ -120,6 +120,15 @@ public function getValidationRules():string '[[', '],' ], $rules); + + $rules = str_replace( + ["'value' => '-yii-db-expression-starts-", "-yii-db-expression-ends-'"], + ["'value' => new \yii\db\Expression", ""], + $rules, + $count + ); + + return $rules; } /** diff --git a/tests/unit/IssueFixTest.php b/tests/unit/IssueFixTest.php index b6c7abdb..31c37c08 100644 --- a/tests/unit/IssueFixTest.php +++ b/tests/unit/IssueFixTest.php @@ -360,4 +360,18 @@ public function test158BugGiiapiGeneratedRulesEnumWithTrim() ]); $this->checkFiles($actualFiles, $expectedFiles); } + + // https://github.com/php-openapi/yii2-openapi/issues/65 + // public function test65DefaultValueByConstantAndExpressionInCrudModelsFakerEtc() + // { + // $testFile = Yii::getAlias("@specs/issue_fix/65_default_value_by_constant_and_expression_in_crud_models_faker_etc/index.php"); + // $this->runGenerator($testFile); + // $actualFiles = FileHelper::findFiles(Yii::getAlias('@app'), [ + // 'recursive' => true, + // ]); + // $expectedFiles = FileHelper::findFiles(Yii::getAlias("@specs/issue_fix/65_default_value_by_constant_and_expression_in_crud_models_faker_etc/mysql"), [ + // 'recursive' => true, + // ]); + // // $this->checkFiles($actualFiles, $expectedFiles); // TODO + // } } From f85a93bf412b4c5f5f643218105ba14562c4c6d9 Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 31 Oct 2024 18:04:46 +0530 Subject: [PATCH 03/10] Fix failing tests + refactor --- src/lib/ValidationRulesBuilder.php | 4 +- src/lib/items/DbModel.php | 1 - .../maria/simple/app/models/Fruit.php | 10 ++++ .../maria/simple/app/models/base/Fruit.php | 57 +++++++++++++++++++ .../mysql/simple/app/models/Fruit.php | 10 ++++ .../mysql/simple/app/models/base/Fruit.php | 57 +++++++++++++++++++ .../pgsql/simple/app/models/Fruit.php | 10 ++++ .../pgsql/simple/app/models/base/Fruit.php | 57 +++++++++++++++++++ 8 files changed, 203 insertions(+), 3 deletions(-) create mode 100644 tests/specs/x_db_default_expression/maria/simple/app/models/Fruit.php create mode 100644 tests/specs/x_db_default_expression/maria/simple/app/models/base/Fruit.php create mode 100644 tests/specs/x_db_default_expression/mysql/simple/app/models/Fruit.php create mode 100644 tests/specs/x_db_default_expression/mysql/simple/app/models/base/Fruit.php create mode 100644 tests/specs/x_db_default_expression/pgsql/simple/app/models/Fruit.php create mode 100644 tests/specs/x_db_default_expression/pgsql/simple/app/models/base/Fruit.php diff --git a/src/lib/ValidationRulesBuilder.php b/src/lib/ValidationRulesBuilder.php index f8e3bacf..87337a42 100644 --- a/src/lib/ValidationRulesBuilder.php +++ b/src/lib/ValidationRulesBuilder.php @@ -194,7 +194,7 @@ private function defaultRule(Attribute $attribute):void $params = []; $params['value'] = ($attribute->defaultValue instanceof \yii\db\Expression) ? - $this->f($attribute->defaultValue) : + $this->wrapDefaultExpression($attribute->defaultValue) : $attribute->defaultValue; $key = $attribute->columnName . '_default'; $this->rules[$key] = new ValidationRule([$attribute->columnName], 'default', $params); @@ -250,7 +250,7 @@ private function prepareTypeScope():void } } - private function f($dbExpr) // TODO rename + private function wrapDefaultExpression(Expression $dbExpr): Expression { return new class($dbExpr->expression) extends Expression { public function __toString() diff --git a/src/lib/items/DbModel.php b/src/lib/items/DbModel.php index 2dbb3581..b647544e 100644 --- a/src/lib/items/DbModel.php +++ b/src/lib/items/DbModel.php @@ -125,7 +125,6 @@ public function getValidationRules():string ["'value' => '-yii-db-expression-starts-", "-yii-db-expression-ends-'"], ["'value' => new \yii\db\Expression", ""], $rules, - $count ); return $rules; diff --git a/tests/specs/x_db_default_expression/maria/simple/app/models/Fruit.php b/tests/specs/x_db_default_expression/maria/simple/app/models/Fruit.php new file mode 100644 index 00000000..c74c53d9 --- /dev/null +++ b/tests/specs/x_db_default_expression/maria/simple/app/models/Fruit.php @@ -0,0 +1,10 @@ + [['ts', 'ts2', 'ts3', 'ts4', 'ts5', 'ts6', 'd', 'd2', 'd3', 'ts7'], 'trim'], + 'ts_datetime' => [['ts'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts_default' => [['ts'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts2_datetime' => [['ts2'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts2_default' => [['ts2'], 'default', 'value' => '2011-11-11 00:00:00'], + 'ts3_datetime' => [['ts3'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts3_default' => [['ts3'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts4_string' => [['ts4'], 'string'], + 'ts4_default' => [['ts4'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts5_string' => [['ts5'], 'string'], + 'ts5_default' => [['ts5'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts6_string' => [['ts6'], 'string'], + 'ts6_default' => [['ts6'], 'default', 'value' => '2000-11-11 00:00:00'], + 'd_date' => [['d'], 'date', 'format' => 'php:Y-m-d'], + 'd_default' => [['d'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd2_string' => [['d2'], 'string'], + 'd2_default' => [['d2'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd3_string' => [['d3'], 'string'], + 'd3_default' => [['d3'], 'default', 'value' => 'text default'], + 'ts7_date' => [['ts7'], 'date', 'format' => 'php:Y-m-d'], + 'ts7_default' => [['ts7'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + ]; + } +} diff --git a/tests/specs/x_db_default_expression/mysql/simple/app/models/Fruit.php b/tests/specs/x_db_default_expression/mysql/simple/app/models/Fruit.php new file mode 100644 index 00000000..c74c53d9 --- /dev/null +++ b/tests/specs/x_db_default_expression/mysql/simple/app/models/Fruit.php @@ -0,0 +1,10 @@ + [['ts', 'ts2', 'ts3', 'ts4', 'ts5', 'ts6', 'd', 'd2', 'd3', 'ts7'], 'trim'], + 'ts_datetime' => [['ts'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts_default' => [['ts'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts2_datetime' => [['ts2'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts2_default' => [['ts2'], 'default', 'value' => '2011-11-11 00:00:00'], + 'ts3_datetime' => [['ts3'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts3_default' => [['ts3'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts4_string' => [['ts4'], 'string'], + 'ts4_default' => [['ts4'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts5_string' => [['ts5'], 'string'], + 'ts5_default' => [['ts5'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts6_string' => [['ts6'], 'string'], + 'ts6_default' => [['ts6'], 'default', 'value' => '2000-11-11 00:00:00'], + 'd_date' => [['d'], 'date', 'format' => 'php:Y-m-d'], + 'd_default' => [['d'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd2_string' => [['d2'], 'string'], + 'd2_default' => [['d2'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd3_string' => [['d3'], 'string'], + 'd3_default' => [['d3'], 'default', 'value' => 'text default'], + 'ts7_date' => [['ts7'], 'date', 'format' => 'php:Y-m-d'], + 'ts7_default' => [['ts7'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + ]; + } +} diff --git a/tests/specs/x_db_default_expression/pgsql/simple/app/models/Fruit.php b/tests/specs/x_db_default_expression/pgsql/simple/app/models/Fruit.php new file mode 100644 index 00000000..c74c53d9 --- /dev/null +++ b/tests/specs/x_db_default_expression/pgsql/simple/app/models/Fruit.php @@ -0,0 +1,10 @@ + [['ts', 'ts2', 'ts3', 'ts4', 'ts5', 'ts6', 'd', 'd2', 'd3', 'ts7'], 'trim'], + 'ts_datetime' => [['ts'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts_default' => [['ts'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts2_datetime' => [['ts2'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts2_default' => [['ts2'], 'default', 'value' => '2011-11-11 00:00:00'], + 'ts3_datetime' => [['ts3'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts3_default' => [['ts3'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts4_string' => [['ts4'], 'string'], + 'ts4_default' => [['ts4'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts5_string' => [['ts5'], 'string'], + 'ts5_default' => [['ts5'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts6_string' => [['ts6'], 'string'], + 'ts6_default' => [['ts6'], 'default', 'value' => '2000-11-11 00:00:00'], + 'd_date' => [['d'], 'date', 'format' => 'php:Y-m-d'], + 'd_default' => [['d'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd2_string' => [['d2'], 'string'], + 'd2_default' => [['d2'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd3_string' => [['d3'], 'string'], + 'd3_default' => [['d3'], 'default', 'value' => 'text default'], + 'ts7_date' => [['ts7'], 'date', 'format' => 'php:Y-m-d'], + 'ts7_default' => [['ts7'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + ]; + } +} From 5b3f446ecf75372e24448ad17ab416f545e66975 Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 31 Oct 2024 18:06:35 +0530 Subject: [PATCH 04/10] Fix another failing tests --- .../edit_expression/app/models/Fruit.php | 10 ++++ .../edit_expression/app/models/base/Fruit.php | 57 +++++++++++++++++++ .../edit_expression/app/models/Fruit.php | 10 ++++ .../edit_expression/app/models/base/Fruit.php | 57 +++++++++++++++++++ .../edit_expression/app/models/Fruit.php | 10 ++++ .../edit_expression/app/models/base/Fruit.php | 57 +++++++++++++++++++ 6 files changed, 201 insertions(+) create mode 100644 tests/specs/x_db_default_expression/maria/edit_expression/app/models/Fruit.php create mode 100644 tests/specs/x_db_default_expression/maria/edit_expression/app/models/base/Fruit.php create mode 100644 tests/specs/x_db_default_expression/mysql/edit_expression/app/models/Fruit.php create mode 100644 tests/specs/x_db_default_expression/mysql/edit_expression/app/models/base/Fruit.php create mode 100644 tests/specs/x_db_default_expression/pgsql/edit_expression/app/models/Fruit.php create mode 100644 tests/specs/x_db_default_expression/pgsql/edit_expression/app/models/base/Fruit.php diff --git a/tests/specs/x_db_default_expression/maria/edit_expression/app/models/Fruit.php b/tests/specs/x_db_default_expression/maria/edit_expression/app/models/Fruit.php new file mode 100644 index 00000000..c74c53d9 --- /dev/null +++ b/tests/specs/x_db_default_expression/maria/edit_expression/app/models/Fruit.php @@ -0,0 +1,10 @@ + [['ts', 'ts2', 'ts3', 'ts4', 'ts5', 'ts6', 'd', 'd2', 'd3', 'ts7'], 'trim'], + 'ts_datetime' => [['ts'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts_default' => [['ts'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts2_datetime' => [['ts2'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts2_default' => [['ts2'], 'default', 'value' => '2011-11-11 00:00:00'], + 'ts3_datetime' => [['ts3'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts3_default' => [['ts3'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts4_string' => [['ts4'], 'string'], + 'ts4_default' => [['ts4'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts5_string' => [['ts5'], 'string'], + 'ts5_default' => [['ts5'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts6_string' => [['ts6'], 'string'], + 'ts6_default' => [['ts6'], 'default', 'value' => '2000-11-11 00:00:00'], + 'd_date' => [['d'], 'date', 'format' => 'php:Y-m-d'], + 'd_default' => [['d'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd2_string' => [['d2'], 'string'], + 'd2_default' => [['d2'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd3_string' => [['d3'], 'string'], + 'd3_default' => [['d3'], 'default', 'value' => 'text default'], + 'ts7_date' => [['ts7'], 'date', 'format' => 'php:Y-m-d'], + 'ts7_default' => [['ts7'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + ]; + } +} diff --git a/tests/specs/x_db_default_expression/mysql/edit_expression/app/models/Fruit.php b/tests/specs/x_db_default_expression/mysql/edit_expression/app/models/Fruit.php new file mode 100644 index 00000000..c74c53d9 --- /dev/null +++ b/tests/specs/x_db_default_expression/mysql/edit_expression/app/models/Fruit.php @@ -0,0 +1,10 @@ + [['ts', 'ts2', 'ts3', 'ts4', 'ts5', 'ts6', 'd', 'd2', 'd3', 'ts7'], 'trim'], + 'ts_datetime' => [['ts'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts_default' => [['ts'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts2_datetime' => [['ts2'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts2_default' => [['ts2'], 'default', 'value' => '2011-11-11 00:00:00'], + 'ts3_datetime' => [['ts3'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts3_default' => [['ts3'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts4_string' => [['ts4'], 'string'], + 'ts4_default' => [['ts4'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts5_string' => [['ts5'], 'string'], + 'ts5_default' => [['ts5'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts6_string' => [['ts6'], 'string'], + 'ts6_default' => [['ts6'], 'default', 'value' => '2000-11-11 00:00:00'], + 'd_date' => [['d'], 'date', 'format' => 'php:Y-m-d'], + 'd_default' => [['d'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd2_string' => [['d2'], 'string'], + 'd2_default' => [['d2'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd3_string' => [['d3'], 'string'], + 'd3_default' => [['d3'], 'default', 'value' => 'text default'], + 'ts7_date' => [['ts7'], 'date', 'format' => 'php:Y-m-d'], + 'ts7_default' => [['ts7'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + ]; + } +} diff --git a/tests/specs/x_db_default_expression/pgsql/edit_expression/app/models/Fruit.php b/tests/specs/x_db_default_expression/pgsql/edit_expression/app/models/Fruit.php new file mode 100644 index 00000000..c74c53d9 --- /dev/null +++ b/tests/specs/x_db_default_expression/pgsql/edit_expression/app/models/Fruit.php @@ -0,0 +1,10 @@ + [['ts', 'ts2', 'ts3', 'ts4', 'ts5', 'ts6', 'd', 'd2', 'd3', 'ts7'], 'trim'], + 'ts_datetime' => [['ts'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts_default' => [['ts'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts2_datetime' => [['ts2'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts2_default' => [['ts2'], 'default', 'value' => '2011-11-11 00:00:00'], + 'ts3_datetime' => [['ts3'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts3_default' => [['ts3'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts4_string' => [['ts4'], 'string'], + 'ts4_default' => [['ts4'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts5_string' => [['ts5'], 'string'], + 'ts5_default' => [['ts5'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts6_string' => [['ts6'], 'string'], + 'ts6_default' => [['ts6'], 'default', 'value' => '2000-11-11 00:00:00'], + 'd_date' => [['d'], 'date', 'format' => 'php:Y-m-d'], + 'd_default' => [['d'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd2_string' => [['d2'], 'string'], + 'd2_default' => [['d2'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd3_string' => [['d3'], 'string'], + 'd3_default' => [['d3'], 'default', 'value' => 'text default'], + 'ts7_date' => [['ts7'], 'date', 'format' => 'php:Y-m-d'], + 'ts7_default' => [['ts7'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + ]; + } +} From 2a994684f77d46a4bdf560cfdd354f8d277a458f Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 31 Oct 2024 18:08:30 +0530 Subject: [PATCH 05/10] Fix another failing tests 2 --- .../maria/edit/app/models/Fruit.php | 10 ++++ .../maria/edit/app/models/base/Fruit.php | 57 +++++++++++++++++++ .../mysql/edit/app/models/Fruit.php | 10 ++++ .../mysql/edit/app/models/base/Fruit.php | 57 +++++++++++++++++++ .../pgsql/edit/app/models/Fruit.php | 10 ++++ .../pgsql/edit/app/models/base/Fruit.php | 57 +++++++++++++++++++ 6 files changed, 201 insertions(+) create mode 100644 tests/specs/x_db_default_expression/maria/edit/app/models/Fruit.php create mode 100644 tests/specs/x_db_default_expression/maria/edit/app/models/base/Fruit.php create mode 100644 tests/specs/x_db_default_expression/mysql/edit/app/models/Fruit.php create mode 100644 tests/specs/x_db_default_expression/mysql/edit/app/models/base/Fruit.php create mode 100644 tests/specs/x_db_default_expression/pgsql/edit/app/models/Fruit.php create mode 100644 tests/specs/x_db_default_expression/pgsql/edit/app/models/base/Fruit.php diff --git a/tests/specs/x_db_default_expression/maria/edit/app/models/Fruit.php b/tests/specs/x_db_default_expression/maria/edit/app/models/Fruit.php new file mode 100644 index 00000000..c74c53d9 --- /dev/null +++ b/tests/specs/x_db_default_expression/maria/edit/app/models/Fruit.php @@ -0,0 +1,10 @@ + [['ts', 'ts2', 'ts3', 'ts4', 'ts5', 'ts6', 'd', 'd2', 'd3', 'ts7'], 'trim'], + 'ts_datetime' => [['ts'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts_default' => [['ts'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts2_datetime' => [['ts2'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts2_default' => [['ts2'], 'default', 'value' => '2011-11-11 00:00:00'], + 'ts3_datetime' => [['ts3'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts3_default' => [['ts3'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts4_string' => [['ts4'], 'string'], + 'ts4_default' => [['ts4'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts5_string' => [['ts5'], 'string'], + 'ts5_default' => [['ts5'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts6_string' => [['ts6'], 'string'], + 'ts6_default' => [['ts6'], 'default', 'value' => '2000-11-11 00:00:00'], + 'd_date' => [['d'], 'date', 'format' => 'php:Y-m-d'], + 'd_default' => [['d'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd2_string' => [['d2'], 'string'], + 'd2_default' => [['d2'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd3_string' => [['d3'], 'string'], + 'd3_default' => [['d3'], 'default', 'value' => 'text default'], + 'ts7_date' => [['ts7'], 'date', 'format' => 'php:Y-m-d'], + 'ts7_default' => [['ts7'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + ]; + } +} diff --git a/tests/specs/x_db_default_expression/mysql/edit/app/models/Fruit.php b/tests/specs/x_db_default_expression/mysql/edit/app/models/Fruit.php new file mode 100644 index 00000000..c74c53d9 --- /dev/null +++ b/tests/specs/x_db_default_expression/mysql/edit/app/models/Fruit.php @@ -0,0 +1,10 @@ + [['ts', 'ts2', 'ts3', 'ts4', 'ts5', 'ts6', 'd', 'd2', 'd3', 'ts7'], 'trim'], + 'ts_datetime' => [['ts'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts_default' => [['ts'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts2_datetime' => [['ts2'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts2_default' => [['ts2'], 'default', 'value' => '2011-11-11 00:00:00'], + 'ts3_datetime' => [['ts3'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts3_default' => [['ts3'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts4_string' => [['ts4'], 'string'], + 'ts4_default' => [['ts4'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts5_string' => [['ts5'], 'string'], + 'ts5_default' => [['ts5'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts6_string' => [['ts6'], 'string'], + 'ts6_default' => [['ts6'], 'default', 'value' => '2000-11-11 00:00:00'], + 'd_date' => [['d'], 'date', 'format' => 'php:Y-m-d'], + 'd_default' => [['d'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd2_string' => [['d2'], 'string'], + 'd2_default' => [['d2'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd3_string' => [['d3'], 'string'], + 'd3_default' => [['d3'], 'default', 'value' => 'text default'], + 'ts7_date' => [['ts7'], 'date', 'format' => 'php:Y-m-d'], + 'ts7_default' => [['ts7'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + ]; + } +} diff --git a/tests/specs/x_db_default_expression/pgsql/edit/app/models/Fruit.php b/tests/specs/x_db_default_expression/pgsql/edit/app/models/Fruit.php new file mode 100644 index 00000000..c74c53d9 --- /dev/null +++ b/tests/specs/x_db_default_expression/pgsql/edit/app/models/Fruit.php @@ -0,0 +1,10 @@ + [['ts', 'ts2', 'ts3', 'ts4', 'ts5', 'ts6', 'd', 'd2', 'd3', 'ts7'], 'trim'], + 'ts_datetime' => [['ts'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts_default' => [['ts'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts2_datetime' => [['ts2'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts2_default' => [['ts2'], 'default', 'value' => '2011-11-11 00:00:00'], + 'ts3_datetime' => [['ts3'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'ts3_default' => [['ts3'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts4_string' => [['ts4'], 'string'], + 'ts4_default' => [['ts4'], 'default', 'value' => '2022-11-11 00:00:00'], + 'ts5_string' => [['ts5'], 'string'], + 'ts5_default' => [['ts5'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], + 'ts6_string' => [['ts6'], 'string'], + 'ts6_default' => [['ts6'], 'default', 'value' => '2000-11-11 00:00:00'], + 'd_date' => [['d'], 'date', 'format' => 'php:Y-m-d'], + 'd_default' => [['d'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd2_string' => [['d2'], 'string'], + 'd2_default' => [['d2'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + 'd3_string' => [['d3'], 'string'], + 'd3_default' => [['d3'], 'default', 'value' => 'text default'], + 'ts7_date' => [['ts7'], 'date', 'format' => 'php:Y-m-d'], + 'ts7_default' => [['ts7'], 'default', 'value' => new \yii\db\Expression("(CURRENT_DATE + INTERVAL 1 YEAR)")], + ]; + } +} From ae1f6663a7980d500c7fe68c8de09a98eabbab35 Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 31 Oct 2024 18:09:15 +0530 Subject: [PATCH 06/10] Fix another failing tests 3 --- tests/specs/blog/models/base/User.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/specs/blog/models/base/User.php b/tests/specs/blog/models/base/User.php index c7023d15..a2cff815 100644 --- a/tests/specs/blog/models/base/User.php +++ b/tests/specs/blog/models/base/User.php @@ -41,6 +41,7 @@ public function rules() 'flags_integer' => [['flags'], 'integer'], 'flags_default' => [['flags'], 'default', 'value' => 0], 'created_at_datetime' => [['created_at'], 'datetime', 'format' => 'php:Y-m-d H:i:s'], + 'created_at_default' => [['created_at'], 'default', 'value' => new \yii\db\Expression("(CURRENT_TIMESTAMP)")], ]; } } From f8337b6226522d007d765a6b2a03961802083d5b Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 31 Oct 2024 18:12:49 +0530 Subject: [PATCH 07/10] Cleanup --- tests/unit/IssueFixTest.php | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/tests/unit/IssueFixTest.php b/tests/unit/IssueFixTest.php index 31c37c08..b6c7abdb 100644 --- a/tests/unit/IssueFixTest.php +++ b/tests/unit/IssueFixTest.php @@ -360,18 +360,4 @@ public function test158BugGiiapiGeneratedRulesEnumWithTrim() ]); $this->checkFiles($actualFiles, $expectedFiles); } - - // https://github.com/php-openapi/yii2-openapi/issues/65 - // public function test65DefaultValueByConstantAndExpressionInCrudModelsFakerEtc() - // { - // $testFile = Yii::getAlias("@specs/issue_fix/65_default_value_by_constant_and_expression_in_crud_models_faker_etc/index.php"); - // $this->runGenerator($testFile); - // $actualFiles = FileHelper::findFiles(Yii::getAlias('@app'), [ - // 'recursive' => true, - // ]); - // $expectedFiles = FileHelper::findFiles(Yii::getAlias("@specs/issue_fix/65_default_value_by_constant_and_expression_in_crud_models_faker_etc/mysql"), [ - // 'recursive' => true, - // ]); - // // $this->checkFiles($actualFiles, $expectedFiles); // TODO - // } } From f698ba3c8b72082c956f6d0d8b5728a3778850cb Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 31 Oct 2024 18:30:42 +0530 Subject: [PATCH 08/10] Create PR --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1cd2090b..3bb79307 100644 --- a/README.md +++ b/README.md @@ -568,3 +568,4 @@ Professional support, consulting as well as software development services are av https://www.cebe.cc/en/contact Development of this library is sponsored by [cebe.:cloud: "Your Professional Deployment Platform"](https://cebe.cloud). + From c202b437c55fba608f8a8eceb27ac0635217d231 Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 31 Oct 2024 18:31:33 +0530 Subject: [PATCH 09/10] Undo create PR --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 3bb79307..1cd2090b 100644 --- a/README.md +++ b/README.md @@ -568,4 +568,3 @@ Professional support, consulting as well as software development services are av https://www.cebe.cc/en/contact Development of this library is sponsored by [cebe.:cloud: "Your Professional Deployment Platform"](https://cebe.cloud). - From 8e14987cb12d0ab647bf3fa5d4ca430bd0d3bc72 Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 31 Oct 2024 18:32:00 +0530 Subject: [PATCH 10/10] Add docs --- src/lib/items/DbModel.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/items/DbModel.php b/src/lib/items/DbModel.php index b647544e..1586637f 100644 --- a/src/lib/items/DbModel.php +++ b/src/lib/items/DbModel.php @@ -121,6 +121,7 @@ public function getValidationRules():string '],' ], $rules); + // https://github.com/php-openapi/yii2-openapi/issues/65 $rules = str_replace( ["'value' => '-yii-db-expression-starts-", "-yii-db-expression-ends-'"], ["'value' => new \yii\db\Expression", ""],