public function describe($entity, $fields = [], array $meta = []) {
		$params = compact('entity', 'meta', 'fields');

		return Filters::run($this, __FUNCTION__, $params, function($params) {
			extract($params);

			if ($fields) {
				return $this->_instance('schema', compact('fields'));
			}
			$name = $this->_entityName($entity, ['quoted' => true]);
			$columns = $this->read("PRAGMA table_info({$name})", ['return' => 'array']);
			$fields = [];

			foreach ($columns as $column) {
				$schema = $this->_column($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 + [
					'null' => $column['notnull'] === '1',
					'default' => $default
				];
			}
			return $this->_instance('schema', compact('fields'));
		});
	}