I’m trying to use sqlite3 as my testing engine for cruisecontrol (I’m
using Geoffrey Grossenbach’s memory-test-fix plugin for this). When CC
tries to build the schema in sqlite3, this occurs:
[snip]
– add_index(“events”, [“bookmark_id”], {:name=>“bookmark_id”})
-> 0.0005s
[other stuff snipped]
– add_index(“flags”, [“bookmark_id”], {:name=>“bookmark_id”})
/usr/bin/ruby -Ilib:test “/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/
rake/rake_test_loader.rb” SQLite3::SQLException: index bookmark_id
already exists: CREATE INDEX “bookmark_id” ON flags (“bookmark_id”)
Based on this error, it seems to me that the namespace for indexes in
sqlite3 is database-wide, so when i make a bookmark_id index for
events, i can’t make the same index named “bookmark_id” on the flags
table.
So I thought I’d give an explicit name to each index, hoping that the
sqlite3-ruby gem would honor it. I changed my migrations to say this:
execute "alter table events add index bookmark_id_idx_events
(bookmark_id)"
execute “alter table flags add index bookmark_id_idx_flags
(bookmark_id)”
…and it looks like the schema.rb picks up the change:
add_index “events”, [“bookmark_id”], :name =>
“bookmark_id_idx_events”
add_index “flags”, [“bookmark_id”], :name => “bookmark_id_idx_flags”
…but when sqlite3 runs the schema.rb to build the db, it is ignoring
the :name attribute, tries to make a second bookmark_id index, and
keeps giving the same error.
My questions are:
- does the sqlite3-ruby gem support named indexes?
- If so, what am I doing wrong?
All advice is greatly appreciated!
Thanks,
-Jason