extensions/sqlite/driver/SqDatabase.cpp
changeset 1912 506170374d35
parent 1507 1df2c8331d98
child 1947 e73a1e51833b
     1.1 --- a/extensions/sqlite/driver/SqDatabase.cpp	Sun Mar 02 08:10:34 2008 +0000
     1.2 +++ b/extensions/sqlite/driver/SqDatabase.cpp	Sun Mar 02 18:01:49 2008 +0000
     1.3 @@ -160,7 +160,36 @@
     1.4  	return pQuery;
     1.5  }
     1.6  
     1.7 -IPreparedQuery *SqDatabase::PrepareQuery(const char *query, char *error, size_t maxlength, int *errCode/* =NULL */)
     1.8 +bool SqDatabase::DoSimpleQueryEx(const char *query, size_t len)
     1.9 +{
    1.10 +	IQuery *pQuery = DoQueryEx(query, len);
    1.11 +	if (!pQuery)
    1.12 +	{
    1.13 +		return false;
    1.14 +	}
    1.15 +	pQuery->Destroy();
    1.16 +	return true;
    1.17 +}
    1.18 +
    1.19 +IQuery *SqDatabase::DoQueryEx(const char *query, size_t len)
    1.20 +{
    1.21 +	IPreparedQuery *pQuery = PrepareQueryEx(query, len, NULL, 0, NULL);
    1.22 +	if (!pQuery)
    1.23 +	{
    1.24 +		return NULL;
    1.25 +	}
    1.26 +	if (!pQuery->Execute())
    1.27 +	{
    1.28 +		pQuery->Destroy();
    1.29 +		return NULL;
    1.30 +	}
    1.31 +	return pQuery;
    1.32 +}
    1.33 +
    1.34 +IPreparedQuery *SqDatabase::PrepareQuery(const char *query, 
    1.35 +										 char *error, 
    1.36 +										 size_t maxlength, 
    1.37 +										 int *errCode/* =NULL */)
    1.38  {
    1.39  	sqlite3_stmt *stmt = NULL;
    1.40  	if ((m_LastErrorCode = sqlite3_prepare_v2(m_sq3, query, -1, &stmt, NULL)) != SQLITE_OK
    1.41 @@ -179,12 +208,34 @@
    1.42  			strncopy(error, msg, maxlength);
    1.43  		}
    1.44  		m_LastError.assign(msg);
    1.45 -		#if 0 /* This didn't really seem like a good idea... */
    1.46 -		if (stmt)
    1.47 +		return NULL;
    1.48 +	}
    1.49 +	return new SqQuery(this, stmt);
    1.50 +}
    1.51 +
    1.52 +IPreparedQuery *SqDatabase::PrepareQueryEx(const char *query, 
    1.53 +										   size_t len, 
    1.54 +										   char *error, 
    1.55 +										   size_t maxlength, 
    1.56 +										   int *errCode/* =NULL */)
    1.57 +{
    1.58 +	sqlite3_stmt *stmt = NULL;
    1.59 +	if ((m_LastErrorCode = sqlite3_prepare_v2(m_sq3, query, len, &stmt, NULL)) != SQLITE_OK
    1.60 +		|| !stmt)
    1.61 +	{
    1.62 +		const char *msg;
    1.63 +		if (m_LastErrorCode != SQLITE_OK)
    1.64  		{
    1.65 -			sqlite3_finalize(stmt);
    1.66 +			msg = sqlite3_errmsg(m_sq3);
    1.67 +		} else {
    1.68 +			msg = "Invalid query string";
    1.69 +			m_LastErrorCode = SQLITE_ERROR;
    1.70  		}
    1.71 -		#endif
    1.72 +		if (error)
    1.73 +		{
    1.74 +			strncopy(error, msg, maxlength);
    1.75 +		}
    1.76 +		m_LastError.assign(msg);
    1.77  		return NULL;
    1.78  	}
    1.79  	return new SqQuery(this, stmt);