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.
Files changed (282) hide show
  1. data/.travis.yml +6 -17
  2. data/Gemfile +4 -0
  3. data/Rakefile +76 -7
  4. data/activerecord-nuodb-adapter.gemspec +2 -2
  5. data/lib/active_record/connection_adapters/nuodb/version.rb +1 -1
  6. data/test/active_record/connection_adapters/fake_adapter.rb +3 -7
  7. data/test/cases/adapter_test.rb +2 -50
  8. data/test/cases/adapters/mysql/active_schema_test.rb +23 -41
  9. data/test/cases/adapters/mysql/connection_test.rb +4 -40
  10. data/test/cases/adapters/mysql/enum_test.rb +1 -1
  11. data/test/cases/adapters/mysql/mysql_adapter_test.rb +22 -36
  12. data/test/cases/adapters/mysql/reserved_word_test.rb +14 -9
  13. data/test/cases/adapters/mysql/schema_test.rb +1 -23
  14. data/test/cases/adapters/mysql2/active_schema_test.rb +22 -40
  15. data/test/cases/adapters/mysql2/bind_parameter_test.rb +2 -2
  16. data/test/cases/adapters/mysql2/connection_test.rb +0 -55
  17. data/test/cases/adapters/mysql2/enum_test.rb +1 -1
  18. data/test/cases/adapters/mysql2/reserved_word_test.rb +15 -9
  19. data/test/cases/adapters/mysql2/schema_test.rb +8 -27
  20. data/test/cases/adapters/postgresql/active_schema_test.rb +3 -33
  21. data/test/cases/adapters/postgresql/connection_test.rb +32 -107
  22. data/test/cases/adapters/postgresql/datatype_test.rb +35 -371
  23. data/test/cases/adapters/postgresql/explain_test.rb +7 -0
  24. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +3 -84
  25. data/test/cases/adapters/postgresql/quoting_test.rb +0 -33
  26. data/test/cases/adapters/postgresql/schema_test.rb +7 -56
  27. data/test/cases/adapters/postgresql/timestamp_test.rb +0 -83
  28. data/test/cases/adapters/sqlite3/copy_table_test.rb +5 -16
  29. data/test/cases/adapters/sqlite3/quoting_test.rb +11 -9
  30. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +39 -38
  31. data/test/cases/adapters/sqlite3/statement_pool_test.rb +1 -1
  32. data/test/cases/aggregations_test.rb +3 -21
  33. data/test/cases/ar_schema_test.rb +23 -31
  34. data/test/cases/associations/belongs_to_associations_test.rb +64 -176
  35. data/test/cases/associations/callbacks_test.rb +1 -0
  36. data/test/cases/associations/cascaded_eager_loading_test.rb +25 -25
  37. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +3 -2
  38. data/test/cases/associations/eager_load_nested_include_test.rb +4 -2
  39. data/test/cases/associations/eager_singularization_test.rb +7 -7
  40. data/test/cases/associations/eager_test.rb +227 -285
  41. data/test/cases/associations/extension_test.rb +15 -8
  42. data/test/cases/associations/habtm_join_table_test.rb +35 -0
  43. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +139 -55
  44. data/test/cases/associations/has_many_associations_test.rb +408 -362
  45. data/test/cases/associations/has_many_through_associations_test.rb +34 -76
  46. data/test/cases/associations/has_one_associations_test.rb +42 -73
  47. data/test/cases/associations/has_one_through_associations_test.rb +15 -15
  48. data/test/cases/associations/identity_map_test.rb +137 -0
  49. data/test/cases/associations/inner_join_association_test.rb +11 -19
  50. data/test/cases/associations/inverse_associations_test.rb +34 -178
  51. data/test/cases/associations/join_model_test.rb +75 -77
  52. data/test/cases/associations/nested_through_associations_test.rb +12 -21
  53. data/test/cases/associations_test.rb +10 -63
  54. data/test/cases/attribute_methods/read_test.rb +16 -4
  55. data/test/cases/attribute_methods_test.rb +79 -62
  56. data/test/cases/autosave_association_test.rb +48 -53
  57. data/test/cases/base_test.rb +1077 -336
  58. data/test/cases/batches_test.rb +22 -35
  59. data/test/cases/binary_test.rb +3 -3
  60. data/test/cases/bind_parameter_test.rb +9 -8
  61. data/test/cases/calculations_test.rb +109 -187
  62. data/test/cases/callbacks_test.rb +2 -53
  63. data/test/cases/clone_test.rb +3 -10
  64. data/test/cases/coders/yaml_column_test.rb +2 -19
  65. data/test/cases/column_definition_test.rb +13 -11
  66. data/test/cases/column_test.rb +14 -60
  67. data/test/cases/connection_adapters/abstract_adapter_test.rb +8 -16
  68. data/test/cases/connection_adapters/connection_handler_test.rb +10 -13
  69. data/test/cases/connection_adapters/schema_cache_test.rb +14 -26
  70. data/test/cases/connection_management_test.rb +3 -26
  71. data/test/cases/connection_pool_test.rb +35 -201
  72. data/test/cases/connection_specification/resolver_test.rb +21 -34
  73. data/test/cases/counter_cache_test.rb +1 -30
  74. data/test/cases/custom_locking_test.rb +1 -1
  75. data/test/cases/date_time_test.rb +3 -3
  76. data/test/cases/defaults_test.rb +20 -82
  77. data/test/cases/deprecated_finder_test.rb +30 -0
  78. data/test/cases/dirty_test.rb +35 -66
  79. data/test/cases/dup_test.rb +23 -33
  80. data/test/cases/dynamic_finder_match_test.rb +106 -0
  81. data/test/cases/explain_subscriber_test.rb +30 -34
  82. data/test/cases/explain_test.rb +61 -6
  83. data/test/cases/finder_respond_to_test.rb +40 -4
  84. data/test/cases/finder_test.rb +542 -166
  85. data/test/cases/{fixture_set → fixtures}/file_test.rb +1 -1
  86. data/test/cases/fixtures_test.rb +53 -128
  87. data/test/cases/helper.rb +44 -41
  88. data/test/cases/identity_map/middleware_test.rb +71 -0
  89. data/test/cases/identity_map_test.rb +434 -0
  90. data/test/cases/inheritance_test.rb +65 -128
  91. data/test/cases/invalid_date_test.rb +2 -0
  92. data/test/cases/invertible_migration_test.rb +2 -157
  93. data/test/cases/json_serialization_test.rb +34 -103
  94. data/test/cases/lifecycle_test.rb +256 -0
  95. data/test/cases/locking_test.rb +66 -24
  96. data/test/cases/log_subscriber_test.rb +20 -24
  97. data/test/cases/mass_assignment_security_test.rb +868 -0
  98. data/test/cases/method_scoping_test.rb +558 -0
  99. data/test/cases/migration/command_recorder_test.rb +46 -162
  100. data/test/cases/migration_test.rb +2151 -643
  101. data/test/cases/modules_test.rb +8 -8
  102. data/test/cases/multiple_db_test.rb +3 -15
  103. data/test/cases/{scoping/named_scoping_test.rb → named_scope_test.rb} +147 -64
  104. data/test/cases/nested_attributes_test.rb +97 -142
  105. data/test/cases/persistence_test.rb +98 -238
  106. data/test/cases/pooled_connections_test.rb +24 -0
  107. data/test/cases/primary_keys_test.rb +4 -4
  108. data/test/cases/query_cache_test.rb +23 -23
  109. data/test/cases/quoting_test.rb +0 -8
  110. data/test/cases/readonly_test.rb +16 -15
  111. data/test/cases/reflection_test.rb +49 -96
  112. data/test/cases/relation/where_test.rb +7 -88
  113. data/test/cases/relation_scoping_test.rb +555 -0
  114. data/test/cases/relation_test.rb +45 -221
  115. data/test/cases/relations_test.rb +185 -542
  116. data/test/cases/sanitize_test.rb +0 -9
  117. data/test/cases/schema_dumper_test.rb +49 -162
  118. data/test/cases/serialization_test.rb +8 -23
  119. data/test/cases/session_store/session_test.rb +78 -0
  120. data/test/cases/session_store/sql_bypass.rb +56 -0
  121. data/test/cases/store_test.rb +1 -111
  122. data/test/cases/timestamp_test.rb +17 -131
  123. data/test/cases/transaction_callbacks_test.rb +35 -60
  124. data/test/cases/transactions_test.rb +192 -119
  125. data/test/cases/validations/association_validation_test.rb +9 -7
  126. data/test/cases/validations/i18n_generate_message_validation_test.rb +0 -38
  127. data/test/cases/validations/i18n_validation_test.rb +1 -1
  128. data/test/cases/validations/uniqueness_validation_test.rb +28 -84
  129. data/test/cases/validations_repair_helper.rb +2 -2
  130. data/test/cases/validations_test.rb +30 -0
  131. data/test/cases/xml_serialization_test.rb +15 -70
  132. data/test/cases/yaml_serialization_test.rb +20 -21
  133. data/test/config.example.yml +2 -138
  134. data/test/fixtures/admin/users.yml +0 -3
  135. data/test/fixtures/companies.yml +6 -0
  136. data/test/fixtures/courses.yml +0 -1
  137. data/test/fixtures/developers.yml +1 -1
  138. data/test/fixtures/dog_lovers.yml +0 -3
  139. data/test/fixtures/dogs.yml +0 -1
  140. data/test/fixtures/friendships.yml +2 -2
  141. data/test/fixtures/mateys.yml +2 -2
  142. data/test/fixtures/parrots_pirates.yml +4 -4
  143. data/test/fixtures/people.yml +0 -3
  144. data/test/fixtures/peoples_treasures.yml +2 -2
  145. data/test/fixtures/pets.yml +0 -5
  146. data/test/fixtures/readers.yml +1 -3
  147. data/test/fixtures/reserved_words/{distinct_select.yml → distincts_selects.yml} +3 -3
  148. data/test/fixtures/toys.yml +0 -10
  149. data/test/fixtures/traffic_lights.yml +0 -4
  150. data/test/fixtures/vegetables.yml +1 -12
  151. data/test/load_paths.rb +4 -0
  152. data/test/migrations/broken/100_migration_that_raises_exception.rb +10 -0
  153. data/test/migrations/duplicate/1_people_have_last_names.rb +9 -0
  154. data/test/migrations/duplicate/2_we_need_reminders.rb +12 -0
  155. data/test/migrations/duplicate/3_foo.rb +7 -0
  156. data/test/migrations/duplicate/3_innocent_jointable.rb +12 -0
  157. data/test/migrations/duplicate_names/20080507052938_chunky.rb +7 -0
  158. data/test/migrations/duplicate_names/20080507053028_chunky.rb +7 -0
  159. data/test/migrations/interleaved/pass_1/3_interleaved_innocent_jointable.rb +12 -0
  160. data/test/migrations/interleaved/pass_2/1_interleaved_people_have_last_names.rb +9 -0
  161. data/test/migrations/interleaved/pass_2/3_interleaved_innocent_jointable.rb +12 -0
  162. data/test/migrations/interleaved/pass_3/1_interleaved_people_have_last_names.rb +9 -0
  163. data/test/migrations/interleaved/pass_3/2_interleaved_i_raise_on_down.rb +8 -0
  164. data/test/migrations/interleaved/pass_3/3_interleaved_innocent_jointable.rb +12 -0
  165. data/test/models/admin/user.rb +0 -34
  166. data/test/models/author.rb +50 -46
  167. data/test/models/book.rb +1 -1
  168. data/test/models/bulb.rb +7 -11
  169. data/test/models/car.rb +10 -10
  170. data/test/models/categorization.rb +1 -1
  171. data/test/models/category.rb +15 -10
  172. data/test/models/club.rb +1 -1
  173. data/test/models/comment.rb +15 -9
  174. data/test/models/company.rb +49 -44
  175. data/test/models/company_in_module.rb +7 -4
  176. data/test/models/contact.rb +17 -32
  177. data/test/models/course.rb +1 -4
  178. data/test/models/customer.rb +0 -4
  179. data/test/models/developer.rb +44 -42
  180. data/test/models/dog.rb +2 -3
  181. data/test/models/dog_lover.rb +2 -3
  182. data/test/models/friendship.rb +2 -4
  183. data/test/models/liquid.rb +2 -1
  184. data/test/models/member.rb +6 -10
  185. data/test/models/member_detail.rb +1 -1
  186. data/test/models/organization.rb +1 -1
  187. data/test/models/owner.rb +1 -1
  188. data/test/models/parrot.rb +0 -6
  189. data/test/models/person.rb +15 -28
  190. data/test/models/pet.rb +2 -0
  191. data/test/models/pirate.rb +4 -4
  192. data/test/models/post.rb +56 -52
  193. data/test/models/price_estimate.rb +0 -1
  194. data/test/models/project.rb +22 -10
  195. data/test/models/reader.rb +4 -3
  196. data/test/models/reference.rb +5 -4
  197. data/test/models/reply.rb +4 -1
  198. data/test/models/speedometer.rb +0 -2
  199. data/test/models/sponsor.rb +2 -2
  200. data/test/models/tagging.rb +3 -2
  201. data/test/models/topic.rb +22 -18
  202. data/test/models/toy.rb +1 -1
  203. data/test/models/traffic_light.rb +0 -1
  204. data/test/models/treasure.rb +0 -3
  205. data/test/models/vegetables.rb +0 -10
  206. data/test/models/without_table.rb +1 -1
  207. data/test/schema/mysql2_specific_schema.rb +10 -24
  208. data/test/schema/mysql_specific_schema.rb +10 -24
  209. data/test/schema/postgresql_specific_schema.rb +11 -94
  210. data/test/schema/schema.rb +15 -38
  211. data/test/schema/sqlite_specific_schema.rb +1 -1
  212. data/test/support/connection.rb +5 -6
  213. metadata +64 -150
  214. data/active_setup_linux.sh +0 -39
  215. data/test/ar_schema_test.rb +0 -70
  216. data/test/base_test.rb +0 -1481
  217. data/test/cases/.DS_Store +0 -0
  218. data/test/cases/adapters/mysql/sql_types_test.rb +0 -14
  219. data/test/cases/adapters/mysql2/schema_migrations_test.rb +0 -26
  220. data/test/cases/adapters/mysql2/sql_types_test.rb +0 -14
  221. data/test/cases/adapters/postgresql/array_test.rb +0 -104
  222. data/test/cases/adapters/postgresql/bytea_test.rb +0 -104
  223. data/test/cases/adapters/postgresql/hstore_test.rb +0 -200
  224. data/test/cases/adapters/postgresql/json_test.rb +0 -99
  225. data/test/cases/adapters/postgresql/ltree_test.rb +0 -41
  226. data/test/cases/adapters/postgresql/uuid_test.rb +0 -95
  227. data/test/cases/associations/association_scope_test.rb +0 -15
  228. data/test/cases/associations/join_dependency_test.rb +0 -8
  229. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  230. data/test/cases/connection_adapters/connection_specification_test.rb +0 -12
  231. data/test/cases/connection_adapters/quoting_test.rb +0 -13
  232. data/test/cases/core_test.rb +0 -33
  233. data/test/cases/disconnected_test.rb +0 -27
  234. data/test/cases/forbidden_attributes_protection_test.rb +0 -64
  235. data/test/cases/hot_compatibility_test.rb +0 -54
  236. data/test/cases/integration_test.rb +0 -87
  237. data/test/cases/invalid_connection_test.rb +0 -22
  238. data/test/cases/migration/change_schema_test.rb +0 -379
  239. data/test/cases/migration/change_table_test.rb +0 -204
  240. data/test/cases/migration/column_attributes_test.rb +0 -186
  241. data/test/cases/migration/column_positioning_test.rb +0 -60
  242. data/test/cases/migration/columns_test.rb +0 -279
  243. data/test/cases/migration/create_join_table_test.rb +0 -125
  244. data/test/cases/migration/helper.rb +0 -43
  245. data/test/cases/migration/index_test.rb +0 -209
  246. data/test/cases/migration/logger_test.rb +0 -37
  247. data/test/cases/migration/references_index_test.rb +0 -102
  248. data/test/cases/migration/references_statements_test.rb +0 -111
  249. data/test/cases/migration/rename_table_test.rb +0 -90
  250. data/test/cases/migration/table_and_index_test.rb +0 -24
  251. data/test/cases/migrator_test.rb +0 -378
  252. data/test/cases/multiparameter_attributes_test.rb +0 -350
  253. data/test/cases/reaper_test.rb +0 -81
  254. data/test/cases/relation/where_chain_test.rb +0 -80
  255. data/test/cases/result_test.rb +0 -32
  256. data/test/cases/scoping/default_scoping_test.rb +0 -374
  257. data/test/cases/scoping/relation_scoping_test.rb +0 -331
  258. data/test/cases/serialized_attribute_test.rb +0 -252
  259. data/test/cases/statement_cache_test.rb +0 -64
  260. data/test/cases/tasks/database_tasks_test.rb +0 -315
  261. data/test/cases/tasks/mysql_rake_test.rb +0 -301
  262. data/test/cases/tasks/postgresql_rake_test.rb +0 -236
  263. data/test/cases/tasks/sqlite_rake_test.rb +0 -191
  264. data/test/cases/test_case.rb +0 -95
  265. data/test/cases/test_simple.rb +0 -194
  266. data/test/cases/transaction_isolation_test.rb +0 -114
  267. data/test/cases/validations/presence_validation_test.rb +0 -51
  268. data/test/database_statements_test.rb +0 -19
  269. data/test/fixtures/admin/randomly_named_a9.yml +0 -7
  270. data/test/fixtures/admin/randomly_named_b0.yml +0 -7
  271. data/test/fixtures/colleges.yml +0 -3
  272. data/test/fixtures/other_topics.yml +0 -42
  273. data/test/fixtures/randomly_named_a9.yml +0 -7
  274. data/test/fixtures/teapots.yml +0 -3
  275. data/test/migration_test.rb +0 -861
  276. data/test/migrations/magic/1_currencies_have_symbols.rb +0 -12
  277. data/test/models/admin/randomly_named_c1.rb +0 -3
  278. data/test/models/arunit2_model.rb +0 -3
  279. data/test/models/autoloadable/extra_firm.rb +0 -2
  280. data/test/models/college.rb +0 -5
  281. data/test/models/randomly_named_c1.rb +0 -3
  282. data/test/test_simple.rb +0 -194
