%{
#include <stdio.h>
#include <string>

#include "Database.hpp"

extern Database * db;

extern int sqlite_lex();
extern int sqlite_parse();
extern FILE* sqlite_in;
void sqlite_error(const char *s);

using namespace std;

string statement_buffer = "";

%}

%union {
    int intval;
    char* strval;
}

%token CONNECT AS
%token <strval> STRING
%token END

%%

sql: connect
    | statement
    ;

connect: CONNECT STRING AS STRING END { db->connect($2, $4); }
    ;

statement: STRING { statement_buffer += $1; }
    | statement STRING { statement_buffer += $2; }
    | statement END { db->eval(statement_buffer.c_str()); statement_buffer = ""; }
    ;

%%

void sqlite_error(const char *s) {
    fprintf(stderr, "Error: %s\n", s);
}