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
#