Skip to content

Commit

Permalink
Merge pull request #99 from zussel/feature/postgresql
Browse files Browse the repository at this point in the history
Add PostgreSQL backend
  • Loading branch information
zussel committed Jul 13, 2019
2 parents eda7798 + d23c386 commit 0707fc0
Show file tree
Hide file tree
Showing 151 changed files with 5,106 additions and 3,341 deletions.
569 changes: 140 additions & 429 deletions .travis.yml

Large diffs are not rendered by default.

16 changes: 9 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,7 @@ ELSEIF(MSVC)
ENDIF()


MESSAGE(STATUS "Architecture: ${CMAKE_SYSTEM_PROCESSOR}")
MESSAGE(STATUS "Architecture System: ${CMAKE_SYSTEM_NAME}")

MESSAGE(STATUS "Architecture: ${CMAKE_SYSTEM_PROCESSOR} ${CMAKE_SYSTEM_NAME}")

SET(SYSTEM_NAME_LOWER)
STRING(TOLOWER ${CMAKE_SYSTEM_NAME} SYSTEM_NAME_LOWER)
Expand Down Expand Up @@ -112,6 +110,7 @@ SET(BACKENDS
SQLite3
MySQL
ODBC
PostgreSQL
)

FOREACH(backend ${BACKENDS})
Expand All @@ -122,7 +121,6 @@ FOREACH(backend ${BACKENDS})
IF (${PROJECT_NAME_UPPER}_${BACKEND_UPPER})
FIND_PACKAGE(${backend})
IF (${BACKEND_UPPER}_FOUND)
MESSAGE(STATUS "Found backend ${backend}")
ADD_DEFINITIONS(-D${PROJECT_NAME_UPPER}_${BACKEND_UPPER})
IF (${PROJECT_NAME_UPPER}_${BACKEND_UPPER}_TEST)
MESSAGE(STATUS "Enable ${backend} tests")
Expand All @@ -137,16 +135,20 @@ FOREACH(backend ${BACKENDS})
ENDFOREACH(backend)

