public function describe($entity, $fields = array(), array $meta = array())
{
$params = compact('entity', 'meta', 'fields');
return $this->_filter(__METHOD__, $params, function ($self, $params) {
extract($params);
if ($fields) {
return $self->invokeMethod('_instance', array('schema', compact('fields')));
}
$name = $self->invokeMethod('_entityName', array($entity, array('quoted' => true)));
$columns = $self->read("DESCRIBE {$name}", array('return' => 'array', 'schema' => array('field', 'type', 'null', 'key', 'default', 'extra')));
$fields = array();
foreach ($columns as $column) {
$schema = $self->invokeMethod('_column', array($column['type']));
$default = $column['default'];
if ($default === 'CURRENT_TIMESTAMP') {
$default = null;
} elseif ($schema['type'] === 'boolean') {
$default = !!$default;
}
$fields[$column['field']] = $schema + array('null' => $column['null'] === 'YES' ? true : false, 'default' => $default);
}
return $self->invokeMethod('_instance', array('schema', compact('fields')));
});
}