| 428 | } |
| 429 | |
| 430 | int db_virtual_bind_api(const str* mod, db_func_t *dbb) |
| 431 | { |
| 432 | LM_DBG("BINDING API for virtual url: %.*s\n", mod->len, mod->s); |
| 433 | |
| 434 | int i, j; |
| 435 | str s; |
| 436 | //int len; |
| 437 | |
| 438 | if(!global) |
| 439 | if(virtual_mod_init()) |
| 440 | return 1; |
| 441 | |
| 442 | if(dbb==NULL) |
| 443 | return -1; |
| 444 | |
| 445 | memset(dbb, 0, sizeof(db_func_t)); |
| 446 | |
| 447 | |
| 448 | /* virtual://set5 |
| 449 | * p |
| 450 | */ |
| 451 | s.s = strchr(mod->s, '/'); |
| 452 | s.s +=2; |
| 453 | s.len = mod->len - (s.s - mod->s); |
| 454 | |
| 455 | |
| 456 | for(i=0; i< global->size; i++){ |
| 457 | if ( (s.len==global->set_list[i].set_name.len) && |
| 458 | strncmp(s.s, global->set_list[i].set_name.s, |
| 459 | global->set_list[i].set_name.len) == 0) |
| 460 | break; |
| 461 | } |
| 462 | if (i==global->size) { |
| 463 | LM_ERR("virtual set <%.*s> was not found. Did you define it?\n", |
| 464 | s.len, s.s); |
| 465 | return -1; |
| 466 | } |
| 467 | |
| 468 | dbb->cap = global->set_list[i].db_list[0].dbf.cap; |
| 469 | for(j=1; j< global->set_list[i].size; j++){ |
| 470 | dbb->cap &= global->set_list[i].db_list[j].dbf.cap; |
| 471 | } |
| 472 | |
| 473 | LM_DBG("Computed capabilities for %.*s are %x\n", |
| 474 | global->set_list[i].set_name.len, global->set_list[i].set_name.s, |
| 475 | dbb->cap); |
| 476 | |
| 477 | dbb->use_table = db_virtual_use_table; |
| 478 | dbb->init = db_virtual_init; |
| 479 | dbb->close = db_virtual_close; |
| 480 | dbb->query = db_virtual_query; |
| 481 | dbb->fetch_result = db_virtual_fetch_result; |
| 482 | dbb->raw_query = db_virtual_raw_query; |
| 483 | dbb->free_result = db_virtual_free_result; |
| 484 | dbb->insert = db_virtual_insert; |
| 485 | dbb->delete = db_virtual_delete; |
| 486 | dbb->update = db_virtual_update; |
| 487 | dbb->replace = db_virtual_replace; |
nothing calls this directly
no test coverage detected