Exemplo n.º 1
0
static int wsql_connection_set_charset(wsql_connection *self, PyObject *arg, void* closure)
{
    int error = 0;
    const char* charset = PyString_AsString(arg);
    if (!charset)
        return -1;

    CHECK_CONNECTION(self, -1);

    Py_BEGIN_ALLOW_THREADS
    if (strcmp(mysql_character_set_name(&(self->connection)), charset) != 0) {
#if MYSQL_VERSION_ID >= 40100
        error = mysql_set_character_set(&(self->connection), charset);
#else
        char query[256];
        snprintf(query, 256, "SET NAMES %s", charset);
        error = mysql_query(&(self->connection), query);
#endif
    }

    Py_END_ALLOW_THREADS

    if (error)
    {
        wsql_raise_error(self);
        return -1;
    }
    return 0;
}
Exemplo n.º 2
0
CDB_CursorCmd* CDB_Connection::Cursor(const string& cursor_name,
                                      const string& query,
                                      unsigned int  batch_size)
{
    CHECK_CONNECTION(m_ConnImpl);
    return m_ConnImpl->Cursor(cursor_name, query, batch_size);
}
Exemplo n.º 3
0
int sb_lua_db_close(lua_State *L)
{
  sb_lua_ctxt_t    *ctxt;
  sb_lua_db_stmt_t *stmt;
  unsigned int     i;
  
  ctxt = sb_lua_get_context(L);

  CHECK_CONNECTION(L, ctxt);

  stmt = (sb_lua_db_stmt_t *)luaL_checkudata(L, 1, "sysbench.stmt");
  luaL_argcheck(L, stmt != NULL, 1, "prepared statement expected");

  for (i = 0; i < stmt->nparams; i++)
  {
    if (stmt->params[i].buf != NULL)
      free(stmt->params[i].buf);
  }
  free(stmt->params);
  stmt->params = NULL;
  
  luaL_unref(L, LUA_REGISTRYINDEX, stmt->param_ref);
  luaL_unref(L, LUA_REGISTRYINDEX, stmt->result_ref);

  db_close(stmt->ptr);
  
  return 0;
}
Exemplo n.º 4
0
bool CDB_Connection::Close(void)
{
    CHECK_CONNECTION(m_ConnImpl);
    m_ConnImpl->Release();
    m_ConnImpl = NULL;
    return true;
}
Exemplo n.º 5
0
static int wsql_connection_set_autocommit(wsql_connection *self, PyObject *value, void *closure)
{
    int error = 0;
    int flag = PyLong_AsLong(value);
    if (PyErr_Occurred())
        return -1;

    CHECK_CONNECTION(self, -1);
    Py_BEGIN_ALLOW_THREADS
#if MYSQL_VERSION_ID >= 40100
    error = mysql_autocommit(&(self->connection), flag);
#else
    {
        char query[256];
        snprintf(query, 256, "SET AUTOCOMMIT=%d", flag);
        error = mysql_query(&(self->connection), query);
    }
#endif
    Py_END_ALLOW_THREADS
    if (error)
    {
        wsql_raise_error(self);
        return -1;
    }
    self->autocommit = flag ? 1 : 0;
    return 0;
}
Exemplo n.º 6
0
static PyObject* wsql_connection_get_charset_info(wsql_connection *self, void* closure)
{
    PyObject *result, *tmp;
    MY_CHARSET_INFO cs;

    CHECK_CONNECTION(self, NULL);

    mysql_get_character_set_info(&(self->connection), &cs);
    if (!(result = PyDict_New()))
        return NULL;

#define SET_ITEM_STRING(k, v) \
    if (v) { tmp = PyString_FromString(v); PyDict_SetItemString(result, k, tmp); Py_DECREF(tmp); }

    SET_ITEM_STRING("name", cs.csname);
    SET_ITEM_STRING("collation", cs.name);
    SET_ITEM_STRING("comment", cs.comment);
    SET_ITEM_STRING("dir", cs.dir);

#undef SET_ITEM_STRING

#define SET_ITEM_LONG(k, v) \
    { tmp = PyLong_FromLong(v); PyDict_SetItemString(result, k, tmp); Py_DECREF(tmp); }

    SET_ITEM_LONG("mbminlen", cs.mbminlen);
    SET_ITEM_LONG("mbmaxlen", cs.mbmaxlen);

#undef SET_ITEM_LONG

    return result;
}
Exemplo n.º 7
0
/* call-seq:
 *   glo_new(classname <, filename>) -> Oid
 *
 * 새로운 GLO 객체를 생성하고 Oid로 반환합니다.
 * CUBRID는 바이너리 데이터를 저장할 수 있도록 GLO를 제공합니다. GLO 객체는 OID로 직접 접근할 수 있습니다.
 *
 * filename이 주어지면 해당 파일의 데이터를 데이터베이스에 저장합니다. 주어지지 않으면 빈 GLO 객체를 생성합니다.
 *
 *  con = Cubrid.connect('subway')
 *  con.query('create table attachfile under glo (name string)')
 *  con.commit
 *
 *  glo = con.glo_new('attachfile', 'pic.jpg')
 *  glo.glo_size  #=> 1234
 *
 *  glo = con.glo_new('attachfile')
 *  glo.glo_size  #=> 0
 *  glo.glo_save('pic.jpg')
 *  glo.glo_size  #=> 1234
 */
