예제 #1
0
bool MySQLLayer::connectDB(const std::string & host, const std::string & user, const std::string& password, const std::string & database)
{
    mysql_commit(mysql_);
    mysql_close(mysql_);

	mysql_ = new MYSQL;
    mysql_init(mysql_);
    if (!mysql_real_connect(mysql_,host.c_str(),user.c_str(),password.c_str(),database.c_str(),3306,NULL,0))
    {
	     std::cerr << "Failed to connect to database: Error: " << mysql_error(mysql_) << std::endl;
	     errorLog_ << "Failed to connect to database: Error: " << mysql_error(mysql_) << std::endl;
		 return false;
    }
    mysql_commit(mysql_);
	return true;
}
예제 #2
0
int load_tables(lua_State *L) {
	MYSQL_RES *res;
	MYSQL_ROW row;

	if ( mysql_real_query(g_mysqlconn, "begin", 5) != 0 ) {
		return luaL_error(L, "Failed to mysql_real_query, error(%s)", mysql_error(g_mysqlconn));
	}
	
	// load tb_activity begin
	if ( mysql_real_query(g_mysqlconn, "select * from tb_activity", 25) ) {
		return luaL_error(L, "Failed to mysql_real_query, error(%s)", mysql_error(g_mysqlconn));
	}
	res = mysql_use_result(g_mysqlconn);
	while ( (row = mysql_fetch_row(res)) ) {
		tb_activity_reset(L);
		tb_activity_record &record = g_dbrecord._tb_activity_record;
		record.activity_id = atoi(row[0]);
		size_t len = strlen(row[1]); // todo support binary
		memcpy(record.activity_name, row[1], MIN(len, sizeof(record.activity_name)-2));
		record.activity_name[sizeof(record.activity_name) - 1] = 0;
		tb_activity_insert_mdb(L);
	}
	// load tb_activity end

	if ( mysql_commit(g_mysqlconn) != 0 ) {
		return luaL_error(L, "Failed to mysql_commit, error(%s)", mysql_error(g_mysqlconn));
	}

	return 0;
}
예제 #3
0
static int test_select_direct(MYSQL *mysql)
{
  int        rc;
  MYSQL_RES  *result;


  rc= mysql_autocommit(mysql, TRUE);
  check_mysql_rc(rc, mysql);

  rc= mysql_query(mysql, "DROP TABLE IF EXISTS test_select");
  check_mysql_rc(rc, mysql);

  rc= mysql_query(mysql, "CREATE TABLE test_select(id int, id1 tinyint, "
                                                 " id2 float, "
                                                 " id3 double, "
                                                 " name varchar(50))");
  check_mysql_rc(rc, mysql);

  /* insert a row and commit the transaction */
  rc= mysql_query(mysql, "INSERT INTO test_select VALUES(10, 5, 2.3, 4.5, 'venu')");
  check_mysql_rc(rc, mysql);

  rc= mysql_commit(mysql);
  check_mysql_rc(rc, mysql);

  rc= mysql_query(mysql, "SELECT * FROM test_select");
  check_mysql_rc(rc, mysql);

  /* get the result */
  result= mysql_store_result(mysql);
  FAIL_IF(!result, "Invalid result set");

  mysql_free_result(result);
  return OK;
}
예제 #4
0
void DBConnection::CommitTransaction() {
	if (!IsConnected()) {
		return;
	}
	mysql_commit(m_pMysqlConn);
	mysql_autocommit(m_pMysqlConn, 1);
}
예제 #5
0
static my_bool thread_query(const char *query)
{
 MYSQL *l_mysql;
 my_bool error;

 error= 0;
 if (!opt_silent)
 fprintf(stdout, "\n in thread_query(%s)", query);
 if (!(l_mysql= mysql_client_init(NULL)))
 {
   myerror("mysql_client_init() failed");
   return 1;
 }
 if (!(mysql_real_connect(l_mysql, opt_host, opt_user,
 opt_password, current_db, opt_port,
 opt_unix_socket, 0)))
 {
   myerror("connection failed");
   error= 1;
   goto end;
 }
 l_mysql->reconnect= 1;
 if (mysql_query(l_mysql, query))
 {
   fprintf(stderr, "Query failed (%s)\n", mysql_error(l_mysql));
   error= 1;
   goto end;
 }
 mysql_commit(l_mysql);
 end:
 mysql_close(l_mysql);
 return error;
}
예제 #6
0
파일: db.c 프로젝트: yangchenzhong/im
int ExecuteModifyEx(MYSQL *pMySql, char **sSqlArray, int nSize)
{
	if (!sSqlArray || !pMySql || nSize <= 0)
	{
		ErrorInfor("ExecuteModifyEx", ERROR_ARGNULL);
		return 0;
	}

	for (int i = 0; i < nSize; i++)
	{
		if (mysql_query(pMySql, sSqlArray[i]) != 0)
		{
			ErrorInfor("ExecuteModifyEx-1", (char *)mysql_error(pMySql));

			if (mysql_rollback(pMySql) != 0)
			{
				ErrorInfor("ExecuteModifyEx-2", (char *)mysql_error(pMySql));
			}
			return 0;
		}
	}

	if (mysql_commit(pMySql) != 0)
	{
		ErrorInfor("ExecuteModifyEx-3", (char *)mysql_error(pMySql));
		return 0;
	}

	return 1;
}
예제 #7
0
파일: mdb-mysql.c 프로젝트: adderly/cmoon
static NEOERR* mysql_mdb_commit(mdb_conn* conn)
{
    if (mysql_commit(CONN(conn)->mysql) != 0)
        return nerr_raise(NERR_DB, mysql_error(CONN(conn)->mysql));

    return STATUS_OK;
}
예제 #8
0
파일: mysql_db.cpp 프로젝트: buer1988/mooon
void CMySQLConnection::commit() throw (CDBException)
{
    MYSQL* mysql_handler = static_cast<MYSQL*>(mysql_handler);

    if (mysql_commit(mysql_handler) != 0)
        THROW_DB_EXCEPTION(NULL, mysql_error(mysql_handler), mysql_errno(mysql_handler));
}
예제 #9
0
void MySqlDataProvider::commitTransaction()
    throw (std::runtime_error)
{
    if (!mIsConnected)
    {
        const std::string error = "Trying to commit a transaction while not "
                                  "connected to the database!";
        LOG_ERROR(error);
        throw std::runtime_error(error);
    }

    if (!inTransaction())
    {
        const std::string error = "Trying to commit a transaction while no "
                                  "one is open!";
        LOG_ERROR(error);
        throw std::runtime_error(error);
    }

    if (mysql_commit(mDb) != 0)
    {
        LOG_ERROR("MySqlDataProvider::commitTransaction: " << mysql_error(mDb));
        throw DbSqlQueryExecFailure(mysql_error(mDb));
    }

    if (mysql_autocommit(mDb, AUTOCOMMIT_ON))
    {
        const std::string error = "Error while trying to enable autocommit";
        LOG_ERROR(error);
        throw std::runtime_error(error);
    }

    mInTransaction = false;
    LOG_DEBUG("SQL: commited transaction");
}
예제 #10
0
/*	commit()	*/
static VALUE commit(VALUE obj)
{
    MYSQL* m = GetHandler(obj);
    if (mysql_commit(m) != 0)
        mysql_raise(m);
    return obj;
}
예제 #11
0
uint32_t maintain_plant(i_mysql_iface *p_mysql_conn, c_memcached *p_memcached, uint32_t user_id, uint32_t msg_type, char *p_request_body, uint32_t request_len)
{
    if (check_val_len(msg_type, request_len, sizeof(db_msg_maintain_req_t)) != 0)
    {
        return ERR_MSG_LEN;
    }

    db_msg_maintain_req_t *p_req = (db_msg_maintain_req_t*)p_request_body;

    MYSQL *p_conn = p_mysql_conn->get_conn();
    if (NULL == p_conn)
    {
        KCRIT_LOG(user_id, "get mysql conn failed.");
        return ERR_SQL_ERR;
    }
    if (mysql_autocommit(p_conn, false) != 0)
    {
        KCRIT_LOG(user_id, "close mysql_autocommit failed.");
        return ERR_SQL_ERR;
    }


     //sprintf(g_sql_str,"UPDATE db_monster_%d.t_plant_%d  SET growth = growth + %u, last_growth_value = growth + %u, last_growth_time = %u, maintain = %u, maintain_count = %u, last_reward_id = %u where user_id = %u and hole_id = %u;", DB_ID(user_id), TABLE_ID(user_id), p_req->add_growth, p_req->add_growth, p_req->add_growth_time, p_req->new_maintain_type, p_req->maintain_count, p_req->last_reward_id, user_id, p_req->hole_id);

    sprintf(g_sql_str,"UPDATE db_monster_%d.t_plant_%d  SET growth = growth + %u, last_growth_value = growth, last_growth_time = %u, maintain = %u, maintain_count = %u, last_reward_id = %u where user_id = %u and hole_id = %u;", DB_ID(user_id), TABLE_ID(user_id), p_req->add_growth, p_req->add_growth_time, p_req->new_maintain_type, p_req->maintain_count, p_req->last_reward_id, user_id, p_req->hole_id);
     KINFO_LOG(user_id, "%s", g_sql_str);


        if (p_mysql_conn->execsql(g_sql_str) < 0)
        {
            KCRIT_LOG(user_id, "sql exec failed(%s).", p_mysql_conn->get_last_errstr());
            mysql_rollback(p_conn);
            mysql_autocommit(p_conn, true);
            return ERR_SQL_ERR;
        }

    sprintf(g_sql_str, "INSERT INTO db_monster_%d.t_plant_reward_%d(user_id, hole_id, reward_id, reward_happy, reward_exp, reward_coins) VALUES(%u, %u, %u, %u, %u, %u) ON DUPLICATE KEY UPDATE reward_happy = %u, reward_exp = %u, reward_coins = %u;", DB_ID(user_id), TABLE_ID(user_id), user_id, p_req->hole_id, p_req->last_reward_id, p_req->reward_happy, p_req->reward_exp, p_req->reward_coins, p_req->reward_happy, p_req->reward_exp, p_req->reward_coins);

    KINFO_LOG(user_id, "%s", g_sql_str);
        if (p_mysql_conn->execsql(g_sql_str) < 0)
        {
            KCRIT_LOG(user_id, "sql exec failed(%s).", p_mysql_conn->get_last_errstr());
            mysql_rollback(p_conn);
            mysql_autocommit(p_conn, true);
            return ERR_SQL_ERR;
        }

    // 结束事务
    if (mysql_commit(p_conn) != 0)
    {
        KCRIT_LOG(user_id, "mysql_commit() failed.");
        mysql_rollback(p_conn);
        mysql_autocommit(p_conn, true);
        return ERR_SQL_ERR;
    }

    mysql_autocommit(p_conn, true);
    return 0;
}
예제 #12
0
파일: activity.cpp 프로젝트: Zhanyin/taomee
uint32_t get_open_act_reward(i_mysql_iface *p_mysql_conn, c_memcached *p_memcached, uint32_t user_id, uint32_t msg_type, char *p_request_body, uint32_t request_len)
{
    if(check_val_len(msg_type, request_len, sizeof(db_msg_get_open_reward_t)))
    {
        return ERR_MSG_LEN;
    }

    db_msg_get_open_reward_t *p_body = (db_msg_get_open_reward_t*)p_request_body;

    sprintf(g_sql_str, "update db_monster_%d.t_activity_%d set flag = 1 where user_id = %u and activity_id = %u and reward_id = %u;", DB_ID(user_id), TABLE_ID(user_id),  user_id, p_body->act_id, p_body->reward_id);

    KINFO_LOG(user_id, "get open reward:%s", g_sql_str);
    MYSQL *p_conn = p_mysql_conn->get_conn();
    if (NULL == p_conn)
    {
        KCRIT_LOG(user_id, "get mysql conn failed.");
        return ERR_SQL_ERR;
    }

    if (mysql_autocommit(p_conn, false) != 0)
    {
        KCRIT_LOG(user_id, "close mysql_autocommit failed.");
        return ERR_SQL_ERR;
    }

    if (p_mysql_conn->execsql(g_sql_str) < 0)
    {
        KCRIT_LOG(user_id, "[msg:%u]sql exec failed(%s).", msg_type, p_mysql_conn->get_last_errstr());
        mysql_autocommit(p_conn, true);
        return ERR_SQL_ERR;
    }


    sprintf(g_sql_str, "INSERT INTO db_monster_%d.t_stuff_%d(user_id, stuff_id, stuff_num) values(%u, %u, %u) ON DUPLICATE KEY UPDATE stuff_num = stuff_num + %u;", DB_ID(user_id), TABLE_ID(user_id), user_id, p_body->reward_id, p_body->reward_num, p_body->reward_num);


        KINFO_LOG(user_id, "open act_reward:%s", g_sql_str);
        if (p_mysql_conn->execsql(g_sql_str) < 0)
            {
                KCRIT_LOG(user_id, "[msg:%u]sql exec failed(%s).", msg_type, p_mysql_conn->get_last_errstr());
                mysql_rollback(p_conn);
                mysql_autocommit(p_conn, true);
                return ERR_SQL_ERR;
            }
    // 结束事务
    if (mysql_commit(p_conn) != 0)
    {
        KCRIT_LOG(user_id, "mysql_commit() failed.");
        mysql_rollback(p_conn);
        mysql_autocommit(p_conn, true);
        return ERR_SQL_ERR;
    }

    mysql_autocommit(p_conn, true);

    g_pack.pack(p_request_body, request_len);

    return 0;
}
예제 #13
0
파일: db.cpp 프로젝트: daisukewi/DKGEngine
	void mydb::commit()
	{
		tu_autolock locker(s_mysql_plugin_mutex);

		if (m_trace) log_msg("commit\n");

		mysql_commit(m_db);
	}
