Quote:
Originally Posted by Natsheh
Try creating the tuples first before initiating any threads and use set_affinity after creaing the tuples.
|
Same...
Edit: I found where I read the threadqueries issue (in the include of course...), but I really couldn't understand this explanation.
Code:
@note Intuitive programmers will note that this causes problems for
* threaded queries. You will have to either force your script to work
* under one affinity, or to pack the affinity type into the query data,
* check it against the current, then set the new affinity if necessary.
* Then, restore the old one for safety.
PHP Code:
#include <amxmodx>
#include <sqlx>
#pragma defclasslib sqlite sqlite
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Author"
#define CREATE "CREATE TABLE IF NOT EXISTS example (steamid varchar(32), name varchar(32));"
#define CREATE2 "CREATE TABLE IF NOT EXISTS example (steamid TEXT, name TEXT);"
#define CREATE3 "CREATE TABLE IF NOT EXISTS stats (steamid TEXT, name TEXT);"
#define SQLITEFILE "SQLITE"
#define SQLITEFILESTATS "SQLITESTATS"
new Handle:g_MySQL
new Handle:g_MySQLITE
new Handle:g_MySQLITESTATS
new QueryError[512]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_MySQL = SQL_MakeDbTuple(Host,User,Pass,Db)
g_MySQLITE = SQL_MakeDbTuple("", "", "", SQLITEFILE)
g_MySQLITESTATS = SQL_MakeDbTuple("", "", "", SQLITEFILESTATS)
set_task(1.0, "InitQueries")
}
public InitQueries()
{
SQL_SetAffinity("mysql")
new szQuery[3][150]
formatex
(
szQuery[0],
charsmax(szQuery[]),
CREATE
)
SQL_ThreadQuery(g_MySQL,"InitialMySQL_Handler",szQuery[0])
SQL_SetAffinity("sqlite")
formatex
(
szQuery[1],
charsmax(szQuery[]),
CREATE2
)
SQL_ThreadQuery(g_MySQLITE,"InitialSQLITE_Handler", szQuery[1])
formatex
(
szQuery[2],
charsmax(szQuery[]),
CREATE3
)
SQL_ThreadQuery(g_MySQLITESTATS,"InitialSQLITE_Handler", szQuery[2])
}
public InitialSQLITE_Handler(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED)
log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
else if(FailState == TQUERY_QUERY_FAILED)
{
SQL_GetQueryString(Query,QueryError,charsmax(QueryError))
log_amx("Could not execute query ^"%s^"",QueryError)
}
if(!SQL_NumRows(Query))
{
server_print("No Results.")
}
else
server_print("Created.")
return PLUGIN_HANDLED
}
public InitialMySQL_Handler(FailState, Handle:Query, Error[], Errcode, Data[], DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED)
log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
else if(FailState == TQUERY_QUERY_FAILED)
{
SQL_GetQueryString(Query,QueryError,charsmax(QueryError))
log_amx("Could not execute query ^"%s^"",QueryError)
}
if(!SQL_NumRows(Query))
{
server_print("No Results.")
}
else
server_print("Created.")
return PLUGIN_HANDLED
}
Code:
L 07/05/2021 - 10:10:33: Start of error session.
L 07/05/2021 - 10:10:33: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20210705.log")
L 07/05/2021 - 10:10:33: [SQLITE] Invalid info tuple handle: 2
L 07/05/2021 - 10:10:33: [AMXX] Displaying debug trace (plugin "error.amxx", version "1.0")
L 07/05/2021 - 10:10:33: [AMXX] Run time error 10: native error (native "SQL_ThreadQuery")
L 07/05/2021 - 10:10:33: [AMXX] [0] error.sma::InitQueries (line 56)
L 07/05/2021 - 10:10:34: [SQLITE] Invalid query handle: 4
L 07/05/2021 - 10:10:34: [AMXX] Displaying debug trace (plugin "error.amxx", version "1.0")
L 07/05/2021 - 10:10:34: [AMXX] Run time error 10: native error (native "SQL_NumResults")
L 07/05/2021 - 10:10:34: [AMXX] [0] error.sma::InitialMySQL_Handler (line 97)
__________________