From 097f718190165a92d15c761a60107b2d8359709c Mon Sep 17 00:00:00 2001 From: ChillerDragon Date: Fri, 19 Nov 2021 12:29:24 +0100 Subject: [PATCH] Add sql BindInt64 --- src/engine/server/databases/connection.h | 1 + src/engine/server/databases/mysql.cpp | 18 ++++++++++++++++++ src/engine/server/databases/sqlite.cpp | 8 ++++++++ 3 files changed, 27 insertions(+) diff --git a/src/engine/server/databases/connection.h b/src/engine/server/databases/connection.h index e4126d23c..e4605277c 100644 --- a/src/engine/server/databases/connection.h +++ b/src/engine/server/databases/connection.h @@ -54,6 +54,7 @@ public: virtual void BindString(int Idx, const char *pString) = 0; virtual void BindBlob(int Idx, unsigned char *pBlob, int Size) = 0; virtual void BindInt(int Idx, int Value) = 0; + virtual void BindInt64(int Idx, int64_t Value) = 0; virtual void BindFloat(int Idx, float Value) = 0; // Print expanded sql statement diff --git a/src/engine/server/databases/mysql.cpp b/src/engine/server/databases/mysql.cpp index f3fadec75..bdcc06dbd 100644 --- a/src/engine/server/databases/mysql.cpp +++ b/src/engine/server/databases/mysql.cpp @@ -82,6 +82,7 @@ public: virtual void BindString(int Idx, const char *pString); virtual void BindBlob(int Idx, unsigned char *pBlob, int Size); virtual void BindInt(int Idx, int Value); + virtual void BindInt64(int Idx, int64_t Value); virtual void BindFloat(int Idx, float Value); virtual void Print() {} @@ -400,6 +401,23 @@ void CMysqlConnection::BindInt(int Idx, int Value) pParam->error = nullptr; } +void CMysqlConnection::BindInt64(int Idx, int64_t Value) +{ + m_NewQuery = true; + Idx -= 1; + dbg_assert(0 <= Idx && Idx < (int)m_aStmtParameters.size(), "index out of bounds"); + + m_aStmtParameterExtras[Idx].i = Value; + MYSQL_BIND *pParam = &m_aStmtParameters[Idx]; + pParam->buffer_type = MYSQL_TYPE_LONGLONG; + pParam->buffer = &m_aStmtParameterExtras[Idx].i; + pParam->buffer_length = sizeof(m_aStmtParameterExtras[Idx].i); + pParam->length = nullptr; + pParam->is_null = nullptr; + pParam->is_unsigned = false; + pParam->error = nullptr; +} + void CMysqlConnection::BindFloat(int Idx, float Value) { m_NewQuery = true; diff --git a/src/engine/server/databases/sqlite.cpp b/src/engine/server/databases/sqlite.cpp index b4cfc7391..77701461b 100644 --- a/src/engine/server/databases/sqlite.cpp +++ b/src/engine/server/databases/sqlite.cpp @@ -32,6 +32,7 @@ public: virtual void BindString(int Idx, const char *pString); virtual void BindBlob(int Idx, unsigned char *pBlob, int Size); virtual void BindInt(int Idx, int Value); + virtual void BindInt64(int Idx, int64_t Value); virtual void BindFloat(int Idx, float Value); virtual void Print(); @@ -197,6 +198,13 @@ void CSqliteConnection::BindInt(int Idx, int Value) m_Done = false; } +void CSqliteConnection::BindInt64(int Idx, int64_t Value) +{ + int Result = sqlite3_bind_int64(m_pStmt, Idx, Value); + AssertNoError(Result); + m_Done = false; +} + void CSqliteConnection::BindFloat(int Idx, float Value) { int Result = sqlite3_bind_double(m_pStmt, Idx, (double)Value);