@@ -64,37 +64,46 @@ protected function buildOnUpdate(string $onUpdate): string
64
64
65
65
protected function getDbType (ColumnInterface $ column ): string
66
66
{
67
+ $ dbType = $ column ->getDbType ();
67
68
$ size = $ column ->getSize ();
69
+ $ scale = $ column ->getScale ();
68
70
69
71
/** @psalm-suppress DocblockTypeContradiction */
70
- return $ column ->getDbType () ?? match ($ column ->getType ()) {
71
- ColumnType::BOOLEAN => 'number(1) ' ,
72
- ColumnType::BIT => match (true ) {
73
- $ size === null => 'number(38) ' ,
74
- $ size <= 126 => 'number( ' . ceil (log10 (2 ** $ size )) . ') ' ,
75
- default => 'raw( ' . ceil ($ size / 8 ) . ') ' ,
72
+ return match ($ dbType ) {
73
+ default => $ dbType ,
74
+ null => match ($ column ->getType ()) {
75
+ ColumnType::BOOLEAN => 'number(1) ' ,
76
+ ColumnType::BIT => match (true ) {
77
+ $ size === null => 'number(38) ' ,
78
+ $ size <= 126 => 'number( ' . ceil (log10 (2 ** $ size )) . ') ' ,
79
+ default => 'raw( ' . ceil ($ size / 8 ) . ') ' ,
80
+ },
81
+ ColumnType::TINYINT => 'number( ' . ($ size ?? 3 ) . ') ' ,
82
+ ColumnType::SMALLINT => 'number( ' . ($ size ?? 5 ) . ') ' ,
83
+ ColumnType::INTEGER => 'number( ' . ($ size ?? 10 ) . ') ' ,
84
+ ColumnType::BIGINT => 'number( ' . ($ size ?? 20 ) . ') ' ,
85
+ ColumnType::FLOAT => 'binary_float ' ,
86
+ ColumnType::DOUBLE => 'binary_double ' ,
87
+ ColumnType::DECIMAL => 'number( ' . ($ size ?? 10 ) . ', ' . ($ scale ?? 0 ) . ') ' ,
88
+ ColumnType::MONEY => 'number( ' . ($ size ?? 19 ) . ', ' . ($ scale ?? 4 ) . ') ' ,
89
+ ColumnType::CHAR => 'char ' ,
90
+ ColumnType::STRING => 'varchar2( ' . ($ size ?? 255 ) . ') ' ,
91
+ ColumnType::TEXT => 'clob ' ,
92
+ ColumnType::BINARY => 'blob ' ,
93
+ ColumnType::UUID => 'raw(16) ' ,
94
+ ColumnType::DATETIME => 'timestamp ' ,
95
+ ColumnType::TIMESTAMP => 'timestamp ' ,
96
+ ColumnType::DATE => 'date ' ,
97
+ ColumnType::TIME => 'interval day(0) to second ' ,
98
+ ColumnType::ARRAY => 'clob ' ,
99
+ ColumnType::STRUCTURED => 'clob ' ,
100
+ ColumnType::JSON => 'clob ' ,
101
+ default => 'varchar2 ' ,
76
102
},
77
- ColumnType::TINYINT => 'number( ' . ($ size ?? 3 ) . ') ' ,
78
- ColumnType::SMALLINT => 'number( ' . ($ size ?? 5 ) . ') ' ,
79
- ColumnType::INTEGER => 'number( ' . ($ size ?? 10 ) . ') ' ,
80
- ColumnType::BIGINT => 'number( ' . ($ size ?? 20 ) . ') ' ,
81
- ColumnType::FLOAT => 'binary_float ' ,
82
- ColumnType::DOUBLE => 'binary_double ' ,
83
- ColumnType::DECIMAL => 'number( ' . ($ size ?? 10 ) . ', ' . ($ column ->getScale () ?? 0 ) . ') ' ,
84
- ColumnType::MONEY => 'number( ' . ($ size ?? 19 ) . ', ' . ($ column ->getScale () ?? 4 ) . ') ' ,
85
- ColumnType::CHAR => 'char ' ,
86
- ColumnType::STRING => 'varchar2( ' . ($ size ?? 255 ) . ') ' ,
87
- ColumnType::TEXT => 'clob ' ,
88
- ColumnType::BINARY => 'blob ' ,
89
- ColumnType::UUID => 'raw(16) ' ,
90
- ColumnType::DATETIME => 'timestamp ' ,
91
- ColumnType::TIMESTAMP => 'timestamp ' ,
92
- ColumnType::DATE => 'date ' ,
93
- ColumnType::TIME => 'interval day(0) to second ' ,
94
- ColumnType::ARRAY => 'clob ' ,
95
- ColumnType::STRUCTURED => 'clob ' ,
96
- ColumnType::JSON => 'clob ' ,
97
- default => 'varchar2 ' ,
103
+ 'timestamp with time zone ' => 'timestamp ' . ($ size !== null ? "( $ size) " : '' ) . ' with time zone ' ,
104
+ 'timestamp with local time zone ' => 'timestamp ' . ($ size !== null ? "( $ size) " : '' ) . ' with local time zone ' ,
105
+ 'interval day to second ' => 'interval day ' . ($ scale !== null ? "( $ scale) " : '' ) . ' to second ' . ($ size !== null ? "( $ size) " : '' ),
106
+ 'interval year to month ' => 'interval year ' . ($ scale !== null ? "( $ scale) " : '' ) . ' to month ' ,
98
107
};
99
108
}
100
109
0 commit comments