From a38031e1820e2c01544073382ebae5245c96fae8 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Wed, 21 Feb 2018 13:47:19 +0100 Subject: [PATCH] fix(MainDb): conference_event_view is compatible with mysql --- include/linphone/utils/enum-mask.h | 8 ++--- src/db/internal/statements.cpp | 52 +++++++++++++++++++++-------- tester/db/linphone.db | Bin 4382720 -> 4382720 bytes 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/include/linphone/utils/enum-mask.h b/include/linphone/utils/enum-mask.h index a385401f3..53eac2c5f 100644 --- a/include/linphone/utils/enum-mask.h +++ b/include/linphone/utils/enum-mask.h @@ -138,10 +138,10 @@ private: return (mMask & value) == value && (value || mMask == 0); } -// On CentOs 7 GCC 4.8.5 have issue with array-bounds +// On CentOs 7 GCC 4.8.5 have issue with array-bounds. #if __GNUC__ == 4 && __GNUC_MINOR__ == 8 && __GNUC_PATCHLEVEL__ == 5 -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Warray-bounds" + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Warray-bounds" #endif static constexpr StorageType init ( @@ -152,7 +152,7 @@ private: } #if __GNUC__ == 4 && __GNUC_MINOR__ == 8 && __GNUC_PATCHLEVEL__ == 5 -#pragma GCC diagnostic pop + #pragma GCC diagnostic pop #endif StorageType mMask; diff --git a/src/db/internal/statements.cpp b/src/db/internal/statements.cpp index 900c6a927..866159d0c 100644 --- a/src/db/internal/statements.cpp +++ b/src/db/internal/statements.cpp @@ -24,22 +24,48 @@ LINPHONE_BEGIN_NAMESPACE namespace Statements { + using Backend = AbstractDb::Backend; + + struct Statement { + template + constexpr Statement (Backend _backend, const char (&_sql)[N]) : backend(_backend), sql(_sql) {} + + Backend backend; + const char *sql; + }; + + struct AbstractStatement { + public: + template + constexpr AbstractStatement (const char (&_sql)[N]) : mSql{ _sql, nullptr } {} + + constexpr AbstractStatement (const Statement &a, const Statement &b) : mSql{ a.sql, b.sql } {} + + const char *getSql (Backend backend) const { + return backend == Backend::Mysql && mSql[1] ? mSql[1] : mSql[0]; + } + + private: + const char *mSql[2]; + }; + // --------------------------------------------------------------------------- // Create statements. // --------------------------------------------------------------------------- - constexpr const char *create[CreateCount] = { - [CreateConferenceEventView] = R"( - CREATE TEMP VIEW conference_event_view AS - SELECT id, type, creation_time, chat_room_id, from_sip_address_id, to_sip_address_id, time, imdn_message_id, state, direction, is_secured, notify_id, device_sip_address_id, participant_sip_address_id, subject - FROM event - LEFT JOIN conference_event ON conference_event.event_id = event.id - LEFT JOIN conference_chat_message_event ON conference_chat_message_event.event_id = event.id - LEFT JOIN conference_notified_event ON conference_notified_event.event_id = event.id - LEFT JOIN conference_participant_device_event ON conference_participant_device_event.event_id = event.id - LEFT JOIN conference_participant_event ON conference_participant_event.event_id = event.id - LEFT JOIN conference_subject_event ON conference_subject_event.event_id = event.id - )" + constexpr AbstractStatement create[CreateCount] = { + [CreateConferenceEventView] = + R"( + CREATE VIEW IF NOT EXISTS conference_event_view AS + SELECT id, type, creation_time, chat_room_id, from_sip_address_id, to_sip_address_id, time, imdn_message_id, state, direction, is_secured, notify_id, device_sip_address_id, participant_sip_address_id, subject + FROM event + LEFT JOIN conference_event ON conference_event.event_id = event.id + LEFT JOIN conference_chat_message_event ON conference_chat_message_event.event_id = event.id + LEFT JOIN conference_notified_event ON conference_notified_event.event_id = event.id + LEFT JOIN conference_participant_device_event ON conference_participant_device_event.event_id = event.id + LEFT JOIN conference_participant_event ON conference_participant_event.event_id = event.id + LEFT JOIN conference_subject_event ON conference_subject_event.event_id = event.id + )" }; // --------------------------------------------------------------------------- @@ -64,7 +90,7 @@ namespace Statements { const char *get (Create createStmt, AbstractDb::Backend backend) { (void)backend; - return createStmt >= Create::CreateCount ? nullptr : create[createStmt]; + return createStmt >= Create::CreateCount ? nullptr : create[createStmt].getSql(backend); } const char *get (Select selectStmt, AbstractDb::Backend backend) { diff --git a/tester/db/linphone.db b/tester/db/linphone.db index ae7fe37abfda8ce2a6e080f37dbc361e3f3df2f2..d41b202f16b13cd7a991988a27276463babeabf3 100644 GIT binary patch delta 978 zcma*lJ#W)M7zc1WPV?3z5TMYP6s~Q;Thc&DOQ2BNP`Of2X{0uS4WEfGaG=KpV1F-WgK!U#=255>}OF!M+R?H52YDl_D?M8fQ=HhTdQ%)9XxOYfQJ5{|4um z<#J6XcPjE-vS$@3uf(EwR^&x_zDBr~C-!=ac8WY}CcY~EP+ z6E)lyw{+i3iAi^ET1+F=TD|`WW&UR`ELU$6zX$$uQC_H#Th+=^*JVkyJ67m4k85P6 zvqynzyS8yt6XLMD)teX@J4p81ad9B%9p!qn(fv!@_mg5aP+juI%mMTJ-JOEiBjFgY zs1K@ z3J8qAD2zb{vTz#Cz*#s4=OG7q7>5E}fQv8zm!JrfFa?*P1XtiHOv5#}4l{5AW?>G> K+wIWJ;D@hRIExu#ZyVDq*T&x z;=lZr(>5}m>)j=v{hB}ae=?t0*G7p+>UZ>U|7r)3%^-^$W|7An3YbR`3s}SwN+_d( zWvpNoYp7x!8`#7aYS=~{4Kxv82Q9SGK^ME&!#+YB;1EYR#tBYwhI3rt5?AQq8aLy} H-iF`*Srl>w