// ind debug mode we have our own main function int main() { char buf[1024]; //snprintf(buf,sizeof(buf), "SELECT * FROM users WHERE laston=unix_timestamp()+10*20+fn() AND user_level>1 ORDER BY userid ASC"); snprintf(buf,sizeof(buf), "SELECT * FROM users WHERE laston=1"); scan_buffer(buf); snprintf(buf,sizeof(buf), "select 1 from user where 1 -- commnent"); scan_buffer(buf); std::string s; while (std::cin) { memset(p_risk, 0, sizeof(struct query_risk)); std::getline(std::cin, s); //std::cout << "line: " << s << std::endl; scan_buffer(s.c_str()); free_sql_strings(); free_expressions(); if (p_risk->has_tautology) { printf("query has tautology\n"); } } //free_sql_strings(); //free_expressions(); return 1; }
bool query_parse(struct query_risk * q_risk, SQLPatterns * sql_patterns, const char * q) { p_risk = q_risk; //bzero(q_risk, sizeof(struct query_risk)); memset(q_risk, 0, sizeof(struct query_risk)); patterns = sql_patterns; #ifndef WIN32 scan_buffer(q); #endif free_sql_strings(); free_expressions(); return true; }
void free_expression(struct expr *e) { switch (e->exprtype) { case valtype: free_val(e->val.val); break; case binopexprtype: free_expression(e->val.binopexpr.e1); free_expression(e->val.binopexpr.e2); break; case unopexprtype: free_expression(e->val.unopexpr.e); break; case arrayexprtype: free_expression(e->val.arrayexpr.e1); free_expressions(e->val.arrayexpr.indices); break; case identtype: free(e->val.ident); break; case dereftype: free_expression(e->val.deref.e); break; case funcalltype: free_args(e->val.funcall.args); free(e->val.funcall.fun_ident); break; case structelttype: free_expression(e->val.structelt.record); free(e->val.structelt.field); default: break; } if (e->type) free(e->type); free(e); }
void free_caseblock(struct caseblock *caseblock) { free_expressions(caseblock->exprlist); free_instructions(caseblock->instructions); free(caseblock); }