예제 #14
0
void MysqlDatabase::commit_transaction() {
  if (active)
  {
    mysql_commit(conn);
    mysql_autocommit(conn, true);
    CLog::Log(LOGDEBUG,"Mysql commit transaction");
    _in_transaction = false;
  }
}
예제 #15
0
uint32_t add_plant(i_mysql_iface *p_mysql_conn, c_memcached *p_memcached, uint32_t user_id, uint32_t msg_type, char *p_request_body, uint32_t request_len)
{
    if (check_val_len(msg_type, request_len, sizeof(db_msg_add_plant_req_t)) != 0)
    {
        return ERR_MSG_LEN;
    }

    db_msg_add_plant_req_t *p_req = (db_msg_add_plant_req_t *)p_request_body;

    KINFO_LOG(user_id, "[add plant]plant id:%u, hole id:%u, color:%u", p_req->plant_id, p_req->hole_id, p_req->color);

    snprintf(g_sql_str, sizeof(g_sql_str), "UPDATE db_monster_%d.t_plant_%d set plant_id = %u, color = %u, last_extra_growth_time = %u, last_growth_time= %u, maintain = %u, next_maintain_time = %u where user_id = %u and hole_id = %u;", DB_ID(user_id), TABLE_ID(user_id), p_req->plant_id, p_req->color, p_req->last_extra_growth_time, p_req->last_grown_time, p_req->maintain, p_req->maintain_time,  user_id, p_req->hole_id);

    MYSQL *p_conn = p_mysql_conn->get_conn();
    if (NULL == p_conn)
    {
        KCRIT_LOG(user_id, "get mysql conn failed.");
        return ERR_SQL_ERR;
    }
    if (mysql_autocommit(p_conn, false) != 0)
    {
        KCRIT_LOG(user_id, "close mysql_autocommit failed.");
        return ERR_SQL_ERR;
    }

    if (p_mysql_conn->execsql(g_sql_str) < 0)
    {
        KCRIT_LOG(user_id, "sql exec failed(%s).", p_mysql_conn->get_last_errstr());
    	mysql_autocommit(p_conn, true);
        return ERR_SQL_ERR;
    }

    //将种子数量减1
    snprintf(g_sql_str, sizeof(g_sql_str), "UPDATE db_monster_%d.t_stuff_%d SET stuff_num = stuff_num - 1 WHERE user_id = %u AND stuff_id = %u and stuff_num > 0", DB_ID(user_id), TABLE_ID(user_id), user_id, p_req->plant_id);
    KINFO_LOG(user_id, "desc seed:%s", g_sql_str);

    if (p_mysql_conn->execsql(g_sql_str) < 0)
    {
        KCRIT_LOG(user_id, "sql exec failed(%s).", p_mysql_conn->get_last_errstr());
        mysql_rollback(p_conn);
    	mysql_autocommit(p_conn, true);
        return ERR_SQL_ERR;
    }
    // 结束事务
    if (mysql_commit(p_conn) != 0)
    {
        KCRIT_LOG(user_id, "mysql_commit() failed.");
        mysql_rollback(p_conn);
        mysql_autocommit(p_conn, true);
        return ERR_SQL_ERR;
    }

    mysql_autocommit(p_conn, true);

    return 0;
}
예제 #16
0
bool Sql_TransactionCommit(Sql_t* self)
{
    if( self && mysql_commit(&self->handle) == 0)
    {
        return true;
    }

    ShowFatalError("Sql_TransactionCommit: SQL_ERROR\n");
    return false;
}
예제 #17
0
//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
void 
DatabaseTransaction::commit()
{
    if( mysql_commit(this->m_pConnection.get()) )
    {
        throw std::exception("Zen::ZMySQL::DatabaseTransaction::commit() : Error committing transaction.");
    }
    this->m_isCommitted = true;
    this->m_isActive = false;
}
예제 #18
0
/* {{{ mysql_handle_commit */
static int mysql_handle_commit(pdo_dbh_t *dbh)
{
	PDO_DBG_ENTER("mysql_handle_commit");
	PDO_DBG_INF_FMT("dbh=%p", dbh);
#if MYSQL_VERSION_ID >= 40100 || defined(PDO_USE_MYSQLND)
	PDO_DBG_RETURN(0 <= mysql_commit(((pdo_mysql_db_handle *)dbh->driver_data)->server));
#else
	PDO_DBG_RETURN(0 <= mysql_handle_doer(dbh, ZEND_STRL("COMMIT")));
#endif
}
예제 #19
0
int wb_dbms_txn::commit()
{
    int rc;

    rc = mysql_commit(m_env->con());
    if (rc)
        printf("wb_dbms::commit, rc %d\n", rc);

    return rc;
}
예제 #20
0
파일: lua_mysql.c 프로젝트: zhangjinde/QSF
static int conn_commit(lua_State* L)
{
    Connection* conn = check_conn(L);
    luaL_argcheck(L, conn && !conn->closed, 1, "invalid Connection object");
    if (mysql_commit(&conn->my_conn) != 0)
    {
        return luaL_error(L, "commit failed, %s\n", mysql_error(&conn->my_conn));
    }
    return 0;
}
	bool CDatabaseConnectionMySql::DoCommit( const String & name )
	{
		bool result = mysql_commit( _connection ) == 0;

		if ( result )
		{
			result = mysql_autocommit( _connection, true ) == 0;
		}

		return result;
	}
