4
4
5
5
namespace Yiisoft \Db \Oracle \Tests \Provider ;
6
6
7
+ use DateTime ;
8
+ use DateTimeImmutable ;
9
+ use Yiisoft \Db \Constant \ColumnType ;
7
10
use Yiisoft \Db \Expression \Expression ;
8
11
use Yiisoft \Db \Oracle \Column \BinaryColumn ;
9
12
use Yiisoft \Db \Oracle \Column \BooleanColumn ;
13
+ use Yiisoft \Db \Oracle \Column \DateTimeColumn ;
10
14
use Yiisoft \Db \Oracle \Column \JsonColumn ;
15
+ use Yiisoft \Db \Tests \Support \Stringable ;
11
16
12
17
class ColumnProvider extends \Yiisoft \Db \Tests \Provider \ColumnProvider
13
18
{
@@ -16,6 +21,7 @@ public static function predefinedTypes(): array
16
21
$ values = parent ::predefinedTypes ();
17
22
$ values ['binary ' ][0 ] = BinaryColumn::class;
18
23
$ values ['boolean ' ][0 ] = BooleanColumn::class;
24
+ $ values ['datetime ' ][0 ] = DateTimeColumn::class;
19
25
$ values ['json ' ][0 ] = JsonColumn::class;
20
26
21
27
return $ values ;
@@ -41,8 +47,101 @@ public static function dbTypecastColumns(): array
41
47
[$ expression = new Expression ('expression ' ), $ expression ],
42
48
],
43
49
];
50
+ $ values ['timestamp ' ][0 ] = new DateTimeColumn (ColumnType::TIMESTAMP , size: 0 );
51
+ $ values ['timestamp6 ' ][0 ] = new DateTimeColumn (ColumnType::TIMESTAMP , size: 6 );
52
+ $ values ['datetime ' ][0 ] = new DateTimeColumn (size: 0 );
53
+ $ values ['datetime6 ' ][0 ] = new DateTimeColumn (size: 6 );
54
+ $ values ['datetimetz ' ][0 ] = new DateTimeColumn (ColumnType::DATETIMETZ , size: 0 );
55
+ $ values ['datetimetz6 ' ][0 ] = new DateTimeColumn (ColumnType::DATETIMETZ , size: 6 );
56
+ $ values ['time ' ][0 ] = new DateTimeColumn (ColumnType::TIME , size: 0 );
57
+ $ values ['time6 ' ][0 ] = new DateTimeColumn (ColumnType::TIME , size: 6 );
58
+ $ values ['timetz ' ][0 ] = new DateTimeColumn (ColumnType::TIMETZ , size: 0 );
59
+ $ values ['timetz6 ' ][0 ] = new DateTimeColumn (ColumnType::TIMETZ , size: 6 );
60
+ $ values ['date ' ][0 ] = new DateTimeColumn (ColumnType::DATE );
44
61
$ values ['json ' ][0 ] = new JsonColumn ();
45
62
63
+ $ values ['timetz ' ] = [
64
+ new DateTimeColumn (ColumnType::TIMETZ , size: 0 ),
65
+ [
66
+ [null , null ],
67
+ [null , '' ],
68
+ [new Expression ("INTERVAL '0 00:00:00' DAY(0) TO SECOND(0) " ), '2025-04-19 ' ],
69
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), '14:11:35 ' ],
70
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), '14:11:35.123456 ' ],
71
+ [new Expression ("INTERVAL '0 12:11:35' DAY(0) TO SECOND(0) " ), '14:11:35 +02:00 ' ],
72
+ [new Expression ("INTERVAL '0 12:11:35' DAY(0) TO SECOND(0) " ), '14:11:35.123456 +02:00 ' ],
73
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), '2025-04-19 14:11:35 ' ],
74
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), '2025-04-19 14:11:35.123456 ' ],
75
+ [new Expression ("INTERVAL '0 12:11:35' DAY(0) TO SECOND(0) " ), '2025-04-19 14:11:35 +02:00 ' ],
76
+ [new Expression ("INTERVAL '0 12:11:35' DAY(0) TO SECOND(0) " ), '2025-04-19 14:11:35.123456 +02:00 ' ],
77
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), '1745071895 ' ],
78
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), '1745071895.123 ' ],
79
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), 1745071895 ],
80
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), 1745071895.123 ],
81
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), 51095 ],
82
+ [new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), 51095.123456 ],
83
+ [new Expression ("INTERVAL '0 12:11:35' DAY(0) TO SECOND(0) " ), new DateTimeImmutable ('14:11:35 +02:00 ' )],
84
+ [new Expression ("INTERVAL '0 12:11:35' DAY(0) TO SECOND(0) " ), new DateTime ('14:11:35 +02:00 ' )],
85
+ [new Expression ("INTERVAL '0 12:11:35' DAY(0) TO SECOND(0) " ), new Stringable ('14:11:35 +02:00 ' )],
86
+ [$ expression = new Expression ("INTERVAL '0 14:11:35' DAY(0) TO SECOND(0) " ), $ expression ],
87
+ ],
88
+ ];
89
+ $ values ['timetz6 ' ] = [
90
+ new DateTimeColumn (ColumnType::TIMETZ , size: 6 ),
91
+ [
92
+ [null , null ],
93
+ [null , '' ],
94
+ [new Expression ("INTERVAL '0 00:00:00.000000' DAY(0) TO SECOND(6) " ), '2025-04-19 ' ],
95
+ [new Expression ("INTERVAL '0 14:11:35.000000' DAY(0) TO SECOND(6) " ), '14:11:35 ' ],
96
+ [new Expression ("INTERVAL '0 14:11:35.123456' DAY(0) TO SECOND(6) " ), '14:11:35.123456 ' ],
97
+ [new Expression ("INTERVAL '0 12:11:35.000000' DAY(0) TO SECOND(6) " ), '14:11:35 +02:00 ' ],
98
+ [new Expression ("INTERVAL '0 12:11:35.123456' DAY(0) TO SECOND(6) " ), '14:11:35.123456 +02:00 ' ],
99
+ [new Expression ("INTERVAL '0 14:11:35.000000' DAY(0) TO SECOND(6) " ), '2025-04-19 14:11:35 ' ],
100
+ [new Expression ("INTERVAL '0 14:11:35.123456' DAY(0) TO SECOND(6) " ), '2025-04-19 14:11:35.123456 ' ],
101
+ [new Expression ("INTERVAL '0 12:11:35.000000' DAY(0) TO SECOND(6) " ), '2025-04-19 14:11:35 +02:00 ' ],
102
+ [new Expression ("INTERVAL '0 12:11:35.123456' DAY(0) TO SECOND(6) " ), '2025-04-19 14:11:35.123456 +02:00 ' ],
103
+ [new Expression ("INTERVAL '0 14:11:35.000000' DAY(0) TO SECOND(6) " ), '1745071895 ' ],
104
+ [new Expression ("INTERVAL '0 14:11:35.123000' DAY(0) TO SECOND(6) " ), '1745071895.123 ' ],
105
+ [new Expression ("INTERVAL '0 14:11:35.000000' DAY(0) TO SECOND(6) " ), 1745071895 ],
106
+ [new Expression ("INTERVAL '0 14:11:35.123000' DAY(0) TO SECOND(6) " ), 1745071895.123 ],
107
+ [new Expression ("INTERVAL '0 14:11:35.000000' DAY(0) TO SECOND(6) " ), 51095 ],
108
+ [new Expression ("INTERVAL '0 14:11:35.123456' DAY(0) TO SECOND(6) " ), 51095.123456 ],
109
+ [new Expression ("INTERVAL '0 12:11:35.123456' DAY(0) TO SECOND(6) " ), new DateTimeImmutable ('14:11:35.123456 +02:00 ' )],
110
+ [new Expression ("INTERVAL '0 12:11:35.123456' DAY(0) TO SECOND(6) " ), new DateTime ('14:11:35.123456 +02:00 ' )],
111
+ [new Expression ("INTERVAL '0 12:11:35.123456' DAY(0) TO SECOND(6) " ), new Stringable ('14:11:35.123456 +02:00 ' )],
112
+ [$ expression = new Expression ("INTERVAL '0 14:11:35.123456' DAY(0) TO SECOND(6) " ), $ expression ],
113
+ ],
114
+ ];
115
+
116
+ foreach (['timestamp ' , 'timestamp6 ' , 'datetime ' , 'datetime6 ' , 'datetimetz ' , 'datetimetz6 ' ] as $ key ) {
117
+ foreach ($ values [$ key ][1 ] as &$ value ) {
118
+ if (is_string ($ value [0 ])) {
119
+ $ value [0 ] = new Expression ("TIMESTAMP ' $ value [0 ]' " );
120
+ }
121
+ }
122
+ unset($ value );
123
+ }
124
+
125
+ foreach ($ values ['time ' ][1 ] as &$ value ) {
126
+ if (is_string ($ value [0 ])) {
127
+ $ value [0 ] = new Expression ("INTERVAL '0 $ value [0 ]' DAY(0) TO SECOND(0) " );
128
+ }
129
+ }
130
+ unset($ value );
131
+
132
+ foreach ($ values ['time6 ' ][1 ] as &$ value ) {
133
+ if (is_string ($ value [0 ])) {
134
+ $ value [0 ] = new Expression ("INTERVAL '0 $ value [0 ]' DAY(0) TO SECOND(6) " );
135
+ }
136
+ }
137
+ unset($ value );
138
+
139
+ foreach ($ values ['date ' ][1 ] as &$ value ) {
140
+ if (is_string ($ value [0 ])) {
141
+ $ value [0 ] = new Expression ("DATE ' $ value [0 ]' " );
142
+ }
143
+ }
144
+
46
145
return $ values ;
47
146
}
48
147
@@ -51,6 +150,12 @@ public static function phpTypecastColumns(): array
51
150
$ values = parent ::phpTypecastColumns ();
52
151
$ values ['binary ' ][0 ] = new BinaryColumn ();
53
152
$ values ['boolean ' ][0 ] = new BooleanColumn ();
153
+ $ values ['timestamp ' ][0 ] = new DateTimeColumn (ColumnType::TIMESTAMP );
154
+ $ values ['datetime ' ][0 ] = new DateTimeColumn ();
155
+ $ values ['datetimetz ' ][0 ] = new DateTimeColumn (ColumnType::DATETIMETZ );
156
+ $ values ['time ' ][0 ] = new DateTimeColumn (ColumnType::TIME );
157
+ $ values ['timetz ' ][0 ] = new DateTimeColumn (ColumnType::TIMETZ );
158
+ $ values ['date ' ][0 ] = new DateTimeColumn (ColumnType::DATE );
54
159
$ values ['json ' ][0 ] = new JsonColumn ();
55
160
56
161
return $ values ;
0 commit comments