arithmetic.sql 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. $date32_min = unwrap(cast(-53375809 as date32));
  2. $date32_max = unwrap(cast(53375807 as date32));
  3. $datetime64_min = unwrap(cast(-4611669897600 as datetime64));
  4. $datetime64_max = unwrap(cast(4611669811199 as datetime64));
  5. $timestamp64_min = unwrap(cast(-4611669897600000000 as timestamp64));
  6. $timestamp64_max = unwrap(cast(4611669811199999999 as timestamp64));
  7. $interval64_min = unwrap(cast(-9223339708799999999 as interval64));
  8. $interval64_max = unwrap(cast(9223339708799999999 as interval64));
  9. $interval64_plus1 = unwrap(cast(1 as interval64));
  10. $interval64_minus1 = unwrap(cast(-1 as interval64));
  11. $interval64_zero = unwrap(cast(0 as interval64));
  12. $date_max_value = 49673l;
  13. $date_max = unwrap(cast($date_max_value - 1 as date));
  14. $datetime_max = unwrap(cast($date_max_value*86400 - 1 as datetime));
  15. $timestamp_max = unwrap(cast($date_max_value*86400*1000000 - 1 as timestamp));
  16. $interval_min = unwrap(cast(-$date_max_value*86400*1000000 + 1 as interval));
  17. $interval_max = unwrap(cast($date_max_value*86400*1000000 - 1 as interval));
  18. $interval_plus1 = unwrap(cast(1 as interval));
  19. $interval_minus1 = unwrap(cast(-1 as interval));
  20. $i64_max = 9223372036854775807l;
  21. $ui64_max = 18446744073709551615ul;
  22. select 1, $date32_min - $date32_max, $date32_max - $date32_min
  23. , $date32_min - $datetime64_max, $date32_max - $datetime64_min
  24. , $date32_min - $timestamp64_max, $date32_max - $timestamp64_min
  25. , 2, $date32_min - $date_max
  26. , $date32_min - $datetime_max
  27. , $date32_min - $timestamp_max
  28. , 3, $date32_min - $interval64_minus1, $date32_max - $interval64_minus1
  29. , $date32_min - $interval64_plus1, $date32_max - $interval64_plus1
  30. , $date32_min + $interval64_minus1, $date32_max + $interval64_minus1
  31. , $date32_min + $interval64_plus1, $date32_max + $interval64_plus1
  32. , 4, $date32_min - $interval_minus1, $date32_max - $interval_minus1
  33. , $date32_min - $interval_plus1, $date32_max - $interval_plus1
  34. , $date32_min + $interval_minus1, $date32_max + $interval_minus1
  35. , $date32_min + $interval_plus1, $date32_max + $interval_plus1;
  36. select 1, $datetime64_min - $date32_max, $datetime64_max - $date32_min
  37. , $datetime64_min - $datetime64_max, $datetime64_max - $datetime64_min
  38. , $datetime64_min - $timestamp64_max, $datetime64_max - $timestamp64_min
  39. , 2, $datetime64_min - $date_max
  40. , $datetime64_min - $datetime_max
  41. , $datetime64_min - $timestamp_max
  42. , 3, $datetime64_min - $interval64_minus1, $datetime64_max - $interval64_minus1
  43. , $datetime64_min - $interval64_plus1, $datetime64_max - $interval64_plus1
  44. , $datetime64_min + $interval64_minus1, $datetime64_max + $interval64_minus1
  45. , $datetime64_min + $interval64_plus1, $datetime64_max + $interval64_plus1
  46. , 4, $datetime64_min - $interval_minus1, $datetime64_max - $interval_minus1
  47. , $datetime64_min - $interval_plus1, $datetime64_max - $interval_plus1
  48. , $datetime64_min + $interval_minus1, $datetime64_max + $interval_minus1
  49. , $datetime64_min + $interval_plus1, $datetime64_max + $interval_plus1;
  50. select 1, $timestamp64_min - $date32_max, $timestamp64_max - $date32_min
  51. , $timestamp64_min - $datetime64_max, $timestamp64_max - $datetime64_min
  52. , $timestamp64_min - $timestamp64_max, $timestamp64_max - $timestamp64_min
  53. , 2, $timestamp64_min - $date_max
  54. , $timestamp64_min - $datetime_max
  55. , $timestamp64_min - $timestamp_max
  56. , 3, $timestamp64_min - $interval64_minus1, $timestamp64_max - $interval64_minus1
  57. , $timestamp64_min - $interval64_plus1, $timestamp64_max - $interval64_plus1
  58. , $timestamp64_min + $interval64_minus1, $timestamp64_max + $interval64_minus1
  59. , $timestamp64_min + $interval64_plus1, $timestamp64_max + $interval64_plus1
  60. , 4, $timestamp64_min - $interval_minus1, $timestamp64_max - $interval_minus1
  61. , $timestamp64_min - $interval_plus1, $timestamp64_max - $interval_plus1
  62. , $timestamp64_min + $interval_minus1, $timestamp64_max + $interval_minus1
  63. , $timestamp64_min + $interval_plus1, $timestamp64_max + $interval_plus1;
  64. select 1, $date_max - $date32_min, $date_max - $datetime64_min, $date_max - $timestamp64_min
  65. , $date_max - $date32_max, $date_max - $datetime64_max, $date_max - $timestamp64_max
  66. , $date_max - $interval64_minus1, $date_max + $interval64_minus1
  67. , $date_max - $interval64_plus1, $date_max + $interval64_plus1
  68. , 2, $datetime_max - $date32_min, $datetime_max - $datetime64_min, $datetime_max - $timestamp64_min
  69. , $datetime_max - $date32_max, $datetime_max - $datetime64_max, $datetime_max - $timestamp64_max
  70. , $datetime_max - $interval64_minus1, $datetime_max + $interval64_minus1
  71. , $datetime_max - $interval64_plus1, $datetime_max + $interval64_plus1
  72. , 3, $timestamp_max - $date32_min, $timestamp_max - $datetime64_min, $timestamp_max - $timestamp64_min
  73. , $timestamp_max - $date32_max, $timestamp_max - $datetime64_max, $timestamp_max - $timestamp64_max
  74. , $timestamp_max - $interval64_minus1, $timestamp_max + $interval64_minus1
  75. , $timestamp_max - $interval64_plus1, $timestamp_max + $interval64_plus1;
  76. select 1, $interval_min - $interval64_min, $interval_min + $interval64_min
  77. , $interval_min - $interval64_max, $interval_min + $interval64_max
  78. , $interval_max - $interval64_max, $interval_max + $interval64_max
  79. , $interval_max - $interval64_min, $interval_max + $interval64_min
  80. , 2, $interval64_max - $interval64_min, $interval64_min - $interval64_max
  81. , $interval64_max + $interval64_min, $interval64_max + $interval64_max
  82. , $interval64_min - $interval64_min, $interval64_max - $interval64_max;
  83. select 0, -$interval64_max, -$interval64_min, -$interval64_zero
  84. , 1, $interval64_max*0, 0*$interval64_max
  85. , 2, $interval64_max*1, 1*$interval64_max, $interval64_max*(-1), (-1)*$interval64_max
  86. , 3, $interval64_min*1, 1*$interval64_min, $interval64_min*(-1), (-1)*$interval64_min
  87. , 4, $interval64_plus1*cast($interval64_max as int64), $interval64_minus1*cast($interval64_min as int64)
  88. , 5, $interval64_max*$ui64_max, $i64_max*$interval64_max, $interval64_min*$ui64_max, $i64_max*$interval64_min
  89. , 6, $interval64_zero*$ui64_max, $ui64_max*$interval64_zero, $interval64_zero*$i64_max, $i64_max*$interval64_zero
  90. , 7, $interval64_max/0, $interval64_min/0, $interval64_max/1, $interval64_min/1, $interval64_max/(-1), $interval64_min/(-1)
  91. , 8, $interval64_zero/$ui64_max, $interval64_zero/$i64_max, $interval64_plus1/$ui64_max, $interval64_plus1/$i64_max, $interval64_minus1/$ui64_max, $interval64_minus1/$i64_max
  92. , 9, $interval64_max/cast($interval64_max as int64), $interval64_min/cast($interval64_min as int64)
  93. , 10, abs($interval64_max), abs($interval64_min), abs($interval64_zero)
  94. , 11, cast(4294967296l as interval64) * 4294967296l, 4294967296ul * cast(4294967296l as interval64)
  95. ;