#3003: SQLite 3 support
----------------------------+-----------------------------------------------
    Reporter:  sebbarre     |         Owner:  Any Developer
        Type:  Enhancement  |        Status:  new          
    Priority:  Low          |     Milestone:  2.0.0.x      
   Component:  General      |       Version:  2.0.x.x      
    Severity:  Trivial      |    Resolution:               
    Keywords:               |   Php_version:  n/a          
Cake_version:               |  
----------------------------+-----------------------------------------------
Comment (by lightglitch):

 I think a found a way, I just convert all the fields in the form of * or
 Table.* into the model field list. It was the best way I could find and
 just needed to override the fields method.

 Here is the patch:


 {{{
 /**
  * Generates the fields list of an SQL query.
  *
  * @param Model $model
  * @param string $alias Alias tablename
  * @param mixed $fields
  * @param boolean $quote If false, returns fields array unquoted
  * @return array
  */
         function fields(&$model, $alias = null, $fields = array(), $quote
 = true) {
                 if (empty($alias)) {
                         $alias = $model->alias;
                 }
                 if (empty($fields)) {
                         $fields = array_keys($model->schema());
                 } elseif (!is_array($fields)) {
                         $fields = String::tokenize($fields);
                 }
                 $fields = array_values(array_filter($fields));

                 if (!$quote) {
                         return $fields;
                 }

         $count = count($fields);
                 if ($count >= 1 && !in_array($fields[0], array('*',
 'COUNT(*)'))) {
                         for ($i = 0; $i < $count; $i++) {
                                 if (!preg_match('/^.+\\(.*\\)/',
 $fields[$i])) {
                                         $prepend = '';
                                         if (strpos($fields[$i],
 'DISTINCT') !== false) {
                                                 $prepend = 'DISTINCT ';
                                                 $fields[$i] =
 trim(str_replace('DISTINCT', '', $fields[$i]));
                                         }
                                         $dot = strpos($fields[$i], '.');

                                         if ($dot === false) {
                                                 $fields[$i] =
 $this->name($alias . '.' . $fields[$i]);
                                         } else {
                                                 $value = array();
                                                 $comma =
 strpos($fields[$i], ',');
                                                 if ($comma === false) {
                                                         $build =
 explode('.', $fields[$i]);
                                                         if
 (!Set::numeric($build)) {
 $fields[$i] = $this->name($build[0] . '.' . $build[1]);
                                                         }
                                                         $comma =
 String::tokenize($fields[$i]);
                                                         foreach ($comma as
 $string) {
                                                                 if
 (preg_match('/^[0-9]+\.[0-9]+$/', $string)) {
 $value[] = $string;
                                                                 } else {
 $build = explode('.', $string);
                                     if (trim($build[1]) == "*") {
                                         $tmpmodelname =
 str_replace($this->startQuote, '', $build[0]);
                                         $tmpmodelname =
 trim(str_replace($this->endQuote, '', $tmpmodelname));
                                         if ($model->name != $tmpmodelname)
 {
                                             $tmpmodel =&
 ClassRegistry::init($tmpmodelname);
                                             $value = array_merge($value,
 $this->fields($tmpmodel));
                                         }
                                         else {
                                             $value = array_merge($value,
 $this->fields($model));
                                         }
                                         //$value[] =
 $this->name(trim($build[0]) . '.' . trim($build[1]));
                                     }
                                     else {
                                         $value[] =
 $this->name(trim($build[0]) . '.' . trim($build[1]));
                                     }
                                                                 }
                                                         }
                                                         $fields[$i] =
 implode(', ', $value);
                                                 }
                                         }
                                         $fields[$i] = $prepend .
 $fields[$i];
                                 } elseif (preg_match('/\(([\.\w]+)\)/',
 $fields[$i], $field)) {
                                         if (isset($field[1])) {
                                                 if (strpos($field[1], '.')
 === false) {
                                                         $field[1] =
 $this->name($alias . '.' . $field[1]);
                                                 } else {
                                                         $field[0] =
 explode('.', $field[1]);
                                                         if
 (!Set::numeric($field[0])) {
                                                                 $field[0]
 = join('.', array_map(array($this, 'name'), $field[0]));
 $fields[$i] = preg_replace('/\(' . $field[1] . '\)/', '(' . $field[0] .
 ')', $fields[$i], 1);
                                                         }
                                                 }
                                         }
                                 }
                         }
                 }
         else if ($count >= 1 && $fields[0] =='*') {
             return $this->fields($model);
         }
                 return array_unique($fields);
         }

 }}}


 What do you think?

-- 
Ticket URL: <https://trac.cakephp.org/ticket/3003#comment:20>
CakePHP : The Rapid Development Framework for PHP <https://trac.cakephp.org/>
Cake is a rapid development framework for PHP which uses commonly known design 
patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. 
Our primary goal is to provide a structured framework that enables PHP users at 
all levels to rapidly develop robust web applications, without any loss to 
flexibility.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"tickets cakephp" group.
To post to this group, send email to tickets-cakephp@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/tickets-cakephp?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to