diff --git a/include/class.orm.php b/include/class.orm.php index c20aaa8a766b4f0c9d8318e41934173b5e639a53..f39442305787ebde322fab28d889272c5bcc170b 100644 --- a/include/class.orm.php +++ b/include/class.orm.php @@ -1668,7 +1668,7 @@ class MySqlCompiler extends SqlCompiler { // Handle deferreds if (isset($defer[$f])) continue; - $fields[] = $rootAlias . '.' . $this->quote($f); + $fields[$rootAlias . '.' . $this->quote($f)] = true; $theseFields[] = $f; } $fieldMap[] = array($theseFields, $model); @@ -1691,10 +1691,14 @@ class MySqlCompiler extends SqlCompiler { // Handle deferreds if (isset($defer[$sr . '__' . $f])) continue; - $fields[] = $alias . '.' . $this->quote($f); + elseif (isset($fields[$alias.'.'.$this->quote($f)])) + continue; + $fields[$alias . '.' . $this->quote($f)] = true; $theseFields[] = $f; } - $fieldMap[] = array($theseFields, $fmodel, $parts); + if ($theseFields) { + $fieldMap[] = array($theseFields, $fmodel, $parts); + } $full_path .= '__'; } } @@ -1704,9 +1708,9 @@ class MySqlCompiler extends SqlCompiler { foreach ($queryset->values as $v) { list($f) = $this->getField($v, $model); if ($f instanceof SqlFunction) - $fields[] = $f->toSql($this, $model); + $fields[$f->toSql($this, $model)] = true; else - $fields[] = $f; + $fields[$f] = true; } } // Simple selection from one table @@ -1716,13 +1720,14 @@ class MySqlCompiler extends SqlCompiler { foreach ($model::$meta['fields'] as $f) { if (isset($queryset->defer[$f])) continue; - $fields[] = $rootAlias .'.'. $this->quote($f); + $fields[$rootAlias .'.'. $this->quote($f)] = true; } } else { - $fields[] = $rootAlias.'.*'; + $fields[$rootAlias.'.*'] = true; } } + $fields = array_keys($fields); // Add in annotations if ($queryset->annotations) { foreach ($queryset->annotations as $A) {