#pragma once #include #include #include #include #include #define MARIADB_MOCK #if !defined(_WIN32) #define STDCALL #else #define STDCALL __stdcall #endif #define NOT_NULL_FLAG 1 /* field can't be NULL */ #define PRI_KEY_FLAG 2 /* field is part of a primary key */ #define UNIQUE_KEY_FLAG 4 /* field is part of a unique key */ #define MULTIPLE_KEY_FLAG 8 /* field is part of a key */ #define BLOB_FLAG 16 /* field is a blob */ #define UNSIGNED_FLAG 32 /* field is unsigned */ #define ZEROFILL_FLAG 64 /* field is zerofill */ #define BINARY_FLAG 128 #define ENUM_FLAG 256 /* field is an enum */ #define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */ #define TIMESTAMP_FLAG 1024 /* field is a timestamp */ #define SET_FLAG 2048 /* field is a set */ #define NO_DEFAULT_VALUE_FLAG 4096 /* field doesn't have default value */ #define ON_UPDATE_NOW_FLAG 8192 /* field is set to NOW on UPDATE */ #define NUM_FLAG 32768 /* field is num (for clients) */ #define PART_KEY_FLAG 16384 /* Intern; Part of some key */ #define GROUP_FLAG 32768 /* Intern: Group field */ #define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */ #define CLIENT_MYSQL 1 #define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */ #define CLIENT_LONG_FLAG 4 /* Get all column flags */ #define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */ #define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */ #define CLIENT_COMPRESS 32 /* Can use compression protocol */ #define CLIENT_ODBC 64 /* Odbc client */ #define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */ #define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */ #define CLIENT_INTERACTIVE 1024 /* This is an interactive client */ #define CLIENT_SSL 2048 /* Switch to SSL after handshake */ #define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */ #define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */ #define CLIENT_PROTOCOL_41 512 #define CLIENT_RESERVED 16384 #define CLIENT_SECURE_CONNECTION 32768 #define CLIENT_MULTI_STATEMENTS (1UL << 16) #define CLIENT_MULTI_RESULTS (1UL << 17) #define CLIENT_PS_MULTI_RESULTS (1UL << 18) #define CLIENT_PLUGIN_AUTH (1UL << 19) #define CLIENT_CONNECT_ATTRS (1UL << 20) #define CLIENT_SESSION_TRACKING (1UL << 23) #define CLIENT_PROGRESS (1UL << 29) #define CLIENT_PROGRESS_OBSOLETE CLIENT_PROGRESS #define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) #define CLIENT_REMEMBER_OPTIONS (1UL << 31) struct mariadb_mock_item { virtual ~mariadb_mock_item() = default; }; struct mariadb_mock { private: static void setInstance(mariadb_mock* value); static void clearInstance(mariadb_mock* value); std::vector> _items; public: MOCK_METHOD1(mysql_num_rows, my_ulonglong (MYSQL_RES *res)); MOCK_METHOD1(mysql_num_fields, unsigned int (MYSQL_RES *res)); MOCK_METHOD1(mysql_row_tell, MYSQL_ROWS* (MYSQL_RES *res)); MOCK_METHOD1(mysql_free_result, void (MYSQL_RES *res)); MOCK_METHOD2(mysql_row_seek, MYSQL_ROW_OFFSET(MYSQL_RES *res, MYSQL_ROW_OFFSET)); MOCK_METHOD2(mysql_data_seek, void (MYSQL_RES *res, unsigned long long offset)); MOCK_METHOD1(mysql_fetch_lengths, unsigned long* (MYSQL_RES *res)); MOCK_METHOD1(mysql_fetch_row, MYSQL_ROW (MYSQL_RES *res)); MOCK_METHOD1(mysql_fetch_fields, MYSQL_FIELD* (MYSQL_RES *res)); MOCK_METHOD3(mysql_real_query, int (MYSQL *mysql, const char *q, unsigned long length)); MOCK_METHOD1(mysql_errno, unsigned int (MYSQL *mysql)); MOCK_METHOD1(mysql_error, const char* (MYSQL *mysql)); MOCK_METHOD1(mysql_store_result, MYSQL_RES* (MYSQL *mysql)); MOCK_METHOD1(mysql_use_result, MYSQL_RES* (MYSQL *mysql)); MOCK_METHOD1(mysql_field_count, unsigned int (MYSQL *mysql)); MOCK_METHOD1(mysql_affected_rows, my_ulonglong (MYSQL *mysql)); MOCK_METHOD1(mysql_insert_id, my_ulonglong (MYSQL *mysql)); MOCK_METHOD4(mysql_real_escape_string, unsigned long (MYSQL *mysql, char *to, const char *from, unsigned long length)); MOCK_METHOD1(mysql_close, void (MYSQL *mysql)); 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)); MOCK_METHOD1(mysql_init, MYSQL* (MYSQL *mysql)); ::testing::Sequence sequence; template T_item& store(T_item&& item) { _items.emplace_back(new T_item(std::forward(item))); return *static_cast(_items.back().get()); } mariadb_mock() { setInstance(this); } ~mariadb_mock() { clearInstance(this); } }; my_ulonglong STDCALL mysql_num_rows (MYSQL_RES *res); unsigned int STDCALL mysql_num_fields (MYSQL_RES *res); MYSQL_ROWS* STDCALL mysql_row_tell (MYSQL_RES *res); void STDCALL mysql_free_result (MYSQL_RES *res); MYSQL_ROW_OFFSET STDCALL mysql_row_seek (MYSQL_RES *res, MYSQL_ROW_OFFSET); void STDCALL mysql_data_seek (MYSQL_RES *res, unsigned long long offset); unsigned long* STDCALL mysql_fetch_lengths (MYSQL_RES *res); MYSQL_ROW STDCALL mysql_fetch_row (MYSQL_RES *res); MYSQL_FIELD* STDCALL mysql_fetch_fields (MYSQL_RES *res); int STDCALL mysql_real_query (MYSQL *mysql, const char *q, unsigned long length); unsigned int STDCALL mysql_errno (MYSQL *mysql); const char* STDCALL mysql_error (MYSQL *mysql); MYSQL_RES* STDCALL mysql_store_result (MYSQL *mysql); MYSQL_RES* STDCALL mysql_use_result (MYSQL *mysql); unsigned int STDCALL mysql_field_count (MYSQL *mysql); my_ulonglong STDCALL mysql_affected_rows (MYSQL *mysql); my_ulonglong STDCALL mysql_insert_id (MYSQL *mysql); unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, unsigned long length); void STDCALL mysql_close (MYSQL *mysql); 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); MYSQL* STDCALL mysql_init (MYSQL *mysql);