Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
BC
public
liblinphone
Commits
74e73a84
Commit
74e73a84
authored
Oct 17, 2017
by
Ronan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(MainDb): better code
parent
5c8fa71e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
25 deletions
+25
-25
src/db/main-db.cpp
src/db/main-db.cpp
+25
-25
No files found.
src/db/main-db.cpp
View file @
74e73a84
...
...
@@ -122,14 +122,14 @@ MainDb::MainDb () : AbstractDb(*new MainDbPrivate) {}
return
q
->
getLastInsertId
();
}
void
MainDbPrivate
::
insertContent
(
long
messageE
ventId
,
const
Content
&
content
)
{
void
MainDbPrivate
::
insertContent
(
long
e
ventId
,
const
Content
&
content
)
{
L_Q
();
soci
::
session
*
session
=
dbSession
.
getBackendSession
<
soci
::
session
>
();
long
contentTypeId
=
insertContentType
(
content
.
getContentType
().
asString
());
*
session
<<
"INSERT INTO message_content (
message_
event_id, content_type_id, body) VALUES"
" (:
messageE
ventId, :contentTypeId, :body)"
,
soci
::
use
(
messageE
ventId
),
soci
::
use
(
contentTypeId
),
*
session
<<
"INSERT INTO message_content (event_id, content_type_id, body) VALUES"
" (:
e
ventId, :contentTypeId, :body)"
,
soci
::
use
(
e
ventId
),
soci
::
use
(
contentTypeId
),
soci
::
use
(
content
.
getBodyAsString
());
long
messageContentId
=
q
->
getLastInsertId
();
...
...
@@ -213,26 +213,26 @@ MainDb::MainDb () : AbstractDb(*new MainDbPrivate) {}
soci
::
use
(
references
.
remoteSipAddressId
),
soci
::
use
(
state
),
soci
::
use
(
direction
),
soci
::
use
(
imdnMessageId
),
soci
::
use
(
isSecured
?
1
:
0
);
long
messageE
ventId
=
q
->
getLastInsertId
();
long
e
ventId
=
q
->
getLastInsertId
();
for
(
const
auto
&
content
:
contents
)
insertContent
(
messageE
ventId
,
content
);
insertContent
(
e
ventId
,
content
);
return
messageE
ventId
;
return
e
ventId
;
}
void
MainDbPrivate
::
insertMessageParticipant
(
long
messageE
ventId
,
long
sipAddressId
,
int
state
)
{
void
MainDbPrivate
::
insertMessageParticipant
(
long
e
ventId
,
long
sipAddressId
,
int
state
)
{
soci
::
session
*
session
=
dbSession
.
getBackendSession
<
soci
::
session
>
();
soci
::
statement
statement
=
(
session
->
prepare
<<
"UPDATE message_participant SET state = :state"
" WHERE
message_
event_id = :
messageE
ventId AND sip_address_id = :sipAddressId"
,
soci
::
use
(
state
),
soci
::
use
(
messageE
ventId
),
soci
::
use
(
sipAddressId
)
" WHERE event_id = :
e
ventId AND sip_address_id = :sipAddressId"
,
soci
::
use
(
state
),
soci
::
use
(
e
ventId
),
soci
::
use
(
sipAddressId
)
);
statement
.
execute
(
true
);
if
(
statement
.
get_affected_rows
()
==
0
&&
state
!=
static_cast
<
int
>
(
ChatMessage
::
State
::
Displayed
))
*
session
<<
"INSERT INTO message_participant (
message_
event_id, sip_address_id, state)"
" VALUES (:
messageE
ventId, :sipAddressId, :state)"
,
soci
::
use
(
messageE
ventId
),
soci
::
use
(
sipAddressId
),
soci
::
use
(
state
);
*
session
<<
"INSERT INTO message_participant (event_id, sip_address_id, state)"
" VALUES (:
e
ventId, :sipAddressId, :state)"
,
soci
::
use
(
e
ventId
),
soci
::
use
(
sipAddressId
),
soci
::
use
(
state
);
}
// -----------------------------------------------------------------------------
...
...
@@ -490,12 +490,12 @@ MainDb::MainDb () : AbstractDb(*new MainDbPrivate) {}
*
session
<<
"CREATE TABLE IF NOT EXISTS message_participant ("
"
message_
event_id INT UNSIGNED NOT NULL,"
" event_id INT UNSIGNED NOT NULL,"
" sip_address_id INT UNSIGNED NOT NULL,"
" state TINYINT UNSIGNED NOT NULL,"
" PRIMARY KEY (
message_
event_id, sip_address_id),"
" FOREIGN KEY (
message_
event_id)"
" PRIMARY KEY (event_id, sip_address_id),"
" FOREIGN KEY (event_id)"
" REFERENCES message_event(event_id)"
" ON DELETE CASCADE,"
" FOREIGN KEY (sip_address_id)"
...
...
@@ -506,11 +506,11 @@ MainDb::MainDb () : AbstractDb(*new MainDbPrivate) {}
*
session
<<
"CREATE TABLE IF NOT EXISTS message_content ("
" id"
+
primaryKeyAutoIncrementStr
()
+
","
"
message_
event_id INT UNSIGNED NOT NULL,"
" event_id INT UNSIGNED NOT NULL,"
" content_type_id INT UNSIGNED NOT NULL,"
" body TEXT NOT NULL,"
" FOREIGN KEY (
message_
event_id)"
" FOREIGN KEY (event_id)"
" REFERENCES message_event(event_id)"
" ON DELETE CASCADE,"
" FOREIGN KEY (content_type_id)"
...
...
@@ -532,12 +532,12 @@ MainDb::MainDb () : AbstractDb(*new MainDbPrivate) {}
*
session
<<
"CREATE TABLE IF NOT EXISTS message_crypto_data ("
"
message_
event_id INT UNSIGNED NOT NULL,"
" event_id INT UNSIGNED NOT NULL,"
" key VARCHAR(255),"
" data BLOB,"
" PRIMARY KEY (
message_
event_id, key),"
" FOREIGN KEY (
message_
event_id)"
" PRIMARY KEY (event_id, key),"
" FOREIGN KEY (event_id)"
" REFERENCES message_event(event_id)"
" ON DELETE CASCADE"
")"
;
...
...
@@ -551,16 +551,16 @@ MainDb::MainDb () : AbstractDb(*new MainDbPrivate) {}
participantMessageDeleter
+=
displayedId
;
participantMessageDeleter
+=
" AND (SELECT COUNT(*) FROM ("
" SELECT state FROM message_participant WHERE"
" NEW.
message_
event_id = message_participant.
message_
event_id"
" NEW.event_id = message_participant.event_id"
" AND state <> "
;
participantMessageDeleter
+=
displayedId
;
participantMessageDeleter
+=
" LIMIT 1"
" )) = 0"
" BEGIN"
" DELETE FROM message_participant WHERE NEW.
message_
event_id = message_participant.
message_
event_id;"
" DELETE FROM message_participant WHERE NEW.event_id = message_participant.event_id;"
" UPDATE message_event SET state = "
;
participantMessageDeleter
+=
displayedId
;
participantMessageDeleter
+=
" WHERE event_id = NEW.
message_
event_id;"
participantMessageDeleter
+=
" WHERE event_id = NEW.event_id;"
" END"
;
*
session
<<
participantMessageDeleter
;
...
...
@@ -933,7 +933,7 @@ shared_ptr<ChatRoom> MainDb::findChatRoom (const string &peerAddress) const {
d
->
insertChatRoomParticipant
(
references
.
chatRoomId
,
references
.
remoteSipAddressId
,
false
);
long
messageE
ventId
=
d
->
insertMessageEvent
(
long
e
ventId
=
d
->
insertMessageEvent
(
references
,
state
,
direction
,
...
...
@@ -944,7 +944,7 @@ shared_ptr<ChatRoom> MainDb::findChatRoom (const string &peerAddress) const {
if
(
state
!=
static_cast
<
int
>
(
ChatMessage
::
State
::
Displayed
))
d
->
insertMessageParticipant
(
messageE
ventId
,
e
ventId
,
references
.
remoteSipAddressId
,
state
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment