public function describe($entity, $fields = array(), array $meta = array())
{
$params = compact('entity', 'meta', 'fields');
$regex = $this->_regex;
return $this->_filter(__METHOD__, $params, function ($self, $params) use($regex) {
extract($params);
if ($fields) {
return $self->invokeMethod('_instance', array('schema', compact('fields')));
}
$name = $self->invokeMethod('_entityName', array($entity, array('quoted' => true)));
$columns = $self->read("PRAGMA table_info({$name})", array('return' => 'array'));
$fields = array();
foreach ($columns as $column) {
$schema = $self->invokeMethod('_column', array($column['type']));
$default = $column['dflt_value'];
if (preg_match("/^'(.*)'/", $default, $match)) {
$default = $match[1];
} elseif ($schema['type'] === 'boolean') {
$default = !!$default;
} else {
$default = null;
}
$fields[$column['name']] = $schema + array('null' => $column['notnull'] === '1', 'default' => $default);
}
return $self->invokeMethod('_instance', array('schema', compact('fields')));
});
}