@@ -4,11 +4,8 @@ rvm:
4
4
  - 1.9.3
5
5
 
6
6
  env:
7
- - NUODB_ROOT=/opt/nuodb NUODB_VERSION=1.2
8
- - NUODB_ROOT=/opt/nuodb NUODB_VERSION=1.1.1
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
- - ${NUODB_ROOT}/bin/nuodb --chorus test --password bar --dba-user dba --dba-password baz --verbose debug --archive /var/tmp/nuodb --initialize --force &
28
- - sleep 2
29
- - ${NUODB_ROOT}/bin/nuodb --chorus test --password bar --dba-user dba --dba-password baz &
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
- - . ./active_setup_linux.sh
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
@@ -6,4 +6,8 @@ group(:development, :test) do
6
6
  gem 'rake'
7
7
  gem 'rake-compiler'
8
8
  gem 'rdoc'
9
+ gem 'mocha', '>= 0.13.0'
10
+ gem 'erubis'
11
+ gem 'bcrypt-ruby', '~> 3.0.0'
12
+ gem 'actionpack', '~>3.2.11'
9
13
  end
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', '~> 1.1')
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)/})
@@ -29,7 +29,7 @@
29
29
  module ActiveRecord
30
30
  module ConnectionAdapters
31
31
  module NuoDB
32
- VERSION = '1.1'
32
+ VERSION = '2.0'
33
33
  end
34
34
  end
35
35
  end
@@ -1,6 +1,6 @@
1
1
  module ActiveRecord
2
- module ConnectionHandling
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
@@ -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 PostgreSQL
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 delete created record as otherwise disable_referential_integrity will try to enable constraints after executed block
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
- @connection = ActiveRecord::Base.remove_connection
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::Base.remove_connection
16
- ActiveRecord::Base.establish_connection(@connection)
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
- def (ActiveRecord::Base.connection).index_name_exists?(*); false; end
22
-
23
- expected = "CREATE INDEX `index_people_on_last_name` ON `people` (`last_name`) "
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` ON `people` (`last_name`(10)) "
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` ON `people` (`last_name`(15), `first_name`(15)) "
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` ON `people` (`last_name`(15), `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` ON `people` (`last_name`(15), `first_name`(10)) "
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, :Mysql2Adapter)
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
- ActiveRecord::Base.connection.singleton_class.class_eval do
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
- ActiveRecord::Base.connection.singleton_class.class_eval do
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
- Klass.establish_connection(url)
27
- assert_equal ar_config['database'], Klass.connection.current_database
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