IF (SQLITE3_FOUND)
MESSAGE(STATUS "Adding SQLite3 include directory")
MESSAGE(STATUS "Adding SQLite3 include directory: ${SQLITE3_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIR})
ELSE ()
MESSAGE(STATUS "Not adding SQLite3 include directory")
ENDIF ()

IF (MYSQL_FOUND)
MESSAGE(STATUS "Adding MySQL include directory: ${MYSQL_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(${MYSQL_INCLUDE_DIR})
ENDIF ()

IF (POSTGRESQL_FOUND)
MESSAGE(STATUS "Adding PostgreSQL include directory: ${POSTGRESQL_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(${POSTGRESQL_INCLUDE_DIR})
ENDIF ()

INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR})

# https://cmake.org/Wiki/CMake_RPATH_handling
Expand Down
23 changes: 13 additions & 10 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ platform:
services:
- mssql2014
- mysql
- postgresql101

image:
- Visual Studio 2015
Expand All @@ -20,11 +21,13 @@ configuration:

environment:
MYSQL_DIR: C:\Program Files\MySql\MySQL Server 5.7
# matrix:
# # - VS_VERSION: Visual Studio 14 2015
# # MYSQL_DIR: C:\Program Files\MySql\MySQL Server 5.7
# - VS_VERSION: Visual Studio 14 2015 Win64
# MYSQL_DIR: C:\Program Files\MySql\MySQL Server 5.7
PGUSER: "postgres"
PGPASSWORD: "Password12!"
MYSQL_PWD: "Password12!"

init:
- SET PATH=C:\Program Files\PostgreSQL\10\bin\;%PATH%
- psql --version

branches:
only:
Expand Down Expand Up @@ -52,17 +55,17 @@ before_build:
echo generator="$env:generator"
$env:SQLITE_ROOT="C:\projects\sqlite\sqlite"
$env:PATH="$env:PATH;$env:SQLITE_ROOT\bin;$env:MYSQL_DIR\bin;$env:MYSQL_DIR\lib"
$env:MYSQL_PWD="Password12!"
$env:USER="root"
mysql -e "create database matador_test;" --user=root
sqlcmd -S localhost,1433 -U sa -P Password12! -Q "CREATE DATABASE matador_test"
psql -c "CREATE DATABASE matador_test;" -U postgres
psql -c "CREATE USER test WITH PASSWORD 'test123';" -U postgres
cmake -G "$env:generator" -DCMAKE_INSTALL_PREFIX="C:\projects\sqlite\sqlite" ..
cmake --build . --config Release --target install
cd "$env:APPVEYOR_BUILD_FOLDER"
mkdir build
cd build
cmake -G "$env:generator" -DMATADOR_ODBC=true -DMSSQL_CONNECTION_STRING:STRING="mssql://sa:Password12!@(local)\\SQL2014/matador_test" -DMATADOR_SQLITE3=true -DMATADOR_MYSQL=true -DMYSQL_CONNECTION_STRING:STRING="mysql://root:Password12!@localhost/matador_test" ..
# cmake -G "$env:generator" -DMATADOR_ODBC=true -DMSSQL_CONNECTION_STRING:STRING="mssql://sa:Password12!@(local)\\SQL2014/matador_test" -DMATADOR_SQLITE3=true -DMATADOR_MYSQL=false ..
cmake -G "$env:generator" -DMATADOR_ODBC=true -DMSSQL_CONNECTION_STRING:STRING="mssql://sa:Password12!@(local)\\SQL2014/matador_test" -DMATADOR_SQLITE3=true -DMATADOR_MYSQL=true -DMYSQL_CONNECTION_STRING:STRING="mysql://root:Password12!@localhost/matador_test" -DPOSTGRESQL_CONNECTION_STRING:STRING="postgresql://test:test123@127.0.0.1/matador_test" ..
build_script:
- cmake --build . --config %configuration%
Expand All @@ -80,13 +83,13 @@ after_build:
artifacts:
- path: Package/matador*.exe
name: installer
- path: Package/calc*.zip
- path: Package/matador*.zip
name: zipper

deploy:
provider: GitHub
auth_token:
secure: "kz/25t/c0oeOJ3Ux3r+Sy5F4G7YgPmjSrTpgZ73IQDY4N9mYNqH4kAv4+0I0oeh6"
secure: ubPcMpzrx0ulil7eJMpQbO94ufnvHXeeHoXpxr8RAMQXRMShsvlPj4ZE94cZ4T7j
artifact: installer,zipper
draft: false
prerelease: false
Expand Down
42 changes: 42 additions & 0 deletions cmake/FindMatadorBackendPostgreSQL.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Find MATADOR Backend PostgreSQL
# Find the MATADOR postgresql backend library
# This module defines
# MATADOR_BACKEND_POSTGRESQL_LIBRARY, the library needed to use MATADOR with postgresql.
# MATADOR_BACKEND_POSTGRESQL_FOUND, If false, do not try to use MATADOR.

if(MATADOR_BACKEND_POSTGRESQL_LIBRARY)
set(MATADOR_BACKEND_POSTGRESQL_FOUND TRUE)
else()

if(WIN32)
find_library(MATADOR_BACKEND_POSTGRESQL_LIBRARY matador-postgresql
PATHS
$ENV{ProgramFiles}/matador/*/lib/
${PROGRAMFILES}/matador/lib/
$ENV{SystemDrive}/matador/*/lib/
)
else()
find_library(MATADOR_BACKEND_POSTGRESQL_LIBRARY matador-postgresql
PATHS
/usr/lib
/usr/lib/matador
/usr/local/lib
/usr/local/lib/matador
/opt/matador/lib
)
endif()

if(MATADOR_BACKEND_POSTGRESQL_LIBRARY)
set(MATADOR_BACKEND_POSTGRESQL_FOUND TRUE)
else()
set(MATADOR_BACKEND_POSTGRESQL_FOUND FALSE)
if (MATADOR_FIND_REQUIRED)
message(FATAL_ERROR "MATADOR PostgreSQL backend not found.")
else ()
message(STATUS "MATADOR PostgreSQL backend not found.")
endif ()
endif()

mark_as_advanced(MATADOR_BACKEND_POSTGRESQL_LIBRARY)

endif()
76 changes: 76 additions & 0 deletions cmake/FindPostgreSQL.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# - Find PostgreSQL
# Find the PostgreSQL includes and client library
# This module defines
# POSTGRESQL_INCLUDE_DIR, where to find POSTGRESQL.h
# POSTGRESQL_LIBRARIES, the libraries needed to use POSTGRESQL.
# POSTGRESQL_FOUND, If false, do not try to use PostgreSQL.

# Copyright (c) 2006, Jaroslaw Staniek, <js@iidea.pl>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.


if(POSTGRESQL_INCLUDE_DIR AND POSTGRESQL_LIBRARIES)
set(POSTGRESQL_FOUND TRUE)

else(POSTGRESQL_INCLUDE_DIR AND POSTGRESQL_LIBRARIES)

find_program(POSTGRESQL_PG_CONFIG NAMES pg_config
PATHS
/usr/lib/postgresql/*/bin/
)
message(STATUS "POSTGRESQL_PG_CONFIG is " ${POSTGRESQL_PG_CONFIG})

if(POSTGRESQL_PG_CONFIG)
execute_process(
COMMAND ${POSTGRESQL_PG_CONFIG} --includedir
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE T_POSTGRESQL_INCLUDE_DIR)
endif(POSTGRESQL_PG_CONFIG)

find_path(POSTGRESQL_INCLUDE_DIR libpq-fe.h
${T_POSTGRESQL_INCLUDE_DIR}
/usr/pgsql-*/include
/usr/include
/usr/include/pgsql
/usr/local/include/pgsql
/usr/include/postgresql
/usr/include/postgresql/*
/usr/local/include/postgresql
/usr/local/include/postgresql/*
$ENV{ProgramFiles}/PostgreSQL/*/include
$ENV{SystemDrive}/PostgreSQL/*/include
)

if(POSTGRESQL_PG_CONFIG)
execute_process(
COMMAND ${POSTGRESQL_PG_CONFIG} --libdir
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE T_POSTGRESQL_LIB_DIR)
endif(POSTGRESQL_PG_CONFIG)

find_library(POSTGRESQL_LIBRARIES NAMES pq libpq
${T_POSTGRESQL_LIB_DIR}
PATHS
/usr/pgsql-*/lib
/usr/lib
/usr/local/lib
/usr/lib/postgresql
$ENV{ProgramFiles}/PostgreSQL/*/lib
$ENV{SystemDrive}/PostgreSQL/*/lib
)

if(POSTGRESQL_INCLUDE_DIR AND POSTGRESQL_LIBRARIES)
set(POSTGRESQL_FOUND TRUE)
message(STATUS "POSTGRESQL_INCLUDE_DIR: ${POSTGRESQL_INCLUDE_DIR}")
message(STATUS "POSTGRESQL_LIBRARIES: ${POSTGRESQL_LIBRARIES}")
include_directories(${POSTGRESQL_INCLUDE_DIR})
else(POSTGRESQL_INCLUDE_DIR AND POSTGRESQL_LIBRARIES)
set(POSTGRESQL_FOUND FALSE)
message(STATUS "PostgreSQL not found.")
endif(POSTGRESQL_INCLUDE_DIR AND POSTGRESQL_LIBRARIES)

mark_as_advanced(POSTGRESQL_INCLUDE_DIR POSTGRESQL_LIBRARIES)

endif(POSTGRESQL_INCLUDE_DIR AND POSTGRESQL_LIBRARIES)
64 changes: 32 additions & 32 deletions cmake/FindSQLite3.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,46 +6,46 @@

set(PROGRAMFILES $ENV{ProgramFiles})
if (DEFINED ENV{ProgramW6432})
set(PROGRAMFILES $ENV{ProgramW6432})
set(PROGRAMFILES $ENV{ProgramW6432})
endif()

IF (WIN32)
FIND_PATH( SQLITE3_INCLUDE_DIR sqlite3.h
$ENV{PROGRAMFILES}/SQLite/include/
${PROGRAMFILES}/SQLite/include/
DOC "The directory where sqlite3.h resides"
)
FIND_PATH( SQLITE3_INCLUDE_DIR sqlite3.h
$ENV{PROGRAMFILES}/SQLite/include/
${PROGRAMFILES}/SQLite/include/
DOC "The directory where sqlite3.h resides"
)

FIND_LIBRARY( SQLITE3_LIBRARY
NAMES sqlite3
PATHS
$ENV{PROGRAMFILES}/SQLite/lib/
${PROGRAMFILES}/SQLite/lib/
DOC "The SQLite3 library"
)
FIND_LIBRARY( SQLITE3_LIBRARY
NAMES sqlite3
PATHS
$ENV{PROGRAMFILES}/SQLite/lib/
${PROGRAMFILES}/SQLite/lib/
DOC "The SQLite3 library"
)
ELSE (WIN32)
FIND_PATH( SQLITE3_INCLUDE_DIR sqlite3.h
/usr/include
/usr/local/include
/sw/include
/opt/local/include
DOC "The directory where sqlite3.h resides")
FIND_LIBRARY( SQLITE3_LIBRARY
NAMES sqlite3
PATHS
/usr/lib64
/usr/lib
/usr/local/lib64
/usr/local/lib
/sw/lib
/opt/local/lib
DOC "The SQLite3 library")
FIND_PATH( SQLITE3_INCLUDE_DIR sqlite3.h
/usr/include
/usr/local/include
/sw/include
/opt/local/include
DOC "The directory where sqlite3.h resides")
FIND_LIBRARY( SQLITE3_LIBRARY
NAMES sqlite3
PATHS
/usr/lib64
/usr/lib
/usr/local/lib64
/usr/local/lib
/sw/lib
/opt/local/lib
DOC "The SQLite3 library")
ENDIF (WIN32)

IF (SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY)
SET( SQLITE3_FOUND TRUE CACHE STRING "Set to TRUE if SQLite3 is found, FALSE otherwise")
SET( SQLITE3_FOUND TRUE CACHE STRING "Set to TRUE if SQLite3 is found, FALSE otherwise")
ELSE (SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY)
SET( SQLITE3_FOUND FALSE CACHE STRING "Set to TRUE if SQLite3 is found, FALSE otherwise")
SET( SQLITE3_FOUND FALSE CACHE STRING "Set to TRUE if SQLite3 is found, FALSE otherwise")
ENDIF (SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY)

MARK_AS_ADVANCED( SQLITE3_FOUND )
MARK_AS_ADVANCED( SQLITE3_FOUND )
4 changes: 2 additions & 2 deletions include/matador/db/mssql/mssql_statement.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,8 @@ class mssql_statement : public detail::statement_impl

bool bind_null_ = false;

SQLHANDLE stmt_;
SQLHANDLE db_;
SQLHANDLE stmt_ = nullptr;
SQLHANDLE db_ = nullptr;
};

}
Expand Down
8 changes: 6 additions & 2 deletions include/matador/db/mysql/mysql_connection.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ namespace matador {
namespace mysql {

class mysql_statement;
class mysql_result;

/**
* @class mysql_database
Expand Down Expand Up @@ -81,7 +82,7 @@ class OOS_MYSQL_API mysql_connection : public connection_impl
void close() override;

detail::result_impl* execute(const matador::sql &stmt) override;
detail::result_impl* execute(const std::string &stmt) override;
detail::result_impl* execute(const std::string &sql) override;
detail::statement_impl* prepare(const matador::sql &stmt) override;

void begin() override;
Expand All @@ -97,7 +98,10 @@ class OOS_MYSQL_API mysql_connection : public connection_impl
basic_dialect* dialect() override;

private:
MYSQL mysql_;
mysql_result* execute_internal(const std::string &stmt);

private:
MYSQL mysql_ = MYSQL();
std::string db_;
bool is_open_;
mysql_dialect dialect_;
Expand Down
16 changes: 4 additions & 12 deletions include/matador/db/mysql/mysql_result.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,19 +83,11 @@ class mysql_result : public detail::result_impl
bool finalize_fetch() override;

private:
// struct result_deleter
// {
// void operator()(MYSQL_RES *res) const {
// if (res) {
// mysql_free_result(res);
// }
// }
// };
size_type affected_rows_;
size_type rows_;
size_type fields_;
size_type affected_rows_ = 0;
size_type rows_ = 0;
size_type fields_ = 0;
MYSQL_ROW row_;
MYSQL_RES *res_;
MYSQL_RES *res_ = nullptr;
};

}
Expand Down
2 changes: 1 addition & 1 deletion include/matador/db/mysql/mysql_statement.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

#include "matador/sql/statement_impl.hpp"

#include "matador/utils/identifier.hpp"
#include "matador/utils/varchar.hpp"

#include "matador/db/mysql/mysql_result_info.hpp"
Expand All @@ -41,6 +40,7 @@ namespace matador {
class varchar_base;
class time;
class date;
class basic_identifier;

namespace mysql {

Expand Down
Loading

0 comments on commit 0707fc0

Please sign in to comment.