Skip to content

Commit

Permalink
add win32 mysql cmake and mariadb
Browse files Browse the repository at this point in the history
  • Loading branch information
Jacyking committed Aug 23, 2023
1 parent 90fef44 commit 4d3b80f
Show file tree
Hide file tree
Showing 9 changed files with 127 additions and 30 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ include(cmake/dependency.cmake)

if (ENABLE_MYSQL)
include_directories(${MYSQL_INCLUDE_DIR} include)
elseif(ENABLE_MARIADB)
include_directories(${MARIADB_INCLUDE_DIR} include)
else()
include_directories(include)
endif()
Expand Down
11 changes: 9 additions & 2 deletions cmake/develop.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,19 @@ if (ENABLE_MYSQL)
add_definitions(-DORMPP_ENABLE_MYSQL)
endif()

option(ENABLE_MARIADB "Enable mariadb" OFF)
if (ENABLE_MARIADB)
include(cmake/mariadb.cmake)
message(STATUS "ENABLE_MARIADB")
add_definitions(-DORMPP_ENABLE_MYSQL)
endif()

option(ENABLE_PG "Enable pg" OFF)
if (ENABLE_PG)
message(STATUS "ENABLE_PG")
add_definitions(-DORMPP_ENABLE_PG)
endif()

if (NOT ENABLE_SQLITE3 AND NOT ENABLE_MYSQL AND NOT ENABLE_PG)
message(FATAL_ERROR "please enable a option")
if (NOT ENABLE_SQLITE3 AND NOT ENABLE_MYSQL AND NOT ENABLE_MARIADB AND NOT ENABLE_PG)
message(FATAL_ERROR "please enable a option, ENABLE_SQLITE3 or ENABLE_MYSQL or ENABLE_MARIADB or ENABLE_PG")
endif()
63 changes: 63 additions & 0 deletions cmake/mariadb.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# - Find mariadb
# Find the native MariaDB includes and library
#
# MARIADB_INCLUDE_DIR - where to find mysql.h, etc.
# MARIADB_LIBRARIES - List of libraries when using MariaDB.
# MARIADB_FOUND - True if MariaDB found.

IF (MARIADB_INCLUDE_DIR)
# Already in cache, be silent
SET(MARIADB_FIND_QUIETLY TRUE)
ENDIF (MARIADB_INCLUDE_DIR)

IF (UNIX)
FIND_PATH(MARIADB_INCLUDE_DIR mysql.h
/usr/local/include/mariadb
/usr/include/mariadb
)
ELSEIF (WIN32)
FIND_PATH(MARIADB_INCLUDE_DIR mysql.h
$ENV{PROGRAMFILES}/MariaDB*/include
$ENV{SYSTEMDRIVE}/MariaDB*/include
)
ENDIF()

SET(MARIADB_NAMES mariadb)
IF (UNIX)
FIND_LIBRARY(MARIADB_LIBRARY
NAMES ${MARIADB_NAMES}
PATHS /usr/lib /usr/local/lib
PATH_SUFFIXES mariadb
)
ELSEIF (WIN32)
FIND_LIBRARY(MARIADB_LIBRARY
NAMES ${MARIADB_NAMES}
PATHS $ENV{PROGRAMFILES}/MariaDB*/lib
$ENV{SYSTEMDRIVE}/MariaDB*/lib
PATH_SUFFIXES mariadb
)
ENDIF()

IF (MARIADB_INCLUDE_DIR AND MARIADB_LIBRARY)
SET(MARIADB_FOUND TRUE)
SET( MARIADB_LIBRARY ${MARIADB_LIBRARY} )
ELSE (MARIADB_INCLUDE_DIR AND MARIADB_LIBRARY)
SET(MARIADB_FOUND FALSE)
SET( MARIADB_LIBRARY )
ENDIF (MARIADB_INCLUDE_DIR AND MARIADB_LIBRARY)