VALUE
cubrid_conn_glo_new(VALUE self, VALUE table, VALUE file)
{
    char oid_str[MAX_STR_LEN], *table_name, *file_name;
    int res;
    T_CCI_ERROR error;
    Connection *con;

    GET_CONN_STRUCT(self, con);
    CHECK_CONNECTION(con, Qnil);

    if (NIL_P(table)) {
        rb_raise(rb_eArgError, "class name is required.");
        return Qnil;
    }
    table_name = StringValueCStr(table);

    if (NIL_P(file)) {
        file_name = NULL;
    } else {
        file_name = StringValueCStr(file);
    }

    res = cci_glo_new(con->handle, table_name, file_name, oid_str, &error);
    if (res < 0) {
        cubrid_handle_error(res, &error);
        return Qnil;
    }

    return cubrid_oid_new(con, oid_str);
}
Exemplo n.º 8
0
CDB_SendDataCmd* CDB_Connection::SendDataCmd(I_ITDescriptor& desc,
                                             size_t data_size,
                                             bool log_it,
                                             bool dump_results)
{
    CHECK_CONNECTION(m_ConnImpl);
    return m_ConnImpl->SendDataCmd(desc, data_size, log_it, dump_results);
}
Exemplo n.º 9
0
static PyObject* wsql_connection_get_thread_id(wsql_connection *self, void* closure)
{
    unsigned long pid;
    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
    pid = mysql_thread_id(&(self->connection));
    Py_END_ALLOW_THREADS
    return PyLong_FromLong((long)pid);
}
Exemplo n.º 10
0
bool CDB_Connection::Abort()
{
    CHECK_CONNECTION(m_ConnImpl);
    if (m_ConnImpl->Abort()) {
        Close();
        return true;
    }
    return false;
}
Exemplo n.º 11
0
static PyObject* wsql_connection_get_info(wsql_connection *self, void* closure)
{
    const char *s;
    CHECK_CONNECTION(self, NULL);
    s = mysql_info(&(self->connection));
    if (s)
        return PyString_FromString(s);
    Py_RETURN_NONE;
}
Exemplo n.º 12
0
static PyObject* wsql_connection_get_field_count(wsql_connection *self, void* closure)
{
    CHECK_CONNECTION(self, NULL);
#if MYSQL_VERSION_ID < 32224
    return PyLong_FromLong((long)mysql_num_fields(&(self->connection)));
#else
    return PyLong_FromLong((long)mysql_field_count(&(self->connection)));
#endif
}
Exemplo n.º 13
0
static PyObject* wsql_connection_get_insert_id(wsql_connection *self, void* closure)
{
    my_ulonglong r;
    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
    r = mysql_insert_id(&(self->connection));
    Py_END_ALLOW_THREADS
    return PyLong_FromUnsignedLongLong(r);
}
Exemplo n.º 14
0
/* call-seq:
 *   auto_commit? -> true or false
 *
 * Connection이 auto commit 모드인지 아닌지를 반환합니다.
 * Connection은 기본적으로 auto commit 모드가 아니며, auto_commit= 메쏘드로 auto commit 여부를 설정할 수 있습니다.
 *
 */
