70 if (i < m_stmt->m_paramCount)
71 SF_LOG_WARN(
"sql.sql",
"[WARNING]: BindParameters() for statement %u did not bind all allocated parameters",
m_index);
181 memcpy(
statement_data[index].binary.data(), value.c_str(), value.length() + 1);
215 mysql_stmt_attr_set(stmt, STMT_ATTR_UPDATE_MAX_LENGTH, &bool_tmp);
223 delete[]
m_Mstmt->bind->length;
224 delete[]
m_Mstmt->bind->is_null;
236 delete[](
char*)
m_bind[i].buffer;
244 SF_LOG_ERROR(
"sql.driver",
"Attempted to bind parameter %u%s on a PreparedStatement %u (statement has only %u parameters)",
uint32(index) + 1, (index == 1 ?
"st" : (index == 2 ?
"nd" : (index == 3 ?
"rd" :
"nd"))), stmtIndex, paramCount);
254 SF_LOG_WARN(
"sql.sql",
"[WARNING] Prepared Statement (id: %u) trying to bind value on already bound index (%u).",
m_stmt->m_index, index);
267 MYSQL_BIND* param = &
m_bind[index];
268 setValue(param, MYSQL_TYPE_TINY, &value,
sizeof(
uint8),
true);
275 MYSQL_BIND* param = &
m_bind[index];
283 MYSQL_BIND* param = &
m_bind[index];
291 MYSQL_BIND* param = &
m_bind[index];
292 setValue(param, MYSQL_TYPE_LONGLONG, &value,
sizeof(
uint64),
true);
299 MYSQL_BIND* param = &
m_bind[index];
300 setValue(param, MYSQL_TYPE_TINY, &value,
sizeof(
int8),
false);
307 MYSQL_BIND* param = &
m_bind[index];
308 setValue(param, MYSQL_TYPE_SHORT, &value,
sizeof(
int16),
false);
315 MYSQL_BIND* param = &
m_bind[index];
316 setValue(param, MYSQL_TYPE_LONG, &value,
sizeof(
int32),
false);
323 MYSQL_BIND* param = &
m_bind[index];
324 setValue(param, MYSQL_TYPE_LONGLONG, &value,
sizeof(
int64),
false);
331 MYSQL_BIND* param = &
m_bind[index];
332 setValue(param, MYSQL_TYPE_FLOAT, &value,
sizeof(
float), (value > 0.0f));
339 MYSQL_BIND* param = &
m_bind[index];
340 setValue(param, MYSQL_TYPE_DOUBLE, &value,
sizeof(
double), (value > 0.0f));
347 MYSQL_BIND* param = &
m_bind[index];
349 param->buffer_type = MYSQL_TYPE_BLOB;
350 delete[]
static_cast<char*
>(param->buffer);
351 param->buffer =
new char[len];
352 param->buffer_length = len;
353 param->is_null_value = 0;
354 delete param->length;
355 param->length =
new unsigned long(len);
359 param->buffer_type = MYSQL_TYPE_VAR_STRING;
362 memcpy(param->buffer, value.data(), len);
369 MYSQL_BIND* param = &
m_bind[index];
370 param->buffer_type = MYSQL_TYPE_NULL;
371 delete[]
static_cast<char*
>(param->buffer);
372 param->buffer = NULL;
373 param->buffer_length = 0;
374 param->is_null_value = 1;
375 delete param->length;
376 param->length = NULL;
381 param->buffer_type = type;
382 delete[]
static_cast<char*
>(param->buffer);
383 param->buffer =
new char[len];
384 param->buffer_length = 0;
385 param->is_null_value = 0;
386 param->length = NULL;
387 param->is_unsigned = isUnsigned;
389 memcpy(param->buffer, value, len);
394 std::string queryString = sqlPattern;
397 for (
uint32 i = 0; i <
m_stmt->statement_data.size(); i++)
399 pos = queryString.find(
'?', pos);
400 std::stringstream ss;
402 switch (
m_stmt->statement_data[i].type)
411 ss <<
m_stmt->statement_data[i].data.ui16;
414 ss <<
m_stmt->statement_data[i].data.ui32;
420 ss <<
m_stmt->statement_data[i].data.i16;
423 ss <<
m_stmt->statement_data[i].data.i32;
426 ss <<
m_stmt->statement_data[i].data.ui64;
429 ss <<
m_stmt->statement_data[i].data.i64;
432 ss <<
m_stmt->statement_data[i].data.f;
435 ss <<
m_stmt->statement_data[i].data.d;
438 ss <<
'\'' << (
char const*)
m_stmt->statement_data[i].binary.data() <<
'\'';
448 std::string replaceStr = ss.str();
449 queryString.replace(pos, 1, replaceStr);
450 pos += replaceStr.length();
#define SF_LOG_WARN(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
static bool ParamenterIndexAssertFail(uint32 stmtIndex, uint8 index, uint32 paramCount)
Skyfire::Future< PreparedQueryResult > PreparedQueryResultFuture
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
void setUInt32(const uint8 index, const uint32 value)
void setBool(const uint8 index, const bool value)
void setNull(const uint8 index)
MySQLPreparedStatement(MYSQL_STMT *stmt)
void setInt64(const uint8 index, const int64 value)
void setDouble(const uint8 index, const double value)
void setInt8(const uint8 index, const int8 value)
~MySQLPreparedStatement()
PreparedStatement * m_stmt
std::string getQueryString(std::string const &sqlPattern) const
void setUInt64(const uint8 index, const uint64 value)
void setUInt16(const uint8 index, const uint16 value)
bool CheckValidIndex(uint8 index)
void setInt32(const uint8 index, const int32 value)
void setUInt8(const uint8 index, const uint8 value)
void setValue(MYSQL_BIND *param, enum_field_types type, const void *value, uint32 len, bool isUnsigned)
void setFloat(const uint8 index, const float value)
void setInt16(const uint8 index, const int16 value)
void setBinary(const uint8 index, const std::vector< uint8 > &value, bool isString)
std::vector< bool > m_paramsSet
uint64 GetRowCount() const
void setBool(const uint8 index, const bool value)
void setFloat(const uint8 index, const float value)
void setString(const uint8 index, const std::string &value)
void setInt64(const uint8 index, const int64 value)
MySQLPreparedStatement * m_stmt
void setUInt16(const uint8 index, const uint16 value)
PreparedStatement(uint32 index)
void setUInt64(const uint8 index, const uint64 value)
void setBinary(const uint8 index, const std::vector< uint8 > &value)
void setNull(const uint8 index)
void setInt8(const uint8 index, const int8 value)
void setUInt32(const uint8 index, const uint32 value)
std::vector< PreparedStatementData > statement_data
void setInt16(const uint8 index, const int16 value)
void setDouble(const uint8 index, const double value)
void setUInt8(const uint8 index, const uint8 value)
void setInt32(const uint8 index, const int32 value)
PreparedStatementTask(PreparedStatement *stmt)
PreparedQueryResultFuture m_result
PreparedStatement * m_stmt