activerecord-nuodb-adapter 1.1 → 2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +6 -17
- data/Gemfile +4 -0
- data/Rakefile +76 -7
- data/activerecord-nuodb-adapter.gemspec +2 -2
- data/lib/active_record/connection_adapters/nuodb/version.rb +1 -1
- data/test/active_record/connection_adapters/fake_adapter.rb +3 -7
- data/test/cases/adapter_test.rb +2 -50
- data/test/cases/adapters/mysql/active_schema_test.rb +23 -41
- data/test/cases/adapters/mysql/connection_test.rb +4 -40
- data/test/cases/adapters/mysql/enum_test.rb +1 -1
- data/test/cases/adapters/mysql/mysql_adapter_test.rb +22 -36
- data/test/cases/adapters/mysql/reserved_word_test.rb +14 -9
- data/test/cases/adapters/mysql/schema_test.rb +1 -23
- data/test/cases/adapters/mysql2/active_schema_test.rb +22 -40
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +2 -2
- data/test/cases/adapters/mysql2/connection_test.rb +0 -55
- data/test/cases/adapters/mysql2/enum_test.rb +1 -1
- data/test/cases/adapters/mysql2/reserved_word_test.rb +15 -9
- data/test/cases/adapters/mysql2/schema_test.rb +8 -27
- data/test/cases/adapters/postgresql/active_schema_test.rb +3 -33
- data/test/cases/adapters/postgresql/connection_test.rb +32 -107
- data/test/cases/adapters/postgresql/datatype_test.rb +35 -371
- data/test/cases/adapters/postgresql/explain_test.rb +7 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +3 -84
- data/test/cases/adapters/postgresql/quoting_test.rb +0 -33
- data/test/cases/adapters/postgresql/schema_test.rb +7 -56
- data/test/cases/adapters/postgresql/timestamp_test.rb +0 -83
- data/test/cases/adapters/sqlite3/copy_table_test.rb +5 -16
- data/test/cases/adapters/sqlite3/quoting_test.rb +11 -9
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +39 -38
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +1 -1
- data/test/cases/aggregations_test.rb +3 -21
- data/test/cases/ar_schema_test.rb +23 -31
- data/test/cases/associations/belongs_to_associations_test.rb +64 -176
- data/test/cases/associations/callbacks_test.rb +1 -0
- data/test/cases/associations/cascaded_eager_loading_test.rb +25 -25
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +3 -2
- data/test/cases/associations/eager_load_nested_include_test.rb +4 -2
- data/test/cases/associations/eager_singularization_test.rb +7 -7
- data/test/cases/associations/eager_test.rb +227 -285
- data/test/cases/associations/extension_test.rb +15 -8
- data/test/cases/associations/habtm_join_table_test.rb +35 -0
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +139 -55
- data/test/cases/associations/has_many_associations_test.rb +408 -362
- data/test/cases/associations/has_many_through_associations_test.rb +34 -76
- data/test/cases/associations/has_one_associations_test.rb +42 -73
- data/test/cases/associations/has_one_through_associations_test.rb +15 -15
- data/test/cases/associations/identity_map_test.rb +137 -0
- data/test/cases/associations/inner_join_association_test.rb +11 -19
- data/test/cases/associations/inverse_associations_test.rb +34 -178
- data/test/cases/associations/join_model_test.rb +75 -77
- data/test/cases/associations/nested_through_associations_test.rb +12 -21
- data/test/cases/associations_test.rb +10 -63
- data/test/cases/attribute_methods/read_test.rb +16 -4
- data/test/cases/attribute_methods_test.rb +79 -62
- data/test/cases/autosave_association_test.rb +48 -53
- data/test/cases/base_test.rb +1077 -336
- data/test/cases/batches_test.rb +22 -35
- data/test/cases/binary_test.rb +3 -3
- data/test/cases/bind_parameter_test.rb +9 -8
- data/test/cases/calculations_test.rb +109 -187
- data/test/cases/callbacks_test.rb +2 -53
- data/test/cases/clone_test.rb +3 -10
- data/test/cases/coders/yaml_column_test.rb +2 -19
- data/test/cases/column_definition_test.rb +13 -11
- data/test/cases/column_test.rb +14 -60
- data/test/cases/connection_adapters/abstract_adapter_test.rb +8 -16
- data/test/cases/connection_adapters/connection_handler_test.rb +10 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +14 -26
- data/test/cases/connection_management_test.rb +3 -26
- data/test/cases/connection_pool_test.rb +35 -201
- data/test/cases/connection_specification/resolver_test.rb +21 -34
- data/test/cases/counter_cache_test.rb +1 -30
- data/test/cases/custom_locking_test.rb +1 -1
- data/test/cases/date_time_test.rb +3 -3
- data/test/cases/defaults_test.rb +20 -82
- data/test/cases/deprecated_finder_test.rb +30 -0
- data/test/cases/dirty_test.rb +35 -66
- data/test/cases/dup_test.rb +23 -33
- data/test/cases/dynamic_finder_match_test.rb +106 -0
- data/test/cases/explain_subscriber_test.rb +30 -34
- data/test/cases/explain_test.rb +61 -6
- data/test/cases/finder_respond_to_test.rb +40 -4
- data/test/cases/finder_test.rb +542 -166
- data/test/cases/{fixture_set → fixtures}/file_test.rb +1 -1
- data/test/cases/fixtures_test.rb +53 -128
- data/test/cases/helper.rb +44 -41
- data/test/cases/identity_map/middleware_test.rb +71 -0
- data/test/cases/identity_map_test.rb +434 -0
- data/test/cases/inheritance_test.rb +65 -128
- data/test/cases/invalid_date_test.rb +2 -0
- data/test/cases/invertible_migration_test.rb +2 -157
- data/test/cases/json_serialization_test.rb +34 -103
- data/test/cases/lifecycle_test.rb +256 -0
- data/test/cases/locking_test.rb +66 -24
- data/test/cases/log_subscriber_test.rb +20 -24
- data/test/cases/mass_assignment_security_test.rb +868 -0
- data/test/cases/method_scoping_test.rb +558 -0
- data/test/cases/migration/command_recorder_test.rb +46 -162
- data/test/cases/migration_test.rb +2151 -643
- data/test/cases/modules_test.rb +8 -8
- data/test/cases/multiple_db_test.rb +3 -15
- data/test/cases/{scoping/named_scoping_test.rb → named_scope_test.rb} +147 -64
- data/test/cases/nested_attributes_test.rb +97 -142
- data/test/cases/persistence_test.rb +98 -238
- data/test/cases/pooled_connections_test.rb +24 -0
- data/test/cases/primary_keys_test.rb +4 -4
- data/test/cases/query_cache_test.rb +23 -23
- data/test/cases/quoting_test.rb +0 -8
- data/test/cases/readonly_test.rb +16 -15
- data/test/cases/reflection_test.rb +49 -96
- data/test/cases/relation/where_test.rb +7 -88
- data/test/cases/relation_scoping_test.rb +555 -0
- data/test/cases/relation_test.rb +45 -221
- data/test/cases/relations_test.rb +185 -542
- data/test/cases/sanitize_test.rb +0 -9
- data/test/cases/schema_dumper_test.rb +49 -162
- data/test/cases/serialization_test.rb +8 -23
- data/test/cases/session_store/session_test.rb +78 -0
- data/test/cases/session_store/sql_bypass.rb +56 -0
- data/test/cases/store_test.rb +1 -111
- data/test/cases/timestamp_test.rb +17 -131
- data/test/cases/transaction_callbacks_test.rb +35 -60
- data/test/cases/transactions_test.rb +192 -119
- data/test/cases/validations/association_validation_test.rb +9 -7
- data/test/cases/validations/i18n_generate_message_validation_test.rb +0 -38
- data/test/cases/validations/i18n_validation_test.rb +1 -1
- data/test/cases/validations/uniqueness_validation_test.rb +28 -84
- data/test/cases/validations_repair_helper.rb +2 -2
- data/test/cases/validations_test.rb +30 -0
- data/test/cases/xml_serialization_test.rb +15 -70
- data/test/cases/yaml_serialization_test.rb +20 -21
- data/test/config.example.yml +2 -138
- data/test/fixtures/admin/users.yml +0 -3
- data/test/fixtures/companies.yml +6 -0
- data/test/fixtures/courses.yml +0 -1
- data/test/fixtures/developers.yml +1 -1
- data/test/fixtures/dog_lovers.yml +0 -3
- data/test/fixtures/dogs.yml +0 -1
- data/test/fixtures/friendships.yml +2 -2
- data/test/fixtures/mateys.yml +2 -2
- data/test/fixtures/parrots_pirates.yml +4 -4
- data/test/fixtures/people.yml +0 -3
- data/test/fixtures/peoples_treasures.yml +2 -2
- data/test/fixtures/pets.yml +0 -5
- data/test/fixtures/readers.yml +1 -3
- data/test/fixtures/reserved_words/{distinct_select.yml → distincts_selects.yml} +3 -3
- data/test/fixtures/toys.yml +0 -10
- data/test/fixtures/traffic_lights.yml +0 -4
- data/test/fixtures/vegetables.yml +1 -12
- data/test/load_paths.rb +4 -0
- data/test/migrations/broken/100_migration_that_raises_exception.rb +10 -0
- data/test/migrations/duplicate/1_people_have_last_names.rb +9 -0
- data/test/migrations/duplicate/2_we_need_reminders.rb +12 -0
- data/test/migrations/duplicate/3_foo.rb +7 -0
- data/test/migrations/duplicate/3_innocent_jointable.rb +12 -0
- data/test/migrations/duplicate_names/20080507052938_chunky.rb +7 -0
- data/test/migrations/duplicate_names/20080507053028_chunky.rb +7 -0
- data/test/migrations/interleaved/pass_1/3_interleaved_innocent_jointable.rb +12 -0
- data/test/migrations/interleaved/pass_2/1_interleaved_people_have_last_names.rb +9 -0
- data/test/migrations/interleaved/pass_2/3_interleaved_innocent_jointable.rb +12 -0
- data/test/migrations/interleaved/pass_3/1_interleaved_people_have_last_names.rb +9 -0
- data/test/migrations/interleaved/pass_3/2_interleaved_i_raise_on_down.rb +8 -0
- data/test/migrations/interleaved/pass_3/3_interleaved_innocent_jointable.rb +12 -0
- data/test/models/admin/user.rb +0 -34
- data/test/models/author.rb +50 -46
- data/test/models/book.rb +1 -1
- data/test/models/bulb.rb +7 -11
- data/test/models/car.rb +10 -10
- data/test/models/categorization.rb +1 -1
- data/test/models/category.rb +15 -10
- data/test/models/club.rb +1 -1
- data/test/models/comment.rb +15 -9
- data/test/models/company.rb +49 -44
- data/test/models/company_in_module.rb +7 -4
- data/test/models/contact.rb +17 -32
- data/test/models/course.rb +1 -4
- data/test/models/customer.rb +0 -4
- data/test/models/developer.rb +44 -42
- data/test/models/dog.rb +2 -3
- data/test/models/dog_lover.rb +2 -3
- data/test/models/friendship.rb +2 -4
- data/test/models/liquid.rb +2 -1
- data/test/models/member.rb +6 -10
- data/test/models/member_detail.rb +1 -1
- data/test/models/organization.rb +1 -1
- data/test/models/owner.rb +1 -1
- data/test/models/parrot.rb +0 -6
- data/test/models/person.rb +15 -28
- data/test/models/pet.rb +2 -0
- data/test/models/pirate.rb +4 -4
- data/test/models/post.rb +56 -52
- data/test/models/price_estimate.rb +0 -1
- data/test/models/project.rb +22 -10
- data/test/models/reader.rb +4 -3
- data/test/models/reference.rb +5 -4
- data/test/models/reply.rb +4 -1
- data/test/models/speedometer.rb +0 -2
- data/test/models/sponsor.rb +2 -2
- data/test/models/tagging.rb +3 -2
- data/test/models/topic.rb +22 -18
- data/test/models/toy.rb +1 -1
- data/test/models/traffic_light.rb +0 -1
- data/test/models/treasure.rb +0 -3
- data/test/models/vegetables.rb +0 -10
- data/test/models/without_table.rb +1 -1
- data/test/schema/mysql2_specific_schema.rb +10 -24
- data/test/schema/mysql_specific_schema.rb +10 -24
- data/test/schema/postgresql_specific_schema.rb +11 -94
- data/test/schema/schema.rb +15 -38
- data/test/schema/sqlite_specific_schema.rb +1 -1
- data/test/support/connection.rb +5 -6
- metadata +64 -150
- data/active_setup_linux.sh +0 -39
- data/test/ar_schema_test.rb +0 -70
- data/test/base_test.rb +0 -1481
- data/test/cases/.DS_Store +0 -0
- data/test/cases/adapters/mysql/sql_types_test.rb +0 -14
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +0 -26
- data/test/cases/adapters/mysql2/sql_types_test.rb +0 -14
- data/test/cases/adapters/postgresql/array_test.rb +0 -104
- data/test/cases/adapters/postgresql/bytea_test.rb +0 -104
- data/test/cases/adapters/postgresql/hstore_test.rb +0 -200
- data/test/cases/adapters/postgresql/json_test.rb +0 -99
- data/test/cases/adapters/postgresql/ltree_test.rb +0 -41
- data/test/cases/adapters/postgresql/uuid_test.rb +0 -95
- data/test/cases/associations/association_scope_test.rb +0 -15
- data/test/cases/associations/join_dependency_test.rb +0 -8
- data/test/cases/attribute_methods/serialization_test.rb +0 -29
- data/test/cases/connection_adapters/connection_specification_test.rb +0 -12
- data/test/cases/connection_adapters/quoting_test.rb +0 -13
- data/test/cases/core_test.rb +0 -33
- data/test/cases/disconnected_test.rb +0 -27
- data/test/cases/forbidden_attributes_protection_test.rb +0 -64
- data/test/cases/hot_compatibility_test.rb +0 -54
- data/test/cases/integration_test.rb +0 -87
- data/test/cases/invalid_connection_test.rb +0 -22
- data/test/cases/migration/change_schema_test.rb +0 -379
- data/test/cases/migration/change_table_test.rb +0 -204
- data/test/cases/migration/column_attributes_test.rb +0 -186
- data/test/cases/migration/column_positioning_test.rb +0 -60
- data/test/cases/migration/columns_test.rb +0 -279
- data/test/cases/migration/create_join_table_test.rb +0 -125
- data/test/cases/migration/helper.rb +0 -43
- data/test/cases/migration/index_test.rb +0 -209
- data/test/cases/migration/logger_test.rb +0 -37
- data/test/cases/migration/references_index_test.rb +0 -102
- data/test/cases/migration/references_statements_test.rb +0 -111
- data/test/cases/migration/rename_table_test.rb +0 -90
- data/test/cases/migration/table_and_index_test.rb +0 -24
- data/test/cases/migrator_test.rb +0 -378
- data/test/cases/multiparameter_attributes_test.rb +0 -350
- data/test/cases/reaper_test.rb +0 -81
- data/test/cases/relation/where_chain_test.rb +0 -80
- data/test/cases/result_test.rb +0 -32
- data/test/cases/scoping/default_scoping_test.rb +0 -374
- data/test/cases/scoping/relation_scoping_test.rb +0 -331
- data/test/cases/serialized_attribute_test.rb +0 -252
- data/test/cases/statement_cache_test.rb +0 -64
- data/test/cases/tasks/database_tasks_test.rb +0 -315
- data/test/cases/tasks/mysql_rake_test.rb +0 -301
- data/test/cases/tasks/postgresql_rake_test.rb +0 -236
- data/test/cases/tasks/sqlite_rake_test.rb +0 -191
- data/test/cases/test_case.rb +0 -95
- data/test/cases/test_simple.rb +0 -194
- data/test/cases/transaction_isolation_test.rb +0 -114
- data/test/cases/validations/presence_validation_test.rb +0 -51
- data/test/database_statements_test.rb +0 -19
- data/test/fixtures/admin/randomly_named_a9.yml +0 -7
- data/test/fixtures/admin/randomly_named_b0.yml +0 -7
- data/test/fixtures/colleges.yml +0 -3
- data/test/fixtures/other_topics.yml +0 -42
- data/test/fixtures/randomly_named_a9.yml +0 -7
- data/test/fixtures/teapots.yml +0 -3
- data/test/migration_test.rb +0 -861
- data/test/migrations/magic/1_currencies_have_symbols.rb +0 -12
- data/test/models/admin/randomly_named_c1.rb +0 -3
- data/test/models/arunit2_model.rb +0 -3
- data/test/models/autoloadable/extra_firm.rb +0 -2
- data/test/models/college.rb +0 -5
- data/test/models/randomly_named_c1.rb +0 -3
- data/test/test_simple.rb +0 -194
data/.travis.yml
CHANGED
@@ -4,11 +4,8 @@ rvm:
|
|
4
4
|
- 1.9.3
|
5
5
|
|
6
6
|
env:
|
7
|
-
-
|
8
|
-
-
|
9
|
-
- NUODB_ROOT=/opt/nuodb NUODB_VERSION=1.1
|
10
|
-
- NUODB_ROOT=/opt/nuodb NUODB_VERSION=1.0.2
|
11
|
-
- NUODB_ROOT=/opt/nuodb NUODB_VERSION=1.0.1
|
7
|
+
- NUODB_HOME=/opt/nuodb NUODB_VERSION=2.0
|
8
|
+
- NUODB_HOME=/opt/nuodb NUODB_VERSION=1.2
|
12
9
|
|
13
10
|
notifications:
|
14
11
|
recipients:
|
@@ -21,22 +18,14 @@ before_install:
|
|
21
18
|
- wget http://www.nuodb.com/latest/releases/nuodb-${NUODB_VERSION}.linux.x64.deb --output-document=/var/tmp/nuodb.deb
|
22
19
|
- sudo dpkg -i /var/tmp/nuodb.deb
|
23
20
|
- sleep 2
|
24
|
-
- sudo chmod 777 active_setup_linux.sh
|
25
21
|
|
26
22
|
before_script:
|
27
|
-
- ${
|
28
|
-
-
|
29
|
-
- ${
|
30
|
-
- sleep 2
|
31
|
-
- echo "create user cloud password 'user';" | ${NUODB_ROOT}/bin/nuosql test@localhost --user dba --password baz
|
32
|
-
- sleep 10
|
23
|
+
- java -jar ${NUODB_HOME}/jar/nuodbmanager.jar --broker localhost --user domain --password bird --command "start process sm database test host localhost archive /var/tmp/nuodb initialize true waitForRunning true"
|
24
|
+
- java -jar ${NUODB_HOME}/jar/nuodbmanager.jar --broker localhost --user domain --password bird --command "start process te database test host localhost options '--dba-user dba --dba-password baz' waitForRunning true"
|
25
|
+
- echo "create user cloud password 'user';" | ${NUODB_HOME}/bin/nuosql test@localhost --user dba --password baz
|
33
26
|
|
34
27
|
script:
|
35
|
-
- .
|
36
|
-
- cd ~/rails-latest
|
37
|
-
- bundle install
|
38
|
-
- gem list -d
|
39
|
-
- ARCONN=nuodb ruby -I"~/rails-latest/activerecord/test/" activerecord/test/cases/base_test.rb
|
28
|
+
- ruby -I"lib:test" test/cases/base_test.rb
|
40
29
|
|
41
30
|
after_script:
|
42
31
|
- sudo dpkg -r nuodb
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -33,6 +33,82 @@ require 'rake/testtask'
|
|
33
33
|
require 'rdoc/task'
|
34
34
|
require 'date'
|
35
35
|
|
36
|
+
require File.expand_path(File.dirname(__FILE__)) + "/test/config"
|
37
|
+
require File.expand_path(File.dirname(__FILE__)) + "/test/support/config"
|
38
|
+
|
39
|
+
def run_without_aborting(*tasks)
|
40
|
+
errors = []
|
41
|
+
|
42
|
+
tasks.each do |task|
|
43
|
+
begin
|
44
|
+
Rake::Task[task].invoke
|
45
|
+
rescue Exception
|
46
|
+
errors << task
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
abort "Errors running #{errors.join(', ')}" if errors.any?
|
51
|
+
end
|
52
|
+
|
53
|
+
desc 'Run nuodb tests by default'
|
54
|
+
task :default => :test
|
55
|
+
|
56
|
+
desc 'Run nuodb tests'
|
57
|
+
task :test do
|
58
|
+
tasks = defined?(JRUBY_VERSION) ?
|
59
|
+
%w(test_jdbcnuodb) :
|
60
|
+
%w(test_nuodb)
|
61
|
+
run_without_aborting(*tasks)
|
62
|
+
end
|
63
|
+
|
64
|
+
namespace :test do
|
65
|
+
task :isolated do
|
66
|
+
tasks = defined?(JRUBY_VERSION) ?
|
67
|
+
%w(isolated_test_jdbcmysql isolated_test_jdbcsqlite3 isolated_test_jdbcpostgresql) :
|
68
|
+
%w(isolated_test_mysql isolated_test_mysql2 isolated_test_sqlite3 isolated_test_postgresql)
|
69
|
+
run_without_aborting(*tasks)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
%w( nuodb ).each do |adapter|
|
74
|
+
Rake::TestTask.new("test_#{adapter}") { |t|
|
75
|
+
adapter_short = adapter == 'db2' ? adapter : adapter[/^[a-z0-9]+/]
|
76
|
+
t.libs << 'test'
|
77
|
+
t.test_files = (Dir.glob( "test/cases/**/*_test.rb" ).reject {
|
78
|
+
|x| x =~ /\/adapters\//
|
79
|
+
} + Dir.glob("test/cases/adapters/#{adapter_short}/**/*_test.rb")).sort
|
80
|
+
|
81
|
+
t.verbose = true
|
82
|
+
t.warning = true
|
83
|
+
}
|
84
|
+
|
85
|
+
task "isolated_test_#{adapter}" do
|
86
|
+
adapter_short = adapter == 'db2' ? adapter : adapter[/^[a-z0-9]+/]
|
87
|
+
puts [adapter, adapter_short].inspect
|
88
|
+
ruby = File.join(*RbConfig::CONFIG.values_at('bindir', 'RUBY_INSTALL_NAME'))
|
89
|
+
(Dir["test/cases/**/*_test.rb"].reject {
|
90
|
+
|x| x =~ /\/adapters\//
|
91
|
+
} + Dir["test/cases/adapters/#{adapter_short}/**/*_test.rb"]).all? do |file|
|
92
|
+
sh(ruby, "-Itest", file)
|
93
|
+
end or raise "Failures"
|
94
|
+
end
|
95
|
+
|
96
|
+
namespace adapter do
|
97
|
+
task :test => "test_#{adapter}"
|
98
|
+
task :isolated_test => "isolated_test_#{adapter}"
|
99
|
+
|
100
|
+
# Set the connection environment for the adapter
|
101
|
+
task(:env) { ENV['ARCONN'] = adapter }
|
102
|
+
end
|
103
|
+
|
104
|
+
# Make sure the adapter test evaluates the env setting task
|
105
|
+
task "test_#{adapter}" => "#{adapter}:env"
|
106
|
+
task "isolated_test_#{adapter}" => "#{adapter}:env"
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
|
36
112
|
#############################################################################
|
37
113
|
#
|
38
114
|
# Helper functions
|
@@ -103,13 +179,6 @@ Rake::RDocTask.new do |rdoc|
|
|
103
179
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
104
180
|
end
|
105
181
|
|
106
|
-
Rake::TestTask.new do |t|
|
107
|
-
t.libs << 'test'
|
108
|
-
t.test_files = FileList['test/test*.rb']
|
109
|
-
end
|
110
|
-
|
111
|
-
task :default => :test
|
112
|
-
|
113
182
|
#############################################################################
|
114
183
|
#
|
115
184
|
# Packaging tasks
|
@@ -12,12 +12,12 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.license = 'BSD'
|
13
13
|
|
14
14
|
gem.rdoc_options = %w(--charset=UTF-8)
|
15
|
-
gem.extra_rdoc_files = %w[README.md]
|
16
15
|
|
17
16
|
gem.add_dependency('activerecord', '~> 3.2.11')
|
18
17
|
gem.add_development_dependency('rake', '~> 10.0.3')
|
19
18
|
gem.add_development_dependency('rdoc', '~> 3.10')
|
20
|
-
gem.add_dependency('nuodb', '~>
|
19
|
+
gem.add_dependency('nuodb', '~> 2.0')
|
20
|
+
|
21
21
|
|
22
22
|
gem.files = `git ls-files`.split($\)
|
23
23
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ActiveRecord
|
2
|
-
|
3
|
-
def fake_connection(config)
|
2
|
+
class Base
|
3
|
+
def self.fake_connection(config)
|
4
4
|
ConnectionAdapters::FakeAdapter.new nil, logger
|
5
5
|
end
|
6
6
|
end
|
@@ -33,13 +33,9 @@ module ActiveRecord
|
|
33
33
|
options[:null])
|
34
34
|
end
|
35
35
|
|
36
|
-
def columns(table_name)
|
36
|
+
def columns(table_name, message)
|
37
37
|
@columns[table_name]
|
38
38
|
end
|
39
|
-
|
40
|
-
def active?
|
41
|
-
true
|
42
|
-
end
|
43
39
|
end
|
44
40
|
end
|
45
41
|
end
|
data/test/cases/adapter_test.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require "cases/helper"
|
2
|
-
require "models/book"
|
3
2
|
|
4
3
|
module ActiveRecord
|
5
4
|
class AdapterTest < ActiveRecord::TestCase
|
@@ -7,19 +6,6 @@ module ActiveRecord
|
|
7
6
|
@connection = ActiveRecord::Base.connection
|
8
7
|
end
|
9
8
|
|
10
|
-
##
|
11
|
-
# PostgreSQL does not support null bytes in strings
|
12
|
-
unless current_adapter?(:PostgreSQLAdapter)
|
13
|
-
def test_update_prepared_statement
|
14
|
-
b = Book.create(name: "my \x00 book")
|
15
|
-
b.reload
|
16
|
-
assert_equal "my \x00 book", b.name
|
17
|
-
b.update_attributes(name: "my other \x00 book")
|
18
|
-
b.reload
|
19
|
-
assert_equal "my other \x00 book", b.name
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
9
|
def test_tables
|
24
10
|
tables = @connection.tables
|
25
11
|
assert tables.include?("accounts")
|
@@ -114,7 +100,7 @@ module ActiveRecord
|
|
114
100
|
end
|
115
101
|
end
|
116
102
|
|
117
|
-
# test resetting sequences in odd tables in
|
103
|
+
# test resetting sequences in odd tables in postgreSQL
|
118
104
|
if ActiveRecord::Base.connection.respond_to?(:reset_pk_sequence!)
|
119
105
|
require 'models/movie'
|
120
106
|
require 'models/subscriber'
|
@@ -167,45 +153,11 @@ module ActiveRecord
|
|
167
153
|
else
|
168
154
|
@connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
|
169
155
|
end
|
170
|
-
# should
|
156
|
+
# should deleted created record as otherwise disable_referential_integrity will try to enable contraints after executed block
|
171
157
|
# and will fail (at least on Oracle)
|
172
158
|
@connection.execute "DELETE FROM fk_test_has_fk"
|
173
159
|
end
|
174
160
|
end
|
175
161
|
end
|
176
162
|
end
|
177
|
-
|
178
|
-
class AdapterTestWithoutTransaction < ActiveRecord::TestCase
|
179
|
-
self.use_transactional_fixtures = false
|
180
|
-
|
181
|
-
class Klass < ActiveRecord::Base
|
182
|
-
end
|
183
|
-
|
184
|
-
def setup
|
185
|
-
Klass.establish_connection 'arunit'
|
186
|
-
@connection = Klass.connection
|
187
|
-
end
|
188
|
-
|
189
|
-
def teardown
|
190
|
-
Klass.remove_connection
|
191
|
-
end
|
192
|
-
|
193
|
-
test "transaction state is reset after a reconnect" do
|
194
|
-
skip "in-memory db doesn't allow reconnect" if in_memory_db?
|
195
|
-
|
196
|
-
@connection.begin_transaction
|
197
|
-
assert @connection.transaction_open?
|
198
|
-
@connection.reconnect!
|
199
|
-
assert !@connection.transaction_open?
|
200
|
-
end
|
201
|
-
|
202
|
-
test "transaction state is reset after a disconnect" do
|
203
|
-
skip "in-memory db doesn't allow disconnect" if in_memory_db?
|
204
|
-
|
205
|
-
@connection.begin_transaction
|
206
|
-
assert @connection.transaction_open?
|
207
|
-
@connection.disconnect!
|
208
|
-
assert !@connection.transaction_open?
|
209
|
-
end
|
210
|
-
end
|
211
163
|
end
|
@@ -2,68 +2,47 @@ require "cases/helper"
|
|
2
2
|
|
3
3
|
class ActiveSchemaTest < ActiveRecord::TestCase
|
4
4
|
def setup
|
5
|
-
|
6
|
-
ActiveRecord::Base.establish_connection(@connection)
|
7
|
-
|
8
|
-
ActiveRecord::Base.connection.singleton_class.class_eval do
|
5
|
+
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.class_eval do
|
9
6
|
alias_method :execute_without_stub, :execute
|
7
|
+
remove_method :execute
|
10
8
|
def execute(sql, name = nil) return sql end
|
11
9
|
end
|
12
10
|
end
|
13
11
|
|
14
12
|
def teardown
|
15
|
-
ActiveRecord::
|
16
|
-
|
13
|
+
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.class_eval do
|
14
|
+
remove_method :execute
|
15
|
+
alias_method :execute, :execute_without_stub
|
16
|
+
end
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_add_index
|
20
20
|
# add_index calls index_name_exists? which can't work since execute is stubbed
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
ActiveRecord::ConnectionAdapters::MysqlAdapter.send(:define_method, :index_name_exists?) do |*|
|
22
|
+
false
|
23
|
+
end
|
24
|
+
expected = "CREATE INDEX `index_people_on_last_name` ON `people` (`last_name`)"
|
24
25
|
assert_equal expected, add_index(:people, :last_name, :length => nil)
|
25
26
|
|
26
|
-
expected = "CREATE INDEX `index_people_on_last_name`
|
27
|
+
expected = "CREATE INDEX `index_people_on_last_name` ON `people` (`last_name`(10))"
|
27
28
|
assert_equal expected, add_index(:people, :last_name, :length => 10)
|
28
29
|
|
29
|
-
expected = "CREATE INDEX `index_people_on_last_name_and_first_name`
|
30
|
+
expected = "CREATE INDEX `index_people_on_last_name_and_first_name` ON `people` (`last_name`(15), `first_name`(15))"
|
30
31
|
assert_equal expected, add_index(:people, [:last_name, :first_name], :length => 15)
|
31
32
|
|
32
|
-
expected = "CREATE INDEX `index_people_on_last_name_and_first_name`
|
33
|
+
expected = "CREATE INDEX `index_people_on_last_name_and_first_name` ON `people` (`last_name`(15), `first_name`)"
|
33
34
|
assert_equal expected, add_index(:people, [:last_name, :first_name], :length => {:last_name => 15})
|
34
35
|
|
35
|
-
expected = "CREATE INDEX `index_people_on_last_name_and_first_name`
|
36
|
+
expected = "CREATE INDEX `index_people_on_last_name_and_first_name` ON `people` (`last_name`(15), `first_name`(10))"
|
36
37
|
assert_equal expected, add_index(:people, [:last_name, :first_name], :length => {:last_name => 15, :first_name => 10})
|
37
|
-
|
38
|
-
%w(SPATIAL FULLTEXT UNIQUE).each do |type|
|
39
|
-
expected = "CREATE #{type} INDEX `index_people_on_last_name` ON `people` (`last_name`) "
|
40
|
-
assert_equal expected, add_index(:people, :last_name, :type => type)
|
41
|
-
end
|
42
|
-
|
43
|
-
%w(btree hash).each do |using|
|
44
|
-
expected = "CREATE INDEX `index_people_on_last_name` USING #{using} ON `people` (`last_name`) "
|
45
|
-
assert_equal expected, add_index(:people, :last_name, :using => using)
|
46
|
-
end
|
47
|
-
|
48
|
-
expected = "CREATE INDEX `index_people_on_last_name` USING btree ON `people` (`last_name`(10)) "
|
49
|
-
assert_equal expected, add_index(:people, :last_name, :length => 10, :using => :btree)
|
50
|
-
|
51
|
-
expected = "CREATE INDEX `index_people_on_last_name` USING btree ON `people` (`last_name`(10)) ALGORITHM = COPY"
|
52
|
-
assert_equal expected, add_index(:people, :last_name, :length => 10, using: :btree, algorithm: :copy)
|
53
|
-
|
54
|
-
assert_raise ArgumentError do
|
55
|
-
add_index(:people, :last_name, algorithm: :coyp)
|
56
|
-
end
|
57
|
-
|
58
|
-
expected = "CREATE INDEX `index_people_on_last_name_and_first_name` USING btree ON `people` (`last_name`(15), `first_name`(15)) "
|
59
|
-
assert_equal expected, add_index(:people, [:last_name, :first_name], :length => 15, :using => :btree)
|
38
|
+
ActiveRecord::ConnectionAdapters::MysqlAdapter.send(:remove_method, :index_name_exists?)
|
60
39
|
end
|
61
40
|
|
62
41
|
def test_drop_table
|
63
42
|
assert_equal "DROP TABLE `people`", drop_table(:people)
|
64
43
|
end
|
65
44
|
|
66
|
-
if current_adapter?(:MysqlAdapter
|
45
|
+
if current_adapter?(:MysqlAdapter) or current_adapter?(:Mysql2Adapter)
|
67
46
|
def test_create_mysql_database_with_encoding
|
68
47
|
assert_equal "CREATE DATABASE `matt` DEFAULT CHARACTER SET `utf8`", create_database(:matt)
|
69
48
|
assert_equal "CREATE DATABASE `aimonetti` DEFAULT CHARACTER SET `latin1`", create_database(:aimonetti, {:charset => 'latin1'})
|
@@ -91,7 +70,8 @@ class ActiveSchemaTest < ActiveRecord::TestCase
|
|
91
70
|
def test_add_timestamps
|
92
71
|
with_real_execute do
|
93
72
|
begin
|
94
|
-
ActiveRecord::Base.connection.create_table :delete_me
|
73
|
+
ActiveRecord::Base.connection.create_table :delete_me do |t|
|
74
|
+
end
|
95
75
|
ActiveRecord::Base.connection.add_timestamps :delete_me
|
96
76
|
assert column_present?('delete_me', 'updated_at', 'datetime')
|
97
77
|
assert column_present?('delete_me', 'created_at', 'datetime')
|
@@ -118,20 +98,22 @@ class ActiveSchemaTest < ActiveRecord::TestCase
|
|
118
98
|
|
119
99
|
private
|
120
100
|
def with_real_execute
|
121
|
-
|
101
|
+
#we need to actually modify some data, so we make execute point to the original method
|
102
|
+
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.class_eval do
|
122
103
|
alias_method :execute_with_stub, :execute
|
123
104
|
remove_method :execute
|
124
105
|
alias_method :execute, :execute_without_stub
|
125
106
|
end
|
126
|
-
|
127
107
|
yield
|
128
108
|
ensure
|
129
|
-
|
109
|
+
#before finishing, we restore the alias to the mock-up method
|
110
|
+
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.class_eval do
|
130
111
|
remove_method :execute
|
131
112
|
alias_method :execute, :execute_with_stub
|
132
113
|
end
|
133
114
|
end
|
134
115
|
|
116
|
+
|
135
117
|
def method_missing(method_symbol, *arguments)
|
136
118
|
ActiveRecord::Base.connection.send(method_symbol, *arguments)
|
137
119
|
end
|
@@ -1,9 +1,6 @@
|
|
1
1
|
require "cases/helper"
|
2
2
|
|
3
3
|
class MysqlConnectionTest < ActiveRecord::TestCase
|
4
|
-
class Klass < ActiveRecord::Base
|
5
|
-
end
|
6
|
-
|
7
4
|
def setup
|
8
5
|
super
|
9
6
|
@connection = ActiveRecord::Base.connection
|
@@ -17,14 +14,12 @@ class MysqlConnectionTest < ActiveRecord::TestCase
|
|
17
14
|
end
|
18
15
|
|
19
16
|
def test_connect_with_url
|
20
|
-
run_without_connection do
|
17
|
+
run_without_connection do |orig|
|
21
18
|
ar_config = ARTest.connection_config['arunit']
|
22
|
-
|
23
|
-
skip "This test doesn't work with custom socket location" if ar_config['socket']
|
24
|
-
|
25
19
|
url = "mysql://#{ar_config["username"]}@localhost/#{ar_config["database"]}"
|
26
|
-
|
27
|
-
|
20
|
+
klass = Class.new(ActiveRecord::Base)
|
21
|
+
klass.establish_connection(url)
|
22
|
+
assert_equal ar_config['database'], klass.connection.current_database
|
28
23
|
end
|
29
24
|
end
|
30
25
|
|
@@ -128,37 +123,6 @@ class MysqlConnectionTest < ActiveRecord::TestCase
|
|
128
123
|
end
|
129
124
|
end
|
130
125
|
|
131
|
-
def test_mysql_default_in_strict_mode
|
132
|
-
result = @connection.exec_query "SELECT @@SESSION.sql_mode"
|
133
|
-
assert_equal [["STRICT_ALL_TABLES"]], result.rows
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_mysql_strict_mode_disabled_dont_override_global_sql_mode
|
137
|
-
run_without_connection do |orig_connection|
|
138
|
-
ActiveRecord::Base.establish_connection(orig_connection.merge({:strict => false}))
|
139
|
-
global_sql_mode = ActiveRecord::Base.connection.exec_query "SELECT @@GLOBAL.sql_mode"
|
140
|
-
session_sql_mode = ActiveRecord::Base.connection.exec_query "SELECT @@SESSION.sql_mode"
|
141
|
-
assert_equal global_sql_mode.rows, session_sql_mode.rows
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_mysql_set_session_variable
|
146
|
-
run_without_connection do |orig_connection|
|
147
|
-
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:default_week_format => 3}}))
|
148
|
-
session_mode = ActiveRecord::Base.connection.exec_query "SELECT @@SESSION.DEFAULT_WEEK_FORMAT"
|
149
|
-
assert_equal 3, session_mode.rows.first.first.to_i
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_mysql_set_session_variable_to_default
|
154
|
-
run_without_connection do |orig_connection|
|
155
|
-
ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:default_week_format => :default}}))
|
156
|
-
global_mode = ActiveRecord::Base.connection.exec_query "SELECT @@GLOBAL.DEFAULT_WEEK_FORMAT"
|
157
|
-
session_mode = ActiveRecord::Base.connection.exec_query "SELECT @@SESSION.DEFAULT_WEEK_FORMAT"
|
158
|
-
assert_equal global_mode.rows, session_mode.rows
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
126
|
private
|
163
127
|
|
164
128
|
def run_without_connection
|