updated documenation
This commit is contained in:
parent
85b9ed2cf2
commit
38e480ec0e
30
README.md
30
README.md
|
@ -1,5 +1,5 @@
|
||||||
SQL Parser (C++)
|
C++ SQL Parser for Hyrise
|
||||||
==========
|
=========================
|
||||||
|
|
||||||
This is a SQL Parser for C++. It parses the given SQL query into C++ objects.
|
This is a SQL Parser for C++. It parses the given SQL query into C++ objects.
|
||||||
It is developed for integration in hyrise (https://github.com/hyrise/hyrise), but can be used in other environments as well.
|
It is developed for integration in hyrise (https://github.com/hyrise/hyrise), but can be used in other environments as well.
|
||||||
|
@ -14,26 +14,10 @@ To create the full parser code run `make build`. The parser library code is crea
|
||||||
|
|
||||||
To use the SQL Parser in your own code, you only need to include `SQLParser.h` and build+link all the source files from the parser with your project. See `hyrise/src/lib/access/sql/SQLQueryParser.cpp` for how it's used in Hyrise.
|
To use the SQL Parser in your own code, you only need to include `SQLParser.h` and build+link all the source files from the parser with your project. See `hyrise/src/lib/access/sql/SQLQueryParser.cpp` for how it's used in Hyrise.
|
||||||
|
|
||||||
### Run tests
|
**Important:** Execute all tests by calling `make test`.
|
||||||
|
|
||||||
To execute all tests run: `./run_tests.sh`.
|
### Documentation
|
||||||
|
|
||||||
### Update in Hyrise
|
* [Developer Documentation](docs/documentation.md)
|
||||||
|
* [Integration in Hyrise](docs/integration.md)
|
||||||
Run `./deploy_to_hyris.sh path/to/hyrise` to update the SQL parser within Hyrise.
|
* [Known Issues](docs/issues.md)
|
||||||
|
|
||||||
### Capabilities (Can and Can't do)
|
|
||||||
|
|
||||||
**Can**
|
|
||||||
* Single select statements
|
|
||||||
* Join expressions
|
|
||||||
* Create tables
|
|
||||||
* Insert statements
|
|
||||||
* Delete/Truncate statements
|
|
||||||
|
|
||||||
**Can't (yet)**
|
|
||||||
* Having clause
|
|
||||||
* Update statements
|
|
||||||
* Union clauses
|
|
||||||
* Create anything other than tables
|
|
||||||
* Alter/Rename statements
|
|
|
@ -1,21 +1,39 @@
|
||||||
# Developer Documentation
|
Developer Documentation
|
||||||
|
=======================
|
||||||
|
|
||||||
This page contains information about how to extend this parser with new functionalities.
|
This page contains information about how to extend this parser with new functionalities.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Extending the Grammar
|
|
||||||
|
|
||||||
TODO
|
|
||||||
|
|
||||||
|
|
||||||
## Implementing Statement Class
|
## Implementing Statement Class
|
||||||
|
|
||||||
TODO
|
Create a new file and class in src/lib/statements/ or extend any of the existing Statements. Every statement needs to have the base class SQLStatement and needs to call its super constructor with its type. If your defining a new statement type, you need to define a new StatementType in SQLStatement.h.
|
||||||
|
|
||||||
|
It is important that you create an appropriate constructor for your statement that zero-initializes all its pointer variables and that your create an appropriate destructor.
|
||||||
|
|
||||||
|
Lastly you need to include your new file in src/lib/sqllib.h
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Extending the Grammar
|
||||||
|
|
||||||
|
Related files:
|
||||||
|
* src/parser/bison_parser.y
|
||||||
|
* src/parser/flex_lexer.l
|
||||||
|
* src/parser/keywordlist_generator.py
|
||||||
|
* src/parser/sql_keywords.txt
|
||||||
|
|
||||||
|
To extend the grammar the file you will mostly have to deal with is the bison grammar definition in src/parser/bison_parser.y.
|
||||||
|
|
||||||
|
If your extending an existing statement, skip to the non-terminal definition for that statement. I.e. for an InsertStatement the non-terminal insert_statement.
|
||||||
|
|
||||||
|
If your defining a new statement, you will need to define your type in the \%union directive `hsql::ExampleStatement example_stmt`. Next you need to associate this type with a non-terminal `\%type <example_stmt> example_statement`. Then you have to define the non-terminal `example_statement`. Look the other non-terminals for statements to figure out how.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Implementing Tests
|
## Implementing Tests
|
||||||
|
|
||||||
TODO
|
Related files:
|
||||||
|
* src/sql_tests.cpp
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,16 @@
|
||||||
@GENERATE_LATEX = NO
|
@GENERATE_LATEX = NO
|
||||||
@GENERATE_HTML = YES
|
@GENERATE_HTML = YES
|
||||||
|
|
||||||
|
@INCLUDE_FILE_PATTERNS = *.y *.l
|
||||||
|
@FILE_PATTERNS = *.y *.l *.h *.cpp *.md
|
||||||
|
|
||||||
|
|
||||||
@INPUT = README.md \
|
@INPUT = README.md \
|
||||||
docs/ \
|
docs/ \
|
||||||
src/parser/SQLParser.h \
|
src/parser/SQLParser.h \
|
||||||
src/parser/SQLParser.cpp \
|
src/parser/SQLParser.cpp \
|
||||||
|
src/parser/bison_parser.y \
|
||||||
|
src/parser/flex_lexer.l \
|
||||||
src/lib/ \
|
src/lib/ \
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
Integration in Hyrise
|
||||||
|
=====================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Update the Parser in Hyrise
|
||||||
|
|
||||||
|
Run `./deploy_to_hyrise.sh path/to/hyrise` to update the SQL parser code within Hyrise.
|
|
@ -0,0 +1,11 @@
|
||||||
|
Known Issues
|
||||||
|
============
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Missing Functionality
|
||||||
|
|
||||||
|
* Having clause
|
||||||
|
* Union clauses
|
||||||
|
* Create anything other than tables
|
||||||
|
* Alter/Rename statements
|
Loading…
Reference in New Issue