Skip to content
Snippets Groups Projects
Commit 9d713f85 authored by Nigel Reed's avatar Nigel Reed
Browse files

Pretty version of sqlite source with useless code removed.

Left in a few useful comments.
parent 771c6530
No related branches found
No related tags found
1 merge request!538Inital commit of sqlite support.
Pipeline #8927 failed
/* jsp_sqlite.c */
/* js_sqlite.c */
/* Synchronet JavaScript "Sqlite" Object */
/* $Id: js_sqlite.c,v 1.99 2006/07/21 04:26:17 deuce Exp $ */
/****************************************************************************
* @format.tab-size 4 (Plain Text/Source Code File Header) *
* @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) *
......@@ -18,39 +16,26 @@
* http://www.fsf.org/copyleft/gpl.html *
* *
* Anonymous FTP access to the most recent released source is available at *
* ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net *
* *
* Anonymous CVS access to the development source and modification history *
* is available at cvs.synchro.net:/cvsroot/sbbs, example: *
* cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login *
* (just hit return, no password is necessary) *
* cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src *
* ftp://vert.synchro.net, ftp://git.synchro.net and ftp://ftp.synchro.net *
* *
* For Synchronet coding style and modification guidelines, see *
* http://www.synchro.net/source.html *
* *
* You are encouraged to submit any modifications (preferably in Unix diff *
* format) via e-mail to mods@synchro.net *
* *
* Note: If this box doesn't appear square, then you need to fix your tabs. *
* Original source by Ragnarok. Heavily modified by Digital Man with ample *
* help from nelgin. *
****************************************************************************/
#include "sbbs.h"
#include "sqlite3.h"
#ifdef JAVASCRIPT
// #include "jsdate.h" /* Yes, I know this is a private header file */
typedef struct
{
sqlite3* db; /* pointer to sqlite db */
char name[MAX_PATH + 1]; /* db filename */
char* stmt; /* sql query */
BOOL external; /* externally created, don't close */
BOOL debug;
char* errormsg; /* last error message */
// jsval * argv = JS_ARGV(cx, arglist);
// jsval rval = JSVAL_VOID;
} private_t;
......@@ -69,36 +54,29 @@ static void dbprintf(BOOL error, private_t* p, char* fmt, ...)
sbuf[sizeof(sbuf) - 1] = 0;
va_end(argptr);
lprintf(LOG_DEBUG, "Sqlite: %s", sbuf);
//lprintf(LOG_DEBUG,"%04u File %s%s",p->fp ? fileno(p->fp) : 0,error ? "ERROR: ":"",sbuf);
}
/* Sqlite Object Methods */
//js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
static JSBool
js_open(JSContext *cx, uintN argc, jsval *arglist)
{
int rc;
// jsint bufsize=2*1024;
// JSString* str;
private_t* p;
// jsval *rval;
JSObject * obj = JS_THIS_OBJECT(cx, arglist);
// *rval = JSVAL_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if ((p = (private_t*)JS_GetPrivate(cx, obj)) == NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return(JS_FALSE);
return JS_FALSE;
}
if (p->db != NULL) {
dbprintf(FALSE, p, "db already open");
// *rval = JSVAL_TRUE;
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
return(JS_TRUE);
return JS_TRUE;
}
else {
dbprintf(FALSE, p, "trying open");
......@@ -106,48 +84,41 @@ js_open(JSContext *cx, uintN argc, jsval *arglist)
if (rc) {
sqlite3_close(p->db);
// *rval = JSVAL_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
p->errormsg = "can't open the database (path/permissions incorrect?)";
dbprintf(FALSE, p, "can't open: %s", p->name);
return (JS_TRUE);
return JS_TRUE;
}
}
dbprintf(FALSE, p, "opened!");
//*rval = JSVAL_TRUE;
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
return(JS_TRUE);
return JS_TRUE;
}
//js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
static JSBool
js_close(JSContext *cx, uintN argc, jsval *arglist)
{
private_t* p;
// jsval *rval;
JSObject * obj = JS_THIS_OBJECT(cx, arglist);
if ((p = (private_t*)JS_GetPrivate(cx, obj)) == NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return(JS_FALSE);
return JS_FALSE;
}
if (p->db == NULL) {
//*rval = JSVAL_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
return(JS_TRUE);
return JS_TRUE;
}
sqlite3_close(p->db);
dbprintf(FALSE, p, "closed: %s", p->name);
p->db = NULL;
//*rval = JSVAL_TRUE;
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
return(JS_TRUE);
return JS_TRUE;
}
//js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval)
static JSBool
js_exec(JSContext *cx, uintN argc, jsval *arglist)
{
......@@ -159,43 +130,38 @@ js_exec(JSContext *cx, uintN argc, jsval *arglist)
sqlite3_stmt *ppStmt;
jsval val;
jsuint idx;
// char* column_name; // column name of Record
size_t stmt_sz = 0;
// jsval *rval;
jsval * argv = JS_ARGV(cx, arglist);
JSObject * parent = JS_THIS_OBJECT(cx, arglist);
if ((p = (private_t*)JS_GetPrivate(cx, parent)) == NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return(JS_FALSE);
return JS_FALSE;
}
// use the parameter as query
if (argc > 0) {
dbprintf (FALSE, p, "exec has stmt");
str = JS_ValueToString(cx, argv[0]);
if (str != NULL) {
// p->stmt = JS_GetStringBytes(str);
JSSTRING_TO_RASTRING(cx, str, p->stmt, &stmt_sz, NULL);
dbprintf (FALSE, p, "exec param: %s", p->stmt);
}
}
if (p->db == NULL) {
dbprintf(TRUE, p, "database is not opened");
// *rval = JSVAL_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
return(JS_TRUE);
return JS_TRUE;
}
dbprintf(FALSE, p, "create Result object");
if ((Result = JS_NewArrayObject(cx, 0, NULL)) == NULL)
return(JS_FALSE);
return JS_FALSE;
if (p->stmt == NULL) {
dbprintf(FALSE, p, "empy statement");
p->errormsg = "empty statement";
// *rval = JSVAL_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
return(JS_TRUE);
return JS_TRUE;
}
......@@ -206,7 +172,7 @@ js_exec(JSContext *cx, uintN argc, jsval *arglist)
while (sqlite3_step(ppStmt) == SQLITE_ROW) {
dbprintf(FALSE, p, "create record object");
if ((Record = JS_NewObject(cx, NULL, NULL, NULL)) == NULL)
return(JS_FALSE);
return JS_FALSE;
for (i = 0; i < sqlite3_column_count(ppStmt); i++) {
......@@ -222,29 +188,27 @@ js_exec(JSContext *cx, uintN argc, jsval *arglist)
}
if (!JS_SetProperty(cx, Record, sqlite3_column_name(ppStmt, i), &val))
return(JS_FALSE);
return JS_FALSE;
}
dbprintf (FALSE, p, "adding element to the Result");
val = OBJECT_TO_JSVAL(Record);
idx = -1;
if (!JS_GetArrayLength(cx, Result, &idx))
return(JS_FALSE);
return JS_FALSE;
if (!JS_SetElement(cx, Result, idx, &val))
return(JS_FALSE);
return JS_FALSE;
}
dbprintf(FALSE, p, "end prepare");
//*rval = OBJECT_TO_JSVAL(Result);
JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(Result));
return(JS_TRUE);
return JS_TRUE;
}
else {
p->errormsg = (char* ) sqlite3_errmsg(p->db);
//*rval = JSVAL_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
dbprintf(FALSE, p, "prepare error: %s", sqlite3_errmsg(p->db));
return(JS_TRUE);
return JS_TRUE;
}
}
......@@ -263,13 +227,12 @@ static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict
private_t* p;
int32 intval = 0;
JSString* js_str;
char* strval=NULL;
size_t js_str_sz = 0;
jsval idval;
if ((p = (private_t*)JS_GetPrivate(cx, obj)) == NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return(JS_FALSE);
return JS_FALSE;
}
JS_IdToValue(cx, id, &idval);
......@@ -279,29 +242,21 @@ static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict
JS_ValueToInt32(cx, *vp, &intval);
else if (JSVAL_IS_BOOLEAN(*vp))
JS_ValueToBoolean(cx, *vp, &intval);
else if(JSVAL_IS_STRING(*vp)) {
if((js_str = JS_ValueToString(cx, *vp))==NULL)
return(JS_FALSE);
// strval=JS_GetStringBytes(js_str);
// JSSTRING_TO_ASTRING(cx, js_str, strval, 128, NULL);
JSSTRING_TO_RASTRING(cx, js_str, strval, &js_str_sz, NULL);
}
dbprintf(FALSE, p, "setting property %d", tiny);
switch (tiny) {
case SQLITE_PROP_NAME:
SAFECOPY(p->name, strval);
break;
case SQLITE_PROP_STMT:
p->stmt = strval;
if ((js_str = JS_ValueToString(cx, *vp)) == NULL)
return JS_FALSE;
JSSTRING_TO_RASTRING(cx, js_str, p->stmt, &js_str_sz, NULL);
break;
case SQLITE_PROP_DEBUG:
p->debug = intval;
break;
}
return(JS_TRUE);
return JS_TRUE;
}
static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
......@@ -313,7 +268,7 @@ static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
if ((p = (private_t*)JS_GetPrivate(cx, obj)) == NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return(JS_FALSE);
return JS_FALSE;
}
JS_IdToValue(cx, id, &idval);
......@@ -324,12 +279,12 @@ static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
switch (tiny) {
case SQLITE_PROP_NAME:
if ((js_str = JS_NewStringCopyZ(cx, p->name)) == NULL)
return(JS_FALSE);
return JS_FALSE;
*vp = STRING_TO_JSVAL(js_str);
break;
case SQLITE_PROP_STMT:
if ((js_str = JS_NewStringCopyZ(cx, p->stmt)) == NULL)
return(JS_FALSE);
return JS_FALSE;
*vp = STRING_TO_JSVAL(js_str);
break;
case SQLITE_PROP_DEBUG:
......@@ -337,12 +292,12 @@ static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
break;
case SQLITE_PROP_ERRORMSG:
if ((js_str = JS_NewStringCopyZ(cx, p->errormsg)) == NULL)
return(JS_FALSE);
return JS_FALSE;
*vp = STRING_TO_JSVAL(js_str);
break;
}
return(JS_TRUE);
return JS_TRUE;
}
#define SQLITE_PROP_FLAGS JSPROP_ENUMERATE | JSPROP_READONLY
......@@ -389,9 +344,8 @@ static void js_finalize_sqlite(JSContext *cx, JSObject *obj)
if ((p = (private_t*)JS_GetPrivate(cx, obj)) == NULL)
return;
if(p->external==JS_FALSE && p->db!=NULL)
if (p->db != NULL)
sqlite3_close(p->db);
//sqlite3_free(p->errormsg);
dbprintf(FALSE, p, "finalize Sqlite object");
......@@ -416,7 +370,6 @@ static JSClass js_sqlite_class = {
/* Sqlite Constructor (creates database object) */
//js_sqlite_constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv)
static JSBool
js_sqlite_constructor(JSContext* cx, uintN argc, jsval *arglist)
{
......@@ -431,32 +384,31 @@ js_sqlite_constructor(JSContext* cx, uintN argc, jsval *arglist)
if ((str = JS_ValueToString(cx, argv[0])) == NULL) {
JS_ReportError(cx, "No filename specified");
return(JS_FALSE);
return JS_FALSE;
}
if ((p = (private_t*)calloc(1, sizeof(private_t))) == NULL) {
JS_ReportError(cx, "calloc failed");
return(JS_FALSE);
return JS_FALSE;
}
p->errormsg = "";
// SAFECOPY(p->name,JS_GetStringBytes(str));
JSSTRING_TO_STRBUF(cx, str, p->name, sizeof(p->name), NULL);
if (!JS_SetPrivate(cx, obj, p)) {
dbprintf(TRUE, p, "JS_SetPrivate failed\n");
return(JS_FALSE);
return JS_FALSE;
}
if (!js_DefineSyncProperties(cx, obj, js_sqlite_properties)) {
dbprintf(TRUE, p, "js_DefineSyncProperties failed\n");
return(JS_FALSE);
return JS_FALSE;
}
if (!js_DefineSyncMethods(cx, obj, js_sqlite_functions /*, FALSE - only needs 3 parameters */)) {
dbprintf(TRUE, p, "js_DefineSyncMethods failed\n");
return(JS_FALSE);
return JS_FALSE;
}
#ifdef BUILD_JSDOCS
......@@ -468,7 +420,7 @@ js_sqlite_constructor(JSContext* cx, uintN argc, jsval *arglist)
#endif
dbprintf(FALSE, p, "object constructed\n");
return(JS_TRUE);
return JS_TRUE;
}
JSObject* js_CreateSqliteClass(JSContext* cx, JSObject* parent)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment