implicit_cast_callable.sql 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /* postgres can not */
  2. use plato;
  3. $identity = ($x)-> { return $x };
  4. $idDate32 = Callable(Callable<(date32)->date32>, $identity);
  5. $idDatetime64 = Callable(Callable<(datetime64)->datetime64>, $identity);
  6. $idTimestamp64 = Callable(Callable<(timestamp64)->timestamp64>, $identity);
  7. $idInterval64 = Callable(Callable<(interval64)->interval64>, $identity);
  8. $valDate = unwrap(cast(1 as date));
  9. $valDate32 = unwrap(cast(-1 as date32));
  10. $valDatetime = unwrap(cast(86400 as datetime));
  11. $valDatetime64 = unwrap(cast(-86400 as datetime64));
  12. $valTimestamp = unwrap(cast(86400l*1000000 as timestamp));
  13. $valTimestamp64 = unwrap(cast(86400l*1000000 as timestamp64));
  14. $valInterval = unwrap(cast(1 as interval));
  15. $valInterval64 = unwrap(cast(-1 as interval64));
  16. select 1, $idDate32($valDate), $idDate32($valDate32)
  17. , 2, $idDatetime64($valDate), $idDatetime64($valDate32)
  18. , $idDatetime64($valDatetime), $idDatetime64($valDatetime64)
  19. , 3, $idTimestamp64($valDate), $idTimestamp64($valDate32)
  20. , $idTimestamp64($valDatetime), $idTimestamp64($valDatetime64)
  21. , $idTimestamp64($valTimestamp), $idTimestamp64($valTimestamp64)
  22. , 4, $idInterval64($valInterval), $idInterval64($valInterval64);
  23. select row
  24. , 1, $idTimestamp64(d32), $idDatetime64(d32), $idDate32(d32)
  25. , 2, $idTimestamp64(dt64), $idDatetime64(dt64)
  26. , 3, $idTimestamp64(ts64)
  27. , 4, $idInterval64(i64)
  28. from BigDates
  29. order by row;
  30. select row
  31. , 1, $idTimestamp64(d), $idDatetime64(d), $idDate32(d)
  32. , 2, $idTimestamp64(dt), $idDatetime64(dt)
  33. , 3, $idTimestamp64(ts)
  34. from NarrowDates
  35. order by row;
  36. select row, $idInterval64(i) from NarrowInterval order by row;