Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Make ZM able to use Postgresql #3644

Open
wants to merge 48 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
6d8c4f6
initial funcitonality
parvit Aug 28, 2022
6003053
better interface for zmDbQuery
parvit Aug 28, 2022
8840b60
zmQuery impl
parvit Aug 29, 2022
af5611b
improvements for insert and update binding, db queue
parvit Sep 3, 2022
05767ea
support bulk vector binding, queries in zm_event.cpp
parvit Sep 8, 2022
7299947
zm_logger.cpp queries
parvit Sep 9, 2022
867925f
zm_eventstream.cpp queries, support for failed execution termination,…
parvit Sep 10, 2022
504f535
zm_group.cpp
parvit Sep 11, 2022
27ba2f2
added monitors queries
parvit Sep 24, 2022
5b9a6d4
zm_monitor queries
parvit Sep 24, 2022
e9b30f7
zm_monitor group load
parvit Sep 25, 2022
fc2e487
zm_user queries
parvit Sep 25, 2022
0fdc01e
zm_storage,zm_zone queries
parvit Sep 25, 2022
e79da38
ported applications, fixed linking issues
parvit Sep 25, 2022
485df11
fixed query bind
parvit Oct 2, 2022
3b65ebc
working data extract, first element issue
parvit Oct 5, 2022
ae9d9c0
fixed missing first result
parvit Oct 5, 2022
55c5031
fixed select and insert queries execution, removed zmDbQueue for inco…
parvit Oct 9, 2022
abca42d
implemented deferred function on query, mysql specific option set
parvit Oct 9, 2022
7b79aa1
fixed stackoverflow on log, fix enum decoding in monitor, removed soc…
parvit Oct 19, 2022
fe1e670
locking and reconnect db, fix fields types, implicit insert/update reset
parvit Oct 23, 2022
53b2103
cmake and configuration support for independent database backends com…
parvit Oct 26, 2022
78aab03
Integration with PostgresSQL soci backend, modular support in cmake
parvit Oct 29, 2022
3f2b3f6
fixed syntax of queries for postgresql, fix empty results query crash
parvit Oct 30, 2022
95562d9
corrected details of postgres integration
parvit Nov 6, 2022
8890007
fixed unsigned int cast issue
parvit Dec 9, 2022
d7fb46b
pulled master
parvit Dec 10, 2022
0dc5c04
Merge branch 'master' into issue-355
parvit Dec 10, 2022
466041a
local repo test build
parvit Dec 10, 2022
23c1d88
fix ci and soci retrocompatibility issues
parvit Dec 25, 2022
044a823
support soci build
parvit Jan 3, 2023
184fc10
ci compilation on freebsd
parvit Jan 3, 2023
031af0e
ci compilation on freebsd
parvit Jan 3, 2023
b0afe80
ci compilation on freebsd
parvit Jan 3, 2023
efb6b06
ci compilation on freebsd with werror
parvit Jan 3, 2023
b9c3e29
test freebsd image update (dependency issues on 13-0)
parvit Jan 3, 2023
ce14890
updated freebsd image from 13.0 to 13.1
parvit Jan 3, 2023
1aa4d20
Merge branch 'master' into issue-355
parvit Jan 4, 2023
64aa9b8
CI Fedora 36
parvit Jan 7, 2023
c82813a
Merge branch 'master' into issue-355
parvit Jan 7, 2023
dd57bd2
typo package name
parvit Jan 8, 2023
257a80f
Merge branch 'issue-355' of https://github.com/parvit/zoneminder into…
parvit Jan 8, 2023
788138e
missed yum command for soci libs
parvit Jan 8, 2023
c1ee149
catch depenendecy
parvit Jan 8, 2023
3c9191e
disable deprecation warnings because of incompatible packages
parvit Jan 8, 2023
dfa17d5
soci support in codeql workflow
parvit Jan 8, 2023
5d3c20d
fix codeql workflow
parvit Jan 8, 2023
aedcbc1
Sync with master
parvit Jun 28, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Integration with PostgresSQL soci backend, modular support in cmake
  • Loading branch information
