WIP
This commit is contained in:
4
Makefile
4
Makefile
@ -6,7 +6,7 @@ ifeq (${DEBUG}, 1)
|
||||
CXXFLAGS += -DDEBUG -O0 -ggdb -fno-inline
|
||||
WRAP := valgrind --track-origins=yes --leak-check=full --show-leak-kinds=all
|
||||
else
|
||||
CXXFLAGS += -O3 -fno-stack-protector -fno-exceptions -fno-rtti
|
||||
CXXFLAGS += -O3 -fno-stack-protector -fno-rtti
|
||||
endif
|
||||
|
||||
CXXFLAGS += -Isource/ -Iobject/ -Isource/sqlfun/source/
|
||||
@ -40,7 +40,7 @@ object/%.o: object/%.cpp
|
||||
${COMPILE.cpp} $< -o $@
|
||||
|
||||
|
||||
main: ${GENOBJECT} source/main.o ${REEEEEEEE}
|
||||
main: ${GENOBJECT} object/main.o ${REEEEEEEE}
|
||||
${LINK.cpp} -o ${OUTPUT} $+ ${LDLIBS}
|
||||
|
||||
clean:
|
||||
|
1
documentation/spec.md
Normal file
1
documentation/spec.md
Normal file
@ -0,0 +1 @@
|
||||
# Esql
|
24
source/Database.cpp
Normal file
24
source/Database.cpp
Normal file
@ -0,0 +1,24 @@
|
||||
extern "C" {
|
||||
#include "sql.tab.h"
|
||||
#include "yyl.h"
|
||||
#include "sql.lex.h"
|
||||
#include "sql-parser.h"
|
||||
}
|
||||
|
||||
int validate(const char * const sql) {
|
||||
int r;
|
||||
char * dup = strdup(sql);
|
||||
struct psql_state *pstate;
|
||||
if(!pstate) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
psql_set_string_input(pstate, dup);
|
||||
r = psql_parse(pstate);
|
||||
|
||||
psql_free(pstate);
|
||||
free(dup);
|
||||
|
||||
return !r
|
||||
&& !yyerrno;
|
||||
}
|
@ -1,5 +1,30 @@
|
||||
class Database {
|
||||
public:
|
||||
virtual char * declare(const char * const from) = 0;
|
||||
virtual void scope_push() = 0;
|
||||
virtual void scope_pop() = 0;
|
||||
|
||||
virtual char * connect(const char * const to, const char * const as) = 0;
|
||||
virtual char * eval(const char * const sql) = 0;
|
||||
#if 0
|
||||
virtual char * set_connection(const char * const as) = 0;
|
||||
virtual char * disconnect(const char * const as) = 0;
|
||||
#endif
|
||||
virtual char * disconnect() = 0;
|
||||
|
||||
#if 0
|
||||
virtual char * cursor(const char * const name, const char * const from) = 0;
|
||||
virtual char * open(const char * const cursor) = 0;
|
||||
virtual char * close(const char * const cursor) = 0;
|
||||
// fetch
|
||||
|
||||
virtual int * transaction() = 0;
|
||||
virtual int * commit() = 0;
|
||||
virtual int * rollback() = 0;
|
||||
|
||||
// prepared statements
|
||||
#endif
|
||||
|
||||
virtual char * exec(const char * const sql) = 0;
|
||||
|
||||
int validate(const char * const sql);
|
||||
};
|
||||
|
20
source/Sqlite.hpp
Normal file
20
source/Sqlite.hpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include "Database.hpp"
|
||||
|
||||
class Sqlite : public Database {
|
||||
char * connect(const char * const to, const char * const as) override {
|
||||
char * r = NULL;
|
||||
#if DEBUG
|
||||
printf("Connecting to \"%s\" as \"%s\"\n", to, as);
|
||||
#endif
|
||||
return r;
|
||||
}
|
||||
|
||||
char * exec(const char * const sql) override {
|
||||
char * r = NULL;
|
||||
int v = validate(sql);
|
||||
#if DEBUG
|
||||
printf("Recieved SQL: \"%s\" (%d)\n", sql, v);
|
||||
#endif
|
||||
return r;
|
||||
}
|
||||
};
|
@ -4,57 +4,7 @@
|
||||
#include "esql.yy.h"
|
||||
#include "sqlite.yy.h"
|
||||
|
||||
extern "C" {
|
||||
#include "sql.tab.h"
|
||||
#include "yyl.h"
|
||||
#include "sql.lex.h"
|
||||
#include "sql-parser.h"
|
||||
}
|
||||
|
||||
#include "Database.hpp"
|
||||
#include "sqlite.tab.h"
|
||||
class Sqlite : public Database {
|
||||
struct psql_state *pstate;
|
||||
|
||||
int validate(const char * const sql) {
|
||||
int r;
|
||||
char * dup = strdup(sql);
|
||||
psql_set_string_input(pstate, dup);
|
||||
r = psql_parse(pstate);
|
||||
free(dup);
|
||||
return !r
|
||||
&& !yyerrno;
|
||||
}
|
||||
|
||||
char * connect(const char * const to, const char * const as) override {
|
||||
char * r = NULL;
|
||||
#if DEBUG
|
||||
printf("Connecting to \"%s\" as \"%s\"\n", to, as);
|
||||
#endif
|
||||
return r;
|
||||
}
|
||||
|
||||
char * eval(const char * const sql) override {
|
||||
char * r = NULL;
|
||||
int v = validate(sql);
|
||||
#if DEBUG
|
||||
printf("Recieved SQL: \"%s\" (%d)\n", sql, v);
|
||||
#endif
|
||||
return r;
|
||||
}
|
||||
|
||||
public:
|
||||
Sqlite() {
|
||||
pstate = psql_new();
|
||||
if (!pstate) {
|
||||
throw 1;
|
||||
}
|
||||
}
|
||||
|
||||
~Sqlite() {
|
||||
psql_free(pstate);
|
||||
}
|
||||
};
|
||||
#include "Sqlite.hpp"
|
||||
|
||||
Database * db;
|
||||
|
||||
@ -64,8 +14,8 @@ signed main(int argc, char * * argv) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Sqlite sqlite;
|
||||
db = &sqlite;
|
||||
Sqlite * sqlite;
|
||||
db = sqlite;
|
||||
esql_lex();
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user