Skip to content
Snippets Groups Projects
Commit 2e7de438 authored by Fernando Toledo's avatar Fernando Toledo
Browse files

Separte exec() and query() methods and remove stmt js property

parent e6f1bc21
No related branches found
No related tags found
No related merge requests found
Pipeline #8943 passed
...@@ -119,8 +119,66 @@ js_close(JSContext *cx, uintN argc, jsval *arglist) ...@@ -119,8 +119,66 @@ js_close(JSContext *cx, uintN argc, jsval *arglist)
JS_SET_RVAL(cx, arglist, JSVAL_TRUE); JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
return JS_TRUE; return JS_TRUE;
} }
static JSBool static JSBool
js_exec(JSContext *cx, uintN argc, jsval *arglist) js_exec(JSContext *cx, uintN argc, jsval *arglist)
{
int rc;
private_t* p;
JSString* str;
size_t stmt_sz = 0;
jsval * argv = JS_ARGV(cx, arglist);
JSObject * parent = JS_THIS_OBJECT(cx, arglist);
char * dberror = NULL;
if ((p = (private_t*)JS_GetPrivate(cx, parent)) == NULL) {
JS_ReportError(cx, getprivate_failure, WHERE);
return JS_FALSE;
}
// use the parameter as query
if (argc <= 0) {
dbprintf(TRUE, p, "exec expects at least one string parameter");
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
return JS_TRUE;
}
dbprintf (FALSE, p, "exec has stmt");
str = JS_ValueToString(cx, argv[0]);
if (str != NULL) {
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");
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
return JS_TRUE;
}
if (p->stmt == NULL) {
dbprintf(FALSE, p, "Empy statement");
p->errormsg = "Empty statement";
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
return JS_TRUE;
}
dbprintf (FALSE, p, "Execute: %s", p->stmt);
rc = sqlite3_exec(p->db, p->stmt, NULL, NULL, &dberror);
if (rc == SQLITE_OK) {
return JS_TRUE;
}
else {
p->errormsg = (char* ) sqlite3_errmsg(p->db);
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
dbprintf(FALSE, p, "Prepare error: %s. %s", sqlite3_errmsg(p->db), dberror);
return JS_TRUE;
}
}
static JSBool
js_query(JSContext *cx, uintN argc, jsval *arglist)
{ {
int rc, i; int rc, i;
private_t* p; private_t* p;
...@@ -215,7 +273,6 @@ js_exec(JSContext *cx, uintN argc, jsval *arglist) ...@@ -215,7 +273,6 @@ js_exec(JSContext *cx, uintN argc, jsval *arglist)
/* Sqlite Object Properites */ /* Sqlite Object Properites */
enum { enum {
SQLITE_PROP_NAME SQLITE_PROP_NAME
, SQLITE_PROP_STMT
, SQLITE_PROP_DEBUG , SQLITE_PROP_DEBUG
, SQLITE_PROP_ERRORMSG , SQLITE_PROP_ERRORMSG
}; };
...@@ -226,8 +283,6 @@ static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict ...@@ -226,8 +283,6 @@ static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict
jsint tiny; jsint tiny;
private_t* p; private_t* p;
int32 intval = 0; int32 intval = 0;
JSString* js_str;
size_t js_str_sz = 0;
jsval idval; jsval idval;
if ((p = (private_t*)JS_GetPrivate(cx, obj)) == NULL) { if ((p = (private_t*)JS_GetPrivate(cx, obj)) == NULL) {
...@@ -246,11 +301,6 @@ static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict ...@@ -246,11 +301,6 @@ static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict
dbprintf(FALSE, p, "Setting property %d", tiny); dbprintf(FALSE, p, "Setting property %d", tiny);
switch (tiny) { switch (tiny) {
case SQLITE_PROP_STMT:
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: case SQLITE_PROP_DEBUG:
p->debug = intval; p->debug = intval;
break; break;
...@@ -282,11 +332,6 @@ static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) ...@@ -282,11 +332,6 @@ static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
return JS_FALSE; return JS_FALSE;
*vp = STRING_TO_JSVAL(js_str); *vp = STRING_TO_JSVAL(js_str);
break; break;
case SQLITE_PROP_STMT:
if ((js_str = JS_NewStringCopyZ(cx, p->stmt)) == NULL)
return JS_FALSE;
*vp = STRING_TO_JSVAL(js_str);
break;
case SQLITE_PROP_DEBUG: case SQLITE_PROP_DEBUG:
*vp = BOOLEAN_TO_JSVAL(p->debug); *vp = BOOLEAN_TO_JSVAL(p->debug);
break; break;
...@@ -306,7 +351,6 @@ static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) ...@@ -306,7 +351,6 @@ static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
static jsSyncPropertySpec js_sqlite_properties[] = { static jsSyncPropertySpec js_sqlite_properties[] = {
/* name ,tinyid ,flags, ver */ /* name ,tinyid ,flags, ver */
{ "name", SQLITE_PROP_NAME, SQLITE_PROP_ROFLAGS, 321}, { "name", SQLITE_PROP_NAME, SQLITE_PROP_ROFLAGS, 321},
{ "stmt", SQLITE_PROP_STMT, JSPROP_ENUMERATE, 321},
{ "debug", SQLITE_PROP_DEBUG, JSPROP_ENUMERATE, 321}, { "debug", SQLITE_PROP_DEBUG, JSPROP_ENUMERATE, 321},
{ "errormsg", SQLITE_PROP_ERRORMSG, SQLITE_PROP_ROFLAGS, 321}, { "errormsg", SQLITE_PROP_ERRORMSG, SQLITE_PROP_ROFLAGS, 321},
{0} {0}
...@@ -315,7 +359,6 @@ static jsSyncPropertySpec js_sqlite_properties[] = { ...@@ -315,7 +359,6 @@ static jsSyncPropertySpec js_sqlite_properties[] = {
#ifdef BUILD_JSDOCS #ifdef BUILD_JSDOCS
static char* sqlite_prop_desc[] = { static char* sqlite_prop_desc[] = {
"filename specified in constructor - <small>READ ONLY</small>" "filename specified in constructor - <small>READ ONLY</small>"
, "string sql statement"
, "set to <i>true</i> to enable debug log output" , "set to <i>true</i> to enable debug log output"
, "get the last error message - <small>READ ONLY</small>" , "get the last error message - <small>READ ONLY</small>"
, NULL , NULL
...@@ -331,7 +374,10 @@ static jsSyncMethodSpec js_sqlite_functions[] = { ...@@ -331,7 +374,10 @@ static jsSyncMethodSpec js_sqlite_functions[] = {
, JSDOCSTR("close database") , JSDOCSTR("close database")
, 321}, , 321},
{"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 without results")
, 321},
{"query", js_query, 0, JSTYPE_BOOLEAN, JSDOCSTR("")
, JSDOCSTR("exec the sql query on database that return rows")
, 321}, , 321},
{0} {0}
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment