Schema Generator 1.0.2, now with SQL Server support

Posted by Scott Laird Thu, 05 Jan 2006 16:48:46 GMT

I just released a new version of my Rails Schema Generator;. There are two changes in this release:

  • Migrations should finally work correctly using either old-style (1_migrate_to_foo) or new-style (001_migrate_to_foo) numbering.
  • SQL Server support has been added.

There’s also some support for Oracle hiding in the tree, but it’s disabled as I can’t see a way to get it to work without having all of the Oracle OCI libraries installed. So, if you’re using Oracle with Rails, and you care, try uncommenting the Oracle line in schema_generator.rb and then leave a comment telling me what happens.

Tags , ,  | 5 comments | no trackbacks

Comments

  1. Paul Hart said about 1 hour later:

    Much appreciated.

  2. Roberto said about 11 hours later:

    with rails 1.0 on windows XP I get the following errors:

    C:\Projects\workspace\railsapp>ruby script/generate schema Found 2 migration classes Starting migration for InitialSchema Starting migration for InitAdmin Migrations complete. Tables found: 8 Indexes found: 0 Records found: 1 exists db create db/schema.mysql.sql Error: undefined method each_hash' for #<String:0x3d92fb8> ./script/../config/../vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:325:inselect’ ./script/../config/../vendor/rails/activerecord/lib/activerecord/connectionadapters/mysql_adapter.rb:171:in select_all' ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:431:infind_by_sql’ ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:395:in find' ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:393:infind’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:502:in validates_uniqueness_of' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:490:invalidates_each’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:293:in each' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:293:invalidates_each’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:290:in call' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:769:inrun_validations’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:763:in each' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:763:inrun_validations’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:727:in valid_without_callbacks' ./script/../config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:306:invalid?’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:697:in save_without_transactions' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:insave’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:in transaction' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:91:intransaction’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:118:in transaction' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:insave’ ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:450:in create' c:/ruby/lib/ruby/gems/1.8/gems/schema_generator-1.0.2/schema_generator.rb:336:indump’ c:/ruby/lib/ruby/gems/1.8/gems/schemagenerator-1.0.2/schemagenerator.rb:335:in each' c:/ruby/lib/ruby/gems/1.8/gems/schema_generator-1.0.2/schema_generator.rb:335:indump’ (erb):8:in template' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:271:intemplate’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:268:in file' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:219:inopen’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:219:in file' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:218:inopen’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:218:in file' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:268:intemplate’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:47:in send' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:47:insend_actions’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:46:in each' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:46:insend_actions’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:31:in replay' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:41:ininvoke!’ ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../scripts.rb:31:in run' ./script/../config/../vendor/rails/railties/lib/commands/generate.rb:6 c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:inrequire__’ c:/ruby/lib/ruby/siteruby/1.8/rubygems/loadpathmanager.rb:5:in require' script/generate:3 create db/schema.postgresql.sql Error: undefined methodeach_hash’ for # ./script/../config/../vendor/rails/activerecord/lib/activerecord/connectionadapters/mysql_adapter.rb:325:in select' ./script/../config/../vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:171:inselect_all’ ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:431:in find_by_sql' ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:395:infind’ ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:393:in find' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:502:invalidatesuniquenessof’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:490:in validates_each' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:293:ineach’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:293:in validates_each' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:290:incall’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:769:in run_validations' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:763:ineach’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:763:in run_validations' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:727:invalidwithoutcallbacks’ ./script/../config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:306:in valid?' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:697:insavewithouttransactions’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:in save' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:intransaction’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:91:in transaction' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:118:intransaction’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:in save' ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:450:increate’ c:/ruby/lib/ruby/gems/1.8/gems/schemagenerator-1.0.2/schemagenerator.rb:336:in dump' c:/ruby/lib/ruby/gems/1.8/gems/schema_generator-1.0.2/schema_generator.rb:335:ineach’ c:/ruby/lib/ruby/gems/1.8/gems/schemagenerator-1.0.2/schemagenerator.rb:335:in dump' (erb):8:intemplate’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:271:in template' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:268:infile’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:219:in open' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:219:infile’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:218:in open' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:218:infile’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:268:in template' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:47:insend’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:47:in send_actions' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:46:ineach’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:46:in send_actions' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:31:inreplay’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:41:in invoke!' ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../scripts.rb:31:inrun’ ./script/../config/../vendor/rails/railties/lib/commands/generate.rb:6 c:/ruby/lib/ruby/siteruby/1.8/rubygems/loadpathmanager.rb:5:in require__' c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:inrequire’ script/generate:3 create db/schema.sqlite.sql Error: undefined method each_hash' for #<String:0x3d2d8e8> ./script/../config/../vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:325:inselect’ ./script/../config/../vendor/rails/activerecord/lib/activerecord/connectionadapters/mysql_adapter.rb:171:in select_all' ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:431:infind_by_sql’ ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:395:in find' ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:393:infind’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:502:in validates_uniqueness_of' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:490:invalidates_each’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:293:in each' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:293:invalidates_each’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:290:in call' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:769:inrun_validations’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:763:in each' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:763:inrun_validations’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:727:in valid_without_callbacks' ./script/../config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:306:invalid?’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:697:in save_without_transactions' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:insave’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:in transaction' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:91:intransaction’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:118:in transaction' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:insave’ ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:450:in create' c:/ruby/lib/ruby/gems/1.8/gems/schema_generator-1.0.2/schema_generator.rb:336:indump’ c:/ruby/lib/ruby/gems/1.8/gems/schemagenerator-1.0.2/schemagenerator.rb:335:in each' c:/ruby/lib/ruby/gems/1.8/gems/schema_generator-1.0.2/schema_generator.rb:335:indump’ (erb):8:in template' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:271:intemplate’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:268:in file' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:219:inopen’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:219:in file' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:218:inopen’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:218:in file' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:268:intemplate’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:47:in send' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:47:insend_actions’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:46:in each' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:46:insend_actions’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:31:in replay' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:41:ininvoke!’ ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../scripts.rb:31:in run' ./script/../config/../vendor/rails/railties/lib/commands/generate.rb:6 c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:inrequire__’ c:/ruby/lib/ruby/siteruby/1.8/rubygems/loadpathmanager.rb:5:in require' script/generate:3 create db/schema.sqlserver.sql Error: undefined methodeach_hash’ for # ./script/../config/../vendor/rails/activerecord/lib/activerecord/connectionadapters/mysql_adapter.rb:325:in select' ./script/../config/../vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:171:inselect_all’ ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:431:in find_by_sql' ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:395:infind’ ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:393:in find' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:502:invalidatesuniquenessof’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:490:in validates_each' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:293:ineach’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:293:in validates_each' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:290:incall’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:769:in run_validations' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:763:ineach’ ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:763:in run_validations' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:727:invalidwithoutcallbacks’ ./script/../config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:306:in valid?' ./script/../config/../vendor/rails/activerecord/lib/active_record/validations.rb:697:insavewithouttransactions’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:in save' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:intransaction’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:91:in transaction' ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:118:intransaction’ ./script/../config/../vendor/rails/activerecord/lib/active_record/transactions.rb:126:in save' ./script/../config/../vendor/rails/activerecord/lib/active_record/base.rb:450:increate’ c:/ruby/lib/ruby/gems/1.8/gems/schemagenerator-1.0.2/schemagenerator.rb:336:in dump' c:/ruby/lib/ruby/gems/1.8/gems/schema_generator-1.0.2/schema_generator.rb:335:ineach’ c:/ruby/lib/ruby/gems/1.8/gems/schemagenerator-1.0.2/schemagenerator.rb:335:in dump' (erb):8:intemplate’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:271:in template' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:268:infile’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:219:in open' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:219:infile’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:218:in open' ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:218:infile’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:268:in template' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:47:insend’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:47:in send_actions' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:46:ineach’ ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:46:in send_actions' ./script/../config/../vendor/rails/railties/lib/rails_generator/manifest.rb:31:inreplay’ ./script/../config/../vendor/rails/railties/lib/rails_generator/commands.rb:41:in invoke!' ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../scripts.rb:31:inrun’ ./script/../config/../vendor/rails/railties/lib/commands/generate.rb:6 c:/ruby/lib/ruby/siteruby/1.8/rubygems/loadpathmanager.rb:5:in require__' c:/ruby/lib/ruby/site_ruby/1.8/rubygems/loadpath_manager.rb:5:inrequire’ script/generate:3 create db/schema.rb

  3. Ed Brannin said 21 days later:

    I uncommented the Oracle stuff, and it mostly works - except it’s not adding Primary Key constraints to any of the tables, and while it does create sequences, it doesn’t seem to assign them to their columns.

    Also, I tried using an Execute statement and it dies making the mysql schema:

    Starting migration for MakeProjectTables
    Mysql::Error: #HY000Can't create table './dbc_development/#sql-225b_9.frm' (errno: 150): ALTER TABLE authors_books ADD CONSTRAINT fk_authors_booksid FOREIGN KEY ( author_id ) REFERENCES id( authors )
    

    I can email you my source and output, if it would help.

  4. Ed Brannin said 21 days later:

    ok, I feel silly - my SQL for that Execute statement was just malformed. In any case, that’s fixed and it’s still not showing up in the schema.

  5. Elia said 10 months later:

    hi scott, great work! :D

    btw there’s an issue about adding indexes with options or on multiple columns in the DBMigrator…

    I was not able to find another place to track this “defect”.

    E

Trackbacks

Use the following link to trackback from your own site:
http://scottstuff.net/blog/articles/trackback/589

Comments are disabled