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

Function sql_api_update

modules/sqlops/sqlops_db.c:799–860  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

797
798
799int sql_api_update(struct db_url *url, struct sip_msg* msg, cJSON *Jcols,
800 str *table, cJSON *Jfilter)
801{
802 static map_t ps_map = NULL;
803 db_key_t *ukeys, *keys;
804 db_op_t *uops, *ops;
805 db_val_t *uvals, *vals;
806 int nk, unk;
807 str *id;
808 db_ps_t *my_ps;
809
810 /* convert JSON to COLs */
811 unk = _json_to_filters( Jcols, &ukeys, &uops, &uvals, 1);
812 if (unk<0) {
813 LM_ERR("failed to extract cols from JSON\n");
814 return -1;
815 }
816
817 /* convert JSON to keys */
818 if (Jfilter) {
819 nk = _json_to_filters( Jfilter, &keys, &ops, &vals, 0);
820 if (nk<0) {
821 LM_ERR("failed to extract filter from JSON\n");
822 return -1;
823 }
824 } else {
825 keys = NULL;
826 ops = NULL;
827 vals = NULL;
828 nk = 0;
829 }
830
831 /* set table */
832 if (set_table( url, table ,"API update")!=0)
833 return -1;
834
835 if ( !DB_CAPABILITY(url->dbf, DB_CAP_PREPARED_STMT) ||
836 _query_id_start(table,NULL)==NULL ||
837 (id=_query_id_add_filter(ukeys,uops,unk))==NULL ||
838 (keys && (id=_query_id_add_filter(keys,ops,nk))==NULL) ) {
839 LM_DBG("not using PS\n");
840 } else {
841 LM_DBG("PS id is <%.*s>\n",id->len,id->s);
842 if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
843 if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
844 LM_DBG("using PS %p\n",*my_ps);
845 CON_SET_CURR_PS( url->hdl, my_ps);
846 }
847 }
848 }
849
850 /* do the DB query */
851 if (url->dbf.update( url->hdl, keys, ops, vals, ukeys, uvals, nk, unk)<0){
852 const str *t = url->hdl&&url->hdl->table&&url->hdl->table->s
853 ? url->hdl->table : 0;
854 LM_ERR("update API query failed: db%d (%.*s)\n",
855 url->idx, t?t->len:0, t?t->s:"");
856 return -1;

Callers 1

ops_sql_api_updateFunction · 0.85

Calls 6

_json_to_filtersFunction · 0.85
set_tableFunction · 0.85
_query_id_startFunction · 0.85
_query_id_add_filterFunction · 0.85
map_createFunction · 0.85
map_getFunction · 0.85

Tested by

no test coverage detected