upgrade 0.11.2 pour XML, MySql et SQLite
[mtweb] / mw / app / data / modules / sql / mw_data_sql_crud.php
index 0d9abbd..3d1d210 100644 (file)
@@ -3,6 +3,175 @@
   class mw_data_sql_crud extends mw_data{
 
     # ----------------------------------------------------------------------------------------
+    #                                                                       parametres du sgbd
+    #
+
+    function set_sgbd_param($key, $value){
+      $env = $this->env();
+      if(($env->bdd("sgbd") == "pdo_mysql") || ($env->bdd("sgbd") == "mysql")){
+        return $this->set_sgbd_mysql_param($key, $value);
+      }
+      return false;
+    }
+
+    function set_sgbd_mysql_param($key, $value){
+      $sgbd = $this->sgbd();
+      $sql = "SET ".$key."=\"".$value."\"";
+      try{
+        $sgbd->query($sql);
+      }
+      catch(Exception $e){
+        return false;
+      }
+      return true;
+    }
+
+    # ----------------------------------------------------------------------------------------
+    #                                                                             create table
+    #
+
+    function data_create_table($params){
+      $env = $this->env();
+      if($env->bdd("sgbd") == "pdo_sqlite"){
+        return $this->data_create_sqlite_table($params);
+      }
+      return $this->data_create_mysql_table($params);
+    }
+
+    function data_create_mysql_table($params){
+      $sgbd = $this->sgbd();
+      $table_name = isset($params["table_name"]) ? $params["table_name"] : "";
+      $fields = isset($params["fields"]) ? $params["fields"] : array();
+      $keys = isset($params["keys"]) ? $params["keys"] : array();
+      $options = isset($params["options"]) ? $params["options"] : array();
+      if(!$table_name || !$fields) return false;
+      $sql_fields = "";
+      $sql_keys = "";
+      $sql_options = "";\r
+      foreach($fields as $field_name => $field){
+        if(!preg_match("/^[a-z]+[a-z_0-9]*$/", $field_name)) return false;
+        if(!isset($field["type"])) return false;
+        $sql_field = "";
+        switch($field["type"]){
+          case "int":
+            $value = isset($field["value"]) ? $field["value"] : "11";
+            if(!preg_match("/^[0-9]+$/", $value)) return false;
+            $sql_field .= "`".$field_name."` int(".$value.")";
+            break;
+          case "varchar":
+            $value = isset($field["value"]) ? $field["value"] : "255";
+            if(!preg_match("/^[0-9]+$/", $value)) return false;
+            $sql_field .= "`".$field_name."` varchar(".$value.")";
+            break;
+          case "text":
+            $sql_field .= "`".$field_name."` text";
+            break;
+          case "date":
+            $sql_field .= "`".$field_name."` date";
+            break;
+          case "datetime":
+            $sql_field .= "`".$field_name."` datetime";
+            break;
+        }
+        if($sql_field){
+          $null = isset($field["null"]) ? $field["null"] : false;
+          $sql_field .= ($null ? " DEFAULT" : " NOT")." NULL";
+          if($null && isset($field["default"])){
+            $sql_field .= " DEFAULT ".$this->eq($field["default"]);
+          }
+          if(isset($field["autoincrement"]) && $field["autoincrement"]){
+            $sql_field .= " AUTO_INCREMENT";
+          }
+          $sql_fields .= ($sql_fields ? ", " : "").$sql_field;
+        }
+      }
+      $key_index = 0;
+      foreach($keys as $key){
+        $key_index++;
+        $sql_key_fields = "";
+        foreach($key["fields"] as $key_field){
+          $sql_key_fields .= ($sql_key_fields ? "," : "")."`".$key_field."`";
+        }
+        $sql_key = "KEY `#--".$table_name."_".$key_index."`(".$sql_key_fields.")";
+        if(isset($key["primary"]) && $key["primary"]){
+          $sql_key = "PRIMARY ".$sql_key;
+        }
+        $sql_keys .= ($sql_keys ? ", " : "").$sql_key;
+      }
+      foreach($options as $option_name => $option_value){
+        switch($option_name){
+          case "default_charset":
+            $sql_options .= " DEFAULT CHARSET=".$option_value;
+            break;
+        }
+      }
+      $sql = "CREATE TABLE `#--".$table_name."`(".$sql_fields.", ".$sql_keys.")".$sql_options;
+      try{
+        $sgbd->query($sql);
+      }
+      catch(Exception $e){
+        return false;
+      }
+      return true;
+    }
+
+    function data_create_sqlite_table($params){
+      $sgbd = $this->sgbd();
+      $table_name = isset($params["table_name"]) ? $params["table_name"] : "";
+      $fields = isset($params["fields"]) ? $params["fields"] : array();
+      $keys = isset($params["keys"]) ? $params["keys"] : array();
+      $options = isset($params["options"]) ? $params["options"] : array();
+      if(!$table_name || !$fields) return false;
+      $sql_fields = "";
+      $sql_keys = "";
+      $sql_options = "";\r
+      foreach($fields as $field_name => $field){
+        if(!preg_match("/^[a-z]+[a-z_0-9]*$/", $field_name)) return false;
+        if(!isset($field["type"])) return false;
+        $sql_field = "";
+        switch($field["type"]){
+          case "int":
+            $sql_field .= "`".$field_name."` INTEGER";
+            break;
+          case "varchar":
+          case "text":
+          case "date":
+          case "datetime":
+            $sql_field .= "`".$field_name."` TEXT";
+            break;
+        }
+        if($sql_field){
+          $null = isset($field["null"]) ? $field["null"] : false;
+          $sql_field .= ($null ? " DEFAULT" : " NOT")." NULL";
+          if($null && isset($field["default"])){
+            $sql_field .= " DEFAULT ".$this->eq($field["default"]);
+          }
+          $sql_fields .= ($sql_fields ? ", " : "").$sql_field;
+        }
+      }
+      $key_index = 0;
+      foreach($keys as $key){
+        if(isset($key["primary"]) && $key["primary"]){
+          $key_index++;
+          $sql_key_fields = "";
+          foreach($key["fields"] as $key_field){
+            $sql_key_fields .= ($sql_key_fields ? "," : "")."`".$key_field."`";
+          }
+          $sql_key = "PRIMARY KEY (".$sql_key_fields.")";
+          $sql_keys .= ($sql_keys ? ", " : "").$sql_key;
+        }
+      }
+      $sql = "CREATE TABLE `#--".$table_name."`(".$sql_fields.", ".$sql_keys.")".$sql_options;
+      try{
+        $sgbd->query($sql);
+      }
+      catch(Exception $e){
+        return false;
+      }
+      return true;
+    }
+
+    # ----------------------------------------------------------------------------------------
     #                                                                              description
     #