Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

138 рядки
7.3 KiB

  1. #pragma once
  2. #include <memory>
  3. #include <gmock/gmock.h>
  4. #include <mariadb/errmsg.h>
  5. #include <mariadb/mysqld_error.h>
  6. #include <mariadb/mysql.h>
  7. #define MARIADB_MOCK
  8. #if !defined(_WIN32)
  9. #define STDCALL
  10. #else
  11. #define STDCALL __stdcall
  12. #endif
  13. #define NOT_NULL_FLAG 1 /* field can't be NULL */
  14. #define PRI_KEY_FLAG 2 /* field is part of a primary key */
  15. #define UNIQUE_KEY_FLAG 4 /* field is part of a unique key */
  16. #define MULTIPLE_KEY_FLAG 8 /* field is part of a key */
  17. #define BLOB_FLAG 16 /* field is a blob */
  18. #define UNSIGNED_FLAG 32 /* field is unsigned */
  19. #define ZEROFILL_FLAG 64 /* field is zerofill */
  20. #define BINARY_FLAG 128
  21. #define ENUM_FLAG 256 /* field is an enum */
  22. #define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */
  23. #define TIMESTAMP_FLAG 1024 /* field is a timestamp */
  24. #define SET_FLAG 2048 /* field is a set */
  25. #define NO_DEFAULT_VALUE_FLAG 4096 /* field doesn't have default value */
  26. #define ON_UPDATE_NOW_FLAG 8192 /* field is set to NOW on UPDATE */
  27. #define NUM_FLAG 32768 /* field is num (for clients) */
  28. #define PART_KEY_FLAG 16384 /* Intern; Part of some key */
  29. #define GROUP_FLAG 32768 /* Intern: Group field */
  30. #define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */
  31. #define CLIENT_MYSQL 1
  32. #define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
  33. #define CLIENT_LONG_FLAG 4 /* Get all column flags */
  34. #define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
  35. #define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */
  36. #define CLIENT_COMPRESS 32 /* Can use compression protocol */
  37. #define CLIENT_ODBC 64 /* Odbc client */
  38. #define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */
  39. #define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */
  40. #define CLIENT_INTERACTIVE 1024 /* This is an interactive client */
  41. #define CLIENT_SSL 2048 /* Switch to SSL after handshake */
  42. #define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */
  43. #define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */
  44. #define CLIENT_PROTOCOL_41 512
  45. #define CLIENT_RESERVED 16384
  46. #define CLIENT_SECURE_CONNECTION 32768
  47. #define CLIENT_MULTI_STATEMENTS (1UL << 16)
  48. #define CLIENT_MULTI_RESULTS (1UL << 17)
  49. #define CLIENT_PS_MULTI_RESULTS (1UL << 18)
  50. #define CLIENT_PLUGIN_AUTH (1UL << 19)
  51. #define CLIENT_CONNECT_ATTRS (1UL << 20)
  52. #define CLIENT_SESSION_TRACKING (1UL << 23)
  53. #define CLIENT_PROGRESS (1UL << 29)
  54. #define CLIENT_PROGRESS_OBSOLETE CLIENT_PROGRESS
  55. #define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30)
  56. #define CLIENT_REMEMBER_OPTIONS (1UL << 31)
  57. struct mariadb_mock_item
  58. {
  59. virtual ~mariadb_mock_item() = default;
  60. };
  61. struct mariadb_mock
  62. {
  63. private:
  64. static void setInstance(mariadb_mock* value);
  65. static void clearInstance(mariadb_mock* value);
  66. std::vector<std::unique_ptr<mariadb_mock_item>> _items;
  67. public:
  68. MOCK_METHOD1(mysql_num_rows, my_ulonglong (MYSQL_RES *res));
  69. MOCK_METHOD1(mysql_num_fields, unsigned int (MYSQL_RES *res));
  70. MOCK_METHOD1(mysql_row_tell, MYSQL_ROWS* (MYSQL_RES *res));
  71. MOCK_METHOD1(mysql_free_result, void (MYSQL_RES *res));
  72. MOCK_METHOD2(mysql_row_seek, MYSQL_ROW_OFFSET(MYSQL_RES *res, MYSQL_ROW_OFFSET));
  73. MOCK_METHOD2(mysql_data_seek, void (MYSQL_RES *res, unsigned long long offset));
  74. MOCK_METHOD1(mysql_fetch_lengths, unsigned long* (MYSQL_RES *res));
  75. MOCK_METHOD1(mysql_fetch_row, MYSQL_ROW (MYSQL_RES *res));
  76. MOCK_METHOD1(mysql_fetch_fields, MYSQL_FIELD* (MYSQL_RES *res));
  77. MOCK_METHOD3(mysql_real_query, int (MYSQL *mysql, const char *q, unsigned long length));
  78. MOCK_METHOD1(mysql_errno, unsigned int (MYSQL *mysql));
  79. MOCK_METHOD1(mysql_error, const char* (MYSQL *mysql));
  80. MOCK_METHOD1(mysql_store_result, MYSQL_RES* (MYSQL *mysql));
  81. MOCK_METHOD1(mysql_use_result, MYSQL_RES* (MYSQL *mysql));
  82. MOCK_METHOD1(mysql_field_count, unsigned int (MYSQL *mysql));
  83. MOCK_METHOD1(mysql_affected_rows, my_ulonglong (MYSQL *mysql));
  84. MOCK_METHOD1(mysql_insert_id, my_ulonglong (MYSQL *mysql));
  85. MOCK_METHOD4(mysql_real_escape_string, unsigned long (MYSQL *mysql, char *to, const char *from, unsigned long length));
  86. MOCK_METHOD1(mysql_close, void (MYSQL *mysql));
  87. MOCK_METHOD8(mysql_real_connect, MYSQL* (MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag));
  88. MOCK_METHOD1(mysql_init, MYSQL* (MYSQL *mysql));
  89. ::testing::Sequence sequence;
  90. template<typename T_item>
  91. T_item& store(T_item&& item)
  92. {
  93. _items.emplace_back(new T_item(std::forward<T_item>(item)));
  94. return *static_cast<T_item*>(_items.back().get());
  95. }
  96. mariadb_mock()
  97. { setInstance(this); }
  98. ~mariadb_mock()
  99. { clearInstance(this); }
  100. };
  101. my_ulonglong STDCALL mysql_num_rows (MYSQL_RES *res);
  102. unsigned int STDCALL mysql_num_fields (MYSQL_RES *res);
  103. MYSQL_ROWS* STDCALL mysql_row_tell (MYSQL_RES *res);
  104. void STDCALL mysql_free_result (MYSQL_RES *res);
  105. MYSQL_ROW_OFFSET STDCALL mysql_row_seek (MYSQL_RES *res, MYSQL_ROW_OFFSET);
  106. void STDCALL mysql_data_seek (MYSQL_RES *res, unsigned long long offset);
  107. unsigned long* STDCALL mysql_fetch_lengths (MYSQL_RES *res);
  108. MYSQL_ROW STDCALL mysql_fetch_row (MYSQL_RES *res);
  109. MYSQL_FIELD* STDCALL mysql_fetch_fields (MYSQL_RES *res);
  110. int STDCALL mysql_real_query (MYSQL *mysql, const char *q, unsigned long length);
  111. unsigned int STDCALL mysql_errno (MYSQL *mysql);
  112. const char* STDCALL mysql_error (MYSQL *mysql);
  113. MYSQL_RES* STDCALL mysql_store_result (MYSQL *mysql);
  114. MYSQL_RES* STDCALL mysql_use_result (MYSQL *mysql);
  115. unsigned int STDCALL mysql_field_count (MYSQL *mysql);
  116. my_ulonglong STDCALL mysql_affected_rows (MYSQL *mysql);
  117. my_ulonglong STDCALL mysql_insert_id (MYSQL *mysql);
  118. unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, unsigned long length);
  119. void STDCALL mysql_close (MYSQL *mysql);
  120. MYSQL* STDCALL mysql_real_connect (MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag);
  121. MYSQL* STDCALL mysql_init (MYSQL *mysql);