kb-activerecord-jdbc-adapter 0.9.7.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. data/History.txt +296 -0
  2. data/LICENSE.txt +21 -0
  3. data/Manifest.txt +139 -0
  4. data/README.txt +219 -0
  5. data/Rakefile +10 -0
  6. data/lib/active_record/connection_adapters/cachedb_adapter.rb +1 -0
  7. data/lib/active_record/connection_adapters/derby_adapter.rb +13 -0
  8. data/lib/active_record/connection_adapters/h2_adapter.rb +13 -0
  9. data/lib/active_record/connection_adapters/hsqldb_adapter.rb +13 -0
  10. data/lib/active_record/connection_adapters/informix_adapter.rb +1 -0
  11. data/lib/active_record/connection_adapters/jdbc_adapter.rb +661 -0
  12. data/lib/active_record/connection_adapters/jdbc_adapter_spec.rb +26 -0
  13. data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -0
  14. data/lib/active_record/connection_adapters/mssql_adapter.rb +13 -0
  15. data/lib/active_record/connection_adapters/mysql_adapter.rb +13 -0
  16. data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -0
  17. data/lib/active_record/connection_adapters/postgresql_adapter.rb +13 -0
  18. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +13 -0
  19. data/lib/activerecord-jdbc-adapter.rb +6 -0
  20. data/lib/arel/engines/sql/compilers/db2_compiler.rb +9 -0
  21. data/lib/arel/engines/sql/compilers/derby_compiler.rb +6 -0
  22. data/lib/arel/engines/sql/compilers/h2_compiler.rb +6 -0
  23. data/lib/arel/engines/sql/compilers/hsqldb_compiler.rb +6 -0
  24. data/lib/arel/engines/sql/compilers/jdbc_compiler.rb +6 -0
  25. data/lib/generators/jdbc/jdbc_generator.rb +9 -0
  26. data/lib/jdbc_adapter.rb +27 -0
  27. data/lib/jdbc_adapter/jdbc.rake +122 -0
  28. data/lib/jdbc_adapter/jdbc_adapter_internal.jar +0 -0
  29. data/lib/jdbc_adapter/jdbc_cachedb.rb +33 -0
  30. data/lib/jdbc_adapter/jdbc_db2.rb +222 -0
  31. data/lib/jdbc_adapter/jdbc_derby.rb +426 -0
  32. data/lib/jdbc_adapter/jdbc_firebird.rb +109 -0
  33. data/lib/jdbc_adapter/jdbc_hsqldb.rb +221 -0
  34. data/lib/jdbc_adapter/jdbc_informix.rb +147 -0
  35. data/lib/jdbc_adapter/jdbc_mimer.rb +145 -0
  36. data/lib/jdbc_adapter/jdbc_mssql.rb +468 -0
  37. data/lib/jdbc_adapter/jdbc_mysql.rb +260 -0
  38. data/lib/jdbc_adapter/jdbc_oracle.rb +397 -0
  39. data/lib/jdbc_adapter/jdbc_postgre.rb +531 -0
  40. data/lib/jdbc_adapter/jdbc_sqlite3.rb +386 -0
  41. data/lib/jdbc_adapter/jdbc_sybase.rb +50 -0
  42. data/lib/jdbc_adapter/missing_functionality_helper.rb +87 -0
  43. data/lib/jdbc_adapter/railtie.rb +9 -0
  44. data/lib/jdbc_adapter/rake_tasks.rb +10 -0
  45. data/lib/jdbc_adapter/tsql_helper.rb +69 -0
  46. data/lib/jdbc_adapter/version.rb +5 -0
  47. data/lib/pg.rb +4 -0
  48. data/rails_generators/jdbc_generator.rb +15 -0
  49. data/rails_generators/templates/config/initializers/jdbc.rb +7 -0
  50. data/rails_generators/templates/lib/tasks/jdbc.rake +8 -0
  51. data/rakelib/compile.rake +23 -0
  52. data/rakelib/package.rake +91 -0
  53. data/rakelib/rails.rake +41 -0
  54. data/rakelib/test.rake +78 -0
  55. data/src/java/jdbc_adapter/JdbcAdapterInternalService.java +53 -0
  56. data/src/java/jdbc_adapter/JdbcConnectionFactory.java +36 -0
  57. data/src/java/jdbc_adapter/JdbcDerbySpec.java +293 -0
  58. data/src/java/jdbc_adapter/JdbcMySQLSpec.java +134 -0
  59. data/src/java/jdbc_adapter/MssqlRubyJdbcConnection.java +71 -0
  60. data/src/java/jdbc_adapter/PostgresRubyJdbcConnection.java +55 -0
  61. data/src/java/jdbc_adapter/RubyJdbcConnection.java +1176 -0
  62. data/src/java/jdbc_adapter/SQLBlock.java +27 -0
  63. data/src/java/jdbc_adapter/Sqlite3RubyJdbcConnection.java +41 -0
  64. data/test/abstract_db_create.rb +107 -0
  65. data/test/activerecord/connection_adapters/type_conversion_test.rb +31 -0
  66. data/test/activerecord/connections/native_jdbc_mysql/connection.rb +25 -0
  67. data/test/cachedb_simple_test.rb +6 -0
  68. data/test/db/cachedb.rb +9 -0
  69. data/test/db/db2.rb +9 -0
  70. data/test/db/derby.rb +14 -0
  71. data/test/db/h2.rb +11 -0
  72. data/test/db/hsqldb.rb +12 -0
  73. data/test/db/informix.rb +11 -0
  74. data/test/db/jdbc.rb +11 -0
  75. data/test/db/jndi_config.rb +30 -0
  76. data/test/db/logger.rb +3 -0
  77. data/test/db/mssql.rb +9 -0
  78. data/test/db/mysql.rb +10 -0
  79. data/test/db/oracle.rb +34 -0
  80. data/test/db/postgres.rb +9 -0
  81. data/test/db/sqlite3.rb +15 -0
  82. data/test/db2_simple_test.rb +10 -0
  83. data/test/derby_migration_test.rb +21 -0
  84. data/test/derby_multibyte_test.rb +12 -0
  85. data/test/derby_simple_test.rb +21 -0
  86. data/test/generic_jdbc_connection_test.rb +9 -0
  87. data/test/h2_simple_test.rb +6 -0
  88. data/test/has_many_through.rb +79 -0
  89. data/test/helper.rb +5 -0
  90. data/test/hsqldb_simple_test.rb +6 -0
  91. data/test/informix_simple_test.rb +48 -0
  92. data/test/jdbc_adapter/jdbc_db2_test.rb +26 -0
  93. data/test/jdbc_adapter/jdbc_sybase_test.rb +33 -0
  94. data/test/jdbc_common.rb +25 -0
  95. data/test/jndi_callbacks_test.rb +38 -0
  96. data/test/jndi_test.rb +35 -0
  97. data/test/manualTestDatabase.rb +191 -0
  98. data/test/minirunit.rb +109 -0
  99. data/test/minirunit/testConnect.rb +14 -0
  100. data/test/minirunit/testH2.rb +73 -0
  101. data/test/minirunit/testHsqldb.rb +73 -0
  102. data/test/minirunit/testLoadActiveRecord.rb +3 -0
  103. data/test/minirunit/testMysql.rb +83 -0
  104. data/test/minirunit/testRawSelect.rb +24 -0
  105. data/test/models/add_not_null_column_to_table.rb +12 -0
  106. data/test/models/auto_id.rb +18 -0
  107. data/test/models/data_types.rb +28 -0
  108. data/test/models/entry.rb +23 -0
  109. data/test/models/mixed_case.rb +20 -0
  110. data/test/models/reserved_word.rb +18 -0
  111. data/test/models/string_id.rb +18 -0
  112. data/test/models/validates_uniqueness_of_string.rb +19 -0
  113. data/test/mssql_db_create_test.rb +26 -0
  114. data/test/mssql_identity_insert_test.rb +19 -0
  115. data/test/mssql_legacy_types_test.rb +58 -0
  116. data/test/mssql_limit_offset_test.rb +108 -0
  117. data/test/mssql_multibyte_test.rb +18 -0
  118. data/test/mssql_simple_test.rb +49 -0
  119. data/test/mysql_db_create_test.rb +25 -0
  120. data/test/mysql_info_test.rb +62 -0
  121. data/test/mysql_multibyte_test.rb +10 -0
  122. data/test/mysql_nonstandard_primary_key_test.rb +42 -0
  123. data/test/mysql_simple_test.rb +32 -0
  124. data/test/oracle_simple_test.rb +54 -0
  125. data/test/pick_rails_version.rb +3 -0
  126. data/test/postgres_db_create_test.rb +21 -0
  127. data/test/postgres_mixed_case_test.rb +19 -0
  128. data/test/postgres_nonseq_pkey_test.rb +40 -0
  129. data/test/postgres_reserved_test.rb +22 -0
  130. data/test/postgres_schema_search_path_test.rb +46 -0
  131. data/test/postgres_simple_test.rb +13 -0
  132. data/test/simple.rb +494 -0
  133. data/test/sqlite3_simple_test.rb +233 -0
  134. data/test/sybase_jtds_simple_test.rb +6 -0
  135. metadata +230 -0
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+
4
+ class CreateEntries < ActiveRecord::Migration
5
+ def self.up
6
+ create_table "entries", :force => true do |t|
7
+ t.column :title, :string, :limit => 100
8
+ t.column :updated_on, :datetime
9
+ t.column :content, :text
10
+ t.column :rating, :decimal, :precision => 10, :scale => 2
11
+ end
12
+ end
13
+
14
+ def self.down
15
+ drop_table "entries"
16
+ end
17
+ end
18
+
19
+ class Entry < ActiveRecord::Base
20
+ def to_param
21
+ "#{id}-#{title.gsub(/[^a-zA-Z0-9]/, '-')}"
22
+ end
23
+ end
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+
4
+ module Migration
5
+ class MixedCase < ActiveRecord::Migration
6
+
7
+ def self.up
8
+ create_table "mixed_cases" do |t|
9
+ t.column :SOME_value, :string
10
+ end
11
+ end
12
+
13
+ def self.down
14
+ drop_table "mixed_cases"
15
+ end
16
+ end
17
+ end
18
+
19
+ class MixedCase < ActiveRecord::Base
20
+ end
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+
4
+ class CreateReservedWords < ActiveRecord::Migration
5
+ def self.up
6
+ create_table "reserved_words", :force => true do |t|
7
+ t.column :position, :integer
8
+ t.column :select, :integer
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table "reserved_words"
14
+ end
15
+ end
16
+
17
+ class ReservedWord < ActiveRecord::Base
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+
4
+ class CreateStringIds < ActiveRecord::Migration
5
+ def self.up
6
+ create_table "string_ids", :force => true, :id => false do |t|
7
+ t.string :id
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ drop_table "string_ids"
13
+ end
14
+ end
15
+
16
+ class StringId < ActiveRecord::Base
17
+ def self.table_name () "string_ids" end
18
+ end
@@ -0,0 +1,19 @@
1
+ class CreateValidatesUniquenessOf < ActiveRecord::Migration
2
+ def self.up
3
+ create_table "validates_uniqueness_of", :force => true do |t|
4
+ t.column :cs_string, :string
5
+ t.column :ci_string, :string
6
+ t.column :content, :text
7
+ end
8
+ end
9
+
10
+ def self.down
11
+ drop_table "validates_uniqueness_of"
12
+ end
13
+ end
14
+
15
+ class ValidatesUniquenessOfString < ActiveRecord::Base
16
+ self.set_table_name "validates_uniqueness_of"
17
+ validates_uniqueness_of :cs_string, :case_sensitive => true
18
+ validates_uniqueness_of :ci_string, :case_sensitive => false
19
+ end
@@ -0,0 +1,26 @@
1
+ require 'abstract_db_create'
2
+ require 'db/mssql'
3
+
4
+ class MysqlDbCreateTest < Test::Unit::TestCase
5
+ include AbstractDbCreate
6
+
7
+ def db_config
8
+ MSSQL_CONFIG
9
+ end
10
+
11
+ def test_rake_db_create
12
+ begin
13
+ Rake::Task["db:create"].invoke
14
+ rescue => e
15
+ if e.message =~ /CREATE DATABASE permission denied/
16
+ puts "\nwarning: db:create test skipped; add 'dbcreator' role to user '#{db_config[:username]}' to run"
17
+ return
18
+ end
19
+ end
20
+ ActiveRecord::Base.establish_connection(db_config.merge(:database => "master"))
21
+ select = "SELECT NAME FROM sys.sysdatabases"
22
+ select = "SELECT name FROM master..sysdatabases ORDER BY name" if ActiveRecord::Base.connection.sqlserver_version == "2000"
23
+ databases = ActiveRecord::Base.connection.select_rows(select).flatten
24
+ assert databases.include?(@db_name)
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ require 'jdbc_common'
2
+ require 'db/mssql'
3
+
4
+ class MsSQLIdentityInsertTest < Test::Unit::TestCase
5
+
6
+ include MigrationSetup
7
+
8
+ def test_enable_identity_insert_when_necessary
9
+ Entry.connection.execute("INSERT INTO entries([id], [title]) VALUES (333, 'Title')")
10
+ Entry.connection.execute("INSERT INTO entries([title], [id]) VALUES ('Title', 344)")
11
+ Entry.connection.execute("INSERT INTO entries(id, title) VALUES (666, 'Title')")
12
+ Entry.connection.execute("INSERT INTO entries(id, title) (SELECT id+123, title FROM entries)")
13
+ end
14
+
15
+ def test_dont_enable_identity_insert_when_unnecessary
16
+ Entry.connection.execute("INSERT INTO entries([title]) VALUES ('[id]')")
17
+ end
18
+
19
+ end
@@ -0,0 +1,58 @@
1
+ require 'jdbc_common'
2
+ require 'db/mssql'
3
+
4
+ ActiveRecord::Schema.verbose = false
5
+
6
+ class CreateArticles < ActiveRecord::Migration
7
+
8
+ def self.up
9
+ execute <<-SQL
10
+ CREATE TABLE articles (
11
+ [id] int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
12
+ [title] VARCHAR(100),
13
+ [author] VARCHAR(60) DEFAULT 'anonymous',
14
+ [body] TEXT
15
+ )
16
+ SQL
17
+ end
18
+
19
+ def self.down
20
+ drop_table "articles"
21
+ end
22
+
23
+ end
24
+
25
+ class Article < ActiveRecord::Base
26
+ end
27
+
28
+ class MsSQLLegacyTypesTest < Test::Unit::TestCase
29
+
30
+ def setup
31
+ CreateArticles.up
32
+ @connection = ActiveRecord::Base.connection
33
+ end
34
+
35
+ def teardown
36
+ CreateArticles.down
37
+ ActiveRecord::Base.clear_active_connections!
38
+ end
39
+
40
+ def test_varchar_column
41
+ Article.create!(:title => "Blah blah")
42
+ article = Article.first
43
+ assert_equal("Blah blah", article.title)
44
+ end
45
+
46
+ SAMPLE_TEXT = "Lorem ipsum dolor sit amet ..."
47
+
48
+ def test_text_column
49
+ Article.create!(:body => SAMPLE_TEXT)
50
+ article = Article.first
51
+ assert_equal(SAMPLE_TEXT, article.body)
52
+ end
53
+
54
+ def test_varchar_default_value
55
+ assert_equal("anonymous", Article.new.author)
56
+ end
57
+
58
+ end
@@ -0,0 +1,108 @@
1
+ require 'jdbc_common'
2
+ require 'db/mssql'
3
+
4
+ ActiveRecord::Schema.verbose = false
5
+
6
+ class CreateLongShips < ActiveRecord::Migration
7
+
8
+ def self.up
9
+ create_table "long_ships", :force => true do |t|
10
+ t.string "name", :limit => 50, :null => false
11
+ t.integer "width", :default => 123
12
+ t.integer "length", :default => 456
13
+ end
14
+ end
15
+
16
+ def self.down
17
+ drop_table "long_ships"
18
+ end
19
+
20
+ end
21
+
22
+ class LongShip < ActiveRecord::Base
23
+ has_many :vikings
24
+ end
25
+
26
+ class CreateVikings < ActiveRecord::Migration
27
+
28
+ def self.up
29
+ create_table "vikings", :force => true do |t|
30
+ t.integer "long_ship_id", :null => false
31
+ t.string "name", :limit => 50, :default => "Sven"
32
+ end
33
+ end
34
+
35
+ def self.down
36
+ drop_table "vikings"
37
+ end
38
+
39
+ end
40
+
41
+ class Viking < ActiveRecord::Base
42
+ belongs_to :long_ship
43
+ end
44
+
45
+ class MsSQLLimitOffsetTest < Test::Unit::TestCase
46
+
47
+ def setup
48
+ CreateLongShips.up
49
+ CreateVikings.up
50
+ @connection = ActiveRecord::Base.connection
51
+ end
52
+
53
+ def teardown
54
+ CreateVikings.down
55
+ CreateLongShips.down
56
+ ActiveRecord::Base.clear_active_connections!
57
+ end
58
+
59
+ def test_limit_and_offset
60
+ %w(one two three four five six seven eight).each do |name|
61
+ LongShip.create!(:name => name)
62
+ end
63
+ ship_names = LongShip.find(:all, :offset => 2, :limit => 3).map(&:name)
64
+ assert_equal(%w(three four five), ship_names)
65
+ end
66
+
67
+ def test_limit_and_offset_with_order
68
+ %w(one two three four five six seven eight).each do |name|
69
+ LongShip.create!(:name => name)
70
+ end
71
+ ship_names = LongShip.find(:all, :order => "name", :offset => 4, :limit => 2).map(&:name)
72
+ assert_equal(%w(seven six), ship_names)
73
+ end
74
+
75
+ # TODO: work out how to fix DISTINCT support without breaking :include
76
+ # def test_limit_and_offset_with_distinct
77
+ # %w(c a b a b a c d c d).each do |name|
78
+ # LongShip.create!(:name => name)
79
+ # end
80
+ # ship_names = LongShip.find(:all, :select => "DISTINCT name", :order => "name", :offset => 1, :limit => 2).map(&:name)
81
+ # assert_equal(%w(b c), ship_names)
82
+ # end
83
+
84
+ def test_limit_and_offset_with_include
85
+ skei = LongShip.create!(:name => "Skei")
86
+ skei.vikings.create!(:name => "Bob")
87
+ skei.vikings.create!(:name => "Ben")
88
+ skei.vikings.create!(:name => "Basil")
89
+ ships = Viking.find(:all, :include => :long_ship, :offset => 1, :limit => 2)
90
+ assert_equal(2, ships.size)
91
+ end
92
+
93
+ def test_limit_and_offset_with_include_and_order
94
+
95
+ boat1 = LongShip.create!(:name => "1-Skei")
96
+ boat2 = LongShip.create!(:name => "2-Skei")
97
+
98
+ boat1.vikings.create!(:name => "Adam")
99
+ boat2.vikings.create!(:name => "Ben")
100
+ boat1.vikings.create!(:name => "Carl")
101
+ boat2.vikings.create!(:name => "Donald")
102
+
103
+ vikings = Viking.find(:all, :include => :long_ship, :order => "long_ships.name, vikings.name", :offset => 0, :limit => 3)
104
+ assert_equal(["Adam", "Carl", "Ben"], vikings.map(&:name))
105
+
106
+ end
107
+
108
+ end
@@ -0,0 +1,18 @@
1
+ #! /usr/bin/env jruby
2
+
3
+ require 'jdbc_common'
4
+ require 'db/mssql'
5
+
6
+ class MsSQLMultibyteTest < Test::Unit::TestCase
7
+
8
+ include MultibyteTestMethods
9
+
10
+ def test_select_multibyte_string
11
+ Entry.create!(:title => 'テスト', :content => '本文')
12
+ entry = Entry.find(:last)
13
+ assert_equal "テスト", entry.title
14
+ assert_equal "本文", entry.content
15
+ assert_equal entry, Entry.find_by_title("テスト")
16
+ end
17
+
18
+ end
@@ -0,0 +1,49 @@
1
+ require 'jdbc_common'
2
+ require 'db/mssql'
3
+
4
+ class MsSQLSimpleTest < Test::Unit::TestCase
5
+
6
+ include SimpleTestMethods
7
+
8
+ # MS SQL 2005 doesn't have a DATE class, only TIMESTAMP.
9
+ undef_method :test_save_date
10
+
11
+ # String comparisons are insensitive by default
12
+ undef_method :test_validates_uniqueness_of_strings_case_sensitive
13
+
14
+ def test_does_not_munge_quoted_strings
15
+ example_quoted_values = [%{'quoted'}, %{D'oh!}]
16
+ example_quoted_values.each do |value|
17
+ entry = Entry.create!(:title => value)
18
+ entry.reload
19
+ assert_equal(value, entry.title)
20
+ end
21
+ end
22
+
23
+ def test_change_column_default
24
+
25
+ Entry.connection.change_column "entries", "title", :string, :default => "new default"
26
+ Entry.reset_column_information
27
+ assert_equal("new default", Entry.new.title)
28
+
29
+ Entry.connection.change_column "entries", "title", :string, :default => nil
30
+ Entry.reset_column_information
31
+ assert_equal(nil, Entry.new.title)
32
+
33
+ end
34
+
35
+ def test_change_column_nullability
36
+
37
+ Entry.connection.change_column "entries", "title", :string, :null => true
38
+ Entry.reset_column_information
39
+ title_column = Entry.columns.find { |c| c.name == "title" }
40
+ assert(title_column.null)
41
+
42
+ Entry.connection.change_column "entries", "title", :string, :null => false
43
+ Entry.reset_column_information
44
+ title_column = Entry.columns.find { |c| c.name == "title" }
45
+ assert(!title_column.null)
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,25 @@
1
+ require 'abstract_db_create'
2
+ require 'db/mysql'
3
+
4
+ class MysqlDbCreateTest < Test::Unit::TestCase
5
+ include AbstractDbCreate
6
+
7
+ def db_config
8
+ MYSQL_CONFIG
9
+ end
10
+
11
+ if find_executable?("mysql")
12
+ def test_rake_db_create
13
+ Rake::Task["db:create"].invoke
14
+ output = nil
15
+ IO.popen("mysql -u #{MYSQL_CONFIG[:username]} --password=#{MYSQL_CONFIG[:password]}", "r+") do |mysql|
16
+ mysql << "show databases where `Database` = '#{@db_name}';"
17
+ mysql.close_write
18
+ assert mysql.read =~ /#{@db_name}/m
19
+ end
20
+ end
21
+ else
22
+ def test_skipped
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,62 @@
1
+ require 'jdbc_common'
2
+ require 'db/mysql'
3
+
4
+ class DBSetup < ActiveRecord::Migration
5
+
6
+ def self.up
7
+ create_table :books do |t|
8
+ t.string :title
9
+ end
10
+
11
+ create_table :cars, :primary_key => 'legacy_id' do |t|
12
+ t.string :name
13
+ end
14
+
15
+ create_table :cats, :id => false do |t|
16
+ t.string :name
17
+ end
18
+
19
+ end
20
+
21
+ def self.down
22
+ drop_table :books
23
+ drop_table :cars
24
+ drop_table :cats
25
+ end
26
+
27
+ end
28
+
29
+ class MysqlInfoTest < Test::Unit::TestCase
30
+
31
+ def setup
32
+ DBSetup.up
33
+ @connection = ActiveRecord::Base.connection
34
+ end
35
+
36
+ def teardown
37
+ DBSetup.down
38
+ end
39
+
40
+ ## primary_key
41
+ def test_should_return_the_primary_key_of_a_table
42
+ assert_equal 'id', @connection.primary_key('books')
43
+ end
44
+
45
+ def test_should_be_able_to_return_a_custom_primary_key
46
+ assert_equal 'legacy_id', @connection.primary_key('cars')
47
+ end
48
+
49
+ def test_should_return_nil_for_a_table_without_a_primary_key
50
+ assert_nil @connection.primary_key('cats')
51
+ end
52
+
53
+ ## structure_dump
54
+ def test_should_include_the_tables_in_a_structure_dump
55
+ # TODO: Improve these tests, I added this one because no other tests exists for this method.
56
+ dump = @connection.structure_dump
57
+ assert dump.include?('CREATE TABLE `books`')
58
+ assert dump.include?('CREATE TABLE `cars`')
59
+ assert dump.include?('CREATE TABLE `cats`')
60
+ end
61
+
62
+ end