Skip to content

Commit

Permalink
TSQL fix convert function definition (#2843)
Browse files Browse the repository at this point in the history
* TSQL fix bug where dateparts where sometimes not recognised as such

* Better solution
  • Loading branch information
tunetheweb committed Mar 11, 2022
1 parent e5e5c7e commit bdd8dde
Show file tree
Hide file tree
Showing 5 changed files with 157 additions and 23 deletions.
18 changes: 9 additions & 9 deletions src/sqlfluff/dialects/dialect_tsql.py
Expand Up @@ -2004,20 +2004,20 @@ class FunctionSegment(BaseSegment):
),
),
Sequence(
# https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15
Ref("ConvertFunctionNameSegment"),
Bracketed(
Delimited(
Ref("DatatypeSegment"),
Ref(
"FunctionContentsGrammar",
# The brackets might be empty for some functions...
optional=True,
ephemeral_name="FunctionContentsGrammar",
),
)
Ref("DatatypeSegment"),
Bracketed(Ref("NumericLiteralSegment"), optional=True),
Ref("CommaSegment"),
Ref("ExpressionSegment"),
Sequence(
Ref("CommaSegment"), Ref("NumericLiteralSegment"), optional=True
),
),
),
Sequence(
# https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15
Ref("CastFunctionNameSegment"),
Bracketed(
Ref("ExpressionSegment"),
Expand Down
11 changes: 4 additions & 7 deletions test/fixtures/dialects/tsql/create_view.yml
Expand Up @@ -3,7 +3,7 @@
# 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: 69f2edb341a502903b3fe5048ff31230bf0dc98540a0c9127048de1a7e56332d
_hash: 68ab90694accab824df1c63fcb2da4a06c8bfe821cbebc61e4a6a6199f2f82fe
file:
batch:
- statement:
Expand Down Expand Up @@ -72,8 +72,7 @@ file:
- expression:
literal: "'20001231'"
- comma: ','
- expression:
literal: '101'
- literal: '101'
- end_bracket: )
groupby_clause:
- keyword: GROUP
Expand Down Expand Up @@ -147,8 +146,7 @@ file:
- expression:
literal: "'20001231'"
- comma: ','
- expression:
literal: '101'
- literal: '101'
- end_bracket: )
groupby_clause:
- keyword: GROUP
Expand Down Expand Up @@ -232,8 +230,7 @@ file:
- expression:
literal: "'20010630'"
- comma: ','
- expression:
literal: '101'
- literal: '101'
- end_bracket: )
statement_terminator: ;
- statement:
Expand Down
21 changes: 21 additions & 0 deletions test/fixtures/dialects/tsql/date_functions.sql
@@ -0,0 +1,21 @@
select convert(
date,
dateadd(
month,
datediff(
month,
0,
t.valid_from_date
),
0
)
) as valid_from_date
from t as t
where t.activity_month >=
convert(
date,
dateadd(
yy,
datediff(yy, 0, getdate()
) - 1, 0)
)
116 changes: 116 additions & 0 deletions test/fixtures/dialects/tsql/date_functions.yml
@@ -0,0 +1,116 @@
# 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: 40f29d7194a7ef8826f20fb21230deceda1301d6e26e7ee6299e08313ca7a65a
file:
batch:
statement:
select_statement:
select_clause:
keyword: select
select_clause_element:
function:
function_name:
keyword: convert
bracketed:
start_bracket: (
data_type:
identifier: date
comma: ','
expression:
function:
function_name:
function_name_identifier: dateadd
bracketed:
- start_bracket: (
- date_part: month
- comma: ','
- expression:
function:
function_name:
function_name_identifier: datediff
bracketed:
- start_bracket: (
- date_part: month
- comma: ','
- expression:
literal: '0'
- comma: ','
- expression:
column_reference:
- identifier: t
- dot: .
- identifier: valid_from_date
- end_bracket: )
- comma: ','
- expression:
literal: '0'
- end_bracket: )
end_bracket: )
alias_expression:
keyword: as
identifier: valid_from_date
from_clause:
keyword: from
from_expression:
from_expression_element:
table_expression:
table_reference:
identifier: t
alias_expression:
keyword: as
identifier: t
where_clause:
keyword: where
expression:
column_reference:
- identifier: t
- dot: .
- identifier: activity_month
comparison_operator:
- raw_comparison_operator: '>'
- raw_comparison_operator: '='
function:
function_name:
keyword: convert
bracketed:
start_bracket: (
data_type:
identifier: date
comma: ','
expression:
function:
function_name:
function_name_identifier: dateadd
bracketed:
- start_bracket: (
- date_part: yy
- comma: ','
- expression:
function:
function_name:
function_name_identifier: datediff
bracketed:
- start_bracket: (
- date_part: yy
- comma: ','
- expression:
literal: '0'
- comma: ','
- expression:
function:
function_name:
function_name_identifier: getdate
bracketed:
start_bracket: (
end_bracket: )
- end_bracket: )
binary_operator: '-'
literal: '1'
- comma: ','
- expression:
literal: '0'
- end_bracket: )
end_bracket: )
14 changes: 7 additions & 7 deletions test/fixtures/dialects/tsql/functions_a.yml
Expand Up @@ -3,7 +3,7 @@
# 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: 7fe5e4b983011fd90f3ccda59abb9331f668758dd7ab8a6deecd9ba91864c854
_hash: b31c58fb4d3cf54ef1b50ffb06ff766a31b0f499ce6240f20b4f6319028e79b6
file:
- batch:
statement:
Expand Down Expand Up @@ -108,13 +108,13 @@ file:
- data_type:
identifier: varchar
- comma: ','
- data_type:
- identifier: tbl_b
- dot: .
- identifier: column1
- comma: ','
- expression:
literal: '23'
column_reference:
- identifier: tbl_b
- dot: .
- identifier: column1
- comma: ','
- literal: '23'
- end_bracket: )
alias_expression:
keyword: AS
Expand Down

0 comments on commit bdd8dde

Please sign in to comment.