activerecord-nuodb-adapter 1.1 → 2.0
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/.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
|