1
0
mirror of https://github.com/nerzhul/ocsms.git synced 2025-07-23 09:55:44 +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) {
$sql = 'SELECT MAX(int_date) as mx FROM ' .
'*PREFIX*ocsms_conversation_read_states WHERE user_id = ?';
$qb = $this->db->getQueryBuilder();
$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);
$result = $query->execute(array($userId));
if ($row = $result->fetchRow()) {
if ($row = $result->fetch()) {
return $row["mx"];
}
@ -38,13 +40,16 @@ class ConversationStateMapper extends Mapper {
}
public function getLastForPhoneNumber ($userId, $phoneNumber) {
$sql = 'SELECT MAX(int_date) as mx FROM ' .
'*PREFIX*ocsms_conversation_read_states WHERE user_id = ? AND phone_number = ?';
$qb = $this->db->getQueryBuilder();
$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);
$result = $query->execute(array($userId, $phoneNumber));
if ($row = $result->fetchRow()) {
if ($row = $result->fetch()) {
return $row["mx"];
}
@ -53,14 +58,21 @@ class ConversationStateMapper extends Mapper {
public function setLast ($userId, $phoneNumber, $lastDate) {
$this->db->beginTransaction();
$query = \OCP\DB::prepare('DELETE FROM *PREFIX*ocsms_conversation_read_states ' .
'WHERE user_id = ? AND phone_number = ?');
$query->execute(array($userId, $phoneNumber));
$qb = $this->db->getQueryBuilder();
$qb->delete('ocsms_conversation_read_states')
->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' .
'(user_id, phone_number, int_date) VALUES ' .
'(?,?,?)');
$query->execute(array($userId, $phoneNumber, $lastDate));
$qb = $this->db->getQueryBuilder();
$qb->insert('ocsms_conversation_read_states')
->values(array(
'user_id' => $userId,
'phone_number' => $phoneNumber,
'int_date' => $lastDate
));
$this->db->commit();
}

View File

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