static int fixup_sql_xquery(void** param, int param_no) { sql_con_t *con = NULL; pv_elem_t *pv = NULL; str s; s.s = (char*)(*param); s.len = strlen(s.s); if (param_no==1) { con = sql_get_connection(&s); if(con==NULL) { LM_ERR("invalid connection [%s]\n", s.s); return E_UNSPEC; } *param = (void*)con; } else if (param_no==2) { if(pv_parse_format(&s, &pv)<0) { LM_ERR("invalid query string [%s]\n", s.s); return E_UNSPEC; } *param = (void*)pv; } else if (param_no==3) { if(pv_parse_format(&s, &pv)<0) { LM_ERR("invalid result [%s]\n", s.s); return E_UNSPEC; } *param = (void*)pv; } return 0; }
static int fixup_sql_pvquery(void** param, int param_no) { sql_con_t *con = NULL; pv_elem_t *pv = NULL; pvname_list_t *res = NULL; pvname_list_t *pvl = NULL; str s; int i; if(*param == NULL) { LM_ERR("missing parameter %d\n", param_no); return E_UNSPEC; } s.s = (char*)(*param); s.len = strlen(s.s); if (param_no==1) { con = sql_get_connection(&s); if(con==NULL) { LM_ERR("invalid connection [%s]\n", s.s); return E_UNSPEC; } *param = (void*)con; } else if (param_no==2) { if(pv_parse_format(&s, &pv)<0) { LM_ERR("invalid query string [%s]\n", s.s); return E_UNSPEC; } *param = (void*)pv; } else if (param_no==3) { /* parse result variables into list of pv_spec_t's */ res = parse_pvname_list(&s, 0); if(res==NULL) { LM_ERR("invalid result parameter [%s]\n", s.s); return E_UNSPEC; } /* check if all result variables are writable */ pvl = res; i = 1; while (pvl) { if (pvl->sname.setf == NULL) { LM_ERR("result variable [%d] is read-only\n", i); return E_UNSPEC; } i++; pvl = pvl->next; } *param = (void*)res; return 0; } return 0; }
int sqlops_do_xquery(sip_msg_t *msg, str *scon, str *squery, str *xavp) { sql_con_t *con = NULL; con = sql_get_connection(scon); if(con==NULL) { LM_ERR("invalid connection [%.*s]\n", scon->len, scon->s); goto error; } if(sql_exec_xquery(msg, con, squery, xavp)<0) goto error; return 0; error: return -1; }
int pv_parse_con_name(pv_spec_p sp, str *in) { sql_con_t *con; if(sp==NULL || in==NULL || in->len<=0) return -1; con = sql_get_connection(in); if (con==NULL) { LM_ERR("invalid connection [%.*s]\n", in->len, in->s); return -1; } sp->pvp.pvn.type = PV_NAME_INTSTR; sp->pvp.pvn.u.isname.type = AVP_VAL_STR; sp->pvp.pvn.u.isname.name.s = *in; return 0; }
int pv_get_sqlrows(struct sip_msg *msg, pv_param_t *param, pv_value_t *res) { sql_con_t *con; str* sc; sc = ¶m->pvn.u.isname.name.s; con = sql_get_connection(sc); if(con==NULL) { LM_ERR("invalid connection [%.*s]\n", sc->len, sc->s); return -1; } if (!DB_CAPABILITY(con->dbf, DB_CAP_AFFECTED_ROWS)) { LM_ERR("con: %p database module does not have DB_CAP_AFFECTED_ROWS [%.*s]\n", con, sc->len, sc->s); return -1; } return pv_get_sintval(msg, param, res, con->dbf.affected_rows(con->dbh)); }
int sqlops_do_query(str *scon, str *squery, str *sres) { sql_con_t *con = NULL; sql_result_t *res = NULL; con = sql_get_connection(scon); if(con==NULL) { LM_ERR("invalid connection [%.*s]\n", scon->len, scon->s); goto error; } res = sql_get_result(sres); if(res==NULL) { LM_ERR("invalid result [%.*s]\n", sres->len, sres->s); goto error; } if(sql_do_query(con, squery, res)<0) goto error; return 0; error: return -1; }