parvit committed Oct 29, 2022
commit 78aab03efeda2137b5605de5eb43adc2441b166b
60 changes: 40 additions & 20 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -341,8 +341,47 @@ if(NOT ZM_NO_CURL)
endif()
endif()

set(LIBSOCI_COMPONENTS "")

# mysqlclient (using find_library and find_path)
find_library(MYSQLCLIENT_LIBRARIES mysqlclient PATH_SUFFIXES mysql)
if(MYSQLCLIENT_LIBRARIES)
set(HAVE_LIBMYSQLCLIENT 1)
list(APPEND ZM_BIN_LIBS "${MYSQLCLIENT_LIBRARIES}")
find_path(MYSQLCLIENT_INCLUDE_DIR mysql.h PATH_SUFFIXES mysql)
if(MYSQLCLIENT_INCLUDE_DIR)
include_directories("${MYSQLCLIENT_INCLUDE_DIR}")
set(CMAKE_REQUIRED_INCLUDES "${MYSQLCLIENT_INCLUDE_DIR}")
endif()
mark_as_advanced(FORCE MYSQLCLIENT_LIBRARIES MYSQLCLIENT_INCLUDE_DIR)
check_include_file("mysql.h" HAVE_MYSQL_H)
if(NOT HAVE_MYSQL_H)
message(FATAL_ERROR "MySQL client libraries found but no headers - check that MySQL development packages are installed")
endif()
list(APPEND LIBSOCI_COMPONENTS mysql)
endif()

find_package(PostgreSQL)
if(PostgreSQL_FOUND)
set(HAVE_LIBPOSTGRESQL_CLIENT 1)
list(APPEND ZM_BIN_LIBS "${PostgreSQL_LIBRARIES}")
find_path(PostgreSQL_INCLUDE_DIRS libpq-fe.h)
if(PostgreSQL_INCLUDE_DIRS)
include_directories("${PostgreSQL_INCLUDE_DIRS}")
set(CMAKE_REQUIRED_INCLUDES "${PostgreSQL_INCLUDE_DIRS}")
endif()
mark_as_advanced(FORCE PostgreSQL_LIBRARIES PostgreSQL_INCLUDE_DIRS)
check_include_file("libpq-fe.h" HAVE_POSTGRESQL_H)
if(NOT HAVE_POSTGRESQL_H)
message(FATAL_ERROR "Postegresql client libraries found but no headers - check that Postegresql development packages are installed")
endif()
list(APPEND LIBSOCI_COMPONENTS postgresql)
endif()

message(STATUS "Database components available: ${LIBSOCI_COMPONENTS}")

# Soci
find_package(Soci COMPONENTS mysql postgresql)
find_package(Soci COMPONENTS ${LIBSOCI_COMPONENTS})
if(SOCI_FOUND)
set(HAVE_LIBSOCI 1)
list(APPEND ZM_BIN_LIBS "${SOCI_LIBRARY}")
@@ -461,25 +500,6 @@ if(NOT ZM_NO_PRCE)
endif()
endif()

# mysqlclient (using find_library and find_path)
find_library(MYSQLCLIENT_LIBRARIES mysqlclient PATH_SUFFIXES mysql)
if(MYSQLCLIENT_LIBRARIES)
set(HAVE_LIBMYSQLCLIENT 1)
list(APPEND ZM_BIN_LIBS "${MYSQLCLIENT_LIBRARIES}")
find_path(MYSQLCLIENT_INCLUDE_DIR mysql.h PATH_SUFFIXES mysql)
if(MYSQLCLIENT_INCLUDE_DIR)
include_directories("${MYSQLCLIENT_INCLUDE_DIR}")
set(CMAKE_REQUIRED_INCLUDES "${MYSQLCLIENT_INCLUDE_DIR}")
endif()
mark_as_advanced(FORCE MYSQLCLIENT_LIBRARIES MYSQLCLIENT_INCLUDE_DIR)
check_include_file("mysql.h" HAVE_MYSQL_H)
if(NOT HAVE_MYSQL_H)
message(FATAL_ERROR "ZoneMinder requires MySQL headers - check that MySQL development packages are installed")
endif()
else()
message(FATAL_ERROR "ZoneMinder requires mysqlclient but it was not found on your system")
endif()