VALUE
cubrid_conn_get_auto_commit(VALUE self)
{
    Connection *con;

    GET_CONN_STRUCT(self, con);
    CHECK_CONNECTION(con, Qnil);

    return con->auto_commit;
}
Exemplo n.º 15
0
/* call-seq:
 *   auto_commit= true or false -> nil
 *
 * Connection의 auto commit 모드를 설정합니다.
 * auto commit이 true로 설정되면 Statement.execute의 실행이 끝난 후 바로 commit이 실행됩니다.
 *
 */
VALUE
cubrid_conn_set_auto_commit(VALUE self, VALUE auto_commit)
{
    Connection *con;

    GET_CONN_STRUCT(self, con);
    CHECK_CONNECTION(con, self);

    con->auto_commit = auto_commit;
    return Qnil;
}
Exemplo n.º 16
0
static PyObject* wsql_connection_get_server_info(wsql_connection *self, void* closure)
{
    CHECK_CONNECTION(self, NULL);
    const char* info = mysql_get_server_info(&(self->connection));
    if (!info)
    {
        PyErr_SetString(wsql_programming_error, "connection is not ready");
        return NULL;
    }
    return PyString_FromString(info);
}
Exemplo n.º 17
0
static PyObject* wsql_connection_next_result_async(wsql_connection *self)
{
    int error;
    net_async_status status;
    CHECK_CONNECTION(self, NULL);
    status = mysql_next_result_nonblocking(&(self->connection), &error);
    if (status == NET_ASYNC_COMPLETE && error > 0)
    {
        return wsql_raise_error(self);
    }
    return Py_BuildValue("(ii)", (int)status, !error);
}
Exemplo n.º 18
0
static PyObject* wsql_connection_get_stat(wsql_connection *self, void* closure)
{
    const char *s;
    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
    s = mysql_stat(&(self->connection));
    Py_END_ALLOW_THREADS
    if (!s)
        return wsql_raise_error(self);

    return PyString_FromString(s);
}
Exemplo n.º 19
0
static PyObject* wsql_connection_dump_debug_info(wsql_connection *self)
{
    int error;
    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
    error = mysql_dump_debug_info(&(self->connection));
    Py_END_ALLOW_THREADS
    if (error)
        return wsql_raise_error(self);

    Py_RETURN_NONE;
}
Exemplo n.º 20
0
static PyObject* wsql_connection_get_charset(wsql_connection *self, void* closure)
{
    const char *s;

    CHECK_CONNECTION(self, NULL);
#if MYSQL_VERSION_ID >= 32321
    s = mysql_character_set_name(&(self->connection));
#else
    s = "latin1";
#endif
    return PyString_FromString(s);
}
Exemplo n.º 21
0
int sb_lua_db_bulk_insert_done(lua_State *L)
{
  sb_lua_ctxt_t *ctxt;

  ctxt = sb_lua_get_context(L);

  CHECK_CONNECTION(L, ctxt);
    
  db_bulk_insert_done(ctxt->con);
  
  return 0;
}
Exemplo n.º 22
0
VALUE
cubrid_conn_end_tran(Connection *con, int type)
{
    int res;
    T_CCI_ERROR error;

    CHECK_CONNECTION(con, Qnil);

    res = cci_end_tran(con->handle, type, &error);
    if (res < 0) {
        cubrid_handle_error(res, &error);
    }

    return Qnil;
}
Exemplo n.º 23
0
int sb_lua_db_bulk_insert_next(lua_State *L)
{
  sb_lua_ctxt_t *ctxt;
  const char *query;

  ctxt = sb_lua_get_context(L);

  CHECK_CONNECTION(L, ctxt);
    
  query = luaL_checkstring(L, 1);
  if (db_bulk_insert_next(ctxt->con, query))
    luaL_error(L, "db_bulk_insert_next() failed");
  
  return 0;
}
Exemplo n.º 24
0
static PyObject* wsql_connection_set_server_option(wsql_connection *self, PyObject *args)
{
    int error, flags=0;
    if (!PyArg_ParseTuple(args, "i", &flags))
        return NULL;

    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
    error = mysql_set_server_option(&(self->connection), flags);
    Py_END_ALLOW_THREADS
    if (error)
        return wsql_raise_error(self);

    Py_RETURN_NONE;
}
Exemplo n.º 25
0
static PyObject* wsql_connection_shutdown(wsql_connection *self)
{
    int r;
    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
    r = mysql_shutdown(&(self->connection)
#if MYSQL_VERSION_ID >= 40103
                       , SHUTDOWN_DEFAULT
#endif
                      );
    Py_END_ALLOW_THREADS
    if (r)
        return wsql_raise_error(self);

    Py_RETURN_NONE;
}
Exemplo n.º 26
0
static PyObject* wsql_connection_kill(wsql_connection *self, PyObject *args)
{
    unsigned long pid;
    int r;
    if (!PyArg_ParseTuple(args, "k:kill", &pid))
        return NULL;

    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
    r = mysql_kill(&(self->connection), pid);
    Py_END_ALLOW_THREADS
    if (r)
        return wsql_raise_error(self);

    Py_RETURN_NONE;
}
Exemplo n.º 27
0
static PyObject* wsql_connection_select_db(wsql_connection *self, PyObject *args)
{
    char *db;
    int r;
    if (!PyArg_ParseTuple(args, "s:select_db", &db))
        return NULL;

    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
    r = mysql_select_db(&(self->connection), db);
    Py_END_ALLOW_THREADS
    if (r)
        return wsql_raise_error(self);

    Py_RETURN_NONE;
}
Exemplo n.º 28
0
static PyObject* wsql_connection_rollback(wsql_connection *self)
{
    int error;
    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
#if MYSQL_VERSION_ID >= 40100
    error = mysql_rollback(&(self->connection));
#else
    error = mysql_query(&(self->connection), "ROLLBACK");
#endif
    Py_END_ALLOW_THREADS
    if (error)
        return wsql_raise_error(self);

    Py_RETURN_NONE;
}
Exemplo n.º 29
0
static PyObject* wsql_connection_next_result(wsql_connection *self)
{
    int error;
    CHECK_CONNECTION(self, NULL);
    Py_BEGIN_ALLOW_THREADS
#if MYSQL_VERSION_ID >= 40100
    error = mysql_next_result(&(self->connection));
#else
    error = -1;
#endif
    Py_END_ALLOW_THREADS
    if (error > 0)
        return wsql_raise_error(self);

    return PyBool_FromLong(!error);
}
Exemplo n.º 30
0
int sb_lua_db_store_results(lua_State *L)
{
  sb_lua_ctxt_t    *ctxt;
  sb_lua_db_rs_t   *rs;

  ctxt = sb_lua_get_context(L);

  CHECK_CONNECTION(L, ctxt);

  rs = (sb_lua_db_rs_t *)luaL_checkudata(L, 1, "sysbench.rs");
  luaL_argcheck(L, rs != NULL, 1, "result set expected");

  db_store_results(rs->ptr);
  
  return 0;
}