first pass at columndef->drupal-style array converter (need to handle some more things probably; untested)
This commit is contained in:
parent
aff54d8efb
commit
eaa4ded053
@ -21,9 +21,9 @@
|
|||||||
* Wrapper for Memcached_DataObject which knows its own schema definition.
|
* Wrapper for Memcached_DataObject which knows its own schema definition.
|
||||||
* Builds its own damn settings from a schema definition.
|
* Builds its own damn settings from a schema definition.
|
||||||
*
|
*
|
||||||
* @author brion
|
* @author Brion Vibber <brion@status.net>
|
||||||
*/
|
*/
|
||||||
class Managed_DataObject extends Memcached_DataObject
|
abstract class Managed_DataObject extends Memcached_DataObject
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The One True Thingy that must be defined and declared.
|
* The One True Thingy that must be defined and declared.
|
||||||
|
@ -41,6 +41,7 @@ if (!defined('STATUSNET')) {
|
|||||||
* @category Database
|
* @category Database
|
||||||
* @package StatusNet
|
* @package StatusNet
|
||||||
* @author Evan Prodromou <evan@status.net>
|
* @author Evan Prodromou <evan@status.net>
|
||||||
|
* @author Brion Vibber <brion@status.net>
|
||||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
@ -491,6 +492,75 @@ class Schema
|
|||||||
|
|
||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert an old-style set of ColumnDef objects into the current
|
||||||
|
* Drupal-style schema definition array, for backwards compatibility
|
||||||
|
* with plugins written for 0.9.x.
|
||||||
|
*
|
||||||
|
* @param string $tableName
|
||||||
|
* @param array $defs
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function oldToNew($tableName, $defs)
|
||||||
|
{
|
||||||
|
$table = array();
|
||||||
|
$prefixes = array(
|
||||||
|
'tiny',
|
||||||
|
'small',
|
||||||
|
'medium',
|
||||||
|
'big',
|
||||||
|
);
|
||||||
|
foreach ($defs as $cd) {
|
||||||
|
$cd->addToTableDef($table);
|
||||||
|
$column = array();
|
||||||
|
$column['type'] = $cd->type;
|
||||||
|
foreach ($prefixes as $prefix) {
|
||||||
|
if (substr($cd->type, 0, strlen($prefix)) == $prefix) {
|
||||||
|
$column['type'] = substr($cd->type, strlen($prefix));
|
||||||
|
$column['size'] = $prefix;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($cd->size) {
|
||||||
|
if ($cd->type == 'varchar' || $cd->type == 'char') {
|
||||||
|
$column['length'] = $cd->size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$cd->nullable) {
|
||||||
|
$column['not null'] = true;
|
||||||
|
}
|
||||||
|
if ($cd->autoincrement) {
|
||||||
|
$column['type'] = 'serial';
|
||||||
|
}
|
||||||
|
if ($cd->default) {
|
||||||
|
$column['default'] = $cd->default;
|
||||||
|
}
|
||||||
|
$table['fields'][$cd->name] = $column;
|
||||||
|
|
||||||
|
if ($cd->key == 'PRI') {
|
||||||
|
// If multiple columns are defined as primary key,
|
||||||
|
// we'll pile them on in sequence.
|
||||||
|
if (!isset($table['primary key'])) {
|
||||||
|
$table['primary key'] = array();
|
||||||
|
}
|
||||||
|
$table['primary key'][] = $cd->name;
|
||||||
|
} else if ($cd->key == 'MUL') {
|
||||||
|
// Individual multiple-value indexes are only per-column
|
||||||
|
// using the old ColumnDef syntax.
|
||||||
|
$idx = "{$tableName}_{$cd->name}_idx";
|
||||||
|
$table['indexes'][$idx] = array($cd->name);
|
||||||
|
} else if ($cd->key == 'UNI') {
|
||||||
|
// Individual unique-value indexes are only per-column
|
||||||
|
// using the old ColumnDef syntax.
|
||||||
|
$idx = "{$tableName}_{$cd->name}_idx";
|
||||||
|
$table['unique keys'][$idx] = array($cd->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $table;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SchemaTableMissingException extends Exception
|
class SchemaTableMissingException extends Exception
|
||||||
|
Loading…
x
Reference in New Issue
Block a user