mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
Implement OnUnloadModule for postgres
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@12627 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
11e45f2cb7
commit
1efedf9743
@ -1069,7 +1069,7 @@
|
||||
# m_mssql.so is more complex than described here, see wiki for more #
|
||||
# info http://wiki.inspircd.org/Modules/mssql #
|
||||
#
|
||||
#<database name="db" username="user" password="pass" hostname="localhost" id="db1">
|
||||
#<database module="mssql" name="db" username="user" password="pass" hostname="localhost" id="db1">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# MySQL module: Allows other SQL modules to access MySQL databases
|
||||
@ -1085,7 +1085,7 @@
|
||||
# m_mysql.so is more complex than described here, see the wiki for #
|
||||
# more: http://wiki.inspircd.org/Modules/mysql #
|
||||
#
|
||||
#<database name="mydb" username="myuser" password="mypass" hostname="localhost" id="my_database2">
|
||||
#<database module="mysql" name="mydb" username="myuser" password="mypass" hostname="localhost" id="my_database2">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# Named Modes module: This module allows for the display and set/unset
|
||||
@ -1328,7 +1328,7 @@
|
||||
# m_pgsql.so is more complex than described here, see the wiki for #
|
||||
# more: http://wiki.inspircd.org/Modules/pgsql #
|
||||
#
|
||||
#<database name="mydb" username="myuser" password="mypass" hostname="localhost" id="my_database" ssl="no">
|
||||
#<database module="pgsql" name="mydb" username="myuser" password="mypass" hostname="localhost" id="my_database" ssl="no">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# Muteban: Implements extended ban m:, which stops anyone matching
|
||||
@ -1680,7 +1680,7 @@
|
||||
# m_sqlite.so is more complex than described here, see the wiki for #
|
||||
# more: http://wiki.inspircd.org/Modules/sqlite3 #
|
||||
#
|
||||
#<database hostname="/full/path/to/database.db" id="anytext">
|
||||
#<database module="sqlite" hostname="/full/path/to/database.db" id="anytext">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# SQLutils module: Provides some utilities to SQL client modules, such
|
||||
|
@ -124,19 +124,16 @@ class PgSQLresult : public SQLResult
|
||||
*/
|
||||
class SQLConn : public SQLProvider, public EventHandler
|
||||
{
|
||||
private:
|
||||
public:
|
||||
reference<ConfigTag> conf; /* The <database> entry */
|
||||
std::deque<SQLQuery*> queue;
|
||||
PGconn* sql; /* PgSQL database connection handle */
|
||||
SQLstatus status; /* PgSQL database connection status */
|
||||
SQLQuery* qinprog; /* If there is currently a query in progress */
|
||||
time_t idle; /* Time we last heard from the database */
|
||||
|
||||
public:
|
||||
SQLConn(Module* Creator, ConfigTag* tag)
|
||||
: SQLProvider(Creator, "SQL/" + tag->getString("id")), conf(tag), sql(NULL), status(CWRITE), qinprog(NULL)
|
||||
{
|
||||
idle = ServerInstance->Time();
|
||||
if (!DoConnect())
|
||||
{
|
||||
ServerInstance->Logs->Log("m_pgsql",DEFAULT, "WARNING: Could not connect to database " + tag->getString("id"));
|
||||
@ -274,11 +271,6 @@ restart:
|
||||
|
||||
if (PQconsumeInput(sql))
|
||||
{
|
||||
/* We just read stuff from the server, that counts as it being alive
|
||||
* so update the idle-since time :p
|
||||
*/
|
||||
idle = ServerInstance->Time();
|
||||
|
||||
if (PQisBusy(sql))
|
||||
{
|
||||
/* Nothing happens here */
|
||||
@ -487,6 +479,13 @@ restart:
|
||||
}
|
||||
};
|
||||
|
||||
class DummyQuery : public SQLQuery
|
||||
{
|
||||
public:
|
||||
DummyQuery(Module* me) : SQLQuery(me, "") {}
|
||||
void OnResult(SQLResult& result) {}
|
||||
};
|
||||
|
||||
class ModulePgSQL : public Module
|
||||
{
|
||||
public:
|
||||
@ -555,7 +554,30 @@ class ModulePgSQL : public Module
|
||||
|
||||
void OnUnloadModule(Module* mod)
|
||||
{
|
||||
// TODO cancel queries that will have a bad vtable
|
||||
SQLerror err(SQL_BAD_DBID);
|
||||
for(ConnMap::iterator i = connections.begin(); i != connections.end(); i++)
|
||||
{
|
||||
SQLConn* conn = i->second;
|
||||
if (conn->qinprog && conn->qinprog->creator == mod)
|
||||
{
|
||||
conn->qinprog->OnError(err);
|
||||
delete conn->qinprog;
|
||||
conn->qinprog = new DummyQuery(this);
|
||||
}
|
||||
std::deque<SQLQuery*>::iterator j = conn->queue.begin();
|
||||
while (j != conn->queue.end())
|
||||
{
|
||||
SQLQuery* q = *j;
|
||||
if (q->creator == mod)
|
||||
{
|
||||
q->OnError(err);
|
||||
delete q;
|
||||
j = conn->queue.erase(j);
|
||||
}
|
||||
else
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Version GetVersion()
|
||||
|
Loading…
x
Reference in New Issue
Block a user