Page MenuHomePhabricator

D17731.id.diff
No OneTemporary

D17731.id.diff

diff --git a/resources/sql/autopatches/20170419.thread.03.touched.sql b/resources/sql/autopatches/20170419.thread.03.touched.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20170419.thread.03.touched.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_conpherence.conpherence_participant
+ DROP dateTouched;
diff --git a/src/applications/conpherence/editor/ConpherenceEditor.php b/src/applications/conpherence/editor/ConpherenceEditor.php
--- a/src/applications/conpherence/editor/ConpherenceEditor.php
+++ b/src/applications/conpherence/editor/ConpherenceEditor.php
@@ -181,7 +181,6 @@
id(new ConpherenceParticipant())
->setConpherencePHID($object->getPHID())
->setParticipantPHID($phid)
- ->setDateTouched(time())
->setSeenMessageCount($message_count)
->save();
$object->attachParticipants($participants);
@@ -248,7 +247,6 @@
id(new ConpherenceParticipant())
->setConpherencePHID($object->getPHID())
->setParticipantPHID($phid)
- ->setDateTouched(time())
->setSeenMessageCount($message_count)
->save();
}
@@ -282,10 +280,8 @@
$participant->setSeenMessageCount(
$object->getMessageCount() - $message_count);
}
- $participant->setDateTouched($time);
} else {
$participant->setSeenMessageCount($object->getMessageCount());
- $participant->setDateTouched($time);
}
$participant->save();
}
diff --git a/src/applications/conpherence/query/ConpherenceParticipantQuery.php b/src/applications/conpherence/query/ConpherenceParticipantQuery.php
--- a/src/applications/conpherence/query/ConpherenceParticipantQuery.php
+++ b/src/applications/conpherence/query/ConpherenceParticipantQuery.php
@@ -1,128 +1,65 @@
<?php
-/**
- * Query class that answers these questions:
- *
- * - Q: What are the conpherences to show when I land on /conpherence/ ?
- * - A:
- *
- * id(new ConpherenceParticipantQuery())
- * ->withParticipantPHIDs(array($my_phid))
- * ->execute();
- *
- * - Q: What are the next set of conpherences as I scroll up (more recent) or
- * down (less recent) this list of conpherences?
- * - A:
- *
- * id(new ConpherenceParticipantQuery())
- * ->withParticipantPHIDs(array($my_phid))
- * ->withParticipantCursor($top_participant)
- * ->setOrder(ConpherenceParticipantQuery::ORDER_NEWER)
- * ->execute();
- *
- * -or-
- *
- * id(new ConpherenceParticipantQuery())
- * ->withParticipantPHIDs(array($my_phid))
- * ->withParticipantCursor($bottom_participant)
- * ->setOrder(ConpherenceParticipantQuery::ORDER_OLDER)
- * ->execute();
- *
- * For counts of read, un-read, or all conpherences by participant, see
- * @{class:ConpherenceParticipantCountQuery}.
- */
final class ConpherenceParticipantQuery extends PhabricatorOffsetPagedQuery {
- const LIMIT = 100;
- const ORDER_NEWER = 'newer';
- const ORDER_OLDER = 'older';
-
private $participantPHIDs;
- private $participantCursor;
- private $order = self::ORDER_OLDER;
public function withParticipantPHIDs(array $phids) {
$this->participantPHIDs = $phids;
return $this;
}
- public function withParticipantCursor(ConpherenceParticipant $participant) {
- $this->participantCursor = $participant;
- return $this;
- }
-
- public function setOrder($order) {
- $this->order = $order;
- return $this;
- }
-
public function execute() {
$table = new ConpherenceParticipant();
- $conn_r = $table->establishConnection('r');
+ $thread = new ConpherenceThread();
+
+ $conn = $table->establishConnection('r');
$data = queryfx_all(
- $conn_r,
- 'SELECT * FROM %T participant %Q %Q %Q',
+ $conn,
+ 'SELECT * FROM %T participant JOIN %T thread
+ ON participant.conpherencePHID = thread.phid %Q %Q %Q',
$table->getTableName(),
- $this->buildWhereClause($conn_r),
- $this->buildOrderClause($conn_r),
- $this->buildLimitClause($conn_r));
+ $thread->getTableName(),
+ $this->buildWhereClause($conn),
+ $this->buildOrderClause($conn),
+ $this->buildLimitClause($conn));
$participants = $table->loadAllFromArray($data);
- $participants = mpull($participants, null, 'getConpherencePHID');
-
- if ($this->order == self::ORDER_NEWER) {
- $participants = array_reverse($participants);
+ // TODO: Fix this, it's bogus.
+ if ('garbage') {
+ if (count($this->participantPHIDs) !== 1) {
+ throw new Exception(
+ pht(
+ 'This query only works when querying for exactly one participant '.
+ 'PHID!'));
+ }
+ // This will throw results away if we aren't doing a query for exactly
+ // one participant PHID.
+ $participants = mpull($participants, null, 'getConpherencePHID');
}
return $participants;
}
- protected function buildWhereClause(AphrontDatabaseConnection $conn_r) {
+ protected function buildWhereClause(AphrontDatabaseConnection $conn) {
$where = array();
- if ($this->participantPHIDs) {
+ if ($this->participantPHIDs !== null) {
$where[] = qsprintf(
- $conn_r,
+ $conn,
'participantPHID IN (%Ls)',
$this->participantPHIDs);
}
- if ($this->participantCursor) {
- $date_touched = $this->participantCursor->getDateTouched();
- $id = $this->participantCursor->getID();
- if ($this->order == self::ORDER_OLDER) {
- $compare_date = '<';
- $compare_id = '<=';
- } else {
- $compare_date = '>';
- $compare_id = '>=';
- }
- $where[] = qsprintf(
- $conn_r,
- '(dateTouched %Q %d OR (dateTouched = %d AND id %Q %d))',
- $compare_date,
- $date_touched,
- $date_touched,
- $compare_id,
- $id);
- }
-
return $this->formatWhereClause($where);
}
- private function buildOrderClause(AphrontDatabaseConnection $conn_r) {
- $order_word = ($this->order == self::ORDER_OLDER) ? 'DESC' : 'ASC';
- // if these are different direction we won't get as efficient a query
- // see http://dev.mysql.com/doc/refman/5.5/en/order-by-optimization.html
- $order = qsprintf(
- $conn_r,
- 'ORDER BY dateTouched %Q, id %Q',
- $order_word,
- $order_word);
-
- return $order;
+ private function buildOrderClause(AphrontDatabaseConnection $conn) {
+ return qsprintf(
+ $conn,
+ 'ORDER BY thread.dateModified DESC, thread.id DESC, participant.id DESC');
}
}
diff --git a/src/applications/conpherence/storage/ConpherenceParticipant.php b/src/applications/conpherence/storage/ConpherenceParticipant.php
--- a/src/applications/conpherence/storage/ConpherenceParticipant.php
+++ b/src/applications/conpherence/storage/ConpherenceParticipant.php
@@ -5,7 +5,6 @@
protected $participantPHID;
protected $conpherencePHID;
protected $seenMessageCount;
- protected $dateTouched;
protected $settings = array();
protected function getConfiguration() {
@@ -14,7 +13,6 @@
'settings' => self::SERIALIZATION_JSON,
),
self::CONFIG_COLUMN_SCHEMA => array(
- 'dateTouched' => 'epoch',
'seenMessageCount' => 'uint64',
),
self::CONFIG_KEY_SCHEMA => array(
@@ -22,9 +20,6 @@
'columns' => array('conpherencePHID', 'participantPHID'),
'unique' => true,
),
- 'participationIndex' => array(
- 'columns' => array('participantPHID', 'dateTouched', 'id'),
- ),
'key_thread' => array(
'columns' => array('participantPHID', 'conpherencePHID'),
),

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 15, 5:33 AM (1 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7228492
Default Alt Text
D17731.id.diff (7 KB)

Event Timeline