From df7773afce1c7ea5719c5311cda799e5197feeb6 Mon Sep 17 00:00:00 2001 From: lazedo Date: Mon, 13 Apr 2015 17:13:12 +0100 Subject: [PATCH] db_text : simple raw support for select --- modules/db_text/dbt_base.c | 45 ++++++++++++++++++++++++++++++++++++-- modules/db_text/dbtext.c | 3 ++- modules/db_text/dbtext.h | 2 +- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/modules/db_text/dbt_base.c b/modules/db_text/dbt_base.c index fc70433ebea..3df41bb98fe 100644 --- a/modules/db_text/dbt_base.c +++ b/modules/db_text/dbt_base.c @@ -322,10 +322,51 @@ int dbt_query(db1_con_t* _h, db_key_t* _k, db_op_t* _op, db_val_t* _v, /* * Raw SQL query -- is not the case to have this method */ -int dbt_raw_query(db1_con_t* _h, char* _s, db1_res_t** _r) +int dbt_raw_query(db1_con_t* _h, const str* _s, db1_res_t** _r) { *_r = NULL; - return -1; + int res = -1; + dbt_table_p _tbc = NULL; + int cols; + int n = 0; + db_key_t *result_cols = NULL; + + if(!_h) { + LM_ERR("H INVALID\n"); + return res; + } + + if(!_s) { + LM_ERR("S INVALID\n"); + return res; + } + + if(dbt_use_table(_h, _s) != 0) { + LM_ERR("USE INVALID %.*s\n", _s->len, _s->s); + return res; + } + + _tbc = dbt_db_get_table(DBT_CON_CONNECTION(_h), CON_TABLE(_h)); + if(!_tbc) + { + LM_ERR("table %.*s does not exist!\n", CON_TABLE(_h)->len, CON_TABLE(_h)->s); + return res; + } + + cols = _tbc->nrcols; + result_cols = pkg_malloc(sizeof(db_key_t) * cols); + memset(result_cols, 0, sizeof(db_key_t) * cols); + for(n=0; n < cols; n++) { + result_cols[n] = &_tbc->colv[n]->name; + } + + dbt_release_table(DBT_CON_CONNECTION(_h), CON_TABLE(_h)); + + res = dbt_query(_h, NULL, NULL, NULL, result_cols, 0, cols, NULL, _r); + pkg_free(result_cols); + return res; + + } /* diff --git a/modules/db_text/dbtext.c b/modules/db_text/dbtext.c index 142f1c5844f..4f1d4a6a65d 100644 --- a/modules/db_text/dbtext.c +++ b/modules/db_text/dbtext.c @@ -126,7 +126,8 @@ int dbt_bind_api(db_func_t *dbb) dbb->delete = (db_delete_f)dbt_delete; dbb->update = (db_update_f)dbt_update; dbb->affected_rows = (db_affected_rows_f) dbt_affected_rows; - dbb->cap = DB_CAP_AFFECTED_ROWS; + dbb->raw_query = (db_raw_query_f) dbt_raw_query; + dbb->cap = DB_CAP_ALL | DB_CAP_AFFECTED_ROWS | DB_CAP_RAW_QUERY; return 0; } diff --git a/modules/db_text/dbtext.h b/modules/db_text/dbtext.h index 5517bd0f25d..83bfcdc8ea7 100644 --- a/modules/db_text/dbtext.h +++ b/modules/db_text/dbtext.h @@ -60,7 +60,7 @@ int dbt_query(db1_con_t* _h, db_key_t* _k, db_op_t* _op, db_val_t* _v, /* * Raw SQL query */ -int dbt_raw_query(db1_con_t* _h, char* _s, db1_res_t** _r); +int dbt_raw_query(db1_con_t* _h, const str* _s, db1_res_t** _r); /*