Increased Clientprefs error reporting and a rare leak on database connection failed.
authorMatt Woodrow <pred@alliedmods.net>
Tue Aug 05 08:00:54 2008 +0000 (2008-08-05)
changeset 222020b404790b3b
parent 2219 5ddd93671335
child 2221 98a80ac8217e
Increased Clientprefs error reporting and a rare leak on database connection failed.
extensions/clientprefs/extension.cpp
extensions/clientprefs/query.cpp
     1.1 --- a/extensions/clientprefs/extension.cpp	Thu Jul 31 21:08:00 2008 +0000
     1.2 +++ b/extensions/clientprefs/extension.cpp	Tue Aug 05 08:00:54 2008 +0000
     1.3 @@ -227,8 +227,7 @@
     1.4  		TQueryOp *op = new TQueryOp(Query_CreateTable, 0);
     1.5  
     1.6  		op->SetDatabase(Database);
     1.7 -		op->SetCustomPreparedQuery
     1.8 -				(Database->PrepareQuery(
     1.9 +		IPreparedQuery *pQuery = Database->PrepareQuery(
    1.10  				"CREATE TABLE IF NOT EXISTS sm_cookies  \
    1.11  				( \
    1.12  					id INTEGER PRIMARY KEY AUTOINCREMENT, \
    1.13 @@ -236,14 +235,22 @@
    1.14  					description varchar(255), \
    1.15  					access INTEGER \
    1.16  				)",
    1.17 -				error, sizeof(error), &errCode));
    1.18 +				error, sizeof(error), &errCode);
    1.19 +
    1.20 +		if (pQuery == NULL)
    1.21 +		{
    1.22 +			g_pSM->LogMessage(myself, "Failed to prepare query CreateTable sm_cookies: %s (%i)", error, errCode);
    1.23 +			return;
    1.24 +		}
    1.25 +
    1.26 +		op->SetCustomPreparedQuery(pQuery);
    1.27  
    1.28  		dbi->AddToThreadQueue(op, PrioQueue_High);
    1.29  
    1.30  		op = new TQueryOp(Query_CreateTable, 0);
    1.31  		op->SetDatabase(Database);
    1.32 -		op->SetCustomPreparedQuery
    1.33 -				(Database->PrepareQuery(
    1.34 +
    1.35 +		pQuery = Database->PrepareQuery(
    1.36  				"CREATE TABLE IF NOT EXISTS sm_cookie_cache \
    1.37  				( \
    1.38  					player varchar(65) NOT NULL, \
    1.39 @@ -252,7 +259,15 @@
    1.40  					timestamp int, \
    1.41  					PRIMARY KEY (player, cookie_id) \
    1.42  				)",
    1.43 -				error, sizeof(error), &errCode));
    1.44 +				error, sizeof(error), &errCode);
    1.45 +
    1.46 +		if (pQuery == NULL)
    1.47 +		{
    1.48 +			g_pSM->LogMessage(myself, "Failed to prepare query CreateTable sm_cookie_cache: %s (%i)", error, errCode);
    1.49 +			return;
    1.50 +		}
    1.51 +
    1.52 +		op->SetCustomPreparedQuery(pQuery);
    1.53  
    1.54  		dbi->AddToThreadQueue(op, PrioQueue_High);
    1.55  	}
    1.56 @@ -262,8 +277,8 @@
    1.57  
    1.58  		TQueryOp *op = new TQueryOp(Query_CreateTable, 0);
    1.59  		op->SetDatabase(Database);
    1.60 -		op->SetCustomPreparedQuery
    1.61 -				(Database->PrepareQuery(
    1.62 +		
    1.63 +		IPreparedQuery *pQuery = Database->PrepareQuery(
    1.64  				"CREATE TABLE IF NOT EXISTS sm_cookies \
    1.65  				( \
    1.66  					id INTEGER unsigned NOT NULL auto_increment, \
    1.67 @@ -272,14 +287,22 @@
    1.68  					access INTEGER, \
    1.69  					PRIMARY KEY (id) \
    1.70  				)",
    1.71 -				error, sizeof(error), &errCode));
    1.72 +				error, sizeof(error), &errCode);
    1.73 +
    1.74 +		if (pQuery == NULL)
    1.75 +		{
    1.76 +			g_pSM->LogMessage(myself, "Failed to prepare query CreateTable sm_cookies: %s (%i)", error, errCode);
    1.77 +			return;
    1.78 +		}
    1.79 +
    1.80 +		op->SetCustomPreparedQuery(pQuery);
    1.81  
    1.82  		dbi->AddToThreadQueue(op, PrioQueue_High);
    1.83  
    1.84  		op = new TQueryOp(Query_CreateTable, 0);
    1.85  		op->SetDatabase(Database);
    1.86 -		op->SetCustomPreparedQuery
    1.87 -				(Database->PrepareQuery(
    1.88 +			
    1.89 +		pQuery = Database->PrepareQuery(
    1.90  				"CREATE TABLE IF NOT EXISTS sm_cookie_cache \
    1.91  				( \
    1.92  					player varchar(65) NOT NULL, \
    1.93 @@ -288,7 +311,15 @@
    1.94  					timestamp int NOT NULL, \
    1.95  					PRIMARY KEY (player, cookie_id) \
    1.96  				)",
    1.97 -				error, sizeof(error), &errCode));
    1.98 +				error, sizeof(error), &errCode);
    1.99 +
   1.100 +		if (pQuery == NULL)
   1.101 +		{
   1.102 +			g_pSM->LogMessage(myself, "Failed to prepare query CreateTable sm_cookie_cache: %s (%i)", error, errCode);
   1.103 +			return;
   1.104 +		}
   1.105 +
   1.106 +		op->SetCustomPreparedQuery(pQuery);
   1.107  
   1.108  		dbi->AddToThreadQueue(op, PrioQueue_High);
   1.109  	}
   1.110 @@ -308,11 +339,24 @@
   1.111  				"INSERT IGNORE INTO sm_cookies(name, description, access) \
   1.112  				VALUES(?, ?, ?)",
   1.113  				error, sizeof(error), &errCode);
   1.114 +
   1.115 +		if (InsertCookieQuery == NULL)
   1.116 +		{
   1.117 +			g_pSM->LogMessage(myself, "Failed to prepare query InsertCookie: %s (%i)", error, errCode);
   1.118 +			return;
   1.119 +		}
   1.120 +
   1.121  		InsertDataQuery = Database->PrepareQuery(
   1.122  				"INSERT INTO sm_cookie_cache(player, cookie_id, value, timestamp) \
   1.123  				VALUES(?, ?, ?, ?) \
   1.124  				ON DUPLICATE KEY UPDATE value = ?, timestamp = ?",
   1.125  				error, sizeof(error), &errCode);
   1.126 +
   1.127 +		if (InsertDataQuery == NULL)
   1.128 +		{
   1.129 +			g_pSM->LogMessage(myself, "Failed to prepare query InsertData: %s (%i)", error, errCode);
   1.130 +			return;
   1.131 +		}
   1.132  	}
   1.133  	else
   1.134  	{
   1.135 @@ -320,10 +364,23 @@
   1.136  				"INSERT OR IGNORE INTO sm_cookies(name, description, access) \
   1.137  				VALUES(?, ?, ?)", 
   1.138  				error, sizeof(error), &errCode);
   1.139 +
   1.140 +		if (InsertCookieQuery == NULL)
   1.141 +		{
   1.142 +			g_pSM->LogMessage(myself, "Failed to prepare query InsertCookie: %s (%i)", error, errCode);
   1.143 +			return;
   1.144 +		}
   1.145 +
   1.146  		InsertDataQuery = Database->PrepareQuery(
   1.147  				"INSERT OR REPLACE INTO sm_cookie_cache(player, cookie_id, value, timestamp) \
   1.148  				VALUES(?, ?, ?, ?)", 
   1.149  				error, sizeof(error), &errCode);
   1.150 +
   1.151 +		if (InsertDataQuery == NULL)
   1.152 +		{
   1.153 +			g_pSM->LogMessage(myself, "Failed to prepare query InsertData: %s (%i)", error, errCode);
   1.154 +			return;
   1.155 +		}
   1.156  	}
   1.157  
   1.158  	SelectDataQuery = Database->PrepareQuery(
   1.159 @@ -334,12 +391,24 @@
   1.160  			WHERE player = ?",
   1.161  			error, sizeof(error), &errCode);
   1.162  
   1.163 +	if (SelectDataQuery == NULL)
   1.164 +	{
   1.165 +		g_pSM->LogMessage(myself, "Failed to prepare query SelectData: %s (%i)", error, errCode);
   1.166 +		return;
   1.167 +	}
   1.168 +
   1.169  	SelectIdQuery = Database->PrepareQuery(
   1.170  			"SELECT id \
   1.171  			FROM sm_cookies \
   1.172  			WHERE name=?",
   1.173  			error, sizeof(error), &errCode);
   1.174  
   1.175 +	if (SelectIdQuery == NULL)
   1.176 +	{
   1.177 +		g_pSM->LogMessage(myself, "Failed to prepare query SelectId: %s (%i)", error, errCode);
   1.178 +		return;
   1.179 +	}
   1.180 +
   1.181  	databaseLoading = false;
   1.182  	cell_t result = 0;
   1.183  
   1.184 @@ -369,6 +438,8 @@
   1.185  		return true;
   1.186  	}
   1.187  
   1.188 +	query->Destroy();
   1.189 +
   1.190  	/* If Database is NULL and we're not in the loading phase it must have failed - Can't do much */
   1.191  	return false;
   1.192  }
     2.1 --- a/extensions/clientprefs/query.cpp	Thu Jul 31 21:08:00 2008 +0000
     2.2 +++ b/extensions/clientprefs/query.cpp	Tue Aug 05 08:00:54 2008 +0000
     2.3 @@ -117,6 +117,7 @@
     2.4  {
     2.5  	return myself->GetIdentity();
     2.6  }
     2.7 +
     2.8  void TQueryOp::Destroy()
     2.9  {
    2.10  	delete this;
    2.11 @@ -148,6 +149,7 @@
    2.12  {
    2.13  	if (m_pQuery == NULL)
    2.14  	{
    2.15 +		g_pSM->LogError(myself, "Attempted to run with a NULL Query");
    2.16  		return false;
    2.17  	}
    2.18