@@ -21,9 +21,13 @@ Y_UNIT_TEST_SUITE(TFlatTableDatetime) {
2121 struct Datetime : Column<3 , NScheme::NTypeIds::Datetime> {};
2222 struct Timestamp : Column<4 , NScheme::NTypeIds::Timestamp> {};
2323 struct Interval : Column<5 , NScheme::NTypeIds::Interval> {};
24+ struct Date32 : Column<6 , NScheme::NTypeIds::Date32> {};
25+ struct Datetime64 : Column<7 , NScheme::NTypeIds::Datetime64> {};
26+ struct Timestamp64 : Column<8 , NScheme::NTypeIds::Timestamp64> {};
27+ struct Interval64 : Column<9 , NScheme::NTypeIds::Interval64> {};
2428
2529 using TKey = TableKey<Key>;
26- using TColumns = TableColumns<Key, Date, Datetime, Timestamp, Interval>;
30+ using TColumns = TableColumns<Key, Date, Datetime, Timestamp, Interval, Date32, Datetime64, Timestamp64, Interval64 >;
2731 };
2832
2933 struct DateKey : Table<2 > {
@@ -58,8 +62,39 @@ Y_UNIT_TEST_SUITE(TFlatTableDatetime) {
5862 using TColumns = TableColumns<Key, Value>;
5963 };
6064
65+ struct Date32Key : Table<6 > {
66+ struct Key : Column<1 , NScheme::NTypeIds::Date32> {};
67+ struct Value : Column<2 , NScheme::NTypeIds::Uint32> {};
68+
69+ using TKey = TableKey<Key>;
70+ using TColumns = TableColumns<Key, Value>;
71+ };
72+
73+ struct Datetime64Key : Table<7 > {
74+ struct Key : Column<1 , NScheme::NTypeIds::Datetime64> {};
75+ struct Value : Column<2 , NScheme::NTypeIds::Uint32> {};
76+
77+ using TKey = TableKey<Key>;
78+ using TColumns = TableColumns<Key, Value>;
79+ };
80+
81+ struct Timestamp64Key : Table<8 > {
82+ struct Key : Column<1 , NScheme::NTypeIds::Timestamp64> {};
83+ struct Value : Column<2 , NScheme::NTypeIds::Uint32> {};
84+
85+ using TKey = TableKey<Key>;
86+ using TColumns = TableColumns<Key, Value>;
87+ };
88+
89+ struct Interval64Key : Table<9 > {
90+ struct Key : Column<1 , NScheme::NTypeIds::Interval64> {};
91+ struct Value : Column<2 , NScheme::NTypeIds::Uint32> {};
92+
93+ using TKey = TableKey<Key>;
94+ using TColumns = TableColumns<Key, Value>;
95+ };
6196
62- using TTables = SchemaTables<DateValue, DateKey, DatetimeKey, TimestampKey, IntervalKey>;
97+ using TTables = SchemaTables<DateValue, DateKey, DatetimeKey, TimestampKey, IntervalKey, Date32Key, Datetime64Key, Timestamp64Key, Interval64Key >;
6398 using TSettings = SchemaSettings<ExecutorLogBatching<true >,
6499 ExecutorLogFlushPeriod<TDuration::MicroSeconds(512 ).GetValue()>>;
65100 };
@@ -105,17 +140,30 @@ Y_UNIT_TEST_SUITE(TFlatTableDatetime) {
105140 .Update <Schema::DateValue::Date>(Min<ui16>())
106141 .Update <Schema::DateValue::Datetime>(Min<ui32>())
107142 .Update <Schema::DateValue::Timestamp>(Min<ui64>())
108- .Update <Schema::DateValue::Interval>(Min<i64 >());
143+ .Update <Schema::DateValue::Interval>(Min<i64 >())
144+ .Update <Schema::DateValue::Date32>(Min<i32 >())
145+ .Update <Schema::DateValue::Datetime64>(Min<i64 >())
146+ .Update <Schema::DateValue::Timestamp64>(Min<i64 >())
147+ .Update <Schema::DateValue::Interval64>(Min<i64 >());
109148 db.Table <Schema::DateValue>().Key (2 )
110149 .Update <Schema::DateValue::Date>((ui16)100 )
111150 .Update <Schema::DateValue::Datetime>((ui32)100 )
112151 .Update <Schema::DateValue::Timestamp>((ui64)100 )
113- .Update <Schema::DateValue::Interval>((i64 )100 );
152+ .Update <Schema::DateValue::Interval>((i64 )100 )
153+ .Update <Schema::DateValue::Date32>((i32 )-100 )
154+ .Update <Schema::DateValue::Datetime64>((i64 )-100 )
155+ .Update <Schema::DateValue::Timestamp64>((i64 )-100 )
156+ .Update <Schema::DateValue::Interval64>((i64 )-100 );
157+
114158 db.Table <Schema::DateValue>().Key (3 )
115159 .Update <Schema::DateValue::Date>(Max<ui16>())
116160 .Update <Schema::DateValue::Datetime>(Max<ui32>())
117161 .Update <Schema::DateValue::Timestamp>(Max<ui64>())
118- .Update <Schema::DateValue::Interval>(Max<i64 >());
162+ .Update <Schema::DateValue::Interval>(Max<i64 >())
163+ .Update <Schema::DateValue::Date32>(Max<i32 >())
164+ .Update <Schema::DateValue::Datetime64>(Max<i64 >())
165+ .Update <Schema::DateValue::Timestamp64>(Max<i64 >())
166+ .Update <Schema::DateValue::Interval64>(Max<i64 >());
119167
120168 // DateKey
121169 for (ui16 i = 1 ; i <= 10 ; ++i) {
@@ -127,6 +175,14 @@ Y_UNIT_TEST_SUITE(TFlatTableDatetime) {
127175 .Update <Schema::DateKey::Value>(i);
128176 db.Table <Schema::IntervalKey>().Key ((i64 )i - 5 )
129177 .Update <Schema::DateKey::Value>(i);
178+ db.Table <Schema::Date32Key>().Key (i)
179+ .Update <Schema::Date32Key::Value>(i);
180+ db.Table <Schema::Datetime64Key>().Key ((ui32)i)
181+ .Update <Schema::DateKey::Value>(i);
182+ db.Table <Schema::Timestamp64Key>().Key ((ui64)i)
183+ .Update <Schema::DateKey::Value>(i);
184+ db.Table <Schema::Interval64Key>().Key ((i64 )i - 5 )
185+ .Update <Schema::DateKey::Value>(i);
130186 }
131187
132188 return true ;
@@ -158,14 +214,26 @@ Y_UNIT_TEST_SUITE(TFlatTableDatetime) {
158214 UNIT_ASSERT_VALUES_EQUAL (row1.GetValue <Schema::DateValue::Datetime>(), Min<ui32>());
159215 UNIT_ASSERT_VALUES_EQUAL (row1.GetValue <Schema::DateValue::Timestamp>(), Min<ui64>());
160216 UNIT_ASSERT_VALUES_EQUAL (row1.GetValue <Schema::DateValue::Interval>(), Min<i64 >());
217+ UNIT_ASSERT_VALUES_EQUAL (row1.GetValue <Schema::DateValue::Date32>(), Min<i32 >());
218+ UNIT_ASSERT_VALUES_EQUAL (row1.GetValue <Schema::DateValue::Datetime64>(), Min<i64 >());
219+ UNIT_ASSERT_VALUES_EQUAL (row1.GetValue <Schema::DateValue::Timestamp64>(), Min<i64 >());
220+ UNIT_ASSERT_VALUES_EQUAL (row1.GetValue <Schema::DateValue::Interval64>(), Min<i64 >());
161221 UNIT_ASSERT_VALUES_EQUAL (row2.GetValue <Schema::DateValue::Date>(), (ui16)100 );
162222 UNIT_ASSERT_VALUES_EQUAL (row2.GetValue <Schema::DateValue::Datetime>(), (ui32)100 );
163223 UNIT_ASSERT_VALUES_EQUAL (row2.GetValue <Schema::DateValue::Timestamp>(), (ui64)100 );
164224 UNIT_ASSERT_VALUES_EQUAL (row2.GetValue <Schema::DateValue::Interval>(), (i64 )100 );
225+ UNIT_ASSERT_VALUES_EQUAL (row2.GetValue <Schema::DateValue::Date32>(), (i32 )-100 );
226+ UNIT_ASSERT_VALUES_EQUAL (row2.GetValue <Schema::DateValue::Datetime64>(), (i64 )-100 );
227+ UNIT_ASSERT_VALUES_EQUAL (row2.GetValue <Schema::DateValue::Timestamp64>(), (i64 )-100 );
228+ UNIT_ASSERT_VALUES_EQUAL (row2.GetValue <Schema::DateValue::Interval64>(), (i64 )-100 );
165229 UNIT_ASSERT_VALUES_EQUAL (row3.GetValue <Schema::DateValue::Date>(), Max<ui16>());
166230 UNIT_ASSERT_VALUES_EQUAL (row3.GetValue <Schema::DateValue::Datetime>(), Max<ui32>());
167231 UNIT_ASSERT_VALUES_EQUAL (row3.GetValue <Schema::DateValue::Timestamp>(), Max<ui64>());
168232 UNIT_ASSERT_VALUES_EQUAL (row3.GetValue <Schema::DateValue::Interval>(), Max<i64 >());
233+ UNIT_ASSERT_VALUES_EQUAL (row3.GetValue <Schema::DateValue::Date32>(), Max<i32 >());
234+ UNIT_ASSERT_VALUES_EQUAL (row3.GetValue <Schema::DateValue::Datetime64>(), Max<i64 >());
235+ UNIT_ASSERT_VALUES_EQUAL (row3.GetValue <Schema::DateValue::Timestamp64>(), Max<i64 >());
236+ UNIT_ASSERT_VALUES_EQUAL (row3.GetValue <Schema::DateValue::Interval64>(), Max<i64 >());
169237 }
170238
171239 // DateKey
@@ -200,6 +268,38 @@ Y_UNIT_TEST_SUITE(TFlatTableDatetime) {
200268 UNIT_ASSERT_VALUES_EQUAL (row.GetValue <Schema::IntervalKey::Value>(), i);
201269 }
202270
271+ // Date32Key
272+ for (ui16 i = 1 ; i <= 10 ; ++i) {
273+ auto row = db.Table <Schema::Date32Key>().Key (i).Select ();
274+ if (!IsReady (row))
275+ return false ;
276+ UNIT_ASSERT_VALUES_EQUAL (row.GetValue <Schema::Date32Key::Value>(), (ui16)i);
277+ }
278+
279+ // Datetime64Key
280+ for (ui32 i = 1 ; i <= 10 ; ++i) {
281+ auto row = db.Table <Schema::Datetime64Key>().Key (i).Select ();
282+ if (!IsReady (row))
283+ return false ;
284+ UNIT_ASSERT_VALUES_EQUAL (row.GetValue <Schema::Datetime64Key::Value>(), i);
285+ }
286+
287+ // Timestamp64Key
288+ for (ui64 i = 1 ; i <= 10 ; ++i) {
289+ auto row = db.Table <Schema::Timestamp64Key>().Key (i).Select ();
290+ if (!IsReady (row))
291+ return false ;
292+ UNIT_ASSERT_VALUES_EQUAL (row.GetValue <Schema::Timestamp64Key::Value>(), i);
293+ }
294+
295+ // Interval64Key
296+ for (i16 i = 1 ; i <= 10 ; ++i) {
297+ auto row = db.Table <Schema::Interval64Key>().Key (i - 5 ).Select ();
298+ if (!IsReady (row))
299+ return false ;
300+ UNIT_ASSERT_VALUES_EQUAL (row.GetValue <Schema::Interval64Key::Value>(), i);
301+ }
302+
203303 return true ;
204304 }
205305
@@ -276,6 +376,66 @@ Y_UNIT_TEST_SUITE(TFlatTableDatetime) {
276376 UNIT_ASSERT (rowset.EndOfSet ());
277377 }
278378
379+ // Date32Key
380+ {
381+ auto rowset = db.Table <Schema::Date32Key>().GreaterOrEqual (5 ).Select ();
382+ if (!rowset.IsReady ())
383+ return false ;
384+ for (ui16 i = 5 ; i <= 10 ; ++i) {
385+ UNIT_ASSERT (!rowset.EndOfSet ());
386+ UNIT_ASSERT_VALUES_EQUAL (rowset.GetKey (), i);
387+ UNIT_ASSERT_VALUES_EQUAL (rowset.GetValue <Schema::Date32Key::Value>(), i);
388+ if (!rowset.Next ())
389+ return false ;
390+ }
391+ UNIT_ASSERT (rowset.EndOfSet ());
392+ }
393+
394+ // Datetime64Key
395+ {
396+ auto rowset = db.Table <Schema::Datetime64Key>().GreaterOrEqual (5 ).Select ();
397+ if (!rowset.IsReady ())
398+ return false ;
399+ for (ui32 i = 5 ; i <= 10 ; ++i) {
400+ UNIT_ASSERT (!rowset.EndOfSet ());
401+ UNIT_ASSERT_VALUES_EQUAL (rowset.GetKey (), i);
402+ UNIT_ASSERT_VALUES_EQUAL (rowset.GetValue <Schema::Datetime64Key::Value>(), i);
403+ if (!rowset.Next ())
404+ return false ;
405+ }
406+ UNIT_ASSERT (rowset.EndOfSet ());
407+ }
408+
409+ // Timestamp64Key
410+ {
411+ auto rowset = db.Table <Schema::Timestamp64Key>().GreaterOrEqual (5 ).Select ();
412+ if (!rowset.IsReady ())
413+ return false ;
414+ for (ui64 i = 5 ; i <= 10 ; ++i) {
415+ UNIT_ASSERT (!rowset.EndOfSet ());
416+ UNIT_ASSERT_VALUES_EQUAL (rowset.GetKey (), i);
417+ UNIT_ASSERT_VALUES_EQUAL (rowset.GetValue <Schema::Timestamp64Key::Value>(), i);
418+ if (!rowset.Next ())
419+ return false ;
420+ }
421+ UNIT_ASSERT (rowset.EndOfSet ());
422+ }
423+
424+ // Interval64Key
425+ {
426+ auto rowset = db.Table <Schema::Interval64Key>().GreaterOrEqual (-2 ).Select ();
427+ if (!rowset.IsReady ())
428+ return false ;
429+ for (i64 i = 3 ; i <= 10 ; ++i) {
430+ UNIT_ASSERT (!rowset.EndOfSet ());
431+ UNIT_ASSERT_VALUES_EQUAL (rowset.GetKey (), i - 5 );
432+ UNIT_ASSERT_VALUES_EQUAL (rowset.GetValue <Schema::Interval64Key::Value>(), i);
433+ if (!rowset.Next ())
434+ return false ;
435+ }
436+ UNIT_ASSERT (rowset.EndOfSet ());
437+ }
438+
279439 return true ;
280440 }
281441
0 commit comments