There are essentially two ways to add an interval to a datetime vaue in Calcite
Call the timestampadd() function: select {fn timestampadd(year, 1, hire_date)}... Use datetime_plus interval arithmetic: select hire_date + interval '1' year Note that timestampadd's second argument does not need to be a literal. Often it is a column expression. For datetime_plus literals are usually used. I propose we create a new SqlOperator that can canonicalize both of these inputs into one node. This lets us apply any transformations on this canonical type regardless of what the original query was. It takes in the following arguments: 1. A date/time/timestamp input 2. an interval input as an integer 3. a time unit for the input 4. a synthetic argument indicating the source form of the function call (either datetime_plus or timestampadd). The idea is that this canonical form is easy to get into for both types, and provides methods to easily convert to either type. This would help with unparsing in SqlDialects (you do not need to implement pushdown for both types of inputs).