adding literals + aggregate + functions
This commit is contained in:
parent
319f2f9b43
commit
55a81cfe8a
@ -19,8 +19,11 @@ open Ast
|
||||
%token AS ON GROUP BY FILTER
|
||||
%token OR AND NOT
|
||||
%token TRUE FALSE UNKNOWN
|
||||
%token PLUS_SIGN MINUS_SIGN INTEGER FLOAT
|
||||
%token UNDERSCORE QUOTE
|
||||
%token PLUS_SIGN MINUS_SIGN
|
||||
%token DATE TIME TIMESTAMP
|
||||
%token <int> INTEGER
|
||||
%token FLOAT
|
||||
%token UNDERSCORE QUOTE COLON
|
||||
%token EOF
|
||||
%start main
|
||||
%type <query> main
|
||||
@ -48,18 +51,19 @@ greater_than_or_equals_operator:
|
||||
|
||||
(* 5.3 LITERAL *)
|
||||
literal :
|
||||
| signed_numeric_literal {}
|
||||
| general_literal {}
|
||||
| signed_numeric_literal { $1 }
|
||||
| general_literal { $1 }
|
||||
|
||||
unsigned_literal:
|
||||
(* | unsigned_numeric_literal {}*)
|
||||
| general_literal {}
|
||||
| general_literal { $1 }
|
||||
|
||||
general_literal:
|
||||
| character_string_literal {}
|
||||
| character_string_literal { $1 }
|
||||
| datetime_literal { $1 }
|
||||
|
||||
character_string_literal:
|
||||
| QUOTE IDENT QUOTE {}
|
||||
| QUOTE IDENT QUOTE { StringLiteral($2) }
|
||||
|
||||
introducer:
|
||||
| UNDERSCORE { }
|
||||
@ -78,12 +82,65 @@ sign:
|
||||
| PLUS_SIGN {}
|
||||
| MINUS_SIGN {}
|
||||
|
||||
unsigned_integer:
|
||||
| INTEGER { $1 }
|
||||
|
||||
datetime_literal:
|
||||
| date_literal { $1 }
|
||||
| time_literal { $1 }
|
||||
(*| timestamp_literal {}*)
|
||||
|
||||
date_literal:
|
||||
| DATE date_string { DateLiteral($2) }
|
||||
|
||||
time_literal:
|
||||
| TIME time_string { TimeLiteral($2) }
|
||||
|
||||
date_string:
|
||||
| QUOTE unquoted_date_string QUOTE { $2 }
|
||||
|
||||
time_string:
|
||||
| QUOTE unquoted_time_string QUOTE { $2 }
|
||||
|
||||
date_value:
|
||||
| years_value MINUS_SIGN months_value MINUS_SIGN days_value { String.concat "-" [$1;$3;$5] }
|
||||
|
||||
time_value:
|
||||
| hours_value COLON minutes_value COLON seconds_value { String.concat ":" [$1;$3;$5] }
|
||||
|
||||
unquoted_date_string:
|
||||
| date_value { $1 }
|
||||
|
||||
unquoted_time_string:
|
||||
| time_value { $1 }
|
||||
|
||||
years_value :
|
||||
| datetime_value { $1 }
|
||||
|
||||
months_value :
|
||||
| datetime_value { $1 }
|
||||
|
||||
days_value :
|
||||
| datetime_value { $1 }
|
||||
|
||||
hours_value :
|
||||
| datetime_value { $1 }
|
||||
|
||||
minutes_value :
|
||||
| datetime_value { $1 }
|
||||
|
||||
seconds_value:
|
||||
| datetime_value { $1 }
|
||||
|
||||
datetime_value :
|
||||
| unsigned_integer { string_of_int $1 }
|
||||
|
||||
(***********)
|
||||
|
||||
(* 5.4 NAMES AND IDENTIFIER *)
|
||||
|
||||
column_name :
|
||||
| IDENT {}
|
||||
| IDENT { $1 }
|
||||
|
||||
table_name :
|
||||
| IDENT { Table($1) }
|
||||
@ -110,6 +167,7 @@ parenthesized_value_expression:
|
||||
| LEFT_PAREN value_expression RIGHT_PAREN { $2 }
|
||||
|
||||
nonparenthesized_value_expression_primary:
|
||||
| unsigned_value_specification { $1 }
|
||||
| column_reference { Ref($1) }
|
||||
(*| set_function_specification { Ref("function") } *)
|
||||
|
||||
@ -118,8 +176,8 @@ nonparenthesized_value_expression_primary:
|
||||
(* 6.4 VALUE SPECIFCATION / TARGET SPECIFICATION *)
|
||||
|
||||
unsigned_value_specification:
|
||||
| unsigned_literal {}
|
||||
| general_value_specification {}
|
||||
| unsigned_literal { $1 }
|
||||
(*| general_value_specification {}*)
|
||||
|
||||
general_value_specification:
|
||||
| {}
|
||||
@ -155,7 +213,7 @@ set_function_specification:
|
||||
(* 6.25 VALUE EXPRESSION *)
|
||||
|
||||
value_expression:
|
||||
| common_value_expression {}
|
||||
| common_value_expression { $1 }
|
||||
|
||||
common_value_expression:
|
||||
(*| numeric_value_expression {}*)
|
||||
@ -170,7 +228,7 @@ reference_value_expression:
|
||||
(* 6.28 STRING VALUE EXPRESSION *)
|
||||
|
||||
string_value_expression :
|
||||
| character_value_expression {}
|
||||
| character_value_expression { $1 }
|
||||
(* | blob_value_expression {} *)
|
||||
|
||||
character_primary:
|
||||
@ -264,8 +322,9 @@ row_value_special_case :
|
||||
(* 7.4 TABLE EXPRESSION *)
|
||||
|
||||
table_expression:
|
||||
| from_clause { $1 }
|
||||
| from_clause where_clause { $1 }
|
||||
| { None }
|
||||
| from_clause { Some($1) }
|
||||
| from_clause where_clause { Some($1) }
|
||||
|
||||
(************************)
|
||||
|
||||
@ -397,13 +456,19 @@ select_list :
|
||||
| ASTERISK { [Asterisk] }
|
||||
| select_sublist { $1 }
|
||||
|
||||
(*
|
||||
select_sublist :
|
||||
| IDENT { [Column($1)] }
|
||||
| select_sublist COMMA IDENT { Column($3)::$1 }
|
||||
*)
|
||||
|
||||
select_sublist :
|
||||
| select_sublist_element { [$1] }
|
||||
| select_sublist COMMA select_sublist_element { $3::$1 }
|
||||
|
||||
select_sublist_element :
|
||||
| derived_column {}
|
||||
| qualified_asterisk {}
|
||||
| derived_column { $1 }
|
||||
(* | qualified_asterisk {} *)
|
||||
|
||||
qualified_asterisk:
|
||||
| asterisked_identifier_chain {}
|
||||
@ -416,12 +481,12 @@ asterisked_identifier :
|
||||
| IDENT {}
|
||||
|
||||
derived_column:
|
||||
| value_expression {}
|
||||
| value_expression as_clause {}
|
||||
| value_expression { Column($1, None) }
|
||||
| value_expression as_clause { Column($1, Some($2)) }
|
||||
|
||||
as_clause :
|
||||
| AS column_name {}
|
||||
| column_name {}
|
||||
| AS column_name { As($2) }
|
||||
(*| column_name { As($1) }*)
|
||||
|
||||
(****************************)
|
||||
|
||||
@ -537,31 +602,31 @@ search_condition:
|
||||
(* 10.9 AGGREGATE FUNCTION *)
|
||||
|
||||
aggregate_function:
|
||||
| COUNT LEFT_PAREN ASTERISK RIGHT_PAREN { }
|
||||
| COUNT LEFT_PAREN ASTERISK RIGHT_PAREN filter_clause { }
|
||||
| general_set_function { }
|
||||
| general_set_function filter_clause { }
|
||||
| COUNT LEFT_PAREN ASTERISK RIGHT_PAREN { Count }
|
||||
| COUNT LEFT_PAREN ASTERISK RIGHT_PAREN filter_clause { Count }
|
||||
| general_set_function { Aggregate($1) }
|
||||
| general_set_function filter_clause { Aggregate($1, $2) }
|
||||
|
||||
general_set_function:
|
||||
| set_function_type LEFT_PAREN value_expression RIGHT_PAREN { }
|
||||
| set_function_type LEFT_PAREN set_quantifier value_expression RIGHT_PAREN { }
|
||||
| set_function_type LEFT_PAREN value_expression RIGHT_PAREN { Function($1, None, $3) }
|
||||
| set_function_type LEFT_PAREN set_quantifier value_expression RIGHT_PAREN { Function($1, $3, $4) }
|
||||
|
||||
set_function_type:
|
||||
| computationnal_operation {}
|
||||
| computationnal_operation { $1 }
|
||||
|
||||
set_quantifier :
|
||||
| ALL {}
|
||||
| DISTINCT {}
|
||||
| ALL { All }
|
||||
| DISTINCT { Distinct }
|
||||
|
||||
filter_clause :
|
||||
| FILTER LEFT_PAREN WHERE search_condition RIGHT_PAREN {}
|
||||
| FILTER LEFT_PAREN WHERE search_condition RIGHT_PAREN { Filter($4) }
|
||||
|
||||
computationnal_operation:
|
||||
| AVG {}
|
||||
| MAX {}
|
||||
| MIN {}
|
||||
| SUM {}
|
||||
| COUNT {}
|
||||
| AVG { Avg }
|
||||
| MAX { Max }
|
||||
| MIN { Min }
|
||||
| SUM { Sum }
|
||||
| COUNT { Count }
|
||||
|
||||
(***************************)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user