| Copyright | Jean Carlo Giambastiani Lopes 2017 |
|---|---|
| License | MIT |
| Stability | experimental |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Language.Sql.AST
Description
A SQL parser implementation of the minimum required for a ODBC driver.
EBNF:
character = ? any character ?;
letter = lower-case-letter | upper-case-letter;
lower-case-letter = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j'
| 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't'
| 'u' | 'v' | 'w' | 'x' | 'y' | 'z' ;
upper-case-letter = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J'
| 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T'
| 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' ;
digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' ;- data MultiplicationOperator
- data Sign
- data DynamicParameter = DynamicParameter
- data ComparisonOperator
- newtype UnsignedInteger = UnsignedInteger Int
- newtype Literal = Literal String
- newtype UserDefinedName = UserDefinedName String
- newtype TableIdentifier = TableIdentifier UserDefinedName
- newtype BaseTableIdentifier = BaseTableIdentifier UserDefinedName
- newtype ColumnIdentifier = ColumnIdentifier UserDefinedName
- newtype TableName = TableName TableIdentifier
- data ColumnName = ColumnName (Maybe TableName) ColumnIdentifier
- newtype BaseTableName = BaseTableName BaseTableIdentifier
- newtype TableReference = TableReference TableName
- newtype TableReferenceList = TableReferenceList (NonEmpty TableReference)
- data SortOrdering
- data SortSpecification
- newtype OrderByClause = OrderByClause (NonEmpty SortSpecification)
- data DataType
- data Expression = Expression Term (Maybe ExpressionOp)
- data ExpressionOp = ExpressionOp Sign Expression
- data Factor = Factor (Maybe Sign) Primary
- data Term = Term Factor (Maybe TermOp)
- data TermOp = TermOp MultiplicationOperator Term
- data Primary
- newtype SelectSubList = SelectSubList Expression
- data SelectList
- data InsertValue
- data ComparisonPredicate = ComparisonPredicate Expression ComparisonOperator Expression
- data Not = Not
- data BooleanFactor = BooleanFactor (Maybe Not) BooleanPrimary
- data BooleanPrimary
- data BooleanAnd = BooleanAnd BooleanTerm
- data BooleanTerm = BooleanTerm BooleanFactor (Maybe BooleanAnd)
- data BooleanOr = BooleanOr SearchCondition
- data SearchCondition = SearchCondition BooleanTerm (Maybe BooleanOr)
- data Distinct = Distinct
- data ColumnAndType = ColumnAndType ColumnIdentifier DataType
- data CreateTable = CreateTable BaseTableName (NonEmpty ColumnAndType)
- data Drop = Drop BaseTableName
- data Select = Select (Maybe Distinct) SelectList TableReferenceList (Maybe SearchCondition) (Maybe OrderByClause)
- data Delete = Delete TableName (Maybe SearchCondition)
- type ColumnIdList = NonEmpty ColumnIdentifier
- type InsertValueList = NonEmpty InsertValue
- data Insert = Insert TableName (Maybe ColumnIdList) InsertValueList
- data UpdateValue
- data UpdateColumn = UpdateColumn ColumnIdentifier UpdateValue
- type UpdateColumnList = NonEmpty UpdateColumn
- data Update = Update TableName UpdateColumnList (Maybe SearchCondition)
- data Statement
- newtype StatementList = StatementList (NonEmpty Statement)
Documentation
data MultiplicationOperator Source #
EBNF:
multiplication-operator = '*' | '/' ;
EBNF:
sign = '+' | '-' ;
data ComparisonOperator Source #
EBNF:
comparison-operator = '<' | '>' | '<=' | '>=' | '=' | '<>' ;
Constructors
| LessThan | |
| GreaterThan | |
| LessOrEqualTo | |
| GreaterOrEqualTo | |
| Equality | |
| Inequality |
newtype UnsignedInteger Source #
EBNF:
unsigned-integer = digit, { digit };Constructors
| UnsignedInteger Int |
Instances
EBNF:
literal = "'", { character - "'" | "''" }, "'";newtype UserDefinedName Source #
EBNF:
user-defined-name = letter, { digit | letter | '_' };Constructors
| UserDefinedName String |
Instances
newtype TableIdentifier Source #
EBNF:
table-identifier = user-defined-name;
Constructors
| TableIdentifier UserDefinedName |
Instances
newtype BaseTableIdentifier Source #
EBNF:
base-table-identifier = user-defined-name;
Constructors
| BaseTableIdentifier UserDefinedName |
newtype ColumnIdentifier Source #
EBNF:
column-identifier = user-defined-name;
Constructors
| ColumnIdentifier UserDefinedName |
Instances
EBNF:
table-name = table-identifier;
Constructors
| TableName TableIdentifier |
data ColumnName Source #
EBNF:
column-name = [ table-name, '.' ], column-identifier;
Constructors
| ColumnName (Maybe TableName) ColumnIdentifier |
Instances
newtype BaseTableName Source #
EBNF:
base-table-name = base-table-identifier;
Constructors
| BaseTableName BaseTableIdentifier |
Instances
newtype TableReference Source #
EBNF:
table-reference = table-name;
Constructors
| TableReference TableName |
Instances
newtype TableReferenceList Source #
EBNF:
table-reference-list = table-reference, { ',', table-reference }; Constructors
| TableReferenceList (NonEmpty TableReference) |
data SortOrdering Source #
EBNF:
sort-ordering = 'ASC' | 'DESC' ;
Constructors
| Ascending | |
| Descending |
Instances
data SortSpecification Source #
EBNF:
sort-specification = (unsigned-integer | column-name), [ sort-ordering ];
Constructors
| SortByColumnPosition UnsignedInteger (Maybe SortOrdering) | |
| SortByColumnName ColumnName (Maybe SortOrdering) |
Instances
newtype OrderByClause Source #
EBNF:
order-by-clause = 'ORDER', 'BY', sort-specification, { ',', sort-specification };Constructors
| OrderByClause (NonEmpty SortSpecification) |
Instances
EBNF:
data-type = 'char', '(', unsigned-integer, ')'
| 'varchar', '(', unsigned-integer, ')'
; Constructors
| Char UnsignedInteger | |
| VarChar UnsignedInteger |
data Expression Source #
EBNF:
expression = term, [ expression-op ];
Constructors
| Expression Term (Maybe ExpressionOp) |
Instances
data ExpressionOp Source #
EBNF:
expression-op = sign, expression;
Constructors
| ExpressionOp Sign Expression |
Instances
EBNF:
factor = [ sign ], primary;
EBNF:
term = factor, [ term-op ]
EBNF:
term-op = multiplication-operator, term
Constructors
| TermOp MultiplicationOperator Term |
EBNF:
primary = column-name | dynamic-parameter | literal | '(', expression, ')'; newtype SelectSubList Source #
EBNF:
select-sublist = expression;
Constructors
| SelectSubList Expression |
Instances
data SelectList Source #
EBNF:
(* select-list cannot contain parameters *)
select-list = '*'
| select-sublist, { ',', select-sublist }
;Constructors
| SelectAll | |
| SelectList (NonEmpty SelectSubList) |
Instances
data InsertValue Source #
EBNF:
insert-value = dynamic-parameter | literal | 'NULL' | 'USER' ;
Instances
data ComparisonPredicate Source #
EBNF:
comparison-predicate = expression, comparison-operator, expression;
Constructors
| ComparisonPredicate Expression ComparisonOperator Expression |
EBNF:
not = 'not';
Constructors
| Not |
data BooleanFactor Source #
EBNF:
boolean-factor = [ not ], boolean-primary;
Constructors
| BooleanFactor (Maybe Not) BooleanPrimary |
Instances
data BooleanPrimary Source #
EBNF:
boolean-primary = comparison-predicate
| '(', search-condition, ')'
;Instances
data BooleanAnd Source #
EBNF:
boolean-and = 'and', boolean-term;
Constructors
| BooleanAnd BooleanTerm |
Instances
data BooleanTerm Source #
EBNF:
boolean-term = boolean-factor, [ boolean-and ];
Constructors
| BooleanTerm BooleanFactor (Maybe BooleanAnd) |
Instances
EBNF:
boolean-or = 'or', search-condition;
Constructors
| BooleanOr SearchCondition |
data SearchCondition Source #
EBNF:
search-condition = boolean-term, [ boolean-or ];
Constructors
| SearchCondition BooleanTerm (Maybe BooleanOr) |
Instances
EBNF:
distinct = 'DISTINCT';
Constructors
| Distinct |
data ColumnAndType Source #
EBNF:
column-and-type = column-identifier, data-type;
Constructors
| ColumnAndType ColumnIdentifier DataType |
Instances
data CreateTable Source #
EBNF:
create-table-statement = 'CREATE', 'TABLE', base-table-name, '(',
column-and-type, { ',', column-and-type }
')'Constructors
| CreateTable BaseTableName (NonEmpty ColumnAndType) |
Instances
EBNF:
drop-table-statement = 'DROP', 'TABLE', base-table-name;
Constructors
| Drop BaseTableName |
EBNF:
select-statement = 'SELECT', [ distinct ], select-list,
'FROM' table-reference-list,
['WHERE' search-condition],
[order-by-clause];Constructors
| Select (Maybe Distinct) SelectList TableReferenceList (Maybe SearchCondition) (Maybe OrderByClause) |
EBNF:
delete-statement-searched = 'DELETE', 'FROM', table-name
, [ 'WHERE', search-condition ];Constructors
| Delete TableName (Maybe SearchCondition) |
type ColumnIdList = NonEmpty ColumnIdentifier Source #
Type alias for: EBNF:
column-identifier, { ',', column-identifier }type InsertValueList = NonEmpty InsertValue Source #
Type alias for: EBNF:
insert-value, { ',', insert-value }EBNF:
insert-statement = 'INSERT', 'INTO', table-name
, [ '(', column-identifier, { ',', column-identifier } , ')' ],
, 'VALUES', '(', insert-value, { ',', insert-value } ')'Constructors
| Insert TableName (Maybe ColumnIdList) InsertValueList |
data UpdateValue Source #
EBNF:
update-value = expression | 'NULL';
Constructors
| UpdateValueExpression Expression | |
| UpdateValueNull |
Instances
data UpdateColumn Source #
EBNF:
update-column = column-identifier, '=', update-value;
Constructors
| UpdateColumn ColumnIdentifier UpdateValue |
Instances
type UpdateColumnList = NonEmpty UpdateColumn Source #
EBNF:
update-column-list = update-column, { ',', update-column };EBNF:
update-statement-searched = 'UPDATE', table-name
, 'SET', update-column-list
, [ 'WHERE', search-condition ]
;Constructors
| Update TableName UpdateColumnList (Maybe SearchCondition) |
EBNF:
statement = create-table-statement
| delete-statement-searched
| drop-table-statement
| insert-statement
| select-statement
| update-statement-searched
;newtype StatementList Source #
EBNF:
statement-list = statenment, { ';', statement };Constructors
| StatementList (NonEmpty Statement) |
Instances