The upgrade to Rails 1.1 hurt my ability to run tests because it
generated the following MySQL error:
Mysql::Error: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to
use near 'key ON config (key)' at line 1: CREATE UNIQUE INDEX key ON
config (key)
I have a table called `config` with a column `key` which should be
unique. I'm guessing "key" is a MySQL keyword and just needs to be quoted?
Following rake --trace I got:
** Execute db:schema:load
rake aborted!
Mysql::Error: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to
use near 'key ON config (key)' at line 1: CREATE UNIQUE INDEX key ON
config (key)
.../lib/active_record/connection_adapters/abstract_adapter.rb:120:in
`log'
.../lib/active_record/connection_adapters/mysql_adapter.rb:185:in
`execute'
.../lib/active_record/connection_adapters/abstract/schema_statements.r
b:196:in `add_index'
Which led me to the conclusion that the problem was in the add_index
method of the SchemaStatements module. I added this method to the MySQL
connection adapter and changed:
execute "CREATE #{index_type} INDEX #{index_name} ON #{table_name}
(#{Array(column_name).join(", ")})"
To:
execute "CREATE #{index_type} INDEX `#{index_name}` ON #{table_name}
(#{Array(column_name).map{ |e| "`#{e}`"}.join(", ")})"
And the problem went away. Is this just a MySQL issue or would the
problem be common across all databases? I would like to submit a patch
for this if I can. Are there other places that would benefit from
backticks to avoid problems which occur because key words are used as
table or column names?
--
John Long
http://wiseheartdesign.com
_______________________________________________
Rails-core mailing list
[email protected]
http://lists.rubyonrails.org/mailman/listinfo/rails-core