sql icon indicating copy to clipboard operation
sql copied to clipboard

[FEATURE] Add 3 interval types instead of 1 to support complex interval expressions

Open Yury-Fridlyand opened this issue 2 years ago • 0 comments

Is your feature request related to a problem?

I discovered that in MySQL some functions' return type depends on arguments' values (not on their types❗) For example, DATE_ADD function returns

  • DATETIME when arguments are TIME and date or complex INTERVAL
  • DATETIME when arguments are DATE and time or complex INTERVAL
  • TIME when arguments are TIME and time INTERVAL
  • DATE when arguments are DATE and date INTERVAL
  • ... So function had following signature:
(DATE, INTERVAL) -> DATE
(DATE, INTERVAL) -> DATETIME
(TIME, INTERVAL) -> TIME
(TIME, INTERVAL) -> DATETIME
...

Which is extremely ambiguous for Resolver. It picked first matching signature (last in the list) and used it for further resolving. In the given example (see pic), a signature which returns DATE was resolved, but actual function execution returned DATETIME.

image

What solution would you like?

Introduce 3 new INTERVAL-like types instead of existing INTERVAL (ExprIntervalValue):

  • DATE_INTERVAL which operates with date terms, like days, months and years
  • TIME_INTERVAL which operates with time terms, e.g. hours, minutes and so on
  • DATETIME_INTERVAL which all datetime terms
  1. These types shouldn't be visible for user to avoid confusion. Syntax shouldn't be changed.
  2. These types should support more than one term, e.g. 'x hours y seconds' and even 'x years y minutes' for DATETIME_INTERVAL. This feature should implement complex interval expressions.
  3. This feature should contain update for DATE_ADD function (and its siblings: ADDDATE, SUBDATE, DATE_SUB) as a use case:
(DATE, DATE_INTERVAL) -> DATE
(DATE, TIME_INTERVAL) -> DATETIME
(DATE, DATETIME_INTERVAL) -> DATETIME
(TIME, TIME_INTERVAL) -> TIME
(TIME, DATE_INTERVAL) -> DATETIME
(TIME, DATETIME_INTERVAL) -> DATETIME

What alternatives have you considered?

N/A

Do you have any additional context?

#855

Yury-Fridlyand avatar Sep 28 '22 01:09 Yury-Fridlyand