Fix a bunch of bugs where DB object wasn't correctly defined

This commit is contained in:
Luke Fitzgerald 2010-07-31 10:47:58 -07:00
parent 0f7fdd4804
commit 68ec3f855d
3 changed files with 66 additions and 4 deletions

View File

@ -136,7 +136,7 @@ class MsnPlugin extends ImPlugin {
$schema->ensureTable('msn_waiting_message', $schema->ensureTable('msn_waiting_message',
array(new ColumnDef('id', 'integer', null, array(new ColumnDef('id', 'integer', null,
false, 'PRI', null, null, true), false, 'PRI', null, null, true),
new ColumnDef('screenname', 'integer', null, false), new ColumnDef('screenname', 'varchar', 255, false),
new ColumnDef('message', 'text', null, false), new ColumnDef('message', 'text', null, false),
new ColumnDef('created', 'datetime', null, false), new ColumnDef('created', 'datetime', null, false),
new ColumnDef('claimed', 'datetime'))); new ColumnDef('claimed', 'datetime')));

View File

@ -1,6 +1,6 @@
<?php <?php
/** /**
* Table Definition for msn_plugin_message * Table Definition for msn_waiting_message
*/ */
require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
@ -19,7 +19,66 @@ class Msn_waiting_message extends Memcached_DataObject {
} }
/** /**
* @param mixed $screenname screenname or array of screennames to pull from * return table definition for DB_DataObject
*
* DB_DataObject needs to know something about the table to manipulate
* instances. This method provides all the DB_DataObject needs to know.
*
* @return array array of column definitions
*/
public function table() {
return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
'screenname' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
'message' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
'claimed' => DB_DATAOBJECT_STR);
}
/**
* return key definitions for DB_DataObject
*
* DB_DataObject needs to know about keys that the table has, since it
* won't appear in StatusNet's own keys list. In most cases, this will
* simply reference your keyTypes() function.
*
* @return array list of key field names
*/
public function keys() {
return array_keys($this->keyTypes());
}
/**
* return key definitions for Memcached_DataObject
*
* Our caching system uses the same key definitions, but uses a different
* method to get them. This key information is used to store and clear
* cached data, so be sure to list any key that will be used for static
* lookups.
*
* @return array associative array of key definitions, field name to type:
* 'K' for primary key: for compound keys, add an entry for each component;
* 'U' for unique keys: compound keys are not well supported here.
*/
public function keyTypes() {
return array('id' => 'K');
}
/**
* Magic formula for non-autoincrementing integer primary keys
*
* If a table has a single integer column as its primary key, DB_DataObject
* assumes that the column is auto-incrementing and makes a sequence table
* to do this incrementation. Since we don't need this for our class, we
* overload this method and return the magic formula that DB_DataObject needs.
*
* @return array magic three-false array that stops auto-incrementing.
*/
function sequenceKey() {
return array(false, false, false);
}
/**
* @param string $screenname screenname or array of screennames to pull from
* If not specified, checks all queues in the system. * If not specified, checks all queues in the system.
*/ */
public static function top($screenname = null) { public static function top($screenname = null) {

View File

@ -170,13 +170,16 @@ class MsnManager extends ImManager {
* @param array $data Data * @param array $data Data
*/ */
public function handle_session_ready($data) { public function handle_session_ready($data) {
while (($wm = Msn_waiting_message::top($data['to']) != NULL)) { $wm = Msn_waiting_message::top($data['to']);
while ($wm != NULL) {
if ($this->conn->sendMessage($wm->screenname, $wm->message, $ignore)) { if ($this->conn->sendMessage($wm->screenname, $wm->message, $ignore)) {
$wm->delete(); $wm->delete();
} else { } else {
// Requeue the message in the regular queue // Requeue the message in the regular queue
$this->plugin->send_message($wm->screenname, $wm->message); $this->plugin->send_message($wm->screenname, $wm->message);
} }
$wm = Msn_waiting_message::top($data['to']);
} }
} }