On Nov 15, 6:18 pm, "Skye sh...@#$" <[email protected]> wrote:
> This is in response to the bug report I opened 
> here:http://code.google.com/p/ruby-sequel/issues/detail?id=315
>
> In summary:
>
> When passing 1 value to Model.[] on a table with a composite primary
> key Sequel performs an erroneous query
>
> class PkTest < Sequel::Model(:pk)
>   set_primary_key [ :upc, :code  ]
> end
>
> # MySQL
> PkTest['X1234']
>
> > I, [2010-11-15T01:53:59.991449 #21065]  INFO -- : (0.000272s) SELECT * FROM 
> > `pk` WHERE ((`upc` = 88) AND (`code` = 49)) LIMIT 1
>
> SQL Server (maybe others?) raise a type error here.
>
> Model.[] uses Model.primary_key_hash to build the query. This results
> in:
>
> PkTest.primary_key_hash 'X1234'
>
> > {:upc=>88, :code=>49}
>
> My patch would change this like so:
>
> PkTest.primary_key_hash 'X1234'
>
> > {:upc=>"X1234", :code=>nil}
>
> Which is similar to the current functionality:
>
> PkTest.primary_key_hash ['X1234']
>
> > {:upc=>"X1234", :code=>nil}
>
> This change would make calls to Model.[] that do not include values
> for all of the primary key columns
> create an SQL statement that has the where conditions of the missing
> columns set to  IS NULL.
>
> The alternate is to raise an error if the number of arguments  don't
> match the number of PK columns, which prevents querying a NULL pk (see
> bug report link).
>
> Thoughts?

I think the alternate version is best. Primary key values should never
be NULL (even if some broken databases allow that).  However, I'd like
to get the community's input before I make a decision.

Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" 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.com/group/sequel-talk?hl=en.

Reply via email to