PostgreSQLInterface.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Copyright (c) 2014, Oculus VR, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. *
  9. */
  10. #ifndef __POSTGRESQL_INTERFACE_H
  11. #define __POSTGRESQL_INTERFACE_H
  12. struct pg_conn;
  13. typedef struct pg_conn PGconn;
  14. struct pg_result;
  15. typedef struct pg_result PGresult;
  16. #include "RakString.h"
  17. #include "DS_OrderedList.h"
  18. class PostgreSQLInterface
  19. {
  20. public:
  21. PostgreSQLInterface();
  22. virtual ~PostgreSQLInterface();
  23. /// Connect to the database using the connection string
  24. /// \param[in] conninfo See the postgre docs
  25. /// \return True on success, false on failure.
  26. bool Connect(const char *conninfo);
  27. /// Use a connection allocated elsewehre
  28. void AssignConnection(PGconn *_pgConn);
  29. /// Get the instance of PGconn
  30. PGconn *GetPGConn(void) const;
  31. /// Disconnect from the database
  32. void Disconnect(void);
  33. /// If any of the above functions fail, the error string is stored internally. Call this to get it.
  34. virtual const char *GetLastError(void) const;
  35. // Returns DEFAULT EXTRACT(EPOCH FROM current_timestamp))
  36. long long GetEpoch(void);
  37. // Returns a string containing LOCALTIMESTAMP on the server
  38. char *GetLocalTimestamp(void);
  39. static bool PQGetValueFromBinary(int *output, PGresult *result, unsigned int rowIndex, const char *columnName);
  40. static bool PQGetValueFromBinary(int *output, PGresult *result, int rowIndex, const char *columnName);
  41. static bool PQGetValueFromBinary(unsigned int *output, PGresult *result, int rowIndex, const char *columnName);
  42. static bool PQGetValueFromBinary(long long *output, PGresult *result, int rowIndex, const char *columnName);
  43. static bool PQGetValueFromBinary(float *output, PGresult *result, int rowIndex, const char *columnName);
  44. static bool PQGetValueFromBinary(double *output, PGresult *result, int rowIndex, const char *columnName);
  45. static bool PQGetValueFromBinary(bool *output, PGresult *result, int rowIndex, const char *columnName);
  46. static bool PQGetValueFromBinary(RakNet::RakString *output, PGresult *result, int rowIndex, const char *columnName);
  47. static bool PQGetValueFromBinary(char **output, unsigned int *outputLength, PGresult *result, int rowIndex, const char *columnName);
  48. static bool PQGetValueFromBinary(char **output, int *outputLength, PGresult *result, int rowIndex, const char *columnName);
  49. static void EncodeQueryInput(const char *colName, unsigned int value, RakNet::RakString &paramTypeStr, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat);
  50. static void EncodeQueryInput(const char *colName, bool value, RakNet::RakString &paramTypeStr, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat);
  51. static void EncodeQueryInput(const char *colName, int value, RakNet::RakString &paramTypeStr, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat);
  52. static void EncodeQueryInput(const char *colName, float value, RakNet::RakString &paramTypeStr, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat);
  53. static void EncodeQueryInput(const char *colName, char *binaryData, int binaryDataLength, RakNet::RakString &paramTypeStr, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat, bool writeEmpty);
  54. static void EncodeQueryInput(const char *colName, const char *str, RakNet::RakString &paramTypeStr, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat, bool writeEmpty, const char *type = "text");
  55. static void EncodeQueryInput(const char *colName, const RakNet::RakString &str, RakNet::RakString &paramTypeStr, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat, bool writeEmpty, const char *type = "text");
  56. static void EncodeQueryUpdate(const char *colName, unsigned int value, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat);
  57. static void EncodeQueryUpdate(const char *colName, int value, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat);
  58. static void EncodeQueryUpdate(const char *colName, float value, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat);
  59. static void EncodeQueryUpdate(const char *colName, char *binaryData, int binaryDataLength, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat);
  60. static void EncodeQueryUpdate(const char *colName, const char *str, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat, const char *type = "text");
  61. static void EncodeQueryUpdate(const char *colName, const RakNet::RakString &str, RakNet::RakString &valueStr, int &numParams, char **paramData, int *paramLength, int *paramFormat, const char *type = "text");
  62. // Standard query
  63. PGresult * QueryVariadic( const char *input, ... );
  64. static void ClearResult(PGresult *result);
  65. // Pass queries to the server
  66. bool ExecuteBlockingCommand(const char *command, PGresult **result, bool rollbackOnFailure);
  67. bool IsResultSuccessful(PGresult *result, bool rollbackOnFailure);
  68. void Rollback(void);
  69. static void EndianSwapInPlace(char* data, int dataLength);
  70. RakNet::RakString GetEscapedString(const char *input) const;
  71. protected:
  72. PGconn *pgConn;
  73. bool pgConnAllocatedHere;
  74. bool isConnected;
  75. char lastError[1024];
  76. // Connection parameters
  77. RakNet::RakString _conninfo;
  78. // DataStructures::List<RakNet::RakString> preparedStatements;
  79. DataStructures::List<RakNet::RakString> preparedQueries;
  80. };
  81. #endif
粤ICP备19079148号