version 1.2, 2015/04/20 18:10:35
|
version 1.3, 2015/04/20 18:20:37
|
|
|
unsigned char boolean; | unsigned char boolean; |
} | } |
| |
|
%left WQL_DOT |
|
%left WQL_COLON |
%left WQL_OR | %left WQL_OR |
%left WQL_AND | %left WQL_AND |
%nonassoc WQL_NOT | %nonassoc WQL_NOT |
|
|
%token WQL_WHERE | %token WQL_WHERE |
%token WQL_NE | %token WQL_NE |
%token WQL_GT | %token WQL_GT |
%token WQL_REAL |
|
%token WQL_EQ | %token WQL_EQ |
%token WQL_SELECT | %token WQL_SELECT |
%token WQL_GE | %token WQL_GE |
%token WQL_NULL | %token WQL_NULL |
|
%token WQL_LIKE |
|
%token WQL_ISA |
|
%token WQL_DOT |
|
%token WQL_COLON |
| |
%token <string> WQL_IDENTIFIER; | %token <string> WQL_IDENTIFIER; |
%token <boolean> WQL_BOOLEAN; | %token <boolean> WQL_BOOLEAN; |
|
|
| |
%type <symbol> Operand; | %type <symbol> Operand; |
| |
|
%type <symbol> Property; |
| |
%% | %% |
| |
|
|
} | } |
| PropertyList | | PropertyList |
{ | { |
YACCTRACE(SelectList12); |
YACCTRACE(SelectList2); |
} | } |
| |
PropertyList | PropertyList |
|
|
wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = $3; | wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = $3; |
wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator; | wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator; |
} | } |
|
| Operand WQL_LIKE Operand |
|
{ |
|
WQL_Symbol operator; |
|
|
|
YACCTRACE(Predicate6); |
|
|
|
/* Only WQL LIKE is supported */ |
|
if (wqlstate.wql->dialect != WQL_DIALECT_WQL) |
|
{ |
|
yyerror("CQL LIKE not supported"); |
|
YYABORT; |
|
} |
|
|
|
if (wqlstate.wql->nsymbols + 3 > WQL_MAX_SYMBOLS) |
|
{ |
|
yyerror("symbol array overflow"); |
|
YYABORT; |
|
} |
|
|
|
memset(&operator, 0, sizeof(WQL_Symbol)); |
|
operator.type = WQL_TYPE_LIKE; |
|
|
|
wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = $1; |
|
wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = $3; |
|
wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator; |
|
} |
|
| WQL_IDENTIFIER WQL_ISA WQL_IDENTIFIER |
|
{ |
|
WQL_Symbol lhs; |
|
WQL_Symbol rhs; |
|
WQL_Symbol operator; |
|
|
|
YACCTRACE(Predicate7); |
|
|
|
/* Check for symbol stack overflow */ |
|
if (wqlstate.wql->nsymbols + 3 > WQL_MAX_SYMBOLS) |
|
{ |
|
yyerror("symbol array overflow"); |
|
YYABORT; |
|
} |
|
|
|
/* Left-hand-side (embedded property name) */ |
|
memset(&lhs, 0, sizeof(WQL_Symbol)); |
|
lhs.value.string = $1; |
|
lhs.type = WQL_TYPE_STRING; |
|
|
|
/* Right-hand-side (embedded class name) */ |
|
memset(&rhs, 0, sizeof(WQL_Symbol)); |
|
rhs.value.string = $3; |
|
rhs.type = WQL_TYPE_STRING; |
|
|
|
/* Operator */ |
|
memset(&operator, 0, sizeof(WQL_Symbol)); |
|
operator.type = WQL_TYPE_ISA; |
|
|
|
wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = lhs; |
|
wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = rhs; |
|
wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator; |
|
} |
| |
Operand | Operand |
: WQL_BOOLEAN | : WQL_BOOLEAN |
|
|
$$.value.string = $1; | $$.value.string = $1; |
$$.type = WQL_TYPE_STRING; | $$.type = WQL_TYPE_STRING; |
} | } |
| WQL_IDENTIFIER |
|
{ |
|
YACCTRACE(Operand5); |
|
$$.value.string = $1; |
|
$$.type = WQL_TYPE_IDENTIFIER; |
|
} |
|
| WQL_NULL | | WQL_NULL |
{ | { |
YACCTRACE(Operand6); | YACCTRACE(Operand6); |
$$.value.integer = 0; | $$.value.integer = 0; |
$$.type = WQL_TYPE_NULL; | $$.type = WQL_TYPE_NULL; |
} | } |
|
| Property |
|
{ |
|
YACCTRACE(Operand7); |
|
$$ = $1; |
|
} |
| |
%% |
Property |
|
: WQL_IDENTIFIER |
|
{ |
|
YACCTRACE(Property1); |
|
$$.value.string = $1; |
|
$$.value.embeddedClassName = NULL; |
|
$$.value.embeddedPropertyName = NULL; |
|
$$.type = WQL_TYPE_IDENTIFIER; |
|
} |
|
| WQL_IDENTIFIER WQL_DOT WQL_IDENTIFIER |
|
{ |
|
MI_Char* str; |
|
YACCTRACE(Property2); |
|
|
|
$$.value.string = $1; |
|
$$.value.embeddedClassName = NULL; |
|
$$.value.embeddedPropertyName = $3; |
|
$$.type = WQL_TYPE_IDENTIFIER; |
|
} |
|
| WQL_IDENTIFIER WQL_DOT WQL_IDENTIFIER WQL_COLON WQL_COLON WQL_IDENTIFIER |
|
{ |
|
MI_Char* str; |
|
YACCTRACE(Property2); |
|
|
|
$$.value.string = $1; |
|
$$.value.embeddedClassName = $3; |
|
$$.value.embeddedPropertyName = $6; |
|
$$.type = WQL_TYPE_IDENTIFIER; |
|
} |