SourceForge.jp

Cheetan forum

request >> sqlite

ドッグ 2008-02-29 14:52:20

初めまして。
最近はちいたんを好んで使わせていただいておりますが、サーバーがsqlite以外のデーターベースは有料の為にtextsqlにて対処しております。
出来れば対応して頂けると助かります。
最新の「0.8.0.8」で動作確認をした「sqlite.php」です。

--------------------------------------------------class CDBSqlite extends CDBCommon
{
function connect( $config )
{
$connect = sqlite_open( $config[\'db\'] , 0666 );
return $connect;
}

function query( $query, $connect )
{
$this->last_query = $query;
list($usec, $sec) = explode( \" \", microtime() );
$time = (float)$sec + (float)$usec;
$res = sqlite_query( $query, $connect, SQLITE_ASSOC );
list($usec, $sec) = explode( \" \", microtime() );
$this->query_time = ( (float)$sec + (float)$usec ) - $time;
if( $res )
{
if( $last_insert_id = sqlite_last_insert_rowid( $connect ) )
{
$this->last_insert_id = $last_insert_id;
}
}
else
{
$this->last_error = sqlite_last_error( $connect );
}
$this->_push_log();
return $res;
}


function find( $query, $connect )
{
$ret = array();
if( $res = $this->query( $query, $connect ) )
{
while( $row = sqlite_fetch_array( $res ,SQLITE_ASSOC) )
{
array_push( $ret, $row );
}
}

return $ret;
}

function field($field) {
return $field;
}

function count( $query, $connect )
{
if( $res = $this->query( $query, $connect ) )
{
return sqlite_num_rows( $res );
}

return 0;
}

function escape( $str )
{
if( function_exists( \'sqlite_escape_string\' ) )
{
return sqlite_escape_string( $str );
}

return addslashes( $str );
}

}
--------------------------------------------------
「database.php」の変更が必要ですが、こちらで動作は問題ありませんでした。
今後の更新で是非対応していただけると幸いです。

Res  password      


開発者 2008-02-29 18:28:44
ご連絡ありがとうございます。
sqliteのお話をフォーラムでも時々伺いますので、
デフォルトで追加しておこうかと思います。

パスワード      

ドッグ 2008-03-01 21:10:37
ご連絡ありがとうございます。

textsqlの使用暦及びちいたんの使用暦が短いので何ともいえませんが、今までテキストベースでのデーターがPHP標準のロックだけですと飛んだりする事が多いので、フォルダロックやjavascriptなども併用して対処しておりました。
データーが飛ぶなどの心配はサーバーの故障などもあるので絶対とは言えないかと思いますが、データーベースではほぼしなくも問題無いのではと思っております。

デフォルトでの機能\追加楽しみにお待ちしております。

パスワード      

にし@元ネタ 2008-03-10 21:47:14
SQLite標準対応、是非にお願いしまふ。m(_~_)m

パスワード      

ドッグ 2008-04-28 11:01:17
追加での要望です。
大量のデーター挿入を行うと場合SQLITEでは「begin」「commit」が必要なようです。
「0.8.0.8」のpgsql.phpを改良し、「sqlite.php」を作りましたが、begin、commitを行うにあたりモデル内で定義すれば使えるようにはなっています。
コントローラーからも使えるように「common.php」にも変更を加えたい所ですが・・・よろしくお願い致します。

<?php
/*-----------------------------------------------------------------------------
SQLite module for cheetan (http://php.cheetan.net/).
copyright (c) 2007 nebokegao all right reserved.
-----------------------------------------------------------------------------*/
class CDBSqlite extends CDBCommon
{
var $begin = null;

function connect( $config )
{
$connect = sqlite_open( $config[\'db\'] , 0666 );
return $connect;
}

function query( $query, $connect )
{
$this->last_query = $query;
list($usec, $sec) = explode( \" \", microtime() );
$time = (float)$sec + (float)$usec;
if($query == \"begin\" ) $this->set_begin();
if($query == \"commit\" ) $this->set_commit();
$res = sqlite_query( $connect, $query, SQLITE_ASSOC );
list($usec, $sec) = explode( \" \", microtime() );
$this->query_time = ( (float)$sec + (float)$usec ) - $time;
if(empty($this->begin)){
if( $res )
{
if( $last_insert_id = sqlite_last_insert_rowid( $connect ) )
{
$this->last_insert_id = $last_insert_id;
}
}
else
{
$this->last_error = sqlite_last_error( $connect );
}
}
$this->_push_log();
return $res;
}


function find( $query, $connect )
{
$ret = array();
if( $res = $this->query( $query, $connect ) )
{
while( $row = sqlite_fetch_array( $res ,SQLITE_ASSOC) )
{
array_push( $ret, $row );
}
}

return $ret;
}

function field($field) {
return $field;
}

function count( $query, $connect )
{
if( $res = $this->query( $query, $connect ) )
{
return sqlite_num_rows( $res );
}

return 0;
}

function escape( $str )
{
if( function_exists( \'sqlite_escape_string\' ) )
{
return sqlite_escape_string( $str );
}

return addslashes( $str );
}

function set_begin( )
{
$this->begin = true;
}

function set_commit( )
{
$this->begin = null;
}

}
?>
パスワード