diff --git a/include/lib/data_sql.class.php b/include/lib/data_sql.class.php index 2fe0698b6..ce6990e0c 100644 --- a/include/lib/data_sql.class.php +++ b/include/lib/data_sql.class.php @@ -75,6 +75,7 @@ abstract class Data_SQL var $primary_key; //! Column name of the primary key var $type; //! Type of the data var $date_format; //! defaullt date format + var $default; function __construct(DatabaseCore $p_cn, $p_id=-1) { @@ -85,9 +86,14 @@ abstract class Data_SQL if (count($this->name) != count($this->type) ){ throw new Exception (__FILE__." $this->table Cannot instantiate"); } + // forbid the use of a column named type , date_format, name or primary_key to avoid conflict + /* Initialize an empty object */ foreach ($this->name as $key) { + if ( in_array($key,['name','type','format_date','cn','date_format','default'] ) ) { + throw new Exception ('DATASQL-94 invalid column name'.$key); + } $this->$key=null; } $this->$pk=$p_id; @@ -127,7 +133,7 @@ abstract class Data_SQL public function set($p_string, $p_value) { if (array_key_exists($p_string, $this->type)) { - $this->$idx=$p_value; + $this->$p_string=$p_value; } else throw new Exception(__FILE__.":".__LINE__.$p_string.'Erreur attribut inexistant '.$p_string); } @@ -217,15 +223,17 @@ abstract class Data_SQL return $this; } /** - * Turn an object (row) into an array + * + * Turn an object (row) into an array, and the key could be prefixed with $prefix + * @param string $prefix before the key * @return array */ - public function to_array() + public function to_array($prefix="") { $array=array(); foreach ($this->name as $key=> $value) { - + $nkey=$prefix.$key; $array[$key]=$this->$key; } return $array; diff --git a/include/lib/noalyss_sql.class.php b/include/lib/noalyss_sql.class.php index 25edb2f57..3c79b4146 100644 --- a/include/lib/noalyss_sql.class.php +++ b/include/lib/noalyss_sql.class.php @@ -87,89 +87,13 @@ require NOALYSS_INCLUDE."/lib/data_sql.class.php"; abstract class Noalyss_SQL extends Data_SQL { - var $default; - function __construct(&$p_cn, $p_id=-1) + + function __construct($p_cn, $p_id=-1) { - $this->cn=$p_cn; - $pk=$this->primary_key; - $this->$pk=$p_id; - // check that the definition is correct - if (count($this->name) != count($this->type) ){ - throw new Exception (__FILE__." $this->table Cannot instantiate"); - } - /* Initialize an empty object */ - foreach ($this->name as $key) - { - $this->$key=null; - } - $this->$pk=$p_id; - /* load it */ - if ($p_id != -1 )$this->load(); + parent::__construct($p_cn, $p_id); } -/** - * Insert or update : if the row already exists, update otherwise insert - */ - public function save() - { - $count = $this->exist(); - - if ($count == 0) - $this->insert(); - else - $this->update(); - } - /** - *@brief get the value thanks the colum name and not the alias (name). - *@see getp - */ - public function get($p_string) - { - if (array_key_exists($p_string, $this->type)) { - return $this->$p_string; - } - else - throw new Exception(__FILE__.":".__LINE__.$p_string.'Erreur attribut inexistant '.$p_string); - } - /** - *@brief set the value thanks the colum name and not the alias (name) - *@see setp - */ - public function set($p_string, $p_value) - { - if (array_key_exists($p_string, $this->type)) { - $this->$p_string=$p_value; - } else - throw new Exception(__FILE__.":".__LINE__.$p_string.'Erreur attribut inexistant '.$p_string); - } - - /** - *@brief set the value thanks the alias name instead of the colum name - *@see get - */ - public function getp($p_string) - { - if (array_key_exists($p_string, $this->name)) { - $idx=$this->name[$p_string]; - return $this->$idx; - } - else - throw new Exception(__FILE__.":".__LINE__.$p_string.'Erreur attribut inexistant '.$p_string); - } - - /** - *@brief set the value thanks the alias name instead of the colum name - *@see set - */ - public function setp($p_string, $p_value) - { - if (array_key_exists($p_string, $this->name)) { - $idx=$this->name[$p_string]; - $this->$idx=$p_value; - } else - throw new Exception(__FILE__.":".__LINE__.$p_string.'Erreur attribut inexistant '.$p_string); - } public function insert() { @@ -244,17 +168,9 @@ abstract class Noalyss_SQL extends Data_SQL $sql.=" where ".$this->primary_key." = $".$idx; $this->cn->exec_sql($sql, $array); } - public function set_pk_value($p_value) - { - $pk=$this->primary_key; - $this->$pk=$p_value; - } - public function get_pk_value() - { - $pk=$this->primary_key; - return $this->$pk; - } - + /*** + * @brief load a row , corresponding to the primary key + */ public function load() { $sql=$this->build_query(); @@ -273,59 +189,6 @@ abstract class Noalyss_SQL extends Data_SQL } } - public function get_info() - { - return var_export($this, true); - } -/** - * @todo ajout vérification type (date, text ou numeric) - * @return int - */ - public function verify() - { - foreach ($this->name as $key) - { - if (trim($this->$key)=='') - $this->$key=null; - } - return 0; - } - - /** - * Transform an array into object - * @param type $p_array - * @return object - */ - public function from_array($p_array) - { - foreach ($this->name as $key=> $value) - { - if (isset($p_array[$value])) - { - $this->$value=$p_array[$value]; - } - else - { - $this->$value=null; - } - } - return $this; - } - /** - * Turn an object (row) into an array, and the key could be prefixed with $prefix - * @param string $prefix before the key - * @return array - */ - public function to_array($prefix="") - { - $array=array(); - foreach ($this->name as $key=> $value) - { - $nkey=$prefix.$key; - $array[$nkey]=$this->$key; - } - return $array; - } /** * @brief retrieve array of object thanks a condition @@ -342,51 +205,13 @@ abstract class Noalyss_SQL extends Data_SQL return $ret; } - /** - * get_seek return the next object, the return of the query must have all the column - * of the object - * @param $p_ret is the return value of an exec_sql - * @param $idx is the index - * @see seek - * @return object - */ - public function next($ret, $i) - { - $array=$this->cn->fetch_array($ret, $i); - return $this->from_array($array); - } /** - * @see next + * return the number of count in the table corresponding to the where condition + * @param string $p_where the condition appended to the SQL select query , where must be given + * @param array $p_array variable from the $p_where condition + * @return type */ - public function get_object($p_ret, $idx) - { - return $this->next($p_ret, $idx); - } - - /** - * @brief return an array of objects. - * Do not use this function if they are too many objects, it takes a lot of memory, - * and could slow down your application. - * @param $cond condition, order... - * @param $p_array array to use for a condition - * @note this function could slow down your application. - */ - function collect_objects($cond='', $p_array=null) - { - if ($p_array != null && ! is_array($p_array) ) - { - throw new Exception(_("Erreur : exec_sql attend un array")); - } - $ret=$this->seek($cond, $p_array); - $max=Database::num_row($ret); - $a_return=array(); - for ($i=0; $i<$max; $i++) - { - $a_return[$i]=clone $this->next($ret, $i); - } - return $a_return; - } public function count($p_where="",$p_array=null) { $count=$this->cn->get_value("select count(*) from $this->table ".$p_where,$p_array); return $count;