ajout d'un installeur en ligne
[mtweb] / mw / app / data / impl / mw_pdo_sqlite.php
diff --git a/mw/app/data/impl/mw_pdo_sqlite.php b/mw/app/data/impl/mw_pdo_sqlite.php
new file mode 100644 (file)
index 0000000..4ef1696
--- /dev/null
@@ -0,0 +1,173 @@
+<?php
+
+  class mw_pdo_sqlite{
+
+    var $link;
+
+    var $host;
+    var $base;
+    var $user;
+    var $password;
+
+    var $EXTENTION_OK;
+
+    function get_link(){
+      return $this->link;
+    }
+
+    function extention_ok(&$env) { return $this->EXTENTION_OK; }
+
+    function authentication_required() { return false; }
+
+    function sgbd_name() { return "PDO SQLite"; }
+
+    function mw_pdo_sqlite($params = array()){
+      $this->host = isset($params["host"]) ? $params["host"] : "content/data/sqlite";
+      $this->base = isset($params["base"]) ? $params["base"] : "mtweb.db";
+      $this->user = isset($params["user"]) ? $params["user"] : "";
+      $this->password = isset($params["password"]) ? $params["password"] : "";
+      $this->EXTENTION_OK = (extension_loaded("pdo") && extension_loaded("pdo_sqlite"));
+    }
+
+    function connect($host, $base, $user, $password){
+      if($host) $host .= substr($host, -1) != "/" ? "/" : "";
+      try{
+        $this->link = null;
+        $this->link = new PDO("sqlite:".$host.$base);
+        $this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+        $this->link->query("PRAGMA encoding = 'UTF-8'");
+      }
+      catch(PDOException $e){
+        throw new Exception($this->exception_out("Impossible d'etablir une connection au serveur"));
+      }
+      return true;
+    }
+
+    function select_db($db_name){\r
+      $this->base = $db_name;\r
+      return $this->connect($this->host, $this->base, $this->user, $this->password);\r
+    }
+
+    function desc_table($table_name){
+      $sql = "SELECT * from information_schema.columns where table_name='".$table_name."'";
+      $rst = $this->query($sql);
+      $desc = array(
+        "name" => $table_name,
+        "attributs" => array()
+      );
+      try{
+        while($v_rst = $this->fetch_assoc($rst)){\r
+          $desc["attributs"][$v_rst["COLUMN_NAME"]] = array(
+            "name" => $v_rst["COLUMN_NAME"],
+            "prymary_key" => $v_rst["COLUMN_KEY"] == "PRI" ? true : false,
+            "auto_increment" => $v_rst["EXTRA"] == "auto_increment" ? true : false
+          );
+        }\r
+        $this->free_result($rst);
+      }
+      catch(Exception $e){
+        throw new Exception($this->exception_out("Impossible de lire la description de la table"));
+      }
+      return $desc;
+    }
+
+    function table_exists($table_name){
+      if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password);\r
+      $EXISTS = false;
+      try{
+        $rst = $this->query("SELECT name FROM sqlite_master WHERE type='table'");
+        while($v_rst = $rst->fetch()){\r
+          if($v_rst[0] == $table_name){
+            $EXISTS = true;
+            break;
+          }\r
+        }\r
+        $this->free_result($rst);
+      }
+      catch(Exception $e){
+        throw new Exception($this->exception_out("Impossible de savoir si la table existe"));
+      }
+      return $EXISTS;\r
+    }
+
+    function field_exists($table_name, $field_name){
+      if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password);\r
+      if(!($desc = $this->desc_table($table_name))){
+        throw new Exception($this->exception_out("Impossible de lire la description de la table"));
+      }
+      $EXISTS = false;
+      foreach($desc["attributs"] as $attribut_name => $attribut){
+        if($field_name == $attribut_name){
+          $EXISTS = true;
+          break;
+        }
+      }
+      return $EXISTS;
+    }
+
+    function query($query_string){\r
+      if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password);\r
+      if(!($result = $this->link->query($query_string))){
+        throw new Exception($this->exception_out("Syntaxe invalide dans une requete"));
+      }
+      return $result;\r
+    }
+
+    function fetch_assoc($rst){
+      if(!$this->link){
+        throw new Exception($this->exception_out("fetch_assoc sans connexion"));
+      }
+      if(!$rst){
+        throw new Exception($this->exception_out("fetch_assoc sans result handler"));
+      }
+      try{
+        $tuple = $rst->fetch(PDO::FETCH_ASSOC);
+      }
+      catch(Exception $e){
+        throw new Exception($this->exception_out("erreur fetch_assoc"));
+      }
+      return $tuple;
+    }
+
+    function insert_id(){
+      if(!$this->link){
+        throw new Exception($this->exception_out("insert_id sans connexion"));
+      }
+      try{
+        $id = $this->link->lastInsertId();
+      }
+      catch(Exception $e){
+        throw new Exception($this->exception_out("erreur insert_id"));
+      }
+      return $id;
+    }
+
+    function free_result($rst){
+      if(!$this->link){
+        throw new Exception($this->exception_out("free_result sans connexion"));
+      }
+      if(!$rst){
+        throw new Exception($this->exception_out("free_result sans result handler"));
+      }
+      try{
+        $rst->closeCursor();
+        $rst = null;
+      }
+      catch(Exception $e){
+        throw new Exception($this->exception_out("erreur free_result"));
+      }
+      return true;
+    }
+
+    function close(){
+      $this->link = null;
+      return true;
+    }
+
+    function exception_out($message){\r
+      return "[erreur] sqlite : ".$message;\r
+    }
+
+  }
+
+?>
\ No newline at end of file