COAR  1.0
COAR - DMS system
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups
Search

Module search, describes classes and syntax of search in COAR-DMS. More...

Classes

class  query
class  queryContext

Detailed Description

Module search, describes classes and syntax of search in COAR-DMS.

Gramatika mini jazyka COAR-DMS query alebo cquery vo forme zapisu pre [bison|yacc].

query:
simple_table tSEMICOLON
| simple_table order_by_clause tSEMICOLON

simple_table: tSELECT select_list from_clause where_clause
select_list: tASTERISK
| select_sublist

select_sublist: select_sublist tCOMMA select_sublist
| column_name
| column_name tAS correlation_name

from_clause: tFROM table_name

where_clause: tWHERE bool_term

bool_term: predicate
| bool_term tAND bool_term
| bool_term tOR bool_term
| tLEFTBRACKET bool_term tRIGHTBRACKET
| tNOT bool_term

predicate: comparison_predicate
| in_predicate
| like_predicate
| null_predicate
| text_search_predicate
| folder_predicate

comp_op: tEQUALS
| tLESSTHAN tMORETHAN
| tLESSTHAN
| tMORETHAN
| tLESSTHAN tEQUALS
| tMORETHAN tEQUALS

literal: signed_numeric_literal
| character_string_literal
| datetime_literal
| boolean_literal

comparison_predicate: column_name comp_op literal

in_predicate: column_name tIN tLEFTBRACKET in_value_list tRIGHTBRACKET
| column_name tNOT tIN tLEFTBRACKET in_value_list tRIGHTBRACKET

like_predicate: column_name tLIKE character_string_literal
| column_name tNOT tLIKE character_string_literal

null_predicate: column_name tIS tNULL
| column_name tIS tNOT tNULL

text_search_predicate: tCONTAINS tLEFTBRACKET character_string_literal tRIGHTBRACKET

folder_predicate: tINFOLDER tLEFTBRACKET folder_id tRIGHTBRACKET
| tINTREE tLEFTBRACKET folder_id tRIGHTBRACKET

in_value_list: literal
| in_value_list tCOMMA literal

order_by_clause: tORDERBY sort_specification

sort_specification: sort_specification tCOMMA sort_specification
| column_name tASC
| column_name tDESC
| column_name

correlation_name: tSTRVAL

table_name: tSTRVAL

column_name: tSTRVAL

folder_id: tINTVAL

signed_numeric_literal: tINTVAL
| tFLOATVAL

character_string_literal: tQUOTEDSTR
| tDQUOTEDSTR

datetime_literal: tDATE
| tDATETIME

boolean_literal: tBOOLVAL

%token tSELECT tAS tFROM tNOT tIN tIS tASC tDESC tORDERBY tCONTAINS tLIKE
%token tNULL tANY tINFOLDER tINTREE tWHERE tOR tAND tASTERISK tBACKSLASH tQUOTE
%token tDOUBLEQUOTE tDASH tLEFTBRACKET tRIGHTBRACKET tCOMMA tDOT tSEMICOLON tSCOREFUNCTION 
%token  tLESSTHAN tMORETHAN tEQUALS tDQUOTEDSTR tQUOTEDSTR tDATE tDATETIME tSTRVAL
%token  tINTVAL
%token  tFLOATVAL
%token  tBOOLVAL

%type  comp_op table_name correlation_name column_name  
%type  in_value_list literal character_string_literal datetime_literal boolean_literal signed_numeric_literal folder_id
%type  predicate comparison_predicate in_predicate like_predicate null_predicate text_search_predicate folder_predicate 
%type  bool_term

%left	tOR
%left	tAND
%left	tNOT

EXP 		"e"
DIGIT		[0-9]
DECIMAL		"."
SIGN 		"+"|"-"
CHAR     	[a-z]|":"
SELECT   	"SELECT"
AS		"AS"
FROM		"FROM"
WHERE    	"WHERE"
NOT		"NOT"
IN		"IN"
IS		"IS"
ASC		"ASC"
DESC		"DESC"
ORDERBY		"ORDER BY"
TRUE		"TRUE"
FALSE		"FALSE"
AND		"AND"
OR		"OR"
CONTAINS 	"CONTAINS"
LIKE 		"LIKE"
NULL		"NULL"
ANY		"ANY"
INFOLDER 	"IN FOLDER"
INTREE		"IN TREE"
SCOREFUNCTION	"SCORE()"
SPACE    	[ \t\n]
ASTERISK	"*"
BACKSLASH 	"\\"
QUOTE		\'
DOUBLEQUOTE 	\"
DASH 		'-'
LEFTBRACKET  	"("
RIGHTBRACKET 	")"
COMMA		","
DOT		"."
EQUALS		"="
LESSTHAN	"<"
MORETHAN	">"
SEMICOLON 	";"
ALLOWEDQUOTEDCHARS [^\'] 
ALLOWEDDQUOTEDCHARS [^\"]

  /*quotedstrings*/
{QUOTE}{ALLOWEDQUOTEDCHARS}*{QUOTE} { yylval->strval = strdup(yytext); return tQUOTEDSTR; }
{DOUBLEQUOTE}{ALLOWEDDQUOTEDCHARS}*{DOUBLEQUOTE} { yylval->strval = strdup(yytext); return tDQUOTEDSTR; }

  /*numbers*/
{DIGIT}+{DECIMAL}{DIGIT}*{EXP}{SIGN}?{DIGIT}+ { yylval->floatval = atof(yytext); return tFLOATVAL; }
{DIGIT}+{DECIMAL}{DIGIT}* { yylval->floatval = atof(yytext); return tFLOATVAL; }
{DIGIT}+ { yylval->intval = atoi(yytext); return tINTVAL; }

  /*keywords*/
{SCOREFUNCTION} { return tSCOREFUNCTION; }
{ORDERBY} {return tORDERBY;}
{WHERE} { return tWHERE; }
{CONTAINS} { return tCONTAINS; }
{INFOLDER} { return tINFOLDER; }
{ANY} { return tANY; }
{SELECT} { return tSELECT; }
{OR} { return tOR; }
{AND} { return tAND; }
{LIKE} { return tLIKE; }
{INTREE} { return tINTREE; }
{FROM} { return tFROM;}
{NOT} { return tNOT;}
{ASC} {return tASC;}
{DESC} { return tDESC;}
{IN} { return tIN;}
{AS} { return tAS;}
{IS} { return tIS;}

  /*keyvalues*/
{TRUE} { yylval->boolval = 1; return tBOOLVAL; }
{FALSE} { yylval->boolval = 0; return tBOOLVAL; }
{NULL} { return tNULL; }

  /*chars*/
{ASTERISK} { return tASTERISK; }
{DOT} { return tDOT; }
{LEFTBRACKET} { return tLEFTBRACKET; }
{RIGHTBRACKET} { return tRIGHTBRACKET; }
{EQUALS} { yylval->strval = strdup(yytext); return tEQUALS; }
{LESSTHAN} { yylval->strval = strdup(yytext); return tLESSTHAN; }
{MORETHAN} { yylval->strval = strdup(yytext); return tMORETHAN; }
{COMMA} { return tCOMMA; }
{SEMICOLON} { return tSEMICOLON; }

  /*ignorovane znaky*/
{SPACE}+ {}

  /*vsetko ostatne sa rata ako string*/
{CHAR}+ {  yylval->strval = strdup(yytext); return tSTRVAL; }