Files
Digpkg/sqlite3/sqlite3.c

50 lines
1.4 KiB
C

#include <groundext.h>
#include <sqlite3.h>
#include <stdint.h>
#include <stdio.h>
sqlite3* getDB(List args) {
return (sqlite3*)args.values[0].data.intVal;
}
GroundValue exec_sql(GroundScope* scope, List args) {
printf("hi\n");
sqlite3* DB = getDB(args);
printf("got db\n");
char* sqlCode = args.values[1].data.stringVal;
printf("%s\n", sqlCode);
char* errMessage;
int exitCode = sqlite3_exec(DB, sqlCode, NULL, 0, &errMessage);
if (exitCode != SQLITE_OK) {
ERROR(errMessage, "SQLite3Error");
} else {
return groundCreateValue(INT, 0);
}
}
GroundValue close_db(GroundScope* scope, List args) {
sqlite3* DB = getDB(args);
sqlite3_close(DB);
return groundCreateValue(INT, 0);
}
GroundValue open_db(GroundScope* scope, List args) {
sqlite3* DB;
const char* dbPath = args.values[0].data.stringVal;
int errorCode = sqlite3_open(dbPath, &DB);
if (errorCode) {
ERROR(sqlite3_errmsg(DB), "SQLite3Error");
}
return groundCreateValue(INT, (uint64_t)DB);
}
void ground_init(GroundScope* scope) {
groundAddNativeFunction(scope, "sqlite3_Open", open_db, INT, 1, STRING, "dbPath");
groundAddNativeFunction(scope, "sqlite3_Close", close_db, INT, 1, INT, "db");
groundAddNativeFunction(scope, "sqlite3_Exec", exec_sql, INT, 2, INT, "db", STRING, "sql");
}