| 1018 | |
| 1019 | |
| 1020 | int db_query_print_one_result(struct sip_msg *msg, const db_res_t *db_res, |
| 1021 | pvname_list_t *dest) |
| 1022 | { |
| 1023 | pvname_list_t* crt = dest; |
| 1024 | pv_value_t val; |
| 1025 | int j; |
| 1026 | |
| 1027 | for(j = 0; j < RES_COL_N(db_res); j++) { |
| 1028 | |
| 1029 | if (crt==NULL) { |
| 1030 | LM_ERR("too few output vars to store the result, need %d," |
| 1031 | "having %d\n", RES_COL_N(db_res), j); |
| 1032 | return -1; |
| 1033 | } |
| 1034 | |
| 1035 | if(RES_ROWS(db_res)[0].values[j].nul) { |
| 1036 | if (pv_set_value( msg, &crt->sname, 0, NULL)!=0) { |
| 1037 | LM_ERR("unable to add variable for column %d\n",j); |
| 1038 | return -1; |
| 1039 | } |
| 1040 | } else { |
| 1041 | memset( &val, 0, sizeof(pv_value_t)); |
| 1042 | switch(RES_ROWS(db_res)[0].values[j].type) { |
| 1043 | case DB_STRING: |
| 1044 | val.flags = PV_VAL_STR; |
| 1045 | val.rs.s = |
| 1046 | (char*)RES_ROWS(db_res)[0].values[j].val.string_val; |
| 1047 | val.rs.len = strlen(val.rs.s); |
| 1048 | break; |
| 1049 | case DB_STR: |
| 1050 | val.flags = PV_VAL_STR; |
| 1051 | val.rs = |
| 1052 | RES_ROWS(db_res)[0].values[j].val.str_val; |
| 1053 | break; |
| 1054 | case DB_BLOB: |
| 1055 | val.flags = PV_VAL_STR; |
| 1056 | val.rs = |
| 1057 | RES_ROWS(db_res)[0].values[j].val.blob_val; |
| 1058 | break; |
| 1059 | case DB_INT: |
| 1060 | val.flags = PV_VAL_INT|PV_TYPE_INT; |
| 1061 | val.ri = |
| 1062 | (int)RES_ROWS(db_res)[0].values[j].val.int_val; |
| 1063 | break; |
| 1064 | case DB_DATETIME: |
| 1065 | val.flags = PV_VAL_INT|PV_TYPE_INT; |
| 1066 | val.ri = |
| 1067 | (int)RES_ROWS(db_res)[0].values[j].val.time_val; |
| 1068 | break; |
| 1069 | case DB_BITMAP: |
| 1070 | val.flags = PV_VAL_INT|PV_TYPE_INT; |
| 1071 | val.ri = |
| 1072 | (int)RES_ROWS(db_res)[0].values[j].val.bitmap_val; |
| 1073 | break; |
| 1074 | case DB_BIGINT: |
| 1075 | if (sqlops_bigint2str) { |
| 1076 | val.flags = PV_VAL_STR; |
| 1077 | val.rs.s = bigint2str( |
no test coverage detected