Skip to content

Commit

Permalink
Update dateparts values and functions for both Redshift and BigQ (#2829)
Browse files Browse the repository at this point in the history
Co-authored-by: Barry Pollard <barry_pollard@hotmail.com>
  • Loading branch information
rpr-ableton and tunetheweb committed Mar 9, 2022
1 parent 4ccb5a5 commit e94005e
Show file tree
Hide file tree
Showing 6 changed files with 2,493 additions and 3 deletions.
19 changes: 17 additions & 2 deletions src/sqlfluff/dialects/dialect_bigquery.py
Expand Up @@ -221,9 +221,24 @@
)

# Add additional datetime units
# https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#extract
# https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions#extract
bigquery_dialect.sets("datetime_units").update(
["MICROSECOND", "DAYOFWEEK", "ISOWEEK", "ISOYEAR"]
[
"MICROSECOND",
"MILLISECOND",
"SECOND",
"MINUTE",
"HOUR",
"DAY",
"DAYOFWEEK",
"DAYOFYEAR",
"WEEK",
"ISOWEEK",
"MONTH",
"QUARTER",
"YEAR",
"ISOYEAR",
]
)

bigquery_dialect.sets("date_part_function_name").clear()
Expand Down
107 changes: 106 additions & 1 deletion src/sqlfluff/dialects/dialect_redshift.py
Expand Up @@ -42,7 +42,112 @@
redshift_dialect.sets("bare_functions").clear()
redshift_dialect.sets("bare_functions").update(["current_date", "sysdate"])

redshift_dialect.sets("date_part_function_name").update(["DATEADD", "DATEDIFF"])
redshift_dialect.sets("date_part_function_name").update(
["DATEADD", "DATEDIFF", "EXTRACT", "DATE_PART"]
)

# Add datetime units
# https://docs.aws.amazon.com/redshift/latest/dg/r_Dateparts_for_datetime_functions.html
redshift_dialect.sets("datetime_units").update(
[
# millenium
"MILLENNIUM",
"MILLENNIA",
"MIL",
"MILS",
# century
"CENTURY",
"CENTURIES",
"C",
"CENT",
"CENTS",
# decade
"DECADE",
"DECADES",
"DEC",
"DECS",
# epoch
"EPOCH",
# year
"YEAR",
"YEARS",
"Y",
"YR",
"YRS",
# quarter
"QUARTER",
"QUARTERS",
"QTR",
"QTRS",
# month
"MONTH",
"MONTHS",
"MON",
"MONS",
# week
"WEEK",
"WEEKS",
"W",
# day of week
"DAYOFWEEK",
"DOW",
"DW",
"WEEKDAY",
# day of year
"DAYOFYEAR",
"DOY",
"DY",
"YEARDAY",
# day
"DAY",
"DAYS",
"D",
# hour
"HOUR",
"HOURS",
"H",
"HR",
"HRS",
# minute
"MINUTE",
"MINUTES",
"M",
"MIN",
"MINS",
# second
"SECOND",
"SECONDS",
"S",
"SEC",
"SECS",
# millisec
"MILLISECOND",
"MILLISECONDS",
"MS",
"MSEC",
"MSECS",
"MSECOND",
"MSECONDS",
"MILLISEC",
"MILLISECS",
"MILLISECON",
# microsec
"MICROSECOND",
"MICROSECONDS",
"MICROSEC",
"MICROSECS",
"MICROSECOND",
"USECOND",
"USECONDS",
"US",
"USEC",
"USECS",
# timezone
"TIMEZONE",
"TIMEZONE_HOUR",
"TIMEZONE_MINUTE",
]
)

redshift_dialect.replace(WellKnownTextGeometrySegment=Nothing())

Expand Down
17 changes: 17 additions & 0 deletions test/fixtures/dialects/bigquery/dateparts.sql
@@ -0,0 +1,17 @@
SELECT
col1,
EXTRACT(MICROSECOND FROM col1),
EXTRACT(MILLISECOND FROM col1),
EXTRACT(SECOND FROM col1),
EXTRACT(MINUTE FROM col1),
EXTRACT(HOUR FROM col1),
EXTRACT(DAY FROM col1),
EXTRACT(DAYOFWEEK FROM col1),
EXTRACT(DAYOFYEAR FROM col1),
EXTRACT(WEEK FROM col1),
EXTRACT(ISOWEEK FROM col1),
EXTRACT(MONTH FROM col1),
EXTRACT(QUARTER FROM col1),
EXTRACT(YEAR FROM col1),
EXTRACT(ISOYEAR FROM col1)
FROM tbl1;
204 changes: 204 additions & 0 deletions test/fixtures/dialects/bigquery/dateparts.yml
@@ -0,0 +1,204 @@
# YML test files are auto-generated from SQL files and should not be edited by
# hand. To help enforce this, the "hash" field in the file must match a hash
# computed by SQLFluff when running the tests. Please run
# `python test/generate_parse_fixture_yml.py` to generate them after adding or
# altering SQL files.
_hash: 1f8a834990a37113c9799fcf39709eb4789c51da710d2bd69b36581dac5b3a55
file:
statement:
select_statement:
select_clause:
- keyword: SELECT
- select_clause_element:
column_reference:
identifier: col1
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: MICROSECOND
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: MILLISECOND
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: SECOND
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: MINUTE
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: HOUR
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: DAY
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: DAYOFWEEK
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: DAYOFYEAR
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: WEEK
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: ISOWEEK
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: MONTH
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: QUARTER
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: YEAR
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
- comma: ','
- select_clause_element:
function:
function_name:
function_name_identifier: EXTRACT
bracketed:
start_bracket: (
date_part: ISOYEAR
keyword: FROM
expression:
column_reference:
identifier: col1
end_bracket: )
from_clause:
keyword: FROM
from_expression:
from_expression_element:
table_expression:
table_reference:
identifier: tbl1
statement_terminator: ;

0 comments on commit e94005e

Please sign in to comment.