! \brief * Insert contact into the database */
| 517 | * Insert contact into the database |
| 518 | */ |
| 519 | int db_insert_ucontact(ucontact_t* _c,query_list_t **ins_list, int update) |
| 520 | { |
| 521 | int nr_vals = UL_COLS - 1; |
| 522 | int start = 0; |
| 523 | |
| 524 | static db_ps_t myI_ps = NULL; |
| 525 | static db_ps_t myR_ps = NULL; |
| 526 | char* dom; |
| 527 | db_key_t keys[UL_COLS]; |
| 528 | db_val_t vals[UL_COLS]; |
| 529 | |
| 530 | if (_c->flags & FL_MEM) { |
| 531 | return 0; |
| 532 | } |
| 533 | |
| 534 | /* in CM_SQL_ONLY, we let the SQL engine auto-generate the ucontact_id */ |
| 535 | if (cluster_mode == CM_SQL_ONLY) { |
| 536 | start++; |
| 537 | nr_vals--; |
| 538 | } |
| 539 | |
| 540 | keys[0] = &contactid_col; |
| 541 | keys[1] = &user_col; |
| 542 | keys[2] = &contact_col; |
| 543 | keys[3] = &expires_col; |
| 544 | keys[4] = &q_col; |
| 545 | keys[5] = &callid_col; |
| 546 | keys[6] = &cseq_col; |
| 547 | keys[7] = &flags_col; |
| 548 | keys[8] = &cflags_col; |
| 549 | keys[9] = &user_agent_col; |
| 550 | keys[10] = &received_col; |
| 551 | keys[11] = &path_col; |
| 552 | keys[12] = &sock_col; |
| 553 | keys[13] = &methods_col; |
| 554 | keys[14] = &last_mod_col; |
| 555 | keys[15] = &sip_instance_col; |
| 556 | keys[16] = &kv_store_col; |
| 557 | keys[17] = &attr_col; |
| 558 | keys[UL_COLS - 1] = &domain_col; /* "domain" always stays last */ |
| 559 | |
| 560 | memset(vals, 0, sizeof vals); |
| 561 | |
| 562 | vals[0].type = DB_BIGINT; |
| 563 | vals[0].val.bigint_val = _c->contact_id; |
| 564 | |
| 565 | vals[1].type = DB_STR; |
| 566 | vals[1].val.str_val.s = _c->aor->s; |
| 567 | vals[1].val.str_val.len = _c->aor->len; |
| 568 | |
| 569 | vals[2].type = DB_STR; |
| 570 | vals[2].val.str_val.s = _c->c.s; |
| 571 | vals[2].val.str_val.len = _c->c.len; |
| 572 | |
| 573 | vals[3].type = DB_INT; |
| 574 | vals[3].val.int_val = _c->expires; |
| 575 | |
| 576 | vals[4].type = DB_DOUBLE; |
no test coverage detected