Features::~Features() { zero_drop(_sasl); zero_drop(_compression); zero_drop(_bind); zero_drop(_session); }
bool Features::load(xmlnode_t const* node) { // load mechanisms. if (xmlnode_t const* mechs = node->node("mechanisms")) { if (Sasl::couldload(mechs)) { _sasl = new Sasl; if (!_sasl->load(mechs)) zero_drop(_sasl); } } // load compress. if (xmlnode_t const* comp = node->node("compression")) { if (Compression::couldload(comp)) { _compression = new Compression; if (!_compression->load(comp)) zero_drop(_compression); } } // load bind. if (xmlnode_t const* bind = node->node("bind")) { if (Bind::couldload(bind)) { _bind = new Bind; if (!_bind->load(bind)) zero_drop(_bind); } } // load session. if (xmlnode_t const* sess = node->node("session")) { if (Session::couldload(sess)) { _session = new Session; if (!_session->load(sess)) zero_drop(_session); } } return true; }
DBMSqlDatatable* Sqlite::exec(core::string const& sql) { char* errmsg = NULL; SLDatabase* dt = new SLDatabase; int sta = sqlite3_exec(d_ptr->db, sql.c_str(), sqlite_exec_simple, dt, &errmsg); if (sta != SQLITE_OK) { zero_drop(dt); trace_msg(errmsg); sqlite3_free(errmsg); return NULL; } return dt; }
DBMSqlDatatable* PostgreSql::exec(const core::string &sql, const params_type ¶ms) { usize const sz_params = params.size(); if (0 == sz_params) return this->exec(sql); params_type str_params = params; //Oid* pm_types = (Oid*)malloc(sz_params * sizeof(Oid)); char const* *pm_vals = (char const* *)malloc(sz_params * sizeof(char const*)); int* pm_lens = (int*)malloc(sz_params * sizeof(int)); int* pm_fmts = (int*)malloc(sz_params * sizeof(int)); for (core::counter<params_type::iterator> each = str_params.begin(); each != str_params.end(); ++each) { variant_t& var = each->second; var.stringize(); pm_vals[each.count] = (char const*)var; pm_lens[each.count] = var.size(); pm_fmts[each.count] = 0; } PGresult* res = PQexecParams(d_ptr->pg, sql.c_str(), sz_params, NULL, pm_vals, pm_lens, pm_fmts, 0); //free(pm_types); free(pm_vals); free(pm_lens); free(pm_fmts); PgSqlDatatable* dt = NULL; switch (PQresultStatus(res)) { default: trace_msg(PQresultErrorMessage(res)); break; case PGRES_COMMAND_OK: break; case PGRES_TUPLES_OK: { dt = new PgSqlDatatable(res); dt->update(); } break; }; if (dt == NULL) PQclear(res); else if (dt->rows().size() == 0) zero_drop(dt); return dt; }