/* * Execute a raw SQL query */ int db_oracle_raw_query(const db1_con_t* _h, const str* _s, db1_res_t** _r) { query_data_t cb; OCIStmt* reshp; int len; const char *p; if (!_h || !_s || !_s->s) { badparam: LM_ERR("invalid parameter value\n"); return -1; } memset(&cb, 0, sizeof(cb)); p = _s->s; len = _s->len; while (len && *p == ' ') ++p, --len; #define _S_DIFF(p, l, S) (l <= sizeof(S)-1 || strncasecmp(p, S, sizeof(S)-1)) if (!_S_DIFF(p, len, "select ")) { if (!_r) goto badparam; cb._rs = &reshp; } else { if ( _S_DIFF(p, len, "insert ") && _S_DIFF(p, len, "delete ") && _S_DIFF(p, len, "update ")) { LM_ERR("unknown raw_query: '%.*s'\n", _s->len, _s->s); return -2; } #undef _S_DIFF if (_r) goto badparam; cb._rs = NULL; } len = db_do_raw_query(_h, _s, _r, db_oracle_submit_query, db_oracle_store_result); CON_ORA(_h)->pqdata = NULL; /* paranoid for next call */ return len; }
/** * Execute a raw SQL query. * \param _h handle for the database * \param _s raw query string * \param _r result set for storage * \return zero on success, negative value on failure */ int db_mysql_raw_query(const db1_con_t* _h, const str* _s, db1_res_t** _r) { return db_do_raw_query(_h, _s, _r, db_mysql_submit_query, db_mysql_store_result); }
/* * Execute a raw SQL query */ int db_postgres_raw_query(const db_con_t* _h, const str* _s, db_res_t** _r) { CON_RESET_CURR_PS(_h); /* no prepared statements support */ return db_do_raw_query(_h, _s, _r, db_postgres_submit_query, db_postgres_store_result); }