#1541: Field Wildcards in Query groupBy
-----------------------------------+----------------------------------------
 Reporter:  craig                  |       Owner:  jwage
     Type:  enhancement            |      Status:  new  
 Priority:  minor                  |   Milestone:       
Component:  Attributes             |     Version:  1.0.2
 Keywords:                         |    Has_test:  0    
 Mystatus:  Pending Core Response  |   Has_patch:  0    
-----------------------------------+----------------------------------------
 I'm a PostgreSQL user, and as such, this doesn't work for me (I hope I
 have the YAML right; it's intended to be a simple one-to-many
 relationship):

 Parent:
   columns:
     pk_id:
       type: integer(4)
       autoincrement: true
       primary: true
     field2:
       type: string(255)
     field3:
       type: string(255)
   attributes:
     export: all
     validate: true

 Child:
   columns:
     pk_id:
       type: integer(4)
       autoincrement: true
       primary: true
     fk_parentid:
       type: integer(4)
     field2:
       type: string(255)
   relations:
     Parent:
       class: Parent
       local: fk_parentid
       foreign: pk_id
       type: one



 $data = Doctrine_Query::create()->select( "p.*, COUNT( c.pk_id) AS
 num_children_matched")
                 ->from( "Parent p, p.Child c")
                 ->where( "c.field2 = ?", array( $var))
                 ->groupBy( "p.pk_id")
                 ->execute();

 It generates a SQL error:
 ERROR:  column "p.field2" must appear in the GROUP BY clause or be used in
 an aggregate function

 Adding field2 to the groupBy causes the error to change to field3, until
 I've manually added every field in the parent table to the groupBy clause.
 I understand that the original example works in MySQL.  I haven't tested
 others.
 I'm annoyed that Postgres requires this.  Since p.pk_id is a unique
 constrait, adding the remaining columns to the groupBy clause is
 redundant.


 Since this is a simplified example, and the real table I'm querying has
 more columns, I'd prefer to write:

 $query->groupBy( "p.*");           // Changed from ->groupBy( "p.pk_id")



 I've attached a patch and test case.  I realize this isn't a good patch;
 it has several side effects that I don't really like.  For example, with
 this patch it's possible to do:
 $query->addWhere( "p.* = 1");

 Doctrine will accept that, but the SQL parsing will fail later, since the
 "p.* = 1" is expanded into the non-parseable "p.pk_id, p.field2, p.field3
 = 1".



 If anybody has some suggestions and/or desire to see this submitted, I'll
 clean it up and re-attach it.

-- 
Ticket URL: <http://trac.phpdoctrine.org/ticket/1541>
Doctrine <http://www.phpdoctrine.org>
PHP Doctrine Object Relational Mapper
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"doctrine-svn" group.
 To post to this group, send email to [email protected]
 To unsubscribe from this group, send email to [EMAIL PROTECTED]
 For more options, visit this group at 
http://groups.google.co.uk/group/doctrine-svn?hl=en-GB
-~----------~----~----~----~------~----~------~--~---

Reply via email to