@@ -263,30 +263,27 @@ using TAnyDateTimeSubIntervalTz = TAnyDateTimeSubIntervalT<TLeft, TRight, TOutpu
263
263
264
264
template <bool LeftTz, bool RightTz, bool LeftBig, bool RightBig>
265
265
void RegisterDateSub (IBuiltinFunctionRegistry& registry) {
266
- static_assert (!(LeftTz && LeftBig), " Expect either Tz or Big date type" );
267
- static_assert (!(RightTz && RightBig), " Expect either Tz or Big date type" );
268
-
269
266
using TDateLeft1 = std::conditional_t <LeftBig,
270
- NUdf::TDataType<NUdf::TDate32>,
267
+ std:: conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzDate32>, NUdf::TDataType<NUdf:: TDate32> >,
271
268
std::conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzDate>, NUdf::TDataType<NUdf::TDate>>>;
272
269
using TDateLeft2 = std::conditional_t <LeftBig,
273
- NUdf::TDataType<NUdf::TDatetime64>,
270
+ std:: conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzDatetime64>, NUdf::TDataType<NUdf:: TDatetime64> >,
274
271
std::conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzDatetime>, NUdf::TDataType<NUdf::TDatetime>>>;
275
272
using TDateLeft3 = std::conditional_t <LeftBig,
276
- NUdf::TDataType<NUdf::TTimestamp64>,
273
+ std:: conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzTimestamp64>, NUdf::TDataType<NUdf:: TTimestamp64> >,
277
274
std::conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzTimestamp>, NUdf::TDataType<NUdf::TTimestamp>>>;
278
275
279
276
using TDateRight1 = std::conditional_t <RightBig,
280
- NUdf::TDataType<NUdf::TDate32>,
277
+ std:: conditional_t <RightTz, NUdf::TDataType<NUdf::TTzDate32>, NUdf::TDataType<NUdf:: TDate32> >,
281
278
std::conditional_t <RightTz, NUdf::TDataType<NUdf::TTzDate>, NUdf::TDataType<NUdf::TDate>>>;
282
279
using TDateRight2 = std::conditional_t <RightBig,
283
- NUdf::TDataType<NUdf::TDatetime64>,
280
+ std:: conditional_t <RightTz, NUdf::TDataType<NUdf::TTzDatetime64>, NUdf::TDataType<NUdf:: TDatetime64> >,
284
281
std::conditional_t <RightTz, NUdf::TDataType<NUdf::TTzDatetime>, NUdf::TDataType<NUdf::TDatetime>>>;
285
282
using TDateRight3 = std::conditional_t <RightBig,
286
- NUdf::TDataType<NUdf::TTimestamp64>,
283
+ std:: conditional_t <RightTz, NUdf::TDataType<NUdf::TTzTimestamp64>, NUdf::TDataType<NUdf:: TTimestamp64> >,
287
284
std::conditional_t <RightTz, NUdf::TDataType<NUdf::TTzTimestamp>, NUdf::TDataType<NUdf::TTimestamp>>>;
288
285
289
- using TOutput = std::conditional_t <LeftBig || RightBig,
286
+ using TOutput = std::conditional_t <LeftBig || RightBig,
290
287
NUdf::TDataType<NUdf::TInterval64>,
291
288
NUdf::TDataType<NUdf::TInterval>>;
292
289
@@ -314,30 +311,27 @@ void RegisterDateSub(IBuiltinFunctionRegistry& registry) {
314
311
315
312
template <bool LeftTz, bool RightTz, bool LeftBig, bool RightBig>
316
313
void RegisterDateSub (TKernelFamilyBase& owner) {
317
- static_assert (!(LeftTz && LeftBig), " Expect either Tz or Big date type" );
318
- static_assert (!(RightTz && RightBig), " Expect either Tz or Big date type" );
319
-
320
314
using TDateLeft1 = std::conditional_t <LeftBig,
321
- NUdf::TDataType<NUdf::TDate32>,
315
+ std:: conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzDate32>, NUdf::TDataType<NUdf:: TDate32> >,
322
316
std::conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzDate>, NUdf::TDataType<NUdf::TDate>>>;
323
317
using TDateLeft2 = std::conditional_t <LeftBig,
324
- NUdf::TDataType<NUdf::TDatetime64>,
318
+ std:: conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzDatetime64>, NUdf::TDataType<NUdf:: TDatetime64> >,
325
319
std::conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzDatetime>, NUdf::TDataType<NUdf::TDatetime>>>;
326
320
using TDateLeft3 = std::conditional_t <LeftBig,
327
- NUdf::TDataType<NUdf::TTimestamp64>,
321
+ std:: conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzTimestamp64>, NUdf::TDataType<NUdf:: TTimestamp64> >,
328
322
std::conditional_t <LeftTz, NUdf::TDataType<NUdf::TTzTimestamp>, NUdf::TDataType<NUdf::TTimestamp>>>;
329
323
330
324
using TDateRight1 = std::conditional_t <RightBig,
331
- NUdf::TDataType<NUdf::TDate32>,
325
+ std:: conditional_t <RightTz, NUdf::TDataType<NUdf::TTzDate32>, NUdf::TDataType<NUdf:: TDate32> >,
332
326
std::conditional_t <RightTz, NUdf::TDataType<NUdf::TTzDate>, NUdf::TDataType<NUdf::TDate>>>;
333
327
using TDateRight2 = std::conditional_t <RightBig,
334
- NUdf::TDataType<NUdf::TDatetime64>,
328
+ std:: conditional_t <RightTz, NUdf::TDataType<NUdf::TTzDatetime64>, NUdf::TDataType<NUdf:: TDatetime64> >,
335
329
std::conditional_t <RightTz, NUdf::TDataType<NUdf::TTzDatetime>, NUdf::TDataType<NUdf::TDatetime>>>;
336
330
using TDateRight3 = std::conditional_t <RightBig,
337
- NUdf::TDataType<NUdf::TTimestamp64>,
331
+ std:: conditional_t <RightTz, NUdf::TDataType<NUdf::TTzTimestamp64>, NUdf::TDataType<NUdf:: TTimestamp64> >,
338
332
std::conditional_t <RightTz, NUdf::TDataType<NUdf::TTzTimestamp>, NUdf::TDataType<NUdf::TTimestamp>>>;
339
333
340
- using TOutput = std::conditional_t <LeftBig || RightBig,
334
+ using TOutput = std::conditional_t <LeftBig || RightBig,
341
335
NUdf::TDataType<NUdf::TInterval64>,
342
336
NUdf::TDataType<NUdf::TInterval>>;
343
337
@@ -366,11 +360,18 @@ void RegisterSub(IBuiltinFunctionRegistry& registry) {
366
360
// NarrowDate minus BigDate
367
361
RegisterDateSub<false , false , false , true >(registry);
368
362
RegisterDateSub<true , false , false , true >(registry);
363
+ RegisterDateSub<false , true , false , true >(registry);
364
+ RegisterDateSub<true , true , false , true >(registry);
369
365
// BigDate minus NarrowDate
370
366
RegisterDateSub<false , false , true , false >(registry);
371
367
RegisterDateSub<false , true , true , false >(registry);
368
+ RegisterDateSub<true , false , true , false >(registry);
369
+ RegisterDateSub<true , true , true , false >(registry);
372
370
// BigDate minus BigDate
373
371
RegisterDateSub<false , false , true , true >(registry);
372
+ RegisterDateSub<true , false , true , true >(registry);
373
+ RegisterDateSub<false , true , true , true >(registry);
374
+ RegisterDateSub<true , true , true , true >(registry);
374
375
375
376
RegisterFunctionBinPolyOpt<NUdf::TDataType<NUdf::TInterval>, NUdf::TDataType<NUdf::TInterval>,
376
377
NUdf::TDataType<NUdf::TInterval>, TIntervalSubInterval, TBinaryArgsOptWithNullableResult>(registry, " Sub" );
@@ -422,20 +423,32 @@ void RegisterSub(IBuiltinFunctionRegistry& registry) {
422
423
NUdf::TDataType<NUdf::TDatetime64>, TAnyDateTimeSubInterval, TBinaryArgsOptWithNullableResult>(registry, " Sub" );
423
424
RegisterFunctionBinPolyOpt<NUdf::TDataType<NUdf::TTimestamp64>, NUdf::TDataType<NUdf::TInterval>,
424
425
NUdf::TDataType<NUdf::TTimestamp64>, TAnyDateTimeSubInterval, TBinaryArgsOptWithNullableResult>(registry, " Sub" );
426
+
427
+ RegisterFunctionBinPolyOpt<NUdf::TDataType<NUdf::TTzDate32>, NUdf::TDataType<NUdf::TInterval64>,
428
+ NUdf::TDataType<NUdf::TTzDate32>, TAnyDateTimeSubIntervalTz, TBinaryArgsOptWithNullableResult>(registry, " Sub" );
429
+ RegisterFunctionBinPolyOpt<NUdf::TDataType<NUdf::TTzDatetime64>, NUdf::TDataType<NUdf::TInterval64>,
430
+ NUdf::TDataType<NUdf::TTzDatetime64>, TAnyDateTimeSubIntervalTz, TBinaryArgsOptWithNullableResult>(registry, " Sub" );
431
+ RegisterFunctionBinPolyOpt<NUdf::TDataType<NUdf::TTzTimestamp64>, NUdf::TDataType<NUdf::TInterval64>,
432
+ NUdf::TDataType<NUdf::TTzTimestamp64>, TAnyDateTimeSubIntervalTz, TBinaryArgsOptWithNullableResult>(registry, " Sub" );
433
+
434
+ RegisterFunctionBinPolyOpt<NUdf::TDataType<NUdf::TTzDate32>, NUdf::TDataType<NUdf::TInterval>,
435
+ NUdf::TDataType<NUdf::TTzDate32>, TAnyDateTimeSubIntervalTz, TBinaryArgsOptWithNullableResult>(registry, " Sub" );
436
+ RegisterFunctionBinPolyOpt<NUdf::TDataType<NUdf::TTzDatetime64>, NUdf::TDataType<NUdf::TInterval>,
437
+ NUdf::TDataType<NUdf::TTzDatetime64>, TAnyDateTimeSubIntervalTz, TBinaryArgsOptWithNullableResult>(registry, " Sub" );
438
+ RegisterFunctionBinPolyOpt<NUdf::TDataType<NUdf::TTzTimestamp64>, NUdf::TDataType<NUdf::TInterval>,
439
+ NUdf::TDataType<NUdf::TTzTimestamp64>, TAnyDateTimeSubIntervalTz, TBinaryArgsOptWithNullableResult>(registry, " Sub" );
425
440
}
426
441
427
442
template <bool Tz, bool BigDate, bool BigInterval>
428
443
void RegisterDateSubInterval (TKernelFamilyBase& owner) {
429
- static_assert (!(Tz && BigDate), " Expect either Tz or Big date type" );
430
-
431
444
using TDateLeft1 = std::conditional_t <BigDate,
432
- NUdf::TDataType<NUdf::TDate32>,
445
+ std:: conditional_t <Tz, NUdf::TDataType<NUdf::TTzDate32>, NUdf::TDataType<NUdf:: TDate32> >,
433
446
std::conditional_t <Tz, NUdf::TDataType<NUdf::TTzDate>, NUdf::TDataType<NUdf::TDate>>>;
434
447
using TDateLeft2 = std::conditional_t <BigDate,
435
- NUdf::TDataType<NUdf::TDatetime64>,
448
+ std:: conditional_t <Tz, NUdf::TDataType<NUdf::TTzDatetime64>, NUdf::TDataType<NUdf:: TDatetime64> >,
436
449
std::conditional_t <Tz, NUdf::TDataType<NUdf::TTzDatetime>, NUdf::TDataType<NUdf::TDatetime>>>;
437
450
using TDateLeft3 = std::conditional_t <BigDate,
438
- NUdf::TDataType<NUdf::TTimestamp64>,
451
+ std:: conditional_t <Tz, NUdf::TDataType<NUdf::TTzTimestamp64>, NUdf::TDataType<NUdf:: TTimestamp64> >,
439
452
std::conditional_t <Tz, NUdf::TDataType<NUdf::TTzTimestamp>, NUdf::TDataType<NUdf::TTimestamp>>>;
440
453
441
454
using TIntervalRight = std::conditional_t <BigInterval,
@@ -477,19 +490,28 @@ void RegisterSub(TKernelFamilyMap& kernelFamilyMap) {
477
490
// NarrowDate minus BigDate
478
491
RegisterDateSub<false , false , false , true >(*family);
479
492
RegisterDateSub<true , false , false , true >(*family);
493
+ RegisterDateSub<false , true , false , true >(*family);
494
+ RegisterDateSub<true , true , false , true >(*family);
480
495
// BigDate minus NarrowDate
481
496
RegisterDateSub<false , false , true , false >(*family);
482
497
RegisterDateSub<false , true , true , false >(*family);
498
+ RegisterDateSub<true , false , true , false >(*family);
499
+ RegisterDateSub<true , true , true , false >(*family);
483
500
// BigDate minus BigDate
484
501
RegisterDateSub<false , false , true , true >(*family);
502
+ RegisterDateSub<false , true , true , true >(*family);
503
+ RegisterDateSub<true , false , true , true >(*family);
504
+ RegisterDateSub<true , true , true , true >(*family);
485
505
486
506
RegisterDateSubInterval<false , false , false >(*family);
487
507
RegisterDateSubInterval<true , false , false >(*family);
488
508
RegisterDateSubInterval<false , true , false >(*family);
509
+ RegisterDateSubInterval<true , true , false >(*family);
489
510
490
511
RegisterDateSubInterval<false , false , true >(*family);
491
512
RegisterDateSubInterval<true , false , true >(*family);
492
513
RegisterDateSubInterval<false , true , true >(*family);
514
+ RegisterDateSubInterval<true , true , true >(*family);
493
515
494
516
RegisterIntervalSubInterval<false , false >(*family);
495
517
RegisterIntervalSubInterval<false , true >(*family);
0 commit comments