| 2323 | } |
| 2324 | |
| 2325 | static int sql_cache_dump(struct sip_msg *msg, db_handlers_t *dbh, |
| 2326 | pv_name_fix_t *cols, pvname_list_t *dst_avps) |
| 2327 | { |
| 2328 | cache_entry_t *cache = dbh->c_entry; |
| 2329 | int i, n, ver; |
| 2330 | |
| 2331 | LM_DBG("dumping data from cache: %.*s\n", cache->id.len, cache->id.s); |
| 2332 | |
| 2333 | lock_start_read(cache->ref_lock); |
| 2334 | |
| 2335 | ver = get_rld_vers_from_cache(cache, dbh); |
| 2336 | if (ver < 0) { |
| 2337 | lock_stop_read(cache->ref_lock); |
| 2338 | LM_ERR("failed to get reload version\n"); |
| 2339 | return -1; |
| 2340 | } |
| 2341 | |
| 2342 | if (cols[0].id.len != ver) { |
| 2343 | for (i = 0; cols[i].c_entry; i++) { |
| 2344 | optimize_cdb_decode(&cols[i]); |
| 2345 | LM_DBG("optimized fields for col '%.*s': %d/%d/%d\n", |
| 2346 | cols[i].col.len, cols[i].col.s, cols[i].col_offset, |
| 2347 | cols[i].col_nr, cols[i].last_str); |
| 2348 | } |
| 2349 | |
| 2350 | cols[0].id.len = ver; |
| 2351 | } |
| 2352 | |
| 2353 | _selected_cols = cols; |
| 2354 | _out_avps = dst_avps; |
| 2355 | _rld_ver = ver; |
| 2356 | _sip_msg = msg; |
| 2357 | |
| 2358 | n = dbh->cdbf.iter_keys(dbh->cdbcon, decode_kv2avps); |
| 2359 | if (n < 0) { |
| 2360 | lock_stop_read(cache->ref_lock); |
| 2361 | LM_ERR("failed to fully iterate through cache '%.*s'\n", |
| 2362 | cache->id.len, cache->id.s); |
| 2363 | return -1; |
| 2364 | } |
| 2365 | |
| 2366 | lock_stop_read(cache->ref_lock); |
| 2367 | |
| 2368 | return n == 0 ? -2 : n; |
| 2369 | } |
nothing calls this directly
no test coverage detected