89015144f9
partially add buildExprParser hack to deal with some nested prefix and postfix unary operators add new file which starts going through the sql2003 grammar to try to create lots of examples for comprehensive testing of sql2003 support. replace the lexers with lexers from the tutorial project
197 lines
5.2 KiB
Plaintext
197 lines
5.2 KiB
Plaintext
continue 2003 review and tests
|
|
tutorial parser:
|
|
expr hack as best as can
|
|
left factor as much as possible
|
|
table expression in syntax
|
|
replace into this project
|
|
finish off ansi 2003 support or specific subset
|
|
summarize todos
|
|
start looking at error messages
|
|
change the booleans in the ast to better types for less ambiguity
|
|
represent missing optional bits in the ast as nothing instead of the
|
|
default
|
|
look at fixing the expression parsing completely
|
|
represent natural and using/on in the syntax more close to the
|
|
concrete syntax - don't combine
|
|
|
|
big feature summary:
|
|
all ansi sql queries
|
|
better expression tree parsing
|
|
error messages, left factor
|
|
dml, ddl, procedural sql
|
|
position annotation
|
|
type checker/ etc.
|
|
lexer
|
|
dialects
|
|
quasi quotes
|
|
typesafe sql dbms wrapper support for haskell
|
|
extensibility
|
|
performance analysis
|
|
|
|
|
|
= next release
|
|
|
|
try and use the proper css theme
|
|
create a header like in the haddock with simple-sql-parser +
|
|
contents link
|
|
change the toc gen so that it works the same as in haddock (same
|
|
div, no links on the actual titles
|
|
fix the page margins, and the table stuff: patches to the css?
|
|
|
|
release checklist:
|
|
hlint
|
|
haddock review
|
|
spell check
|
|
update changelog
|
|
update website text
|
|
regenerate the examples on the index.txt
|
|
|
|
= Later general tasks:
|
|
|
|
docs
|
|
|
|
add to website: pretty printed tpch, maybe other queries as
|
|
demonstration
|
|
|
|
add preamble to the rendered test page
|
|
|
|
add links from the supported sql page to the rendered test page for
|
|
each section -> have to section up the tests some more
|
|
|
|
testing
|
|
|
|
review tests to copy from hssqlppp
|
|
|
|
add lots more tests using SQL from the xb2 manual
|
|
|
|
much more table reference tests, for joins and aliases etc.?
|
|
|
|
review internal sql collection for more syntax/tests
|
|
|
|
other
|
|
|
|
review syntax to replace maybe and bool with better ctors
|
|
|
|
----
|
|
|
|
demo program: convert tpch to sql server syntax exe processor
|
|
|
|
review abstract syntax (e.g. combine App with SpecialOp?)
|
|
|
|
more operators
|
|
|
|
sql server top syntax
|
|
|
|
named windows
|
|
|
|
extended string literals, escapes and other flavours (like pg and
|
|
oracle custom delimiters)
|
|
|
|
run through other manuals for example queries and features: sql in a
|
|
nutshell, sql guide, sql reference guide, sql standard, sql server
|
|
manual, oracle manual, teradata manual + re-through postgresql
|
|
manual and make notes in each case of all syntax and which isn't
|
|
currently supported also.
|
|
|
|
check the order of exports, imports and functions/cases in the files
|
|
fix up the import namespaces/explicit names nicely
|
|
|
|
ast checker: checks the ast represents valid syntax, the parser
|
|
doesn't check as much as it could, and this can also be used to
|
|
check generated trees. Maybe this doesn't belong in this package
|
|
though?
|
|
|
|
= sql support
|
|
|
|
collate? -> postfix operator which binds very tightly:
|
|
a < 'foo' collate 'C'
|
|
->
|
|
Op "<" [Iden "a", SpecialOp "collate" [StringLit 'foo', StringLit
|
|
'C']]
|
|
also postfix in order by:
|
|
select a from t order by a collate 'C': add to order by syntax, one
|
|
collation per column
|
|
and on group by
|
|
a collation in ansi sql is a optional qualifier plus identifier, not a
|
|
string
|
|
have to do fixity for this to work
|
|
|
|
see what schema.fun(a) parses to and decide if this is correct
|
|
|
|
all ansi string literal syntax?
|
|
|
|
check ansi standard for operators (keywords and symbols)
|
|
|
|
proper character sets for identifiers, escapes, etc.
|
|
|
|
placeholder/positional arg
|
|
|
|
full number literals -> other bases?
|
|
apply, pivot
|
|
within group aggregate syntax
|
|
|
|
try to do full review of sql2003 query syntax
|
|
|
|
make ansi dialect which only supports ansi sql. Maybe there is a use
|
|
for a separate SQL 92, 99 and 2003 dialects?
|
|
|
|
string literals:
|
|
N'
|
|
B'
|
|
X'
|
|
U&' ?
|
|
looks like two string literals separated by any whitespace are
|
|
merged, which isn't what the postgres manual claims is the standard
|
|
plus something introducer, character set thing
|
|
union join?
|
|
corresponding by
|
|
from in substring is not optional in ansi
|
|
the keyword from is optional in trim iff there is neither
|
|
leading,etc. and explicit char
|
|
extract can accept 'timezone hour' and 'timezone minute' for the
|
|
extraction field. Could hardcode the complete allowed list in the
|
|
parser?
|
|
bunch of timezone keyword stuff
|
|
interval a to b
|
|
array specification int array or int array[5] - type name
|
|
typenames: scope, multiset,row type, ref type
|
|
unique subquery -> returns true if all the rows in the subquery are
|
|
distinct
|
|
match predicate <row value constructor> MATCH [ UNIQUE ] [ PARTIAL |
|
|
FULL ] <table subquery>
|
|
clob type: CLOB(4M) - M suffix on the precision
|
|
array element reference a[4]
|
|
regular expression substring function
|
|
between symmetric
|
|
unicode delimited identifier
|
|
character set postfix type op for string types + collate on string types
|
|
next value for
|
|
treat as
|
|
generalized invocation?
|
|
position using
|
|
multiset stuff
|
|
table sample
|
|
unnest
|
|
only
|
|
window frame exclusion: complete window support?
|
|
select t.* as (a,b,c) from t
|
|
search or cycle clause for ctes
|
|
normalized
|
|
|
|
other dialect targets:
|
|
postgres
|
|
oracle
|
|
teradata
|
|
ms sql server
|
|
mysql?
|
|
db2?
|
|
what other major dialects are there?
|
|
sqlite
|
|
sap dbmss (can't work out what are separate products or what are the
|
|
dialects)
|
|
|
|
maybe later: other dml
|
|
insert, update, delete, truncate, merge + set, show?
|
|
copy, execute?, explain?, begin/end/rollback?
|
|
|