Commit graph

23 commits

Author SHA1 Message Date
Nickolay Ponomarev
d4de248c73 Support OVER clause for window/analytic functions
Since this changes SQLFunction anyway, changed its `id` field to `name`,
as we don't seem to use "id" to mean "name" anywhere else.
2019-04-20 22:51:29 +03:00
Nikhil Benesch
23a0fc79f5
Support CREATE MATERIALIZED VIEW 2019-03-07 13:14:33 -05:00
Nickolay Ponomarev
52e0f55b6f Support UNION/EXCEPT/INTERSECT 2019-02-11 05:14:36 +03:00
Nickolay Ponomarev
bed03abe44 Support AS and qualified wildcards in SELECT 2019-02-11 05:13:48 +03:00
Nickolay Ponomarev
b9f4b503b6 Support different quoting styles for delimited identifiers
The dialect information is from https://en.wikibooks.org/wiki/SQL_Dialects_Reference/Data_structure_definition/Delimited_identifiers
2019-02-07 05:34:29 +03:00
Nickolay Ponomarev
0c0cbcaff4 Support basic CREATE VIEW 2019-02-07 05:34:12 +03:00
Nickolay Ponomarev
50b5724c39 Don't parse ORDER BY as a table alias (8/8) 2019-01-31 03:57:17 +03:00
Nickolay Ponomarev
76ec175d20 Support table aliases without AS (7/8)
...as in `FROM foo bar WHERE bar.x > 1`.

To avoid ambiguity as to whether a token is an alias or a keyword, we
maintain a blacklist of keywords, that can follow a "table factor", to
prevent parsing them as an alias. This "context-specific reserved
keyword" approach lets us accept more SQL that's valid in some dialects,
than a list of globally reserved keywords. Also some dialects (e.g.
Oracle) apparently don't reserve some keywords (like JOIN), while
presumably they won't accept them as an alias (`FROM foo JOIN` meaning
`FROM foo AS JOIN`).
2019-01-31 03:57:17 +03:00
Nickolay Ponomarev
f87230553e Remove dialect-specific keyword lists (2/8)
Now populating SQLWord.keyword based on the list of globally supported
keywords.
2019-01-31 03:57:16 +03:00
Nickolay Ponomarev
9a8b6a8e64 Rework keyword/identifier parsing (1/8)
Fold Token::{Keyword, Identifier, DoubleQuotedString} into one
Token::SQLWord, which has the necessary information (was it a
known keyword and/or was it quoted).

This lets the parser easily accept DoubleQuotedString (a quoted
identifier) everywhere it expects an Identifier in the same match
arm. (To complete support of quoted identifiers, or "delimited
identifiers" as the spec calls them, a TODO in parse_tablename()
ought to be addressed.)

    As an aside, per <https://en.wikibooks.org/wiki/SQL_Dialects_Reference/Data_structure_definition/Delimited_identifiers>
    sqlite seems to be the only one supporting 'identifier'
    (which is rather hairy, since it can also be a string
    literal), and `identifier` seems only to be supported by
    MySQL. I didn't implement either one.

This also allows the use of `parse`/`expect_keyword` machinery
for non-reserved keywords: previously they relied on the keyword
being a Token::Keyword, which wasn't a Token::Identifier, and so
wasn't accepted as one.

Now whether a keyword can be used as an identifier can be decided
by the parser. (I didn't add a blacklist of "reserved" keywords,
so that any keyword which doesn't have a special meaning in the
parser could be used as an identifier. The list of keywords in
the dialect could be re-used for that purpose at a later stage.)
2019-01-31 03:57:16 +03:00
Nickolay Ponomarev
dce09f8054 Fix a mistake in merge conflict resolution earlier 2019-01-13 00:56:51 +03:00
Andy Grove
f8c6fa96f4 fix regression 2019-01-12 11:11:18 -07:00
Andy Grove
ab423bc9dc
Merge branch 'master' into join-support 2019-01-12 08:33:12 -07:00
Andy Grove
e863bc041c cargo fmt, fix compiler warnings 2018-12-16 13:57:01 -07:00
Clemens Winter
9d3906d655 Add LIKE token GenericSQLDialect 2018-12-16 11:47:01 -08:00
Clemens Winter
91aa985ed0 Add LIKE operator 2018-12-16 11:26:09 -08:00
Fredrik Roos
72024661a9 More tests and some small bugfixes 2018-11-18 00:53:39 +01:00
Fredrik Roos
7624095738 Support for joins 2018-11-17 15:40:24 +01:00
Nickolay Ponomarev
5a396bb9b4 Support "searched" CASE expressions (#15)
https://jakewheat.github.io/sql-overview/sql-2011-foundation-grammar.html#searched-case
2018-10-14 20:45:32 +03:00
Andy Grove
beb1a7a735 clean up use of modules 2018-10-06 10:04:22 -06:00
Andy Grove
722ea7a91b ran cargo fmt 2018-10-06 09:39:26 -06:00
Jovansonlee Cesar
24153aee53 keywords are now generated via macro to avoid misspellings, dialects should lookup to these list of keywords to avoid mispellings 2018-10-01 00:58:20 +08:00
Jovansonlee Cesar
d66e4848bd modularize dialects into their own submodules
remove assertion in copy sql, conversion to_string is unfinished
2018-09-30 13:35:24 +08:00