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

Finally got js_sqlite to compile. Thank you Digital Man!

parent ea69411e
No related branches found
No related tags found
1 merge request!538Inital commit of sqlite support.
Pipeline #8924 failed
...@@ -49,6 +49,8 @@ typedef struct ...@@ -49,6 +49,8 @@ typedef struct
BOOL external; /* externally created, don't close */ BOOL external; /* externally created, don't close */
BOOL debug; BOOL debug;
char* errormsg; /* last error message */ char* errormsg; /* last error message */
// jsval * argv = JS_ARGV(cx, arglist);
// jsval rval = JSVAL_VOID;
} private_t; } private_t;
...@@ -73,15 +75,19 @@ static void dbprintf(BOOL error, private_t* p, char* fmt, ...) ...@@ -73,15 +75,19 @@ static void dbprintf(BOOL error, private_t* p, char* fmt, ...)
/* Sqlite Object Methods */ /* Sqlite Object Methods */
//js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
static JSBool static JSBool
js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) js_open(JSContext *cx, uintN argc, jsval *arglist)
{ {
int rc; int rc;
jsint bufsize=2*1024; // jsint bufsize=2*1024;
JSString* str; // JSString* str;
private_t* p; private_t* p;
// jsval *rval;
JSObject * obj = JS_THIS_OBJECT(cx, arglist);
*rval = JSVAL_FALSE; // *rval = JSVAL_FALSE;
JS_SET_RVAL(cx,arglist,JSVAL_FALSE);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) { if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE); JS_ReportError(cx,getprivate_failure,WHERE);
...@@ -90,7 +96,8 @@ js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -90,7 +96,8 @@ js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
if(p->db!=NULL) { if(p->db!=NULL) {
dbprintf(FALSE,p, "db already open"); dbprintf(FALSE,p, "db already open");
*rval = JSVAL_TRUE; // *rval = JSVAL_TRUE;
JS_SET_RVAL(cx,arglist,JSVAL_TRUE);
return(JS_TRUE); return(JS_TRUE);
} }
else { else {
...@@ -99,22 +106,27 @@ js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -99,22 +106,27 @@ js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
if( rc ) { if( rc ) {
sqlite3_close(p->db); sqlite3_close(p->db);
*rval = JSVAL_FALSE; // *rval = JSVAL_FALSE;
JS_SET_RVAL(cx,arglist,JSVAL_FALSE);
p->errormsg = "can't open the database (path/permissions incorrect?)"; p->errormsg = "can't open the database (path/permissions incorrect?)";
dbprintf(FALSE, p, "can't open: %s",p->name); dbprintf(FALSE, p, "can't open: %s",p->name);
return (JS_TRUE); return (JS_TRUE);
} }
} }
dbprintf(FALSE,p , "opened!"); dbprintf(FALSE,p , "opened!");
*rval = JSVAL_TRUE; //*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 static JSBool
js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) js_close(JSContext *cx, uintN argc, jsval *arglist)
{ {
private_t* p; private_t* p;
// jsval *rval;
JSObject * obj = JS_THIS_OBJECT(cx, arglist);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) { if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE); JS_ReportError(cx,getprivate_failure,WHERE);
...@@ -122,7 +134,8 @@ js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -122,7 +134,8 @@ js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
} }
if(p->db==NULL) { if(p->db==NULL) {
*rval = JSVAL_FALSE; //*rval = JSVAL_FALSE;
JS_SET_RVAL(cx,arglist,JSVAL_FALSE);
return(JS_TRUE); return(JS_TRUE);
} }
sqlite3_close(p->db); sqlite3_close(p->db);
...@@ -130,11 +143,13 @@ js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -130,11 +143,13 @@ js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
dbprintf(FALSE, p, "closed: %s" , p->name); dbprintf(FALSE, p, "closed: %s" , p->name);
p->db=NULL; p->db=NULL;
*rval = JSVAL_TRUE; //*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 static JSBool
js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) js_exec(JSContext *cx, uintN argc, jsval *arglist)
{ {
int rc,i; int rc,i;
private_t* p; private_t* p;
...@@ -144,8 +159,11 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) ...@@ -144,8 +159,11 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval)
sqlite3_stmt *ppStmt; sqlite3_stmt *ppStmt;
jsval val; jsval val;
jsuint idx; jsuint idx;
char* column_name; // column name of Record // char* column_name; // column name of Record
size_t stmt_sz = 0; 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) { if((p=(private_t*)JS_GetPrivate(cx,parent))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE); JS_ReportError(cx,getprivate_failure,WHERE);
...@@ -163,7 +181,8 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) ...@@ -163,7 +181,8 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval)
} }
if(p->db==NULL) { if(p->db==NULL) {
dbprintf(TRUE, p, "database is not opened"); dbprintf(TRUE, p, "database is not opened");
*rval = JSVAL_FALSE; // *rval = JSVAL_FALSE;
JS_SET_RVAL(cx,arglist,JSVAL_FALSE);
return(JS_TRUE); return(JS_TRUE);
} }
...@@ -174,7 +193,8 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) ...@@ -174,7 +193,8 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval)
if (p->stmt == NULL) { if (p->stmt == NULL) {
dbprintf(FALSE, p, "empy statement"); dbprintf(FALSE, p, "empy statement");
p->errormsg = "empty statement"; p->errormsg = "empty statement";
*rval = JSVAL_FALSE; // *rval = JSVAL_FALSE;
JS_SET_RVAL(cx,arglist,JSVAL_FALSE);
return(JS_TRUE); return(JS_TRUE);
} }
...@@ -195,7 +215,7 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) ...@@ -195,7 +215,7 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval)
val = INT_TO_JSVAL(sqlite3_column_int(ppStmt,i)); val = INT_TO_JSVAL(sqlite3_column_int(ppStmt,i));
break; break;
case SQLITE_TEXT: case SQLITE_TEXT:
val = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, sqlite3_column_text(ppStmt,i))); val = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, (const char *)sqlite3_column_text(ppStmt,i)));
break; break;
case SQLITE_BLOB: case SQLITE_BLOB:
break; break;
...@@ -215,12 +235,14 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) ...@@ -215,12 +235,14 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval)
return(JS_FALSE); return(JS_FALSE);
} }
dbprintf(FALSE, p , "end prepare"); dbprintf(FALSE, p , "end prepare");
*rval = OBJECT_TO_JSVAL(Result); //*rval = OBJECT_TO_JSVAL(Result);
JS_SET_RVAL(cx,arglist,OBJECT_TO_JSVAL(Result));
return(JS_TRUE); return(JS_TRUE);
} }
else { else {
p->errormsg = (char* ) sqlite3_errmsg(p->db); p->errormsg = (char* ) sqlite3_errmsg(p->db);
*rval = JSVAL_FALSE; //*rval = JSVAL_FALSE;
JS_SET_RVAL(cx,arglist,JSVAL_FALSE);
dbprintf(FALSE, p , "prepare error: %s", sqlite3_errmsg(p->db)); dbprintf(FALSE, p , "prepare error: %s", sqlite3_errmsg(p->db));
return(JS_TRUE); return(JS_TRUE);
} }
...@@ -235,7 +257,7 @@ enum { ...@@ -235,7 +257,7 @@ enum {
}; };
static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp)
{ {
jsint tiny; jsint tiny;
private_t* p; private_t* p;
...@@ -278,7 +300,7 @@ static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) ...@@ -278,7 +300,7 @@ static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
return(JS_TRUE); return(JS_TRUE);
} }
static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp) static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{ {
private_t* p; private_t* p;
jsint tiny; jsint tiny;
...@@ -341,18 +363,14 @@ static char* sqlite_prop_desc[] = { ...@@ -341,18 +363,14 @@ static char* sqlite_prop_desc[] = {
static jsSyncMethodSpec js_sqlite_functions[] = { static jsSyncMethodSpec js_sqlite_functions[] = {
{"open", js_open, 1, JSTYPE_BOOLEAN, JSDOCSTR("Open the database") {"open", js_open, 1, JSTYPE_BOOLEAN, JSDOCSTR("Open the database")
,JSDOCSTR("open the sqlite3 database" ,JSDOCSTR("open the sqlite3 database")
) ,310},
,310
},
{"close", js_close, 0, JSTYPE_VOID, JSDOCSTR("") {"close", js_close, 0, JSTYPE_VOID, JSDOCSTR("")
,JSDOCSTR("close database") ,JSDOCSTR("close database")
,310 ,310},
},
{"exec", js_exec, 0, JSTYPE_BOOLEAN, JSDOCSTR("") {"exec", js_exec, 0, JSTYPE_BOOLEAN, JSDOCSTR("")
,JSDOCSTR("exec the sql query on database") ,JSDOCSTR("exec the sql query on database")
,310 ,310},
},
{0} {0}
}; };
...@@ -394,22 +412,22 @@ static JSClass js_sqlite_class = { ...@@ -394,22 +412,22 @@ static JSClass js_sqlite_class = {
//js_sqlite_constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv) //js_sqlite_constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv)
static JSBool static JSBool
js_sqlite_constructor(JSContext* cx, uintN argc, jsval *arglist, jsval *rval) js_sqlite_constructor(JSContext* cx, uintN argc, jsval *arglist)
{ {
JSString* str; JSString* str;
private_t* p; private_t* p;
jsval * argv = JS_ARGV(cx, arglist); jsval * argv = JS_ARGV(cx, arglist);
JSObject* obj;
// JSVALUE_TO_ASTRING(cx, argv[0], str, sizeof(argv[0]), NULL); obj = JS_NewObject(cx, &js_sqlite_class, NULL, NULL);
// if(str==NULL) { JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(obj));
if((str = JS_ValueToString(cx, argv[0]))==NULL) { if((str = JS_ValueToString(cx, argv[0]))==NULL) {
JS_ReportError(cx,"No filename specified"); JS_ReportError(cx,"No filename specified");
return(JS_FALSE); return(JS_FALSE);
} }
*rval = JSVAL_VOID;
if((p=(private_t*)calloc(1,sizeof(private_t)))==NULL) { if((p=(private_t*)calloc(1,sizeof(private_t)))==NULL) {
JS_ReportError(cx,"calloc failed"); JS_ReportError(cx,"calloc failed");
return(JS_FALSE); return(JS_FALSE);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment