hello list,
class Advertiser < ActiveRecord::Base
set_table_name "INSERENT"
set_primary_key "INSNR"
has_many :priv_properties,
:class_name => "PrivProperty",
:foreign_key => "MAKNR"
end
produces wrong sql selelect.
so the searched value is NULL
ins = Advertiser.find(100050)
select * from objpriv where objpriv.maknr = NULL;
it should be
select * from objpriv where objpriv.maknr = 100050;
so
ins.quoted_id gets NULL
does activerecord handle the id wrong?
should i add ticket on dev.rubyonrails.org?
best regards
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
module ActiveRecord
module ConnectionAdapters # :nodoc:
module Quoting
# Quotes the column value to help prevent
# {SQL injection attacks}[http://en.wikipedia.org/wiki/
SQL_injection].
def quote(value, column = nil)
# records are quoted as their primary key
return value.quoted_id if value.respond_to?(:quoted_id)
case value
when String, ActiveSupport::Multibyte::Chars
value = value.to_s
if column && column.type == :binary &&
column.class.respond_to?(:string_to_binary)
"#{quoted_string_prefix}''#{quote_string(column.class.string_to_binary(value))}''"
# '' (for ruby-mode)
elsif column && [:integer, :float].include?(column.type)
value = column.type == :integer ? value.to_i :
value.to_f
value.to_s
else
"#{quoted_string_prefix}''#{quote_string(value)}''" #
'' (for ruby-mode)
end
when NilClass then "NULL"
when TrueClass then (column && column.type
== :integer ? ''1'' : quoted_true)
when FalseClass then (column && column.type
== :integer ? ''0'' : quoted_false)
when Float, Fixnum, Bignum then value.to_s
# BigDecimals need to be output in a non-normalized form and
quoted.
when BigDecimal then value.to_s(''F'')
else
if value.acts_like?(:date) || value.acts_like?(:time)
"''#{quoted_date(value)}''"
else
"#{quoted_string_prefix}''#{quote_string(value.to_yaml)}''"
end
end
end
...
so i saw the method quote and the case select which returns "NULL" if
value is a NilClass
but why its NilClass?
hmm
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
On 12 Oct 2007, at 10:53, inriz wrote:> > hello list, > > class Advertiser < ActiveRecord::Base > set_table_name "INSERENT" > set_primary_key "INSNR" > > has_many :priv_properties, > :class_name => "PrivProperty", > :foreign_key => "MAKNR" > end > > produces wrong sql selelect. > so the searched value is NULL > > ins = Advertiser.find(100050) > > select * from objpriv where objpriv.maknr = NULL; > it should be > select * from objpriv where objpriv.maknr = 100050; >Given what you''ve told AR, I would expect the sql generated to be select * from INSERENT where INSNR = 100050; since you''ve asked AR to find you the instance of Advertiser with primary key value 100050 and you''ve told it that the table name is INSERENT and the primary key INSNR Are you sure you''ve pasted the right bit of sql? Fred> so > ins.quoted_id gets NULL > > does activerecord handle the id wrong? > > should i add ticket on dev.rubyonrails.org? > > > best regards > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
dear frederick,
im a step forward. so i changed the my model see below:
class Advertiser < ActiveRecord::Base
set_table_name :inserent
set_primary_key :insnr
has_many :priv_properties,
:class_name => "PrivProperty",
:foreign_key => "MAKNR"
end
so set_table_name and set_primary_key must have a :hash? in my book,
agile webdevelopment from dhh, he wrote a normal string?
but it works if i call ins.id
there is a none nil result ;-)
so columns_hash expected a string an the code converts a hash? to_s ?
def column_for_attribute(name)
self.class.columns_hash[name.to_s]
end
now im quite happy but the association always doesnt work.
so AR creates the following sql
SELECT * FROM OBJPRIV WHERE (OBJPRIV.MAKNR = 100050.0)
i wonder, why the its a floating point number.
basicly the behavior is rigth ;-) but this, floating point number seam
to be scary?
many thanks
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
On 12 Oct 2007, at 11:20, inriz wrote:> > dear frederick, > > im a step forward. so i changed the my model see below: > > class Advertiser < ActiveRecord::Base > set_table_name :inserent > set_primary_key :insnr > > has_many :priv_properties, > :class_name => "PrivProperty", > :foreign_key => "MAKNR" > end > > so set_table_name and set_primary_key must have a :hash? in my book, > agile webdevelopment from dhh, he wrote a normal string?Strings should work absolutely fine. Not sure why you''re talking about hashes.> > def column_for_attribute(name) > self.class.columns_hash[name.to_s] > end > > now im quite happy but the association always doesnt work. > > so AR creates the following sql > > SELECT * FROM OBJPRIV WHERE (OBJPRIV.MAKNR = 100050.0) > > i wonder, why the its a floating point number. > basicly the behavior is rigth ;-) but this, floating point number seam > to be scary? >I can''t guess without seeing the code calling this. Fred --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
ok lets speak some code snippet
##################
# version 1 start
class Advertiser < ActiveRecord::Base
set_table_name "INSERENT"
set_primary_key "INSNR"
has_many :priv_properties,
:class_name => "PrivProperty",
:foreign_key => "MAKNR"
end
ruby script/console:
>> ins = Advertiser.find(100050)
... display resultset>> ins.id
=> nil>> ins.priv_properties
=> []
ins.priv_properties produces the follow sql statement
SELECT * FROM OBJPRIV WHERE (OBJPRIV.MAKNR = NULL)
so ins.id is a NilClass and the quote method returns NULL
# ende
##################
##################
# version 2 start
class Advertiser < ActiveRecord::Base
set_table_name "INSERENT"
set_primary_key :insnr
has_many :priv_properties,
:class_name => "PrivProperty",
:foreign_key => "MAKNR"
end
ruby script/console:
>> ins = Advertiser.find(100050)
... display resultset>> ins.id
=>
#<BigDecimal:3fd2c8c,''0.10005E6'',8(12)>>> ins.priv_properties
=> []
ins.priv_properties produces the follow sql statement
SELECT * FROM OBJPRIV WHERE (OBJPRIV.MAKNR = 100050.0)
so ins.id returns the bigdecimal and the sql statement will be filled
with the right value in the condition area
the only thing i changed, was the options under set_primary_key from
string "INSNR" to a hash :insnr
(is it the right spelling?)
# ende
##################
the next problem is the bigdecimal typed id
standard rails created database schematas will return only the value
of id without any kind of
type information and so on
in this case, the id is mapped to "INSNR" of my legacy table and that
produces => #<BigDecimal:3fd2c8c,''0.10005E6'',8(12)>
its okay, but the foreign_key is a char(10) so its a difference
between 100050 100050.0
for an integer column its no difference but it isnt proper for my
eyes ;-)
so for the current integration of the legacy tables, the bigdecimal
column should be a clear integer ...
ins.id.to_i returns the right value for the condition
additionally, if i scaffold the INSERENT table the ids also are
floating point numbers
why?
many thanks to you
best regards
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
On 12 Oct 2007, at 13:50, inriz wrote:> > so ins.id returns the bigdecimal and the sql statement will be filled > with the right value in the condition area > the only thing i changed, was the options under set_primary_key from > string "INSNR" to a hash :insnr > (is it the right spelling?) >You mean symbol, not hash. I''ve no idea why that would make a difference> > > the next problem is the bigdecimal typed id > standard rails created database schematas will return only the value > of id without any kind of > type information and so on > > in this case, the id is mapped to "INSNR" of my legacy table and that > produces => #<BigDecimal:3fd2c8c,''0.10005E6'',8(12)> > its okay, but the foreign_key is a char(10) so its a difference > between 100050 100050.0 > for an integer column its no difference but it isnt proper for my > eyes ;-) >> so for the current integration of the legacy tables, the bigdecimal > column should be a clear integer ... > ins.id.to_i returns the right value for the condition > > additionally, if i scaffold the INSERENT table the ids also are > floating point numbers > why? >What are the types of the database columns. If you''ve actually declared them as big decimals what rails is doing seems reasonable, if not what you want. Fred --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 12 Okt., 15:14, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On 12 Oct 2007, at 13:50, inriz wrote: > > > so ins.id returns the bigdecimal and the sql statement will be filled > > with the right value in the condition area > > the only thing i changed, was the options under set_primary_key from > > string "INSNR" to a hash :insnr > > (is it the right spelling?) > > You mean symbol, not hash. I''ve no idea why that would make a difference > > > > > > > the next problem is the bigdecimal typed id > > standard rails created database schematas will return only the value > > of id without any kind of > > type information and so on > > > in this case, the id is mapped to "INSNR" of my legacy table and that > > produces => #<BigDecimal:3fd2c8c,''0.10005E6'',8(12)> > > its okay, but the foreign_key is a char(10) so its a difference > > between 100050 100050.0 > > for an integer column its no difference but it isnt proper for my > > eyes ;-) > > > so for the current integration of the legacy tables, the bigdecimal > > column should be a clear integer ... > > ins.id.to_i returns the right value for the condition > > > additionally, if i scaffold the INSERENT table the ids also are > > floating point numbers > > why? > > What are the types of the database columns. If you''ve actually > declared them as big decimals what rails is doing seems reasonable, > if not what you want. > > Fredyes, symbol was the right name ;-) the column maknr is a char(10) in the table objpriv fortunately, our databases, firebird, support sql statements like select * from objpriv where maknr = 100050 without apostrophe of a char(10) select * from objpriv where maknr = 100050.0 on an integer column 100050 and 100050.0 are same but on a char column its not the same so thats my problem --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
so another breakpoint the database, were using firebird, has to types integer and bigint the ruby firebird adapter uses bigint and bigint is mapped via bigdecimal so the behavior, using bigdecimal is defined by the adapter and the floating point number is right there are many things to get involved the fireruby adapter is old and have many bugs with firebird 2.0 On 12 Okt., 15:27, inriz <matthias.zirnst...-Mmb7MZpHnFY@public.gmane.org> wrote:> On 12 Okt., 15:14, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > wrote: > > > > > On 12 Oct 2007, at 13:50, inriz wrote: > > > > so ins.id returns the bigdecimal and the sql statement will be filled > > > with the right value in the condition area > > > the only thing i changed, was the options under set_primary_key from > > > string "INSNR" to a hash :insnr > > > (is it the right spelling?) > > > You mean symbol, not hash. I''ve no idea why that would make a difference > > > > the next problem is the bigdecimal typed id > > > standard rails created database schematas will return only the value > > > of id without any kind of > > > type information and so on > > > > in this case, the id is mapped to "INSNR" of my legacy table and that > > > produces => #<BigDecimal:3fd2c8c,''0.10005E6'',8(12)> > > > its okay, but the foreign_key is a char(10) so its a difference > > > between 100050 100050.0 > > > for an integer column its no difference but it isnt proper for my > > > eyes ;-) > > > > so for the current integration of the legacy tables, the bigdecimal > > > column should be a clear integer ... > > > ins.id.to_i returns the right value for the condition > > > > additionally, if i scaffold the INSERENT table the ids also are > > > floating point numbers > > > why? > > > What are the types of the database columns. If you''ve actually > > declared them as big decimals what rails is doing seems reasonable, > > if not what you want. > > > Fred > > yes, symbol was the right name ;-) > the column maknr is a char(10) in the table objpriv > fortunately, our databases, firebird, support sql statements > like select * from objpriv where maknr = 100050 without apostrophe > of a char(10) > select * from objpriv where maknr = 100050.0 > > on an integer column 100050 and 100050.0 are same > but on a char column its not the same > so thats my problem--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---