Convert SamplePlugin to new-style table defs, tweak some stuff to test basic checkschema

This commit is contained in:
Brion Vibber 2010-10-19 17:25:56 -07:00
parent 8b0ba03a2e
commit 3b6f738ab7
3 changed files with 23 additions and 9 deletions

View File

@ -254,6 +254,9 @@ class Schema
*/ */
function appendForeignKeyDef(array &$sql, $name, array $def) function appendForeignKeyDef(array &$sql, $name, array $def)
{ {
if (count($def) != 2) {
throw new Exception("Invalid foreign key def for $name: " . var_export($def, true));
}
list($refTable, $map) = $def; list($refTable, $map) = $def;
$srcCols = array_keys($map); $srcCols = array_keys($map);
$refCols = array_values($map); $refCols = array_values($map);
@ -884,7 +887,7 @@ class Schema
if (!$cd->nullable) { if (!$cd->nullable) {
$column['not null'] = true; $column['not null'] = true;
} }
if ($cd->autoincrement) { if ($cd->auto_increment) {
$column['type'] = 'serial'; $column['type'] = 'serial';
} }
if ($cd->default) { if ($cd->default) {
@ -942,13 +945,13 @@ class Schema
*/ */
function validateDef($tableName, array $def) function validateDef($tableName, array $def)
{ {
if (count($defs) && $defs[0] instanceof ColumnDef) { if (count($def) && $def[0] instanceof ColumnDef) {
$def = $this->oldToNew($tableName, $defs); $def = $this->oldToNew($tableName, $def);
} }
// A few quick checks :D // A few quick checks :D
if (!isset($def['fields'])) { if (!isset($def['fields'])) {
throw new Exceptioni("Invalid table definition for $tableName: no fields."); throw new Exception("Invalid table definition for $tableName: no fields.");
} }
return $def; return $def;

View File

@ -73,8 +73,8 @@ class Ostatus_profile extends Managed_DataObject
'ostatus_profile_feeduri_idx' => array('feeduri'), 'ostatus_profile_feeduri_idx' => array('feeduri'),
), ),
'foreign keys' => array( 'foreign keys' => array(
'profile_id' => array('profile' => 'id'), 'ostatus_profile_profile_id_fkey' => array('profile', array('profile_id' => 'id')),
'group_id' => array('user_group' => 'id'), 'ostatus_profile_group_id_fkey' => array('user_group', array('group_id' => 'id')),
), ),
); );
} }

View File

@ -172,9 +172,20 @@ class SamplePlugin extends Plugin
// For storing user-submitted flags on profiles // For storing user-submitted flags on profiles
$schema->ensureTable('user_greeting_count', $schema->ensureTable('user_greeting_count',
array(new ColumnDef('user_id', 'integer', null, array(
true, 'PRI'), 'fields' => array(
new ColumnDef('greeting_count', 'integer'))); 'user_id' => array('type' => 'int', 'not null' => true),
'greeting_count' => array('type' => 'int'),
),
'primary key' => array('user_id'),
'foreign keys' => array(
// Not all databases will support foreign keys, but even
// when not enforced it's helpful to include these definitions
// as documentation.
'user_greeting_count_user_id_fkey' => array('user', array('user_id' => 'id')),
),
)
);
return true; return true;
} }