#ifndef __SQLHIST_PARSE_H #define __SQLHIST_PARSE_H #include #include #include struct str_hash; struct sql_table; struct sqlhist_bison { void *scanner; const char *buffer; size_t buffer_size; size_t buffer_idx; int line_no; int line_idx; struct sql_table *table; char *parse_error_str; struct str_hash *str_hash[1 << HASH_BITS]; }; #include "sqlhist.tab.h" enum filter_type { FILTER_GROUP, FILTER_NOT_GROUP, FILTER_EQ, FILTER_NE, FILTER_LE, FILTER_LT, FILTER_GE, FILTER_GT, FILTER_BIN_AND, FILTER_STR_CMP, FILTER_AND, FILTER_OR, }; enum compare_type { COMPARE_GROUP, COMPARE_ADD, COMPARE_SUB, COMPARE_MUL, COMPARE_DIV, COMPARE_BIN_AND, COMPARE_BIN_OR, COMPARE_AND, COMPARE_OR, }; char * store_str(struct sqlhist_bison *sb, const char *str); int table_start(struct sqlhist_bison *sb); void *add_field(struct sqlhist_bison *sb, const char *field, const char *label); void *add_filter(struct sqlhist_bison *sb, void *A, void *B, enum filter_type op); int add_match(struct sqlhist_bison *sb, void *A, void *B); void *add_compare(struct sqlhist_bison *sb, void *A, void *B, enum compare_type type); int add_where(struct sqlhist_bison *sb, void *expr); int add_selection(struct sqlhist_bison *sb, void *item, const char *label); int add_from(struct sqlhist_bison *sb, void *item); int add_to(struct sqlhist_bison *sb, void *item); void *add_cast(struct sqlhist_bison *sb, void *field, const char *type); void *add_string(struct sqlhist_bison *sb, const char *str); void *add_number(struct sqlhist_bison *sb, long val); extern void sql_parse_error(struct sqlhist_bison *sb, const char *text, const char *fmt, va_list ap); #endif