This commit is contained in:
anon
2024-02-15 22:00:47 +01:00
parent bb6523e9d9
commit 9b96aa79f3
6 changed files with 76 additions and 56 deletions

@ -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

@ -0,0 +1 @@
# Esql

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

@ -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;