1
0
mirror of https://github.com/nerzhul/ocsms.git synced 2025-07-24 02:15:46 +00:00

Convert some queries to QueryBuilder.

This commit is contained in:
Matt Amos 2018-09-26 12:43:42 +01:00 committed by Loïc Blot
parent fb7a77d23c
commit 5b72503296
2 changed files with 72 additions and 38 deletions

View File

@ -24,13 +24,15 @@ class ConversationStateMapper extends Mapper {
} }
public function getLast ($userId) { public function getLast ($userId) {
$sql = 'SELECT MAX(int_date) as mx FROM ' . $qb = $this->db->getQueryBuilder();
'*PREFIX*ocsms_conversation_read_states WHERE user_id = ?'; $qb->selectAlias($qb->createFunction('MAX(int_date)'), 'mx')
->from('ocsms_conversation_read_states')
->where($qb->expr()->andX(
$qb->expr()->eq('user_id', $qb->createNamedParameter($userId))
));
$result = $qb->execute();
$query = \OCP\DB::prepare($sql); if ($row = $result->fetch()) {
$result = $query->execute(array($userId));
if ($row = $result->fetchRow()) {
return $row["mx"]; return $row["mx"];
} }
@ -38,13 +40,16 @@ class ConversationStateMapper extends Mapper {
} }
public function getLastForPhoneNumber ($userId, $phoneNumber) { public function getLastForPhoneNumber ($userId, $phoneNumber) {
$sql = 'SELECT MAX(int_date) as mx FROM ' . $qb = $this->db->getQueryBuilder();
'*PREFIX*ocsms_conversation_read_states WHERE user_id = ? AND phone_number = ?'; $qb->selectAlias($qb->createFunction('MAX(int_date)'), 'mx')
->from('ocsms_conversation_read_states')
->where($qb->expr()->andX(
$qb->expr()->eq('user_id', $qb->createNamedParameter($userId)),
$qb->expr()->eq('phone_number', $qb->createNamedParameter($phoneNumber))
));
$result = $qb->execute();
$query = \OCP\DB::prepare($sql); if ($row = $result->fetch()) {
$result = $query->execute(array($userId, $phoneNumber));
if ($row = $result->fetchRow()) {
return $row["mx"]; return $row["mx"];
} }
@ -53,14 +58,21 @@ class ConversationStateMapper extends Mapper {
public function setLast ($userId, $phoneNumber, $lastDate) { public function setLast ($userId, $phoneNumber, $lastDate) {
$this->db->beginTransaction(); $this->db->beginTransaction();
$query = \OCP\DB::prepare('DELETE FROM *PREFIX*ocsms_conversation_read_states ' . $qb = $this->db->getQueryBuilder();
'WHERE user_id = ? AND phone_number = ?'); $qb->delete('ocsms_conversation_read_states')
$query->execute(array($userId, $phoneNumber)); ->where($qb->expr()->andX(
$qb->expr()->eq('user_id', $qb->createNamedParameter($userId)),
$qb->expr()->eq('phone_number', $qb->createNamedParameter($phoneNumber))
));
$qb->execute();
$query = \OCP\DB::prepare('INSERT INTO *PREFIX*ocsms_conversation_read_states' . $qb = $this->db->getQueryBuilder();
'(user_id, phone_number, int_date) VALUES ' . $qb->insert('ocsms_conversation_read_states')
'(?,?,?)'); ->values(array(
$query->execute(array($userId, $phoneNumber, $lastDate)); 'user_id' => $userId,
'phone_number' => $phoneNumber,
'int_date' => $lastDate
));
$this->db->commit(); $this->db->commit();
} }

View File

@ -145,14 +145,23 @@ class SmsMapper extends Mapper {
$phlst = $this->getAllPhoneNumbersForFPN($userId, $phoneNumber, $country); $phlst = $this->getAllPhoneNumbersForFPN($userId, $phoneNumber, $country);
$messageList = array(); $messageList = array();
$query = \OCP\DB::prepare('SELECT sms_date, sms_msg, sms_type FROM ' .
'*PREFIX*ocsms_smsdatas WHERE user_id = ? AND sms_address = ? ' .
'AND sms_mailbox IN (?,?,?) AND sms_date > ?');
foreach ($phlst as $pn => $val) { foreach ($phlst as $pn => $val) {
$result = $query->execute(array($userId, $pn, 0, 1, 3, $minDate)); $qb = $this->db->getQueryBuilder();
$qb->select('sms_date', 'sms_msg', 'sms_type')
->from('ocsms_smsdatas')
->where($qb->expr()->andX(
$qb->expr()->eq('user_id', $qb->createNamedParameter($userId)),
$qb->expr()->eq('sms_address', $qb->createNamedParameter($pn)),
$qb->expr()->in('sms_mailbox', array_map(function($mbid) use ($qb) {
return $qb->createNamedParameter($mbid);
}, array(0, 1, 3))),
$qb->expr()->gt('sms_date', $qb->createNamedParameter($minDate))
)
);
$result = $qb->execute();
while ($row = $result->fetchRow()) { while ($row = $result->fetch()) {
$messageList[$row["sms_date"]] = array( $messageList[$row["sms_date"]] = array(
"msg" => $row["sms_msg"], "msg" => $row["sms_msg"],
"type" => $row["sms_type"] "type" => $row["sms_type"]
@ -267,19 +276,26 @@ class SmsMapper extends Mapper {
} }
public function getLastMessageTimestampForAllPhonesNumbers ($userId, $order = true) { public function getLastMessageTimestampForAllPhonesNumbers ($userId, $order = true) {
$sql = 'SELECT sms_address, MAX(sms_date) AS mx FROM ' . $qb = $this->db->getQueryBuilder();
'*PREFIX*ocsms_smsdatas WHERE user_id = ? AND sms_mailbox IN (?,?,?) ' . $qb->selectAlias($qb->createFunction('MAX(sms_date)'), 'mx')
'GROUP BY sms_address'; ->addSelect('sms_address')
->from('ocsms_smsdatas')
->where($qb->expr()->andX(
$qb->expr()->eq('user_id', $qb->createNamedParameter($userId)),
$qb->expr()->in('sms_mailbox', array_map(function($mbid) use ($qb) {
return $qb->createNamedParameter($mbid);
}, array(0, 1, 3)))
))
->groupBy('sms_address');
if ($order === true) { if ($order === true) {
$sql .= ' ORDER BY mx DESC'; $qb->orderBy('mx', 'DESC');
} }
$query = \OCP\DB::prepare($sql); $result = $qb->execute();
$result = $query->execute(array($userId, 0, 1, 3));
$phoneList = array(); $phoneList = array();
while ($row = $result->fetchRow()) { while ($row = $result->fetch()) {
$phoneNumber = preg_replace("#[ ]#", "", $row["sms_address"]); $phoneNumber = preg_replace("#[ ]#", "", $row["sms_address"]);
if (!array_key_exists($phoneNumber, $phoneList)) { if (!array_key_exists($phoneNumber, $phoneList)) {
$phoneList[$phoneNumber] = $row["mx"]; $phoneList[$phoneNumber] = $row["mx"];
@ -295,15 +311,21 @@ class SmsMapper extends Mapper {
public function getNewMessagesCountForAllPhonesNumbers($userId, $lastDate) { public function getNewMessagesCountForAllPhonesNumbers($userId, $lastDate) {
$ld = ($lastDate == '') ? 0 : $lastDate; $ld = ($lastDate == '') ? 0 : $lastDate;
$sql = 'SELECT sms_address, COUNT(sms_date) AS ct FROM ' . $qb = $this->db->getQueryBuilder();
'*PREFIX*ocsms_smsdatas WHERE user_id = ? AND sms_mailbox IN (?,?,?) ' . $qb->selectAlias($qb->createFunction('COUNT(sms_date)'), 'ct')
'AND sms_date > ? GROUP BY sms_address'; ->addSelect('sms_address')
->from('ocsms_smsdatas')
$query = \OCP\DB::prepare($sql); ->where($qb->expr()->andX(
$result = $query->execute(array($userId, 0, 1, 3, $ld)); $qb->expr()->eq('user_id', $qb->createNamedParameter($userId)),
$qb->expr()->in('sms_mailbox', array_map(function($mbid) use ($qb) {
return $qb->createNamedParameter($mbid);
}, array(0, 1, 3))),
$qb->expr()->gt('sms_date', $qb->createNamedParameter($ld))))
->groupBy('sms_address');
$result = $qb->execute();
$phoneList = array(); $phoneList = array();
while ($row = $result->fetchRow()) { while ($row = $result->fetch()) {
$phoneNumber = preg_replace("#[ ]#", "", $row["sms_address"]); $phoneNumber = preg_replace("#[ ]#", "", $row["sms_address"]);
if ($this->convStateMapper->getLastForPhoneNumber($userId, $phoneNumber) < $lastDate) { if ($this->convStateMapper->getLastForPhoneNumber($userId, $phoneNumber) < $lastDate) {
if (!array_key_exists($phoneNumber, $phoneList)) { if (!array_key_exists($phoneNumber, $phoneList)) {