blob: 7bd2a6350ece6bfc3431a1642aa7391dcf28c067 [file] [log] [blame]
#ifndef __SQLHIST_PARSE_H
#define __SQLHIST_PARSE_H
#include <stdarg.h>
#include <tracefs.h>
#include <tracefs-local.h>
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