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.
- data/History.txt +296 -0
- data/LICENSE.txt +21 -0
- data/Manifest.txt +139 -0
- data/README.txt +219 -0
- data/Rakefile +10 -0
- data/lib/active_record/connection_adapters/cachedb_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/derby_adapter.rb +13 -0
- data/lib/active_record/connection_adapters/h2_adapter.rb +13 -0
- data/lib/active_record/connection_adapters/hsqldb_adapter.rb +13 -0
- data/lib/active_record/connection_adapters/informix_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/jdbc_adapter.rb +661 -0
- data/lib/active_record/connection_adapters/jdbc_adapter_spec.rb +26 -0
- data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mssql_adapter.rb +13 -0
- data/lib/active_record/connection_adapters/mysql_adapter.rb +13 -0
- data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +13 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +13 -0
- data/lib/activerecord-jdbc-adapter.rb +6 -0
- data/lib/arel/engines/sql/compilers/db2_compiler.rb +9 -0
- data/lib/arel/engines/sql/compilers/derby_compiler.rb +6 -0
- data/lib/arel/engines/sql/compilers/h2_compiler.rb +6 -0
- data/lib/arel/engines/sql/compilers/hsqldb_compiler.rb +6 -0
- data/lib/arel/engines/sql/compilers/jdbc_compiler.rb +6 -0
- data/lib/generators/jdbc/jdbc_generator.rb +9 -0
- data/lib/jdbc_adapter.rb +27 -0
- data/lib/jdbc_adapter/jdbc.rake +122 -0
- data/lib/jdbc_adapter/jdbc_adapter_internal.jar +0 -0
- data/lib/jdbc_adapter/jdbc_cachedb.rb +33 -0
- data/lib/jdbc_adapter/jdbc_db2.rb +222 -0
- data/lib/jdbc_adapter/jdbc_derby.rb +426 -0
- data/lib/jdbc_adapter/jdbc_firebird.rb +109 -0
- data/lib/jdbc_adapter/jdbc_hsqldb.rb +221 -0
- data/lib/jdbc_adapter/jdbc_informix.rb +147 -0
- data/lib/jdbc_adapter/jdbc_mimer.rb +145 -0
- data/lib/jdbc_adapter/jdbc_mssql.rb +468 -0
- data/lib/jdbc_adapter/jdbc_mysql.rb +260 -0
- data/lib/jdbc_adapter/jdbc_oracle.rb +397 -0
- data/lib/jdbc_adapter/jdbc_postgre.rb +531 -0
- data/lib/jdbc_adapter/jdbc_sqlite3.rb +386 -0
- data/lib/jdbc_adapter/jdbc_sybase.rb +50 -0
- data/lib/jdbc_adapter/missing_functionality_helper.rb +87 -0
- data/lib/jdbc_adapter/railtie.rb +9 -0
- data/lib/jdbc_adapter/rake_tasks.rb +10 -0
- data/lib/jdbc_adapter/tsql_helper.rb +69 -0
- data/lib/jdbc_adapter/version.rb +5 -0
- data/lib/pg.rb +4 -0
- data/rails_generators/jdbc_generator.rb +15 -0
- data/rails_generators/templates/config/initializers/jdbc.rb +7 -0
- data/rails_generators/templates/lib/tasks/jdbc.rake +8 -0
- data/rakelib/compile.rake +23 -0
- data/rakelib/package.rake +91 -0
- data/rakelib/rails.rake +41 -0
- data/rakelib/test.rake +78 -0
- data/src/java/jdbc_adapter/JdbcAdapterInternalService.java +53 -0
- data/src/java/jdbc_adapter/JdbcConnectionFactory.java +36 -0
- data/src/java/jdbc_adapter/JdbcDerbySpec.java +293 -0
- data/src/java/jdbc_adapter/JdbcMySQLSpec.java +134 -0
- data/src/java/jdbc_adapter/MssqlRubyJdbcConnection.java +71 -0
- data/src/java/jdbc_adapter/PostgresRubyJdbcConnection.java +55 -0
- data/src/java/jdbc_adapter/RubyJdbcConnection.java +1176 -0
- data/src/java/jdbc_adapter/SQLBlock.java +27 -0
- data/src/java/jdbc_adapter/Sqlite3RubyJdbcConnection.java +41 -0
- data/test/abstract_db_create.rb +107 -0
- data/test/activerecord/connection_adapters/type_conversion_test.rb +31 -0
- data/test/activerecord/connections/native_jdbc_mysql/connection.rb +25 -0
- data/test/cachedb_simple_test.rb +6 -0
- data/test/db/cachedb.rb +9 -0
- data/test/db/db2.rb +9 -0
- data/test/db/derby.rb +14 -0
- data/test/db/h2.rb +11 -0
- data/test/db/hsqldb.rb +12 -0
- data/test/db/informix.rb +11 -0
- data/test/db/jdbc.rb +11 -0
- data/test/db/jndi_config.rb +30 -0
- data/test/db/logger.rb +3 -0
- data/test/db/mssql.rb +9 -0
- data/test/db/mysql.rb +10 -0
- data/test/db/oracle.rb +34 -0
- data/test/db/postgres.rb +9 -0
- data/test/db/sqlite3.rb +15 -0
- data/test/db2_simple_test.rb +10 -0
- data/test/derby_migration_test.rb +21 -0
- data/test/derby_multibyte_test.rb +12 -0
- data/test/derby_simple_test.rb +21 -0
- data/test/generic_jdbc_connection_test.rb +9 -0
- data/test/h2_simple_test.rb +6 -0
- data/test/has_many_through.rb +79 -0
- data/test/helper.rb +5 -0
- data/test/hsqldb_simple_test.rb +6 -0
- data/test/informix_simple_test.rb +48 -0
- data/test/jdbc_adapter/jdbc_db2_test.rb +26 -0
- data/test/jdbc_adapter/jdbc_sybase_test.rb +33 -0
- data/test/jdbc_common.rb +25 -0
- data/test/jndi_callbacks_test.rb +38 -0
- data/test/jndi_test.rb +35 -0
- data/test/manualTestDatabase.rb +191 -0
- data/test/minirunit.rb +109 -0
- data/test/minirunit/testConnect.rb +14 -0
- data/test/minirunit/testH2.rb +73 -0
- data/test/minirunit/testHsqldb.rb +73 -0
- data/test/minirunit/testLoadActiveRecord.rb +3 -0
- data/test/minirunit/testMysql.rb +83 -0
- data/test/minirunit/testRawSelect.rb +24 -0
- data/test/models/add_not_null_column_to_table.rb +12 -0
- data/test/models/auto_id.rb +18 -0
- data/test/models/data_types.rb +28 -0
- data/test/models/entry.rb +23 -0
- data/test/models/mixed_case.rb +20 -0
- data/test/models/reserved_word.rb +18 -0
- data/test/models/string_id.rb +18 -0
- data/test/models/validates_uniqueness_of_string.rb +19 -0
- data/test/mssql_db_create_test.rb +26 -0
- data/test/mssql_identity_insert_test.rb +19 -0
- data/test/mssql_legacy_types_test.rb +58 -0
- data/test/mssql_limit_offset_test.rb +108 -0
- data/test/mssql_multibyte_test.rb +18 -0
- data/test/mssql_simple_test.rb +49 -0
- data/test/mysql_db_create_test.rb +25 -0
- data/test/mysql_info_test.rb +62 -0
- data/test/mysql_multibyte_test.rb +10 -0
- data/test/mysql_nonstandard_primary_key_test.rb +42 -0
- data/test/mysql_simple_test.rb +32 -0
- data/test/oracle_simple_test.rb +54 -0
- data/test/pick_rails_version.rb +3 -0
- data/test/postgres_db_create_test.rb +21 -0
- data/test/postgres_mixed_case_test.rb +19 -0
- data/test/postgres_nonseq_pkey_test.rb +40 -0
- data/test/postgres_reserved_test.rb +22 -0
- data/test/postgres_schema_search_path_test.rb +46 -0
- data/test/postgres_simple_test.rb +13 -0
- data/test/simple.rb +494 -0
- data/test/sqlite3_simple_test.rb +233 -0
- data/test/sybase_jtds_simple_test.rb +6 -0
- 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
|