Fix for auto_increment parameter in auto-created tables via checkschema.

Update FeedSub plugin for non-Plugin_DataObject setup and working checkschema updates.
This commit is contained in:
Brion Vibber 2010-01-04 10:30:19 -08:00
parent 7a2d72fe28
commit 783a2e249b
4 changed files with 90 additions and 30 deletions

View File

@ -74,6 +74,7 @@ class ColumnDef
* @param string $key type of key * @param string $key type of key
* @param value $default default value * @param value $default default value
* @param value $extra unused * @param value $extra unused
* @param boolean $auto_increment
*/ */
function __construct($name=null, $type=null, $size=null, function __construct($name=null, $type=null, $size=null,

View File

@ -524,6 +524,10 @@ class Schema
$sql .= ($cd->nullable) ? "null " : "not null "; $sql .= ($cd->nullable) ? "null " : "not null ";
} }
if (!empty($cd->auto_increment)) {
$sql .= " auto_increment ";
}
return $sql; return $sql;
} }
} }

View File

@ -105,12 +105,11 @@ class FeedSubPlugin extends Plugin
return true; return true;
} }
/*
// auto increment seems to be broken
function onCheckSchema() { function onCheckSchema() {
// warning: the autoincrement doesn't seem to set.
// alter table feedinfo change column id id int(11) not null auto_increment;
$schema = Schema::get(); $schema = Schema::get();
$schema->ensureDataObject('Feedinfo'); $schema->ensureTable('feedinfo', Feedinfo::schemaDef());
return true; return true;
} }
*/
} }

View File

@ -31,7 +31,7 @@ class FeedDBException extends FeedSubException
} }
} }
class Feedinfo extends Plugin_DataObject class Feedinfo extends Memcached_DataObject
{ {
public $__table = 'feedinfo'; public $__table = 'feedinfo';
@ -56,14 +56,38 @@ class Feedinfo extends Plugin_DataObject
return parent::staticGet(__CLASS__, $k, $v); return parent::staticGet(__CLASS__, $k, $v);
} }
function tableDef() /**
* 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
*/
function table()
{ {
class_exists('Schema'); // autoload hack return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
// warning: the autoincrement doesn't seem to set. 'profile_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
// alter table feedinfo change column id id int(11) not null auto_increment; 'feeduri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
return new TableDef($this->__table, 'homeuri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
array(new ColumnDef('id', 'integer', 'huburi' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
null, false, 'PRI', '0', null, true), 'verify_token' => DB_DATAOBJECT_STR,
'sub_start' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
'sub_end' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
'lastupdate' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
}
static function schemaDef()
{
return array(new ColumnDef('id', 'integer',
/*size*/ null,
/*nullable*/ false,
/*key*/ 'PRI',
/*default*/ '0',
/*extra*/ null,
/*auto_increment*/ true),
new ColumnDef('profile_id', 'integer', new ColumnDef('profile_id', 'integer',
null, false), null, false),
new ColumnDef('feeduri', 'varchar', new ColumnDef('feeduri', 'varchar',
@ -81,9 +105,41 @@ class Feedinfo extends Plugin_DataObject
new ColumnDef('created', 'datetime', new ColumnDef('created', 'datetime',
null, false), null, false),
new ColumnDef('lastupdate', 'datetime', new ColumnDef('lastupdate', 'datetime',
null, false))); null, false));
} }
/**
* return key definitions for DB_DataObject
*
* DB_DataObject needs to know about keys that the table has; this function
* defines them.
*
* @return array key definitions
*/
function keys()
{
return array('id' => 'P'); //?
}
/**
* return key definitions for Memcached_DataObject
*
* Our caching system uses the same key definitions, but uses a different
* method to get them.
*
* @return array key definitions
*/
function keyTypes()
{
return $this->keys();
}
/**
* Fetch the StatusNet-side profile for this feed
* @return Profile
*/
public function getProfile() public function getProfile()
{ {
return Profile::staticGet('id', $this->profile_id); return Profile::staticGet('id', $this->profile_id);