@@ -417,17 +417,19 @@ protected function isNeedUsingExpression(string $fromType, string $toType):bool
417
417
public function tmpSaveNewCol (\cebe \yii2openapi \db \ColumnSchema $ columnSchema ): \yii \db \ColumnSchema
418
418
{
419
419
$ tableName = 'tmp_table_ ' ;
420
- $ db = 'db ' ;
421
- if (ApiGenerator::isPostgres () && static ::isEnum ($ columnSchema )) {
422
- $ db = 'pg_test_db_2 ' ;
423
- }
424
420
425
- Yii::$ app ->{ $ db } ->createCommand ('DROP TABLE IF EXISTS ' .$ tableName )->execute ();
421
+ Yii::$ app ->db ->createCommand ('DROP TABLE IF EXISTS ' .$ tableName )->execute ();
426
422
427
423
if (is_string ($ columnSchema ->xDbType ) && !empty ($ columnSchema ->xDbType )) {
428
424
$ column = [$ columnSchema ->name .' ' .$ this ->newColStr ($ columnSchema )];
425
+ if (ApiGenerator::isPostgres () && static ::isEnum ($ columnSchema )) {
426
+ $ column = strtr ($ column , ['enum_ ' .$ columnSchema ->name => 'tmp_enum_ ' .$ columnSchema ->name .'_ ' ]);
427
+ }
429
428
} else {
430
429
$ column = [$ columnSchema ->name => $ this ->newColStr ($ columnSchema )];
430
+ if (ApiGenerator::isPostgres () && static ::isEnum ($ columnSchema )) {
431
+ $ column [$ columnSchema ->name ] = strtr ($ column [$ columnSchema ->name ], ['enum_ ' .$ columnSchema ->name => 'tmp_enum_ ' .$ columnSchema ->name .'_ ' ]);
432
+ }
431
433
}
432
434
433
435
// create enum if relevant
@@ -436,19 +438,25 @@ public function tmpSaveNewCol(\cebe\yii2openapi\db\ColumnSchema $columnSchema):
436
438
$ allEnumValues = array_map (function ($ aValue ) {
437
439
return "' $ aValue' " ;
438
440
}, $ allEnumValues );
439
- Yii::$ app ->{ $ db } ->createCommand (
440
- 'CREATE TYPE enum_ ' .$ columnSchema ->name .' AS ENUM( ' .implode (', ' , $ allEnumValues ).') '
441
+ Yii::$ app ->db ->createCommand (
442
+ 'CREATE TYPE tmp_enum_ ' .$ columnSchema ->name .'_ AS ENUM( ' .implode (', ' , $ allEnumValues ).') '
441
443
)->execute ();
442
444
}
443
445
444
- Yii::$ app ->{ $ db } ->createCommand ()->createTable ($ tableName , $ column )->execute ();
446
+ Yii::$ app ->db ->createCommand ()->createTable ($ tableName , $ column )->execute ();
445
447
446
- $ table = Yii::$ app ->{ $ db } ->getTableSchema ($ tableName );
448
+ $ table = Yii::$ app ->db ->getTableSchema ($ tableName );
447
449
448
- Yii::$ app ->{ $ db } ->createCommand ()->dropTable ($ tableName )->execute ();
450
+ Yii::$ app ->db ->createCommand ()->dropTable ($ tableName )->execute ();
449
451
450
452
if (ApiGenerator::isPostgres () && static ::isEnum ($ columnSchema )) {// drop enum
451
- Yii::$ app ->{$ db }->createCommand ('DROP TYPE enum_ ' .$ columnSchema ->name )->execute ();
453
+ Yii::$ app ->db ->createCommand ('DROP TYPE tmp_enum_ ' .$ columnSchema ->name .'_ ' )->execute ();
454
+ if ($ table ->columns [$ columnSchema ->name ]->dbType !== 'tmp_enum_ ' .$ columnSchema ->name .'_ ' ) {
455
+ throw new \Exception ('Unknown error related to PgSQL enum ' );
456
+ }
457
+ // reset back column enum name to original as we are comparing with current
458
+ // e.g. we get different enum type name such as `enum_status` and `tmp_enum_status_` even there is no change, so below statement fix this issue
459
+ $ table ->columns [$ columnSchema ->name ]->dbType = 'enum_ ' .$ columnSchema ->name ;
452
460
}
453
461
454
462
return $ table ->columns [$ columnSchema ->name ];
0 commit comments