2013-10-03 04:33:59 +00:00
|
|
|
%{
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include "query_types.h"
|
|
|
|
#include "y.tab.h"
|
2013-10-07 16:35:04 +00:00
|
|
|
|
|
|
|
#define YY_USER_ACTION \
|
|
|
|
do { \
|
2014-04-15 21:33:44 +00:00
|
|
|
yylloc_param->first_line = yylloc_param->last_line; \
|
|
|
|
yylloc_param->first_column = yylloc_param->last_column; \
|
|
|
|
yylloc_param->last_line = yylineno; \
|
|
|
|
yylloc_param->last_column += yyleng; \
|
2013-10-07 16:35:04 +00:00
|
|
|
} while(0);
|
2013-10-03 04:33:59 +00:00
|
|
|
%}
|
|
|
|
|
2013-10-07 16:35:04 +00:00
|
|
|
static int yycolumn = 1;
|
|
|
|
|
2013-10-03 04:33:59 +00:00
|
|
|
%option reentrant
|
2013-11-26 15:59:16 +00:00
|
|
|
%option debug
|
2013-10-03 04:33:59 +00:00
|
|
|
%option bison-bridge
|
2013-10-07 16:35:04 +00:00
|
|
|
%option bison-locations
|
2013-10-03 04:33:59 +00:00
|
|
|
%option noyywrap
|
2014-01-02 18:45:58 +00:00
|
|
|
%s FROM_CLAUSE REGEX_CONDITION
|
2014-09-10 22:02:46 +00:00
|
|
|
%s LIST_SERIES
|
2014-01-02 18:45:58 +00:00
|
|
|
%x IN_REGEX
|
2014-04-21 20:12:23 +00:00
|
|
|
%x IN_TABLE_NAME
|
2014-04-22 21:01:55 +00:00
|
|
|
%x IN_SIMPLE_NAME
|
2013-10-03 04:33:59 +00:00
|
|
|
%%
|
|
|
|
|
|
|
|
; { return *yytext; }
|
2013-10-06 03:24:42 +00:00
|
|
|
, { return *yytext; }
|
2013-10-28 16:59:25 +00:00
|
|
|
"merge" { return MERGE; }
|
2013-12-18 17:28:38 +00:00
|
|
|
"list" { return LIST; }
|
2014-08-11 20:59:11 +00:00
|
|
|
"series" { BEGIN(LIST_SERIES); return SERIES; }
|
2013-12-23 22:30:21 +00:00
|
|
|
"continuous query" { return CONTINUOUS_QUERY; }
|
|
|
|
"continuous queries" { return CONTINUOUS_QUERIES; }
|
2013-10-28 16:59:25 +00:00
|
|
|
"inner" { return INNER; }
|
|
|
|
"join" { return JOIN; }
|
2014-01-02 18:45:58 +00:00
|
|
|
"from" { BEGIN(FROM_CLAUSE); return FROM; }
|
2014-08-11 20:59:11 +00:00
|
|
|
<LIST_SERIES,FROM_CLAUSE,REGEX_CONDITION>\/ { BEGIN(IN_REGEX); yylval->string=calloc(1, sizeof(char)); }
|
2014-01-02 18:45:58 +00:00
|
|
|
<IN_REGEX>\\\/ {
|
|
|
|
yylval->string = realloc(yylval->string, strlen(yylval->string) + 2);
|
|
|
|
strcat(yylval->string, "/");
|
|
|
|
}
|
2014-08-11 20:59:11 +00:00
|
|
|
<IN_REGEX><<EOF>> {
|
|
|
|
free(yylval->string);
|
|
|
|
BEGIN(INITIAL);
|
|
|
|
return UNKNOWN;
|
|
|
|
}
|
2014-01-02 18:45:58 +00:00
|
|
|
<IN_REGEX>\\ {
|
|
|
|
yylval->string = realloc(yylval->string, strlen(yylval->string) + 2);
|
|
|
|
strcat(yylval->string, "\\");
|
|
|
|
}
|
|
|
|
<IN_REGEX>\/ {
|
|
|
|
BEGIN(INITIAL);
|
|
|
|
return REGEX_STRING;
|
|
|
|
}
|
|
|
|
<IN_REGEX>\/i {
|
|
|
|
BEGIN(INITIAL);
|
|
|
|
return INSENSITIVE_REGEX_STRING;
|
|
|
|
}
|
|
|
|
<IN_REGEX>[^\\/]* {
|
|
|
|
yylval->string=realloc(yylval->string, strlen(yylval->string) + strlen(yytext) + 1);
|
|
|
|
strcat(yylval->string, yytext);
|
|
|
|
}
|
|
|
|
|
2014-09-10 22:02:46 +00:00
|
|
|
"include" { return INCLUDE; }
|
|
|
|
"spaces" { return SPACES; }
|
2014-01-02 18:45:58 +00:00
|
|
|
"where" { BEGIN(INITIAL); return WHERE; }
|
2013-11-18 17:50:43 +00:00
|
|
|
"as" { return AS; }
|
2013-10-16 16:58:01 +00:00
|
|
|
"select" { return SELECT; }
|
2014-03-09 03:28:54 +00:00
|
|
|
"explain" { return EXPLAIN; }
|
2013-12-06 19:13:39 +00:00
|
|
|
"delete" { return DELETE; }
|
2013-12-23 22:30:21 +00:00
|
|
|
"drop series" { return DROP_SERIES; }
|
|
|
|
"drop" { return DROP; }
|
2014-01-02 18:45:58 +00:00
|
|
|
"limit" { BEGIN(INITIAL); return LIMIT; }
|
|
|
|
"order" { BEGIN(INITIAL); return ORDER; }
|
2013-10-16 16:58:01 +00:00
|
|
|
"asc" { return ASC; }
|
2013-12-02 16:42:54 +00:00
|
|
|
"in" { yylval->string = strdup(yytext); return OPERATION_IN; }
|
2013-10-16 16:58:01 +00:00
|
|
|
"desc" { return DESC; }
|
2014-01-02 18:45:58 +00:00
|
|
|
"group" { BEGIN(INITIAL); return GROUP; }
|
2013-10-16 16:58:01 +00:00
|
|
|
"by" { return BY; }
|
2013-12-23 22:30:21 +00:00
|
|
|
"into" { return INTO; }
|
2013-10-07 16:01:33 +00:00
|
|
|
"(" { yylval->character = *yytext; return *yytext; }
|
|
|
|
")" { yylval->character = *yytext; return *yytext; }
|
|
|
|
"+" { yylval->character = *yytext; return *yytext; }
|
|
|
|
"-" { yylval->character = *yytext; return *yytext; }
|
|
|
|
"*" { yylval->character = *yytext; return *yytext; }
|
|
|
|
"/" { yylval->character = *yytext; return *yytext; }
|
2013-10-07 16:55:15 +00:00
|
|
|
"and" { return AND; }
|
|
|
|
"or" { return OR; }
|
2014-01-02 18:45:58 +00:00
|
|
|
"=~" { BEGIN(REGEX_CONDITION); yylval->string = strdup(yytext); return REGEX_OP; }
|
2013-12-03 18:21:26 +00:00
|
|
|
"=" { yylval->string = strdup(yytext); return OPERATION_EQUAL; }
|
2014-01-02 18:45:58 +00:00
|
|
|
"!~" { BEGIN(REGEX_CONDITION); yylval->string = strdup(yytext); return NEGATION_REGEX_OP; }
|
2013-12-03 18:21:26 +00:00
|
|
|
"<>" { yylval->string = strdup(yytext); return OPERATION_NE; }
|
2013-10-07 15:13:39 +00:00
|
|
|
"<" { yylval->string = strdup(yytext); return OPERATION_LT; }
|
|
|
|
">" { yylval->string = strdup(yytext); return OPERATION_GT; }
|
|
|
|
"<=" { yylval->string = strdup(yytext); return OPERATION_LE; }
|
|
|
|
">=" { yylval->string = strdup(yytext); return OPERATION_GE; }
|
2013-10-16 16:58:01 +00:00
|
|
|
|
2014-04-15 20:00:01 +00:00
|
|
|
[0-9]+ { yylval->string = strdup(yytext); return INT_VALUE; }
|
2013-10-08 15:00:01 +00:00
|
|
|
|
2014-07-11 18:32:24 +00:00
|
|
|
([0-9]+|[0-9]*\.[0-9]+|[0-9]+\.[0-9]*)([usmhdwy]|ms) { yylval->string = strdup(yytext); return DURATION; }
|
2013-10-16 17:27:53 +00:00
|
|
|
|
2014-04-15 20:00:01 +00:00
|
|
|
[0-9]*\.[0-9]+|[0-9]+\.[0-9]* { yylval->string = strdup(yytext); return FLOAT_VALUE; }
|
2013-10-16 16:58:01 +00:00
|
|
|
|
2014-03-31 23:04:56 +00:00
|
|
|
true|false { yylval->string = strdup(yytext); return BOOLEAN_VALUE; }
|
|
|
|
|
2014-02-25 14:53:23 +00:00
|
|
|
[a-zA-Z0-9_]* { yylval->string = strdup(yytext); return SIMPLE_NAME; }
|
2013-10-16 16:58:01 +00:00
|
|
|
|
2014-04-22 21:01:55 +00:00
|
|
|
\" { BEGIN(IN_SIMPLE_NAME); yylval->string=calloc(1, sizeof(char)); }
|
|
|
|
<IN_SIMPLE_NAME>\\\" {
|
|
|
|
yylval->string = realloc(yylval->string, strlen(yylval->string) + 1);
|
|
|
|
strcat(yylval->string, "\"");
|
|
|
|
}
|
|
|
|
<IN_SIMPLE_NAME>\" {
|
|
|
|
BEGIN(INITIAL);
|
|
|
|
return SIMPLE_NAME;
|
|
|
|
}
|
|
|
|
<IN_SIMPLE_NAME>[^\\"]* {
|
|
|
|
yylval->string=realloc(yylval->string, strlen(yylval->string) + strlen(yytext) + 1);
|
|
|
|
strcat(yylval->string, yytext);
|
|
|
|
}
|
|
|
|
|
2014-08-13 19:15:54 +00:00
|
|
|
[a-zA-Z0-9_][a-zA-Z0-9._]* { yylval->string = strdup(yytext); return TABLE_NAME; }
|
2014-02-25 14:53:23 +00:00
|
|
|
|
2014-08-13 19:15:54 +00:00
|
|
|
[:\[a-zA-Z0-9_][:\[\]a-zA-Z0-9._]* { yylval->string = strdup(yytext); return INTO_NAME; }
|
2013-10-08 15:00:01 +00:00
|
|
|
|
2013-12-02 16:42:54 +00:00
|
|
|
\'[^\']*\' {
|
2013-10-03 04:33:59 +00:00
|
|
|
yytext[yyleng-1] = '\0';
|
|
|
|
yylval->string = strdup(yytext+1);
|
|
|
|
return STRING_VALUE;
|
|
|
|
}
|
2013-11-26 15:59:16 +00:00
|
|
|
|
|
|
|
[\t ]* {}
|
|
|
|
. { return *yytext; }
|