IF (MARIADB_FOUND)
#IF (NOT MARIADB_FIND_QUIETLY)
MESSAGE(STATUS "Found MariaDB: ${MARIADB_LIBRARY}")
#ENDIF (NOT MARIADB_FIND_QUIETLY)
ELSE (MARIADB_FOUND)
IF (MARIADB_FIND_REQUIRED)
MESSAGE(STATUS "Looked for MariaDB libraries named ${MARIADB_NAMES}.")
MESSAGE(FATAL_ERROR "Could NOT find MariaDB library")
ENDIF (MARIADB_FIND_REQUIRED)
ENDIF (MARIADB_FOUND)

MARK_AS_ADVANCED(
MARIADB_LIBRARY
MARIADB_INCLUDE_DIR
)
34 changes: 25 additions & 9 deletions cmake/mysql.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,33 @@ IF (MYSQL_INCLUDE_DIR)
SET(MYSQL_FIND_QUIETLY TRUE)
ENDIF (MYSQL_INCLUDE_DIR)

FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
/usr/local/include/mysql
/usr/include/mysql
)
IF (UNIX)
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
/usr/local/include/mysql
/usr/include/mysql
)
ELSEIF (WIN32)
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
$ENV{PROGRAMFILES}/MySQL/*/include
$ENV{SYSTEMDRIVE}/MySQL/*/include
)
ENDIF()

SET(MYSQL_NAMES mysqlclient mysqlclient_r)
FIND_LIBRARY(MYSQL_LIBRARY
NAMES ${MYSQL_NAMES}
PATHS /usr/lib /usr/local/lib
PATH_SUFFIXES mysql
)
IF (UNIX)
FIND_LIBRARY(MYSQL_LIBRARY
NAMES ${MYSQL_NAMES}
PATHS /usr/lib /usr/local/lib
PATH_SUFFIXES mysql
)
ELSEIF (WIN32)
FIND_LIBRARY(MYSQL_LIBRARY
NAMES ${MYSQL_NAMES}
PATHS $ENV{PROGRAMFILES}/MySQL/*/lib
$ENV{SYSTEMDRIVE}/MySQL/*/lib
PATH_SUFFIXES mysql
)
ENDIF()

IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
SET(MYSQL_FOUND TRUE)
Expand Down
4 changes: 4 additions & 0 deletions example/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ if (ENABLE_MYSQL)
endif()
endif()

if (ENABLE_MARIADB)
target_link_libraries(${PROJECT_NAME} ${MARIADB_LIBRARY})
endif()

