-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
parser: Complete rewrite to LALR (#202)
This replaces the existing Earley parser (which is O(n^3)) with a LALR parser using Yacc which is an ideal O(n). Even with very short SQL statements, the existing parser was _really_ slow, so I had to build a query cache as bandaid, but that has also been removed now. This refactoring was made possible by adapting yacc from a Go implementation here: https://github.com/elliotchance/vyac. However, in keeping with the promise of this repo being completely written in V, the source has been copied to this repo. Other notable and breaking changes: 1. Not sure how this worked before, but the query may not specify a catalog in identity chains (for example, `catalog.schema.table`). The catalog must be set using `SET CATALOG`. 2. Syntax error messages will be slightly different, but should be a little more helpful. 3. There are some ambiguities with the SQL grammar, such as trying to decode what `x IS NOT TRUE` means or differentiating between `COUNT(expr)` vs `COUNT(*)` due to lookahead limitations. Some special tokens for combinations of operators and keywords have had to be added for known edge cases, but there are many remaining conflicts. I suspect these conflicts don't matter as ambiguous paths should still yield valid results, so these warnings have to be ignored for now. 4. Fixes a very minor bug where string literals in VALUES might be treated as `VARCHAR` instead of `CHARACTER` in some cases. 5. Renamed "std_" files with their position number in the standard. This helps for grouping similar sections and makes lookups easier.
- Loading branch information
1 parent
4727b8b
commit c1def77
Showing
177 changed files
with
8,519 additions
and
5,467 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,3 +7,6 @@ vsql-server | |
grammar.bnf | ||
vsql/grammar.v | ||
scripts/generate-v-client-library-docs | ||
y.output | ||
vsql/y.v | ||
vsql/y.y |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.