home bbs files messages ]

Just a sample of the Echomail archive

Cooperative anarchy at its finest, still active today. Darkrealms is the Zone 1 Hub.

   SYNC_PROGRAMMING      Synchronet/Baja/XSDK Programming      49,116 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 46,923 of 49,116   
   Fernando Toledo to GitLab note in main/sbbs   
   Inital commit of sqlite support.   
   10 May 25 07:58:02   
   
   TZUTC: -0700   
   MSGID: 52307.syncprog@1:103/705 2c856bcd   
   PID: Synchronet 3.21a-Linux master/85dea2614 Apr 11 2025 GCC 12.2.0   
   TID: SBBSecho 3.25-Linux master/0c503c4ea May 04 2025 GCC 12.2.0   
   BBSID: VERT   
   CHRS: UTF-8 4   
   FORMAT: flowed   
   https://gitlab.synchro.net/main/sbbs/-/merge_requests/538#note_7225   
      
   What I'm trying to say is that from JavaScript, just use exec() or query() as   
   needed, without needing to do a prepare.   
      
   Because the prepare is done directly within the C code.   
      
   So both methods in JS receive the string with the SQL as parameters.   
   The difference is that exec() can return true/false (or the number of rows   
   affected) and query() can return an array of result rows.   
      
   Each method must be implemented in the C code, for example.   
      
   ```c++   
   static JSBool   
   js_sqlite_exec(JSContext *cx, uintN argc, jsval *arglist)   
   {   
       JSObject *obj = JS_THIS_OBJECT(cx, arglist);   
       jsval *argv = JS_ARGV(cx, arglist);   
       char *sql;   
       sqlite3 *db;   
       char *errmsg = NULL;   
       int rc;   
      
       if (!JS_ConvertArguments(cx, argc, argv, "s", &sql))   
           return JS_FALSE;   
      
       // Obtener la conexión a la base de datos desde el objeto JavaScript   
       db = JS_GetPrivate(cx, obj);   
       if (!db)   
           return JS_FALSE;   
      
       rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);   
       if (rc != SQLITE_OK) {   
           JS_ReportError(cx, "Error al ejecutar SQL: %s", errmsg);   
           sqlite3_free(errmsg);   
           return JS_FALSE;   
       }   
      
       JS_SET_RVAL(cx, arglist, JSVAL_TRUE);   
       return JS_TRUE;   
   }   
   ```   
   and query method   
      
   ```c++   
   static JSBool   
   js_sqlite_query(JSContext *cx, uintN argc, jsval *arglist)   
   {   
       JSObject *obj = JS_THIS_OBJECT(cx, arglist);   
       jsval *argv = JS_ARGV(cx, arglist);   
       char *sql;   
       sqlite3 *db;   
       sqlite3_stmt *stmt;   
       int rc;   
      
       if (!JS_ConvertArguments(cx, argc, argv, "s", &sql))   
           return JS_FALSE;   
      
       // Obtener la conexión a la base de datos desde el objeto JavaScript   
       db = JS_GetPrivate(cx, obj);   
       if (!db)   
           return JS_FALSE;   
      
       rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);   
       if (rc != SQLITE_OK) {   
           JS_ReportError(cx, "Error al preparar la consulta: %s",    
   qlite3_errmsg(db));   
           return JS_FALSE;   
       }   
      
       JSObject *resultArray = JS_NewArrayObject(cx, 0, NULL);   
       int index = 0;   
      
       while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {   
           int colCount = sqlite3_column_count(stmt);   
           JSObject *rowObj = JS_NewObject(cx, NULL, NULL, NULL);   
      
           for (int i = 0; i < colCount; i++) {   
               const char *colName = sqlite3_column_name(stmt, i);   
               const char *colValue = (const char *)sqlite3_column_text(stmt, i);   
               jsval val = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, colValue ?   
   colValue : ""));   
               JS_SetProperty(cx, rowObj, colName, &val);   
           }   
      
           jsval rowVal = OBJECT_TO_JSVAL(rowObj);   
           JS_SetElement(cx, resultArray, index++, &rowVal);   
       }   
      
       sqlite3_finalize(stmt);   
      
       if (rc != SQLITE_DONE) {   
           JS_ReportError(cx, "Error al ejecutar la consulta: %s",    
   qlite3_errmsg(db));   
           return JS_FALSE;   
       }   
      
       JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(resultArray));   
       return JS_TRUE;   
   }   
   ```   
   --- SBBSecho 3.25-Linux   
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)   
   SEEN-BY: 103/705 105/81 106/201 124/5016 128/187 153/757 7715 154/10   
   SEEN-BY: 154/30 110 203/0 218/700 221/0 226/30 227/114 229/110 114   
   SEEN-BY: 229/206 317 400 426 428 470 550 700 705 240/1120 5832 263/1   
   SEEN-BY: 266/512 280/464 5003 5006 291/111 292/8125 301/1 320/219   
   SEEN-BY: 322/757 341/66 234 342/200 396/45 423/120 460/58 256 1124   
   SEEN-BY: 467/888 633/280 712/848 770/1 902/26 5020/400 8912 5054/30   
   SEEN-BY: 5075/35   
   PATH: 103/705 280/464 460/58 229/426   
      

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca