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

Reply via email to