* @author Louis Lapointe * @link http://pmo.developpez.com/ * @since PhpMyObject v0.14 * @version $Revision: $ * @copyright Copyright (C) 2007-2008 Nicolas Boiteux * @copyright Copyright (C) 2008 Louis Lapointe * @license GPLv3 {@link http://www.gnu.org/licenses/gpl} * @filesource * */ /** requires the PDO driver */ require_once(dirname(__FILE__).'/PMO_Dbms_Pdo.php'); /** * This class implements a Sqlite driver. * * @package PhpMyObject * @subpackage PMO_Core */ class PMO_Dbms_Sqlite extends PMO_Dbms_Pdo { public function __construct(PDO $pdo = null) { parent::__construct($pdo); } public function __destruct() { parent::__destruct(); } public function connect(array $authdb){ $this->setDb(new PDO($authdb['dsn'])); $this->getDb()->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } /** * returns the table structure. * @param string $table the table name * @return array */ public function getTableDesc($table) { $sql = sprintf('SELECT sql FROM sqlite_master WHERE tbl_name = "%s" ;', addslashes($table)); $this->query($sql); $ExtraSql = $this->fetchArray(); $sql = sprintf('PRAGMA table_info(%s) ;', addslashes($table)); $this->query($sql); foreach($this->result as $row) { if(isset($row[1])) { $Field = $row[1]; } else { throw New Exception("Fatal Error: column doesn't exist"); } if(isset($row[2])) $Type = $row[2]; if ($Field == $this->getAutoincrementColumn($ExtraSql)) $Extra = "auto_increment"; else $Extra = ""; if(!empty($row[3])) $Null = "YES"; else $Null = "NO"; if(isset($row[4])) $Default = $row[4]; else $Default = ""; if(!empty($row[5])) $Key = "PRI"; else $Key = ""; $tmparray[] = array("Field" => $Field, "Type" => $this->translateType($Type), "Null" => $Null, "Key"=>$Key, "Default"=>$Default, "Extra"=>$Extra, "Perm"=>"rw"); } if(isset($tmparray)) return($tmparray); else throw new Exception("Error: table $table doesn't exist"); } /** * returns the autoincrement column name * * this takes the SQL used to create the table as provided * by the sqlite_master table * * @param string $sql * @return string|FALSE the autoincrement column name or * FALSE if there is no increment column */ private function getAutoincrementColumn($ExtraSql) { $sql = $ExtraSql['sql']; $tmp = explode('(', $sql); $tmp = explode(',', $tmp[1]); foreach ($tmp as $row) { if (FALSE !== stripos($row, 'AUTOINCREMENT')) { $arr = explode(' ', $row); return str_replace('`', '', $arr[0]); } } return FALSE; } } ?>