📄 yaccer.y
字号:
memFreeToken($1); memFreeToken($3); parseCleanQuery(curQuery); return(-1); } memFreeToken($1); memFreeToken($3); } | table_list ',' ident { if (parseAddTable($3, NULL,curQuery) < 0) { memFreeToken($3); parseCleanQuery(curQuery); return(-1); } memFreeToken($3); } | table_list ',' ident table_alias ident { if (parseAddTable($3, $5, curQuery) < 0) { memFreeToken($3); memFreeToken($5); parseCleanQuery(curQuery); return(-1); } memFreeToken($3); memFreeToken($5); } ;table_alias : /* NULL */ | AS | EQ ;where_clause : /* NULL */ | WHERE cond_list ;cond_list : cond_list cond_cont cond_field cond_op cond_literal { if ( parseAddCondition((mIdent_t *)$3,(long)$4, (mVal_t *)$5, (long)$2, curQuery) < 0) { parseCleanQuery(curQuery); return(-1); } } | cond_list cond_cont cond_field BETWEEN literal AND literal { parseAddBetween((mIdent_t *)$3, (mVal_t *)$5, (mVal_t *)$7, (long)$2,curQuery); } | cond_list cond_cont sub_cond { parseAddSubCond((long)$2, curQuery); } | cond_field cond_op cond_literal { if ( parseAddCondition((mIdent_t *)$1,(long)$2, (mVal_t *)$3, NO_BOOL, curQuery) < 0) { parseCleanQuery(curQuery); return(-1); } } | cond_field BETWEEN literal AND literal { parseAddBetween((mIdent_t *)$1, (mVal_t*)$3, (mVal_t *)$5, NO_BOOL,curQuery); } | sub_cond { parseAddSubCond(NO_BOOL, curQuery); } ;sub_cond : '(' { parsePushCondition(curQuery); } cond_list ')' ;cond_field : qual_ident { $$ = $1; } | qual_sysvar { $$ = $1; } ;cond_cont : AND { $$ = (char *)AND_BOOL; } | OR { $$ = (char *)OR_BOOL; } ;cond_op : EQ { $$ = (char *)EQ_OP; } | NE { $$ = (char *)NE_OP; } | LT { $$ = (char *)LT_OP; } | LE { $$ = (char *)LE_OP; } | GT { $$ = (char *)GT_OP; } | GE { $$ = (char *)GE_OP; } | LIKE { $$ = (char *)LIKE_OP; } | RLIKE { $$ = (char *)RLIKE_OP; } | CLIKE { $$ = (char *)CLIKE_OP; } | SLIKE { $$ = (char *)SLIKE_OP; } | NOT LIKE { $$ = (char *)NOT_LIKE_OP; } | NOT RLIKE { $$ = (char *)NOT_RLIKE_OP; } | NOT CLIKE { $$ = (char *)NOT_CLIKE_OP; } | NOT SLIKE { $$ = (char *)NOT_SLIKE_OP; } ;order_clause : | ORDER BY order_list ;order_list : order_list ',' order_ident order_dir { parseAddOrder((mIdent_t *)$3,(long) $4, curQuery); } | order_ident order_dir { parseAddOrder((mIdent_t *)$1,(long) $2, curQuery); } ;order_dir : ASC { $$ = (char *) ASC; } | DESC { $$ = (char *) DESC; } | /* NULL */ { $$ = (char *) ASC; } ;limit_clause : { curQuery->rowLimit = 0; } | LIMIT literal { parseSetRowLimit((mVal_t *)$2, curQuery); } ;offset_clause : { curQuery->rowOffset = 0; } | OFFSET literal { parseSetRowOffset((mVal_t *)$2, curQuery); } ;into_clause : { parseSetTargetTable(NULL,curQuery);} | INTO ident { parseSetTargetTable($2, curQuery); /* memFreeToken($2); */ } ;/*** Drop : delete entire table*/drop : MSQL_DROP drop_types ;drop_types : TABLE ident { curQuery->command = DROP_TABLE; if (parseAddTable($2,NULL,curQuery) < 0) { memFreeToken($2); parseCleanQuery(curQuery); return(-1); } memFreeToken($2); } | INDEX ident FROM ident { curQuery->command = DROP_INDEX; if (parseAddIndex($2, $4, 0, 0, curQuery) < 0) { memFreeToken($2); memFreeToken($4); parseCleanQuery(curQuery); return(-1); } memFreeToken($2); memFreeToken($4); } | SEQUENCE FROM ident { curQuery->command = DROP_SEQUENCE; parseAddSequence($3,0,0, curQuery); memFreeToken($3); } ;/*** Insert : add new data to table*/insert : MSQL_INSERT INTO ident opt_field_spec { curQuery->command = MSQL_INSERT; if (parseAddTable($3,NULL,curQuery) < 0) { memFreeToken($3); parseCleanQuery(curQuery); return(-1); } if ($4) utilExpandTableFields(globalServer,$3,curQuery); memFreeToken($3); parseSetInsertOffset(0); } VALUES '(' values ')' opt_bulk_insert ;opt_field_spec : /* NULL */ { mIdent_t *tmp; tmp = parseCreateIdent(NULL,"*", curQuery); parseAddField((mIdent_t *)tmp,0,0,0,0,curQuery); $$ = (char *) 1; } | '(' fields ')' { $$ = (char *) 0; } ;fields : fields ',' qual_ident { parseAddField((mIdent_t *)$3,0,0,0,0,curQuery); } | qual_ident { parseAddField((mIdent_t *)$1,0,0,0,0,curQuery); } ;values : values ',' literal { parseAddInsertValue((mVal_t *)$3,curQuery); } | literal { parseAddInsertValue((mVal_t *)$1, curQuery); } ;opt_bulk_insert : /* NULL */ | ',' '(' { parseSetInsertOffset(0); } values ')' { } opt_bulk_insert ;/*** Update : replace a table entry*/update : MSQL_UPDATE ident SET update_list where_clause { curQuery->command = MSQL_UPDATE; if (parseAddTable((char *)$2,NULL,curQuery) < 0) { memFreeToken($2); parseCleanQuery(curQuery); return(-1); } memFreeToken($2); } ;update_list : update_list ',' qual_ident EQ literal { parseAddField((mIdent_t *)$3,0,0,0,0,curQuery); parseAddFieldValue((mVal_t *)$5,curQuery); } | qual_ident EQ update_value { parseAddField((mIdent_t *)$1,0,0,0,0,curQuery); parseAddFieldValue((mVal_t *) $3, curQuery); } ;update_value : literal { $$ = $1; } | qual_sysvar { $$ = $1; } ;/*** Delete : conditionally delete table entries (or all entries)*/delete : MSQL_DELETE FROM ident where_clause { curQuery->command = MSQL_DELETE; if (parseAddTable($3,NULL,curQuery) < 0) { memFreeToken($3); parseCleanQuery(curQuery); return(-1); } memFreeToken($3); } ;/*** Common definitions*/literal : MSQL_TEXT { $$ = (char *)parseCreateValue((u_char*)$1,CHAR_TYPE, yytoklen); if (yytoklen < NAME_LEN) memFreeToken($1); else free($1); if ($$ == NULL) { parseCleanQuery(curQuery); return(-1); } } | NUM { $$ = (char *)parseCreateValue((u_char*)$1,INT_TYPE,0); memFreeToken($1); if ($$ == NULL) { parseCleanQuery(curQuery); return(-1); } } | REAL_NUM { $$ = (char *)parseCreateValue((u_char*)$1,REAL_TYPE,0); memFreeToken($1); if ($$ == NULL) { parseCleanQuery(curQuery); return(-1); } } | NULLSYM { $$ = (char *)parseCreateValue((u_char*)"null", NULL_TYPE,0); } ;cond_literal : literal { $$ = $1; } | qual_ident { $$ = (char *)parseCreateValue((u_char *)$1, IDENT_TYPE,0); } | qual_sysvar { $$ = (char *)parseCreateValue((u_char *)$1, SYSVAR_TYPE,0); } ;order_ident : qual_ident { $$ = $1; } | qual_sysvar { $$ = $1; } ;qual_ident : ident { $$ = (char *)parseCreateIdent(NULL,$1,curQuery); memFreeToken($1); if ($$ == NULL) { parseCleanQuery(curQuery); return(-1); } } | ident '.' ident { $$ = (char *)parseCreateIdent($1,$3,curQuery); memFreeToken($1); memFreeToken($3); if ($$ == NULL) { parseCleanQuery(curQuery); return(-1); } } ;qual_sysvar : SYS_VAR { $$ = (char *)parseCreateIdent(NULL,$1,curQuery); memFreeToken($1); if ($$ == NULL) { parseCleanQuery(curQuery); return(-1); } } | ident '.' SYS_VAR { $$ = (char *)parseCreateIdent($1,$3, curQuery); memFreeToken($1); memFreeToken($3); if ($$ == NULL) { parseCleanQuery(curQuery); return(-1); } } ;ident : IDENT { $$ = $1; } | keyword { $$ = memMallocToken($1, strlen($1)); } ;keyword : MSQL_CREATE { $$ = yytext; } | MSQL_DROP { $$ = yytext; } | MSQL_INSERT { $$ = yytext; } | MSQL_DELETE { $$ = yytext; } | MSQL_SELECT { $$ = yytext; } | MSQL_UPDATE { $$ = yytext; } | ALL { $$ = yytext; } | DISTINCT { $$ = yytext; } | AS { $$ = yytext; } | WHERE { $$ = yytext; } | ORDER { $$ = yytext; } | FROM { $$ = yytext; } | INTO { $$ = yytext; } | TABLE { $$ = yytext; } | BY { $$ = yytext; } | ASC { $$ = yytext; } | DESC { $$ = yytext; } | LIKE { $$ = yytext; } | RLIKE { $$ = yytext; } | CLIKE { $$ = yytext; } | SLIKE { $$ = yytext; } | AND { $$ = yytext; } | OR { $$ = yytext; } | VALUES { $$ = yytext; } | SET { $$ = yytext; } | NOT { $$ = yytext; } | PRIMARY { $$ = yytext; } | KEY { $$ = yytext; } | INDEX { $$ = yytext; } | UNIQUE { $$ = yytext; } | ON { $$ = yytext; } | MSQL_INT { $$ = yytext; } | MSQL_INT8 { $$ = yytext; } | MSQL_INT16 { $$ = yytext; } | MSQL_INT32 { $$ = yytext; } | MSQL_INT64 { $$ = yytext; } | MSQL_UINT { $$ = yytext; } | MSQL_UINT8 { $$ = yytext; } | MSQL_UINT16 { $$ = yytext; } | MSQL_UINT32 { $$ = yytext; } | MSQL_UINT64 { $$ = yytext; } | MSQL_BOOL { $$ = yytext; } | MSQL_CHAR { $$ = yytext; } | MSQL_REAL { $$ = yytext; } | MSQL_DATE { $$ = yytext; } | MSQL_MONEY { $$ = yytext; } | MSQL_TIME { $$ = yytext; } | MSQL_IPV4 { $$ = yytext; } | MSQL_CIDR4 { $$ = yytext; } | MSQL_CIDR6 { $$ = yytext; } | LIMIT { $$ = yytext; } | OFFSET { $$ = yytext; } | SEQUENCE { $$ = yytext; } | VALUE { $$ = yytext; } | STEP { $$ = yytext; } ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -