デフォルト(Version 1.5.4)では「サポートしてないよバーカバーカ」と言われてしまうので自力で何とか動かして見たいと思います。
と言うものの、どこから手を着けて良いのかわからなかったので、取りあえず関係ありそうなところを片っ端らからソースを読んでみた。で、わかりました。system/database/drivers/sqlite/sqlite_driver.php の _list_columns()メソッドがノンサポートで system/database/DB_driver.php の list_fields()メソッド内で FALSE を返しているのが原因なようですYO。
通常なら _list_columns()メソッドでカラム名を返すSQLを返すようなのですが、sqliteが対応してないので FALSE を返すようです。そこで DB_driver.php の list_fields()メソッドを sqlite_driver.php 内でオーバーライドしちゃおうと奮起してみました。
*注意* コアライブラリを直接いじるので自己責任&バックアップをお願いプリーズ
とその前に、sqlite_driver.php の count_all()メソッドをいじっておきましょう。いじっておかないとエラーがでてしまうのでね。でも、これいじって大丈夫なのかな?誰かおせーて。
$query = $this->query("SELECT COUNT(*) AS numrows FROM `".$this->dbprefix.$table."`");
の部分を
$query = $this->query("SELECT COUNT(*) AS numrows FROM '".$this->dbprefix.$table."'");
に変更(「`」→「'」)
んでもって、list_fields()メソッドを追加。力業で困難をこんなん風に乗り切る。
function list_fields($table = '')
{
// Is there a cached result?
if (isset($this->data_cache['field_names'][$table]))
{
return $this->data_cache['field_names'][$table];
}
if ($table == '')
{
if ($this->db_debug)
{
return $this->display_error('db_field_param_missing');
}
return FALSE;
}
$sql = "SELECT * FROM ".$this->escape($table)." LIMIT 1";
$query = $this->query($sql);
$retval = array();
if ($query->num_rows() > 0)
{
$row = $query->row_array();
$keys = array_keys($row);
foreach ($keys as $val)
{
if (!is_int($val))
$retval[] = $val;
}
}
$this->data_cache['field_names'][$table] = $retval;
return $this->data_cache['field_names'][$table];
}
で、終了と思ったら大間違い。viewでエラー出ずっぱりになるから、もひとつ修正。
system/scaffolding/Scaffolding.php 76-77行目
$this->lang = $this->CI->load->language('scaffolding', '', TRUE);
$this->CI->load->vars($this->lang);
を
$this->CI->load->language('scaffolding', '', TRUE);
$this->CI->load->vars($this->CI->lang->language);
に変更
これで取りあえず動くはずだ。2日間ぐらい悩んだ自分乙!