Skip to content

Commit

Permalink
Implement TSQL specific function call mapper (databrickslabs#765)
Browse files Browse the repository at this point in the history
Here, we implement the function call mapper (Rule) that allows us to
make complex transformations from TSQL specific functions into
Databricks compatible constructs. Transformations are sometimes argument
reordering, and sometimes replacement with a different expression.

In this PR we use the transformation of TSQL `DATEADD` to Databricks SQL
`DATE_ADD`, `ADD_MONTHS` and `xxx + INTERVAL n {days|months|etc}`

For example the TSQL:

```tsql
SELECT DATEADD(hh, 7, col1) AS add_hours_col1 FROM tabl;
```

Translates to:

```sql
SELECT col1 + INTERVAL 7 HOUR AS add_hours_col1 FROM tabl;
```
  • Loading branch information
jimidle authored Aug 2, 2024
1 parent d604bb1 commit 0b5dcd9
Show file tree
Hide file tree
Showing 14 changed files with 14 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(hour, 7, col1) AS add_hours_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 HOUR) AS add_hours_col1 FROM tabl;
SELECT col1 + INTERVAL 7 HOUR AS add_hours_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(hh, 7, col1) AS add_hours_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 HOUR) AS add_hours_col1 FROM tabl;
SELECT col1 + INTERVAL 7 HOUR AS add_hours_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(MICROSECOND, 7, col1) AS add_microsecond_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 MICROSECOND) AS add_microsecond_col1 FROM tabl;
SELECT col1 + INTERVAL 7 MICROSECOND AS add_microsecond_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(mcs, 7, col1) AS add_microsecond_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 MICROSECOND) AS add_microsecond_col1 FROM tabl;
SELECT col1 + INTERVAL 7 MICROSECOND AS add_microsecond_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(millisecond, 7, col1) AS add_minutes_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 MILLISECOND) AS add_minutes_col1 FROM tabl;
SELECT col1 + INTERVAL 7 MILLISECOND AS add_minutes_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(ms, 7, col1) AS add_milliseconds_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 MILLISECOND) AS add_milliseconds_col1 FROM tabl;
SELECT col1 + INTERVAL 7 MILLISECOND AS add_milliseconds_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(minute, 7, col1) AS add_minutes_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 MINUTE) AS add_minutes_col1 FROM tabl;
SELECT col1 + INTERVAL 7 MINUTE AS add_minutes_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(mi, 7, col1) AS add_minutes_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 MINUTE) AS add_minutes_col1 FROM tabl;
SELECT col1 + INTERVAL 7 MINUTE AS add_minutes_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(n, 7, col1) AS add_minutes_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 MINUTE) AS add_minutes_col1 FROM tabl;
SELECT col1 + INTERVAL 7 MINUTE AS add_minutes_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(NANOSECOND, 7, col1) AS add_nanoseconds_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 NANOSECOND) AS add_nanoseconds_col1 FROM tabl;
SELECT col1 + INTERVAL 7 NANOSECOND AS add_nanoseconds_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(NS, 7, col1) AS add_minutes_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 NANOSECOND) AS add_minutes_col1 FROM tabl;
SELECT col1 + INTERVAL 7 NANOSECOND AS add_minutes_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(second, 7, col1) AS add_seconds_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 SECOND) AS add_seconds_col1 FROM tabl;
SELECT col1 + INTERVAL 7 SECOND AS add_seconds_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(ss, 7, col1) AS add_seconds_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 SECOND) AS add_seconds_col1 FROM tabl;
SELECT col1 + INTERVAL 7 SECOND AS add_seconds_col1 FROM tabl;
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
SELECT DATEADD(s, 7, col1) AS add_minutes_col1 FROM tabl;

-- databricks sql:
SELECT (col1 + INTERVAL 7 SECOND) AS add_minutes_col1 FROM tabl;
SELECT col1 + INTERVAL 7 SECOND AS add_minutes_col1 FROM tabl;

0 comments on commit 0b5dcd9

Please sign in to comment.