1*287e80b3SSadaf Ebrahimi #ifndef __SQLHIST_PARSE_H 2*287e80b3SSadaf Ebrahimi #define __SQLHIST_PARSE_H 3*287e80b3SSadaf Ebrahimi 4*287e80b3SSadaf Ebrahimi #include <stdarg.h> 5*287e80b3SSadaf Ebrahimi #include <tracefs.h> 6*287e80b3SSadaf Ebrahimi 7*287e80b3SSadaf Ebrahimi #include <tracefs-local.h> 8*287e80b3SSadaf Ebrahimi 9*287e80b3SSadaf Ebrahimi struct str_hash; 10*287e80b3SSadaf Ebrahimi 11*287e80b3SSadaf Ebrahimi struct sql_table; 12*287e80b3SSadaf Ebrahimi 13*287e80b3SSadaf Ebrahimi struct sqlhist_bison { 14*287e80b3SSadaf Ebrahimi void *scanner; 15*287e80b3SSadaf Ebrahimi const char *buffer; 16*287e80b3SSadaf Ebrahimi size_t buffer_size; 17*287e80b3SSadaf Ebrahimi size_t buffer_idx; 18*287e80b3SSadaf Ebrahimi int line_no; 19*287e80b3SSadaf Ebrahimi int line_idx; 20*287e80b3SSadaf Ebrahimi struct sql_table *table; 21*287e80b3SSadaf Ebrahimi char *parse_error_str; 22*287e80b3SSadaf Ebrahimi struct str_hash *str_hash[1 << HASH_BITS]; 23*287e80b3SSadaf Ebrahimi }; 24*287e80b3SSadaf Ebrahimi 25*287e80b3SSadaf Ebrahimi #include "sqlhist.tab.h" 26*287e80b3SSadaf Ebrahimi 27*287e80b3SSadaf Ebrahimi enum filter_type { 28*287e80b3SSadaf Ebrahimi FILTER_GROUP, 29*287e80b3SSadaf Ebrahimi FILTER_NOT_GROUP, 30*287e80b3SSadaf Ebrahimi FILTER_EQ, 31*287e80b3SSadaf Ebrahimi FILTER_NE, 32*287e80b3SSadaf Ebrahimi FILTER_LE, 33*287e80b3SSadaf Ebrahimi FILTER_LT, 34*287e80b3SSadaf Ebrahimi FILTER_GE, 35*287e80b3SSadaf Ebrahimi FILTER_GT, 36*287e80b3SSadaf Ebrahimi FILTER_BIN_AND, 37*287e80b3SSadaf Ebrahimi FILTER_STR_CMP, 38*287e80b3SSadaf Ebrahimi FILTER_AND, 39*287e80b3SSadaf Ebrahimi FILTER_OR, 40*287e80b3SSadaf Ebrahimi }; 41*287e80b3SSadaf Ebrahimi 42*287e80b3SSadaf Ebrahimi enum compare_type { 43*287e80b3SSadaf Ebrahimi COMPARE_GROUP, 44*287e80b3SSadaf Ebrahimi COMPARE_ADD, 45*287e80b3SSadaf Ebrahimi COMPARE_SUB, 46*287e80b3SSadaf Ebrahimi COMPARE_MUL, 47*287e80b3SSadaf Ebrahimi COMPARE_DIV, 48*287e80b3SSadaf Ebrahimi COMPARE_BIN_AND, 49*287e80b3SSadaf Ebrahimi COMPARE_BIN_OR, 50*287e80b3SSadaf Ebrahimi COMPARE_AND, 51*287e80b3SSadaf Ebrahimi COMPARE_OR, 52*287e80b3SSadaf Ebrahimi }; 53*287e80b3SSadaf Ebrahimi 54*287e80b3SSadaf Ebrahimi char * store_str(struct sqlhist_bison *sb, const char *str); 55*287e80b3SSadaf Ebrahimi 56*287e80b3SSadaf Ebrahimi int table_start(struct sqlhist_bison *sb); 57*287e80b3SSadaf Ebrahimi 58*287e80b3SSadaf Ebrahimi void *add_field(struct sqlhist_bison *sb, const char *field, const char *label); 59*287e80b3SSadaf Ebrahimi 60*287e80b3SSadaf Ebrahimi void *add_filter(struct sqlhist_bison *sb, void *A, void *B, enum filter_type op); 61*287e80b3SSadaf Ebrahimi 62*287e80b3SSadaf Ebrahimi int add_match(struct sqlhist_bison *sb, void *A, void *B); 63*287e80b3SSadaf Ebrahimi void *add_compare(struct sqlhist_bison *sb, void *A, void *B, enum compare_type type); 64*287e80b3SSadaf Ebrahimi int add_where(struct sqlhist_bison *sb, void *expr); 65*287e80b3SSadaf Ebrahimi 66*287e80b3SSadaf Ebrahimi int add_selection(struct sqlhist_bison *sb, void *item, const char *label); 67*287e80b3SSadaf Ebrahimi int add_from(struct sqlhist_bison *sb, void *item); 68*287e80b3SSadaf Ebrahimi int add_to(struct sqlhist_bison *sb, void *item); 69*287e80b3SSadaf Ebrahimi void *add_cast(struct sqlhist_bison *sb, void *field, const char *type); 70*287e80b3SSadaf Ebrahimi 71*287e80b3SSadaf Ebrahimi void *add_string(struct sqlhist_bison *sb, const char *str); 72*287e80b3SSadaf Ebrahimi void *add_number(struct sqlhist_bison *sb, long val); 73*287e80b3SSadaf Ebrahimi 74*287e80b3SSadaf Ebrahimi extern void sql_parse_error(struct sqlhist_bison *sb, const char *text, 75*287e80b3SSadaf Ebrahimi const char *fmt, va_list ap); 76*287e80b3SSadaf Ebrahimi 77*287e80b3SSadaf Ebrahimi #endif 78