* Separated Sql handle for query_sql to avoid mapreg overwrite the mmysql_handle.
* New handle for query_sql: qsmysql_handle

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
This commit is contained in:
Cydh Ramdh 2015-01-03 08:57:36 +07:00
parent d98f99b2de
commit 1d27de7a35
3 changed files with 23 additions and 4 deletions

View File

@ -51,6 +51,7 @@ char map_server_id[32] = "ragnarok";
char map_server_pw[32] = "";
char map_server_db[32] = "ragnarok";
Sql* mmysql_handle;
Sql* qsmysql_handle; /// For query_sql
int db_use_sqldbs = 0;
char buyingstores_db[32] = "buyingstores";
@ -3769,20 +3770,28 @@ int map_sql_init(void)
{
// main db connection
mmysql_handle = Sql_Malloc();
qsmysql_handle = Sql_Malloc();
ShowInfo("Connecting to the Map DB Server....\n");
if( SQL_ERROR == Sql_Connect(mmysql_handle, map_server_id, map_server_pw, map_server_ip, map_server_port, map_server_db) ){
if( SQL_ERROR == Sql_Connect(mmysql_handle, map_server_id, map_server_pw, map_server_ip, map_server_port, map_server_db) ||
SQL_ERROR == Sql_Connect(qsmysql_handle, map_server_id, map_server_pw, map_server_ip, map_server_port, map_server_db) )
{
ShowError("Couldn't connect with uname='%s',passwd='%s',host='%s',port='%d',database='%s'\n",
map_server_id, map_server_pw, map_server_ip, map_server_port, map_server_db);
Sql_ShowDebug(mmysql_handle);
Sql_Free(mmysql_handle);
Sql_ShowDebug(qsmysql_handle);
Sql_Free(qsmysql_handle);
exit(EXIT_FAILURE);
}
ShowStatus("Connect success! (Map Server Connection)\n");
if( strlen(default_codepage) > 0 )
if( strlen(default_codepage) > 0 ) {
if ( SQL_ERROR == Sql_SetEncoding(mmysql_handle, default_codepage) )
Sql_ShowDebug(mmysql_handle);
if ( SQL_ERROR == Sql_SetEncoding(qsmysql_handle, default_codepage) )
Sql_ShowDebug(qsmysql_handle);
}
return 0;
}
@ -3791,7 +3800,9 @@ int map_sql_close(void)
{
ShowStatus("Close Map DB Connection....\n");
Sql_Free(mmysql_handle);
Sql_Free(qsmysql_handle);
mmysql_handle = NULL;
qsmysql_handle = NULL;
#ifndef BETA_THREAD_TEST
if (log_config.sql_logs)
{

View File

@ -957,6 +957,7 @@ extern char log_db_db[32];
extern int db_use_sqldbs;
extern Sql* mmysql_handle;
extern Sql* qsmysql_handle;
extern Sql* logmysql_handle;
extern char buyingstores_db[32];

View File

@ -15425,6 +15425,7 @@ int buildin_query_sql_sub(struct script_state* st, Sql* handle)
int max_rows = SCRIPT_MAX_ARRAYSIZE; // maximum number of rows
int num_vars;
int num_cols;
int64 num_rows = 0;
// check target variables
for( i = 3; script_hasdata(st,i); ++i ) {
@ -15475,6 +15476,8 @@ int buildin_query_sql_sub(struct script_state* st, Sql* handle)
script_reportsrc(st);
}
num_rows = Sql_NumRows(handle);
// Store data
for( i = 0; i < max_rows && SQL_SUCCESS == Sql_NextRow(handle); ++i ) {
for( j = 0; j < num_vars; ++j ) {
@ -15491,7 +15494,11 @@ int buildin_query_sql_sub(struct script_state* st, Sql* handle)
setd_sub(st, sd, name, i, (void *)__64BPRTSIZE((str?atoi(str):0)), reference_getref(data));
}
}
if( i == max_rows && max_rows < Sql_NumRows(handle) ) {
if (i < num_rows) {
ShowWarning("script:query_sql: Only %d/%u rows have been stored.\n", i, num_rows);
script_reportsrc(st);
}
else if( i == max_rows && max_rows < Sql_NumRows(handle) ) {
ShowWarning("script:query_sql: Only %d/%u rows have been stored.\n", max_rows, (unsigned int)Sql_NumRows(handle));
script_reportsrc(st);
}
@ -15513,7 +15520,7 @@ BUILDIN_FUNC(query_sql) {
return 0;
#else
return buildin_query_sql_sub(st, mmysql_handle);
return buildin_query_sql_sub(st, qsmysql_handle);
#endif
}