Nickolay Ponomarev
364f62f333
Parse table-valued functions and MSSQL-specific WITH hints
...
1) Table-valued functions (`FROM possibly_qualified.fn(arg1, ...)`) is
not part of ANSI SQL, but is supported in Postgres and MSSQL at least:
- "38.5.7. SQL Functions as Table Sources" <https://www.postgresql.org/docs/current/xfunc-sql.html#XFUNC-SQL-TABLE-FUNCTIONS >
- `user_defined_function` in "FROM (Transact-SQL)" <https://docs.microsoft.com/en-us/sql/t-sql/queries/from-transact-sql?view=sql-server-2017 >
I've considered renaming TableFactor::Table to something else (Object?),
now that it can be a TVF, but couldn't come up with a satisfactory name.
2) "WITH hints" is MSSQL-specific syntax
<https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017 >
Note that MSSQL supports the following ways of specifying hints, which
are parsed with varying degrees of accuracy:
- `FROM tab (NOLOCK)` -- deprecated syntax, parsed as a function with a `NOLOCK` argument
- `FROM tab C (NOLOCK)` -- deprecated syntax, rejected ATM
- `FROM TAB C WITH (NOLOCK)` -- OK
2019-04-27 21:14:18 +03:00
Nickolay Ponomarev
e5e3d71354
Support CASE operand WHEN expected_value THEN ..
...
Another part of #15
2019-04-27 21:14:18 +03:00
Nickolay Ponomarev
2aa4c267e7
Simplify CASE parsing
2019-04-27 21:14:18 +03:00
Nickolay Ponomarev
e5c0c426b7
Simplify parse_infix()
...
- ASTNode::SQLBinaryExpr is now constructed in one location
- There's no duplicate calls to parse_in/parse_between
- The list of tokens that correspond to operators is not duplicated
in parse_infix / to_sql_operator
- ...which made it easy to distinguish between errors that could be
caused by invalid input and internal errors. I switched the latter
to `panic!()`
2019-04-27 21:14:18 +03:00
Nickolay Ponomarev
d65274bc31
Improve ALTER error messages for unsupported syntax
2019-04-27 21:14:18 +03:00
Nickolay Ponomarev
787cd9a717
Add Parser::expected()
for more succinct error handling
2019-04-27 21:14:18 +03:00
Nickolay Ponomarev
c679c7a5b4
Remove Value::Uuid
...
We don't have the code to parse UUID literals, so it's dead code, that
brings in the dependency on `uuid`.
I kept SQLType::Uuid, as it's not dead code, though it ought to be
dialect-specific.
2019-04-27 21:14:18 +03:00
Nickolay Ponomarev
6bb2acc9f8
Merge pull request #50 from nickolay/window-functions
...
Support OVER clause for window/analytic functions, add support for qualified function names
2019-04-27 21:12:08 +03:00
Andy Grove
64b1ea7a25
Merge pull request #54 from nickolay/windows-newlines
...
Support \r and \r\n line breaks in tokenizer
2019-04-27 08:54:20 -06:00
Andy Grove
07d66a93ef
Merge pull request #53 from thomas-jeepe/master
...
Fix qualified wildcard stringifying
2019-04-27 08:53:08 -06:00
Andy Grove
4cdd003cd4
Merge pull request #51 from nickolay/rust-2018
...
Rust 2018 and clippy fixes
2019-04-27 08:51:43 -06:00
Nickolay Ponomarev
bf3110f6ce
Use consume_and_return
when possible
2019-04-27 02:51:10 +03:00
Nickolay Ponomarev
6f44494910
Support \r and \r\n line breaks in tokenizer
2019-04-26 02:53:39 +03:00
Justin Haug
76d2d46496
run cargo fmt
2019-04-22 18:06:00 -04:00
Justin Haug
f9fb4bedfb
Move wildcard test to generic parser
2019-04-22 17:52:15 -04:00
Justin Haug
80aceba630
run cargo fmt
2019-04-22 17:50:12 -04:00
Justin Haug
80dccf6885
Add support for escaping single quote strings
2019-04-22 13:32:05 -04:00
Justin Haug
5b464e6b1a
Fix qualified wildcard stringifying
2019-04-22 13:10:29 -04:00
Nickolay Ponomarev
098d1c4a17
Enable clippy lints by default in RLS
2019-04-21 04:46:19 +03:00
Nickolay Ponomarev
50a2310173
Rename SQLStatement::SQLSelect to SQLQuery
...
The name was confusing:
SQLStatement::SQLSelect(
SQLQuery {
body: SQLSetExpr::Select(SQLSelect)
}
)
Fix the `large_enum_variant` clippy lint for `SQLStatement::SQLQuery`
`SQLStatement::SQLCreateView`, and `SQLSetExpr::Select`, while we're
changing the AST anyway
https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant
2019-04-21 04:46:19 +03:00
Nickolay Ponomarev
08bbce8992
Use assert_matches! instead of matching manually
...
To fix clippy warnings about assert!(true / false)
2019-04-21 04:46:19 +03:00
Nickolay Ponomarev
dee30aabe0
Fix the clippy assert!(false)
lint
...
https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants
While I don't feel it's valid, fixing it lets us act on the other, more
useful, lints.
2019-04-21 04:46:19 +03:00
Nickolay Ponomarev
a3a8626e6b
Fix a clippy lint and reduce duplication in SQLType::to_string()
2019-04-21 04:46:19 +03:00
Nickolay Ponomarev
c223eaf0aa
Fix a bunch of trivial clippy lints
2019-04-21 04:46:19 +03:00
Nickolay Ponomarev
3df2223d95
Fix clippy if_same_then_else lint
...
https://rust-lang.github.io/rust-clippy/master/#if_same_then_else
There was a bug in parsing `TIME` (not followed by {WITH | WITHOUT}
TIME ZONE) -- that parsed as SQLType::Timestamp instead of SQLType::Time
2019-04-21 04:41:11 +03:00
Nickolay Ponomarev
0634ec4a83
Apply suggestions from cargo fix --edition-idioms
2019-04-21 04:41:11 +03:00
Nickolay Ponomarev
b12a19e197
Switch to the Rust 2018 edition
...
This requires Rust 1.31 (from last year) to build, but is otherwise
compatible with the 2015-edition code.
2019-04-21 04:41:11 +03:00
Nickolay Ponomarev
9a244e059e
Fix clippy lints in "Support qualified function names"
2019-04-21 02:05:36 +03:00
Nickolay Ponomarev
de057deff6
Fix clippy lints in comma_separated_string
2019-04-21 02:05:36 +03:00
Nickolay Ponomarev
8c7e1d1c54
Update sample output in README
2019-04-20 22:51:29 +03:00
Nickolay Ponomarev
085e8a6b04
Use named fields in ExpressionWithAlias instead of a tuple
...
(This produces more natural JSON representation when serializing AST
with serde.)
2019-04-20 22:51:29 +03:00
Nickolay Ponomarev
4a5dc8dd4b
Support qualified function names
...
...e.g. `db.schema.func()`
2019-04-20 22:51:29 +03:00
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
Nickolay Ponomarev
c8e7c3b343
Introduce comma_separated_string() to reduce boilerplate in ToString impls
2019-04-20 22:51:29 +03:00
Andy Grove
ef76baa7fd
(cargo-release) start next development iteration 0.3.1
2019-04-20 07:33:37 -06:00
Andy Grove
1aa4733890
bump version
2019-04-20 07:33:21 -06:00
Andy Grove
6ebd5dd819
Merge pull request #49 from nickolay/select-distinct
...
Support SELECT DISTINCT, and a few minor tweaks
2019-04-20 07:26:13 -06:00
Nickolay Ponomarev
bbf1805729
Support SELECT DISTINCT
2019-04-20 14:21:26 +03:00
Nickolay Ponomarev
31b6076d05
Use the same order in #[derive()] for all AST types
...
(So that adding another trait can be done with a global search and replace.)
2019-04-20 14:21:26 +03:00
Nickolay Ponomarev
e113dee7e8
Fix error text for unexpected token after NOT
2019-04-20 14:21:26 +03:00
Nickolay Ponomarev
5263ee1e9e
Reduce nesting of if
s in SQLType::Decimal::to_string()
2019-04-20 14:21:26 +03:00
Nickolay Ponomarev
451513db5b
Simplify parse_function()
2019-04-20 14:21:26 +03:00
Andy Grove
d9591cd999
Merge pull request #46 from zhzy0077/feature/external_table
...
Thanks @zhzy0077 !
2019-04-13 11:32:38 -06:00
Zhiyuan Zheng
d8f824c400
merge CreateExternalTable & CreateTable.
2019-04-14 01:05:26 +08:00
Zhiyuan Zheng
35556593f5
Delete test sql file.
2019-04-11 10:53:33 +08:00
Zhiyuan Zheng
26940920ac
Add unit tests.
2019-04-09 13:28:01 +08:00
Zhiyuan Zheng
f0f6082eff
support create external table
2019-04-08 21:36:02 +08:00
Andy Grove
d1b5668fd3
Merge pull request #43 from nickolay/master
2019-04-02 21:27:30 -06:00
Nickolay Ponomarev
311f2ab429
bump version to 0.3.0, as requested in the PR
2019-04-02 09:46:21 +03:00
Nickolay Ponomarev
5de23b1e78
Merge branch 'upstream'
2019-04-02 09:16:51 +03:00