if (ENABLE_SQLITE3)
target_link_libraries(${PROJECT_NAME} sqlite3)
endif()
Expand Down
17 changes: 9 additions & 8 deletions include/mysql.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class mysql {
reset_error();
std::string sql = generate_createtb_sql<T>(std::forward<Args>(args)...);
sql += " DEFAULT CHARSET=utf8";
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
if (mysql_query(con_, sql.data())) {
Expand Down Expand Up @@ -136,7 +136,7 @@ class mysql {
bool delete_records(Args &&...where_conditon) {
reset_error();
auto sql = generate_delete_sql<T>(std::forward<Args>(where_conditon)...);
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
if (mysql_query(con_, sql.data())) {
Expand All @@ -158,7 +158,7 @@ class mysql {
constexpr auto SIZE = std::tuple_size_v<T>;

std::string sql = s;
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
constexpr auto Args_Size = sizeof...(Args);
Expand Down Expand Up @@ -417,7 +417,7 @@ class mysql {
Args &&...args) {
reset_error();
std::string sql = generate_query_sql<T>(args...);
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
constexpr auto SIZE = iguana::get_value<T>();
Expand Down Expand Up @@ -743,7 +743,7 @@ class mysql {
template <typename T, typename... Args>
int insert_impl(const std::string &sql, const T &t,
bool get_insert_id = false, Args &&...args) {
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
stmt_ = mysql_stmt_init(con_);
Expand All @@ -759,13 +759,13 @@ class mysql {
if (stmt_execute(t) < 0)
return INT_MIN;

return get_insert_id ? stmt_->insert_id : 1;
return get_insert_id ? stmt_->mysql->insert_id : 1;
}

template <typename T, typename... Args>
int insert_impl(const std::string &sql, const std::vector<T> &t,
bool get_insert_id = false, Args &&...args) {
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
stmt_ = mysql_stmt_init(con_);
Expand All @@ -792,7 +792,8 @@ class mysql {
}
b = commit();

return b ? (get_insert_id ? stmt_->insert_id : (int)t.size()) : INT_MIN;
return b ? (get_insert_id ? stmt_->mysql->insert_id : (int)t.size())
: INT_MIN;
}

template <typename... Args>
Expand Down
10 changes: 5 additions & 5 deletions include/postgresql.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class postgresql {
// PQclear(res_);

std::string sql = generate_createtb_sql<T>(std::forward<Args>(args)...);
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
res_ = PQexec(con_, sql.data());
Expand Down Expand Up @@ -176,7 +176,7 @@ class postgresql {
constexpr std::enable_if_t<iguana::is_reflection_v<T>, std::vector<T>> query(
Args &&...args) {
std::string sql = generate_query_sql<T>(std::forward<Args>(args)...);
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
constexpr auto SIZE = iguana::get_value<T>();
Expand Down Expand Up @@ -213,7 +213,7 @@ class postgresql {
constexpr auto SIZE = std::tuple_size_v<T>;

std::string sql = s;
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
constexpr auto Args_Size = sizeof...(Args);
Expand Down Expand Up @@ -265,7 +265,7 @@ class postgresql {
template <typename T, typename... Args>
constexpr bool delete_records(Args &&...where_conditon) {
auto sql = generate_delete_sql<T>(std::forward<Args>(where_conditon)...);
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
res_ = PQexec(con_, sql.data());
Expand Down Expand Up @@ -515,7 +515,7 @@ class postgresql {
template <typename T, typename... Args>
constexpr int insert_impl(const std::string &sql, const T &t,
Args &&...args) {
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
std::vector<std::vector<char>> param_values;
Expand Down
12 changes: 6 additions & 6 deletions include/sqlite.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class sqlite {
// }

std::string sql = generate_createtb_sql<T>(std::forward<Args>(args)...);
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
if (sqlite3_exec(handle_, sql.data(), nullptr, nullptr, nullptr) !=
Expand Down Expand Up @@ -108,7 +108,7 @@ class sqlite {
template <typename T, typename... Args>
bool delete_records(Args &&...where_conditon) {
auto sql = generate_delete_sql<T>(std::forward<Args>(where_conditon)...);
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
if (sqlite3_exec(handle_, sql.data(), nullptr, nullptr, nullptr) !=
Expand All @@ -126,7 +126,7 @@ class sqlite {
std::enable_if_t<iguana::is_reflection_v<T>, std::vector<T>> query(
Args &&...args) {
std::string sql = generate_query_sql<T>(args...);
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
int result = sqlite3_prepare_v2(handle_, sql.data(), (int)sql.size(),
Expand Down Expand Up @@ -165,7 +165,7 @@ class sqlite {
constexpr auto SIZE = std::tuple_size_v<T>;

std::string sql = s;
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
constexpr auto Args_Size = sizeof...(Args);
Expand Down Expand Up @@ -440,7 +440,7 @@ class sqlite {
template <typename T, typename... Args>
int insert_impl(bool is_update, const std::string &sql, const T &t,
bool get_insert_id = false, Args &&...args) {
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
int result = sqlite3_prepare_v2(handle_, sql.data(), (int)sql.size(),
Expand Down Expand Up @@ -489,7 +489,7 @@ class sqlite {
int insert_impl(bool is_update, const std::string &sql,
const std::vector<T> &v, bool get_insert_id = false,
Args &&...args) {
#if ORMPP_ENABLE_LOG
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
int result = sqlite3_prepare_v2(handle_, sql.data(), (int)sql.size(),
Expand Down
4 changes: 4 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ if (ENABLE_MYSQL)
endif()
endif()

if (ENABLE_MARIADB)
target_link_libraries(${PROJECT_NAME} ${MARIADB_LIBRARY})
endif()

if (ENABLE_SQLITE3)
target_link_libraries(${PROJECT_NAME} sqlite3 doctest)
endif()
Expand Down

0 comments on commit 4d3b80f

Please sign in to comment.