find_package(FFMPEG 55.34.100 REQUIRED
COMPONENTS
avcodec
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -16,6 +16,7 @@ set(ZM_BIN_SRC_FILES
zm.cpp
zm_db.cpp
zm_db_mysql.cpp
zm_db_postgresql.cpp
zm_decoder_thread.cpp
zm_logger.cpp
zm_event.cpp
3 changes: 2 additions & 1 deletion src/zm_db.cpp
Original file line number Diff line number Diff line change
@@ -18,6 +18,7 @@
//
#include "zm_db.h"
#include "zm_db_mysql.h"
#include "zm_db_postgresql.h"

#include "zm_logger.h"
#include "zm_signal.h"
@@ -48,7 +49,7 @@ bool zmDbConnect()

#ifdef HAVE_LIBSOCI_POSTGRESQL
if( dbType.compare("postgresql") == 0 )
database = new zmDbMySQLAdapter();
database = new zmDbPostgresqlAdapter();
#endif

if( database == nullptr ) {
16 changes: 8 additions & 8 deletions src/zm_db_mysql.cpp
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@
#ifdef HAVE_LIBSOCI_MYSQL
#include "zm_db_mysql.h"

std::string load_monitor_sql =
std::string load_monitor_mysql =
"SELECT `Id`, `Name`, `ServerId`, `StorageId`, `Type`, `Capturing`, `Analysing`, `AnalysisSource`, `AnalysisImage`,"
"`Recording`, `RecordingSource`, `Decoding`, "
"`JanusEnabled`, `JanusAudioEnabled`, `Janus_Profile_Override`, `Janus_Use_RTSP_Restream`,"
@@ -207,11 +207,11 @@ void zmDbMySQLAdapter::prepareSelectMonitorStatements()
std::string cond_path = "`Path` = :path";
std::string cond_rtsp = "`Function` != 'None' AND `RTSPerver` != false";

std::string base_query = load_monitor_sql + cond_type + op_and;
std::string base_query = load_monitor_mysql + cond_type + op_and;

mapStatements[SELECT_MONITOR_WITH_ID]->prepare(load_monitor_sql + cond_id);
mapStatements[SELECT_MONITOR_WITH_ID]->prepare(load_monitor_mysql + cond_id);

mapStatements[SELECT_MONITOR_TYPE]->prepare(load_monitor_sql + cond_type);
mapStatements[SELECT_MONITOR_TYPE]->prepare(load_monitor_mysql + cond_type);

mapStatements[SELECT_MONITOR_TYPE_AND_DEVICE]->prepare(base_query + cond_device);

@@ -227,13 +227,13 @@ void zmDbMySQLAdapter::prepareSelectMonitorStatements()

mapStatements[SELECT_MONITOR_TYPE_AND_PATH_AND_SERVER]->prepare(base_query + cond_path + op_and + cond_server_id);

mapStatements[SELECT_MONITOR_TYPE_RTSP]->prepare(load_monitor_sql + cond_rtsp);
mapStatements[SELECT_MONITOR_TYPE_RTSP]->prepare(load_monitor_mysql + cond_rtsp);

mapStatements[SELECT_MONITOR_TYPE_RTSP_AND_SERVER]->prepare(load_monitor_sql + cond_rtsp + op_and + cond_server_id);
mapStatements[SELECT_MONITOR_TYPE_RTSP_AND_SERVER]->prepare(load_monitor_mysql + cond_rtsp + op_and + cond_server_id);

mapStatements[SELECT_MONITOR_TYPE_RTSP_AND_ID]->prepare(load_monitor_sql + cond_rtsp + op_and + cond_id);
mapStatements[SELECT_MONITOR_TYPE_RTSP_AND_ID]->prepare(load_monitor_mysql + cond_rtsp + op_and + cond_id);

mapStatements[SELECT_MONITOR_TYPE_RTSP_AND_SERVER_AND_ID]->prepare(load_monitor_sql + cond_rtsp + op_and + cond_server_id + op_and + cond_id);
mapStatements[SELECT_MONITOR_TYPE_RTSP_AND_SERVER_AND_ID]->prepare(load_monitor_mysql + cond_rtsp + op_and + cond_server_id + op_and + cond_id);

}

Loading