MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / db_sqlite_convert_rows

Function db_sqlite_convert_rows

modules/db_sqlite/res.c:345–401  ·  view source on GitHub ↗

* Convert rows from sqlite to db API representation * */

Source from the content-addressed store, hash-verified

343 *
344 */
345static inline int db_sqlite_convert_rows(const db_con_t* _h, db_res_t* _r)
346{
347 int row;
348 int ret;
349
350 if ((!_h) || (!_r)) {
351 LM_ERR("invalid parameter\n");
352 return -1;
353 }
354
355 if (!CON_SQLITE_PS(_h)) {
356 LM_ERR(" all sqlite queries should have a ps!\n");
357 return -1;
358 }
359
360 if (!RES_ROW_N(_r)) {
361 LM_DBG("no rows returned from the query\n");
362 RES_ROWS(_r) = 0;
363 return 0;
364 }
365
366 if (db_sqlite_allocate_rows( _r, RES_ROW_N(_r))!=0) {
367 LM_ERR("no private memory left\n");
368 return -2;
369 }
370
371 row=0;
372 ret=-1;
373
374
375 while (ret != SQLITE_DONE) {
376 ret = sqlite3_step(CON_SQLITE_PS(_h));
377
378 if (ret == SQLITE_DONE) {
379 RES_ROW_N(_r) = RES_LAST_ROW(_r) = RES_NUM_ROWS(_r) = row;
380 sqlite3_reset(CON_SQLITE_PS(_h));
381 sqlite3_clear_bindings(CON_SQLITE_PS(_h));
382 break;
383 }
384
385 if (row == RES_ROW_N(_r)) {
386 db_sqlite_realloc_rows(_r, RES_ROW_N(_r) + db_sqlite_alloc_limit);
387 RES_ROW_N(_r) += db_sqlite_alloc_limit;
388 }
389
390 if ((ret=db_sqlite_convert_row(_h, _r, &(RES_ROWS(_r)[row]))) < 0) {
391 LM_ERR("error while converting row #%d\n", row);
392 RES_ROW_N(_r) = row;
393 db_free_rows(_r);
394 return -1;
395 }
396
397 row++;
398 }
399
400 return ret;
401}
402

Callers 1

db_sqlite_convert_resultFunction · 0.85

Calls 4

db_sqlite_allocate_rowsFunction · 0.85
db_sqlite_realloc_rowsFunction · 0.85
db_sqlite_convert_rowFunction · 0.85
db_free_rowsFunction · 0.85

Tested by

no test coverage detected