예제 #22
0
bool CDBSrcMySql::Commit(void)
{
	if (m_pDB == NULL) return false;
	if( mysql_commit(m_pDB) == 0)
	{
		mysql_autocommit(m_pDB, 1);
		return true;
	}
	else 
		return false;
}
예제 #23
0
bool Database::commit()
{
	if (mysql_commit(m_handle) != 0) {
		std::cout << "[Error - mysql_commit] Message: " << mysql_error(m_handle) << std::endl;
		database_lock.unlock();
		return false;
	}

	database_lock.unlock();
	return true;
}
예제 #24
0
int do_mysql_commit(const simple_list_node *node, void *data)
{
	MYSQL *con = (MYSQL *)node->data;
	if (mysql_commit(con) != 0)
	{
		write_log(7, "commit;");
		return 1;
	}
	write_log(2, con->host, (char *)data);
	return 0;
}
예제 #25
0
/*
 * success = connection:commit()
 */
static int connection_commit(lua_State *L) {
    connection_t *conn = (connection_t *)luaL_checkudata(L, 1, DBD_MYSQL_CONNECTION);
    int err = 0;

    if (conn->mysql) {
	err = mysql_commit(conn->mysql);
    }

    lua_pushboolean(L, !err);
    return 1;
}
예제 #26
0
파일: museum.cpp 프로젝트: Zhanyin/taomee
uint32_t prize_lottery(i_mysql_iface *p_mysql_conn, c_memcached *p_memcached, uint32_t user_id, uint32_t msg_type, char *p_request_body, uint32_t request_len)
{
    if (check_val_len(msg_type, request_len, sizeof(db_request_prize_lottery_t)) != 0)
    {
        return ERR_MSG_LEN;
    }

    db_request_prize_lottery_t *p_req = (db_request_prize_lottery_t *)p_request_body;

    MYSQL_ROW row = NULL;
	MYSQL *p_conn = p_mysql_conn->get_conn();
     if(p_conn == NULL)
     {
         KCRIT_LOG(user_id, "get mysql conn failed.");
         return ERR_SQL_ERR;
     }
     if(mysql_autocommit(p_conn, false) != 0)
     {
         KCRIT_LOG(user_id, "close mysql_autocommit failed.");
         return ERR_SQL_ERR;
     }

	sprintf(g_sql_str, "UPDATE db_monster_%d.t_stuff_%d SET stuff_num = stuff_num-%u WHERE user_id= %u AND stuff_id=%u;", DB_ID(user_id), TABLE_ID(user_id), p_req->cost, user_id, p_req->stuff_a_id);
	if(p_mysql_conn->execsql(g_sql_str) < 0)
	{
		KCRIT_LOG(user_id, "sql exec failed(%s).", p_mysql_conn->get_last_errstr());
		mysql_rollback(p_conn);
		mysql_autocommit(p_conn,true);
		return ERR_SQL_ERR;
	}

	sprintf(g_sql_str, "INSERT INTO db_monster_%d.t_stuff_%d(user_id, stuff_id, stuff_num) VALUES(%u, %u, 1) ON DUPLICATE KEY UPDATE stuff_num = stuff_num+1;", DB_ID(user_id), TABLE_ID(user_id), user_id, p_req->stuff_b_id);
	if(p_mysql_conn->execsql(g_sql_str) < 0)
	{
		KCRIT_LOG(user_id, "sql exec failed(%s).", p_mysql_conn->get_last_errstr());
		mysql_rollback(p_conn);
		mysql_autocommit(p_conn,true);
		return ERR_SQL_ERR;
	}

     if (mysql_commit(p_conn) != 0)
     {
         KCRIT_LOG(user_id, "mysql_commit() failed.");
         mysql_rollback(p_conn);
         mysql_autocommit(p_conn, true);
         return ERR_SQL_ERR;
     }

     mysql_autocommit(p_conn, true);

	g_pack.pack(p_request_body, request_len);
	return 0;
}
예제 #27
0
bool COperMysql::Commit()
{
	if(m_Commit)
	{
		return TRUE;
	}
	
	if(mysql_commit(m_PtrCon) == 0)
	{
		return TRUE;
	}
	return FALSE;
}
예제 #28
0
bool DatabaseMySQL::commit()
{
	if(!m_connected)
		return false;

	if(mysql_commit(&m_handle))
	{
		std::clog << "mysql_commit() - MYSQL ERROR: " << mysql_error(&m_handle) << " (" << mysql_errno(&m_handle) << ")" << std::endl;
		return false;
	}

	return true;
}
예제 #29
0
파일: OPS_Mysql.cpp 프로젝트: xuzhixi/ops
bool Mysql::commit()
{
	my_bool result;

	result = mysql_commit(this->db);
	this->endTransaction();
	if ( result != 0 )
	{
		KY_LOG_ERROR("mysql commit transaction fail");
		return false;
	}

	return true;
}
예제 #30
0
//事务提交
bool CMysqlStore::Commit()
{
	if(m_autocommit)
	{
		return true;
	}

	if(mysql_commit(m_connptr) == 0)
	{
		return true;
	}

	return false;
}