[Nitro] Sqlite bug fix patch for og 0.18.1

George Moschovitis george.moschovitis at gmail.com
Thu Jun 2 05:39:21 EDT 2005


Hello, thanks for the reports!

I 'll fix it ASAP and  send you an updated gem. 

regards,
George.

On 6/2/05, Ghislain Mary <nospam at lunacymaze.org> wrote:
> I found a bug, still in the sqlite store. Here's a little program that
> shows the wrong behaviour:
> 
> 
> require 'og'
> 
> # Enables debug.
> $DBG = true
> 
> # A class representing a blog Entry.
> class Entry
> 
>    property :title, String
>    property :body, String
> 
>    has_many :comments, Comment
> 
>    def initialize(body = nil)
>      @body = body
>    end
> 
>    def to_s
>      @body
>    end
> 
> end
> 
> 
> # A class representing a Comment to a blog Entry.
> class Comment
> 
>    property :body, String
> 
>    belongs_to Entry
> 
>    def initialize(body = nil)
>      @body = body
>    end
> 
>    def to_s
>      @body
>    end
> 
> end
> 
> 
> 
> # Initializes Og.
> manager = Og.setup(
>    :destroy  => true,   # Destroy tables created from earlier runs.
>    :store    => 'sqlite',
>    :name     => 'ogtest'
> )
> 
> 
> # Create an Entry.
> e1 = Entry.create('Body1')
> p e1
> 
> # Test the creation of a Comment.
> c1 = Comment.create('Comment1')
> p c1
> 
> # Attach a Comment to an Entry.
> c1.entry = e1
> c1.save
> 
> 
> The problem here is that when created, the Entry has an oid of 0 whereas
> in the database the oid for this row is 1. So the attachement of a
> Comment to the Entry has no effect because refering an unknown Entry.
> Here is a patch incorporating the last one, fixing this problem and also
> enabling the printing of queries when debug is on:
> 
> 
> diff -ru og-0.18.1/lib/og/store/sqlite.rb
> og-0.18.1-modified/lib/og/store/sqlite.rb
> --- og-0.18.1/lib/og/store/sqlite.rb    Fri May 20 13:52:50 2005
> +++ og-0.18.1-modified/lib/og/store/sqlite.rb   Wed Jun  1 23:00:06 2005
> @@ -14,6 +14,7 @@
> 
>   class SQLite3::ResultSet
>          alias_method :blank?, :eof?
> +       alias_method :fields, :columns
> 
>          def each_row
>                  each do |row|
> @@ -96,6 +97,10 @@
>                  @conn.rollback if @transaction_nesting < 1
>          end
> 
> +        def last_insert_rowid
> +                conn.query("SELECT last_insert_rowid()").first_value.to_i
> +        end
> +
>   private
> 
>          def create_table(klass)
> @@ -182,8 +187,8 @@
>                  klass.class_eval %{
>                          def og_insert(store)
>                                  #{Aspects.gen_advice_code(:og_insert,
> klass.advices, :pre) if klass.respond_to?(:advices)}
> -                               store.conn.query("#{sql}").close
> -                               @#{pk} = store.conn.last_insert_row_id
> +                               store.query("#{sql}").close
> +                               @#{pk} = store.last_insert_rowid
>                                  #{Aspects.gen_advice_code(:og_insert,
> klass.advices, :post) if klass.respond_to?(:advices)}
>                          end
>                  }
> 
> 
> Ghislain
> _______________________________________________
> Nitro-general mailing list
> Nitro-general at rubyforge.org
> http://rubyforge.org/mailman/listinfo/nitro-general
> 


-- 
http://nitro.rubyforge.org
http://www.joy.gr




More information about the Nitro-general mailing list