activerecord-nuodb-adapter 1.1 → 2.0

Sign up to get free protection for your applications and to get access to all the features.
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