diff options
| author | ali-tny <aliteeney@googlemail.com> | 2020-09-26 16:29:40 +1000 |
|---|---|---|
| committer | Andi Albrecht <albrecht.andi@gmail.com> | 2020-09-30 07:21:06 +0200 |
| commit | 4c570778b2e1c06e8bfcb3c48ae5baeff908fcdf (patch) | |
| tree | 20daf054a67724accffe31f4c350f43c776b06ae | |
| parent | 1499cffcd7c4d635b4297b44d48fb4fe94cf988e (diff) | |
| download | sqlparse-4c570778b2e1c06e8bfcb3c48ae5baeff908fcdf.tar.gz | |
Add postgres WINDOW keyword
Postgres allows statements of the form:
```sql
SELECT col_1, col_2, SUM(col_3) OVER w
FROM x
WINDOW w AS (PARTITION BY col_1 ORDER BY col_2)
```
where the window is defined once at the end of the query (see
https://www.postgresql.org/docs/9.5/sql-select.html).
This change adds WINDOW as a postgres keyword, preventing queries like
the above being misparsed, with table name and WINDOW being grouped into
an single identifier <Identifier 'x WINDOW'>.
| -rw-r--r-- | sqlparse/keywords.py | 1 | ||||
| -rw-r--r-- | tests/test_tokenize.py | 6 |
2 files changed, 7 insertions, 0 deletions
diff --git a/sqlparse/keywords.py b/sqlparse/keywords.py index 68ced92..8c872fd 100644 --- a/sqlparse/keywords.py +++ b/sqlparse/keywords.py @@ -833,6 +833,7 @@ KEYWORDS_ORACLE = { # PostgreSQL Syntax KEYWORDS_PLPGSQL = { + 'WINDOW': tokens.Keyword, 'PARTITION': tokens.Keyword, 'OVER': tokens.Keyword, 'PERFORM': tokens.Keyword, diff --git a/tests/test_tokenize.py b/tests/test_tokenize.py index 0d7f878..af0ba16 100644 --- a/tests/test_tokenize.py +++ b/tests/test_tokenize.py @@ -202,6 +202,12 @@ def test_parse_order_by(): assert p.tokens[0].ttype is T.Keyword +def test_parse_window_as(): + p = sqlparse.parse('WINDOW w AS')[0] + assert len(p.tokens) == 5 + assert p.tokens[0].ttype is T.Keyword + + @pytest.mark.parametrize('s', ( "LIKE", "ILIKE", "NOT LIKE", "NOT ILIKE", "NOT LIKE", "NOT ILIKE", |
