示例#1
0
Features::~Features()
{
    zero_drop(_sasl);
    zero_drop(_compression);
    zero_drop(_bind);
    zero_drop(_session);
}
示例#2
0
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;
}
示例#3
0
文件: Sqlite+NNT.cpp 项目: imace/nnt
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;
}
示例#4
-1
DBMSqlDatatable* PostgreSql::exec(const core::string &sql, const params_type &params)
{
    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;
}