ibm_db 4.0.0-x86-mingw32 → 5.1.0-x86-mingw32

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 (576) hide show
  1. checksums.yaml +5 -5
  2. data/MANIFEST +14 -14
  3. data/README +208 -208
  4. data/ext/Makefile +269 -0
  5. data/ext/Makefile.nt32 +181 -181
  6. data/ext/Makefile.nt32.191 +212 -212
  7. data/ext/extconf.rb +322 -291
  8. data/ext/gil_release_version.h +3 -0
  9. data/ext/ibm_db-i386-mingw32.def +2 -0
  10. data/ext/ibm_db.c +11879 -11887
  11. data/ext/ibm_db.o +0 -0
  12. data/ext/ibm_db.so +0 -0
  13. data/ext/mkmf.log +110 -0
  14. data/ext/ruby_ibm_db.h +241 -241
  15. data/ext/ruby_ibm_db_cli.c +866 -866
  16. data/ext/ruby_ibm_db_cli.h +500 -500
  17. data/ext/ruby_ibm_db_cli.o +0 -0
  18. data/ext/unicode_support_version.h +3 -0
  19. data/init.rb +41 -41
  20. data/lib/IBM_DB.rb +27 -27
  21. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3593 -3452
  22. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -5
  23. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  24. data/lib/mswin32/ibm_db.rb +94 -90
  25. data/lib/mswin32/rb2x/i386/ruby26/ibm_db.so +0 -0
  26. data/lib/mswin32/rb2x/i386/ruby27/ibm_db.so +0 -0
  27. data/test/active_record/connection_adapters/fake_adapter.rb +49 -49
  28. data/test/assets/example.log +1 -1
  29. data/test/assets/test.txt +1 -1
  30. data/test/cases/adapter_test.rb +351 -351
  31. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -193
  32. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -50
  33. data/test/cases/adapters/mysql2/boolean_test.rb +100 -100
  34. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -63
  35. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -54
  36. data/test/cases/adapters/mysql2/connection_test.rb +210 -210
  37. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -45
  38. data/test/cases/adapters/mysql2/enum_test.rb +26 -26
  39. data/test/cases/adapters/mysql2/explain_test.rb +21 -21
  40. data/test/cases/adapters/mysql2/json_test.rb +195 -195
  41. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -83
  42. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -152
  43. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -59
  44. data/test/cases/adapters/mysql2/schema_test.rb +126 -126
  45. data/test/cases/adapters/mysql2/sp_test.rb +36 -36
  46. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -14
  47. data/test/cases/adapters/mysql2/table_options_test.rb +42 -42
  48. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -66
  49. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -98
  50. data/test/cases/adapters/postgresql/array_test.rb +339 -339
  51. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -82
  52. data/test/cases/adapters/postgresql/bytea_test.rb +134 -134
  53. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -26
  54. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -38
  55. data/test/cases/adapters/postgresql/cidr_test.rb +25 -25
  56. data/test/cases/adapters/postgresql/citext_test.rb +78 -78
  57. data/test/cases/adapters/postgresql/collation_test.rb +53 -53
  58. data/test/cases/adapters/postgresql/composite_test.rb +132 -132
  59. data/test/cases/adapters/postgresql/connection_test.rb +257 -257
  60. data/test/cases/adapters/postgresql/datatype_test.rb +92 -92
  61. data/test/cases/adapters/postgresql/domain_test.rb +47 -47
  62. data/test/cases/adapters/postgresql/enum_test.rb +91 -91
  63. data/test/cases/adapters/postgresql/explain_test.rb +20 -20
  64. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -63
  65. data/test/cases/adapters/postgresql/full_text_test.rb +44 -44
  66. data/test/cases/adapters/postgresql/geometric_test.rb +378 -378
  67. data/test/cases/adapters/postgresql/hstore_test.rb +382 -382
  68. data/test/cases/adapters/postgresql/infinity_test.rb +69 -69
  69. data/test/cases/adapters/postgresql/integer_test.rb +25 -25
  70. data/test/cases/adapters/postgresql/json_test.rb +237 -237
  71. data/test/cases/adapters/postgresql/ltree_test.rb +53 -53
  72. data/test/cases/adapters/postgresql/money_test.rb +96 -96
  73. data/test/cases/adapters/postgresql/network_test.rb +94 -94
  74. data/test/cases/adapters/postgresql/numbers_test.rb +49 -49
  75. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -405
  76. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -22
  77. data/test/cases/adapters/postgresql/quoting_test.rb +44 -44
  78. data/test/cases/adapters/postgresql/range_test.rb +343 -343
  79. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -111
  80. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -34
  81. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -119
  82. data/test/cases/adapters/postgresql/schema_test.rb +597 -597
  83. data/test/cases/adapters/postgresql/serial_test.rb +154 -154
  84. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -41
  85. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -90
  86. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -33
  87. data/test/cases/adapters/postgresql/utils_test.rb +62 -62
  88. data/test/cases/adapters/postgresql/uuid_test.rb +294 -294
  89. data/test/cases/adapters/postgresql/xml_test.rb +54 -54
  90. data/test/cases/adapters/sqlite3/collation_test.rb +53 -53
  91. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -98
  92. data/test/cases/adapters/sqlite3/explain_test.rb +21 -21
  93. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -101
  94. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -441
  95. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -24
  96. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -20
  97. data/test/cases/aggregations_test.rb +168 -168
  98. data/test/cases/ar_schema_test.rb +146 -146
  99. data/test/cases/associations/association_scope_test.rb +16 -16
  100. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1141
  101. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -41
  102. data/test/cases/associations/callbacks_test.rb +190 -190
  103. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  104. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  105. data/test/cases/associations/eager_load_nested_include_test.rb +126 -126
  106. data/test/cases/associations/eager_singularization_test.rb +148 -148
  107. data/test/cases/associations/eager_test.rb +1514 -1514
  108. data/test/cases/associations/extension_test.rb +87 -87
  109. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -1004
  110. data/test/cases/associations/has_many_associations_test.rb +2501 -2501
  111. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1271
  112. data/test/cases/associations/has_one_associations_test.rb +707 -707
  113. data/test/cases/associations/has_one_through_associations_test.rb +383 -383
  114. data/test/cases/associations/inner_join_association_test.rb +139 -139
  115. data/test/cases/associations/inverse_associations_test.rb +733 -733
  116. data/test/cases/associations/join_model_test.rb +777 -777
  117. data/test/cases/associations/left_outer_join_association_test.rb +88 -88
  118. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  119. data/test/cases/associations/required_test.rb +102 -102
  120. data/test/cases/associations_test.rb +385 -385
  121. data/test/cases/attribute_decorators_test.rb +126 -125
  122. data/test/cases/attribute_methods/read_test.rb +60 -60
  123. data/test/cases/attribute_methods_test.rb +1009 -1009
  124. data/test/cases/attribute_set_test.rb +270 -270
  125. data/test/cases/attribute_test.rb +246 -246
  126. data/test/cases/attributes_test.rb +253 -253
  127. data/test/cases/autosave_association_test.rb +1708 -1708
  128. data/test/cases/base_test.rb +1713 -1713
  129. data/test/cases/batches_test.rb +489 -489
  130. data/test/cases/binary_test.rb +44 -44
  131. data/test/cases/bind_parameter_test.rb +110 -110
  132. data/test/cases/cache_key_test.rb +26 -25
  133. data/test/cases/calculations_test.rb +798 -798
  134. data/test/cases/callbacks_test.rb +636 -636
  135. data/test/cases/clone_test.rb +40 -40
  136. data/test/cases/coders/json_test.rb +15 -15
  137. data/test/cases/coders/yaml_column_test.rb +63 -63
  138. data/test/cases/collection_cache_key_test.rb +115 -115
  139. data/test/cases/column_alias_test.rb +17 -17
  140. data/test/cases/column_definition_test.rb +92 -92
  141. data/test/cases/comment_test.rb +145 -143
  142. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -56
  143. data/test/cases/connection_adapters/connection_handler_test.rb +160 -160
  144. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  145. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -255
  146. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -69
  147. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  148. data/test/cases/connection_adapters/schema_cache_test.rb +61 -61
  149. data/test/cases/connection_adapters/type_lookup_test.rb +118 -118
  150. data/test/cases/connection_management_test.rb +112 -112
  151. data/test/cases/connection_pool_test.rb +521 -521
  152. data/test/cases/connection_specification/resolver_test.rb +131 -131
  153. data/test/cases/core_test.rb +112 -112
  154. data/test/cases/counter_cache_test.rb +214 -214
  155. data/test/cases/custom_locking_test.rb +17 -17
  156. data/test/cases/database_statements_test.rb +34 -34
  157. data/test/cases/date_test.rb +44 -44
  158. data/test/cases/date_time_precision_test.rb +107 -106
  159. data/test/cases/date_time_test.rb +61 -61
  160. data/test/cases/defaults_test.rb +219 -218
  161. data/test/cases/dirty_test.rb +763 -763
  162. data/test/cases/disconnected_test.rb +30 -30
  163. data/test/cases/dup_test.rb +157 -157
  164. data/test/cases/enum_test.rb +444 -444
  165. data/test/cases/errors_test.rb +16 -16
  166. data/test/cases/explain_subscriber_test.rb +64 -64
  167. data/test/cases/explain_test.rb +87 -87
  168. data/test/cases/finder_respond_to_test.rb +60 -60
  169. data/test/cases/finder_test.rb +1294 -1294
  170. data/test/cases/fixture_set/file_test.rb +156 -156
  171. data/test/cases/fixtures_test.rb +988 -988
  172. data/test/cases/forbidden_attributes_protection_test.rb +165 -165
  173. data/test/cases/habtm_destroy_order_test.rb +61 -61
  174. data/test/cases/helper.rb +204 -204
  175. data/test/cases/hot_compatibility_test.rb +142 -142
  176. data/test/cases/i18n_test.rb +45 -45
  177. data/test/cases/inheritance_test.rb +606 -606
  178. data/test/cases/integration_test.rb +155 -155
  179. data/test/cases/invalid_connection_test.rb +24 -24
  180. data/test/cases/invertible_migration_test.rb +387 -387
  181. data/test/cases/json_serialization_test.rb +311 -311
  182. data/test/cases/locking_test.rb +493 -493
  183. data/test/cases/log_subscriber_test.rb +225 -225
  184. data/test/cases/migration/change_schema_test.rb +458 -458
  185. data/test/cases/migration/change_table_test.rb +256 -256
  186. data/test/cases/migration/column_attributes_test.rb +176 -176
  187. data/test/cases/migration/column_positioning_test.rb +56 -56
  188. data/test/cases/migration/columns_test.rb +310 -310
  189. data/test/cases/migration/command_recorder_test.rb +350 -350
  190. data/test/cases/migration/compatibility_test.rb +118 -118
  191. data/test/cases/migration/create_join_table_test.rb +157 -157
  192. data/test/cases/migration/foreign_key_test.rb +362 -360
  193. data/test/cases/migration/helper.rb +39 -39
  194. data/test/cases/migration/index_test.rb +218 -218
  195. data/test/cases/migration/logger_test.rb +36 -36
  196. data/test/cases/migration/pending_migrations_test.rb +52 -52
  197. data/test/cases/migration/references_foreign_key_test.rb +221 -216
  198. data/test/cases/migration/references_index_test.rb +101 -101
  199. data/test/cases/migration/references_statements_test.rb +136 -136
  200. data/test/cases/migration/rename_table_test.rb +93 -93
  201. data/test/cases/migration_test.rb +1157 -1157
  202. data/test/cases/migrator_test.rb +471 -470
  203. data/test/cases/mixin_test.rb +68 -68
  204. data/test/cases/modules_test.rb +172 -172
  205. data/test/cases/multiparameter_attributes_test.rb +372 -372
  206. data/test/cases/multiple_db_test.rb +122 -122
  207. data/test/cases/nested_attributes_test.rb +1098 -1098
  208. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  209. data/test/cases/persistence_test.rb +1001 -1001
  210. data/test/cases/pooled_connections_test.rb +81 -81
  211. data/test/cases/primary_keys_test.rb +376 -376
  212. data/test/cases/query_cache_test.rb +446 -446
  213. data/test/cases/quoting_test.rb +202 -202
  214. data/test/cases/readonly_test.rb +119 -119
  215. data/test/cases/reaper_test.rb +85 -85
  216. data/test/cases/reflection_test.rb +509 -509
  217. data/test/cases/relation/delegation_test.rb +63 -63
  218. data/test/cases/relation/merging_test.rb +157 -157
  219. data/test/cases/relation/mutation_test.rb +183 -183
  220. data/test/cases/relation/or_test.rb +92 -92
  221. data/test/cases/relation/predicate_builder_test.rb +16 -16
  222. data/test/cases/relation/record_fetch_warning_test.rb +40 -40
  223. data/test/cases/relation/where_chain_test.rb +105 -105
  224. data/test/cases/relation/where_clause_test.rb +182 -182
  225. data/test/cases/relation/where_test.rb +322 -322
  226. data/test/cases/relation_test.rb +328 -328
  227. data/test/cases/relations_test.rb +2026 -2026
  228. data/test/cases/reload_models_test.rb +22 -22
  229. data/test/cases/result_test.rb +90 -90
  230. data/test/cases/sanitize_test.rb +176 -176
  231. data/test/cases/schema_dumper_test.rb +457 -457
  232. data/test/cases/schema_loading_test.rb +52 -52
  233. data/test/cases/scoping/default_scoping_test.rb +528 -528
  234. data/test/cases/scoping/named_scoping_test.rb +561 -561
  235. data/test/cases/scoping/relation_scoping_test.rb +400 -400
  236. data/test/cases/secure_token_test.rb +32 -32
  237. data/test/cases/serialization_test.rb +104 -104
  238. data/test/cases/serialized_attribute_test.rb +364 -364
  239. data/test/cases/statement_cache_test.rb +136 -136
  240. data/test/cases/store_test.rb +195 -195
  241. data/test/cases/suppressor_test.rb +63 -63
  242. data/test/cases/tasks/database_tasks_test.rb +462 -462
  243. data/test/cases/tasks/mysql_rake_test.rb +345 -345
  244. data/test/cases/tasks/postgresql_rake_test.rb +304 -304
  245. data/test/cases/tasks/sqlite_rake_test.rb +220 -220
  246. data/test/cases/test_case.rb +131 -131
  247. data/test/cases/test_fixtures_test.rb +36 -36
  248. data/test/cases/time_precision_test.rb +103 -102
  249. data/test/cases/timestamp_test.rb +501 -501
  250. data/test/cases/touch_later_test.rb +121 -121
  251. data/test/cases/transaction_callbacks_test.rb +518 -518
  252. data/test/cases/transaction_isolation_test.rb +106 -106
  253. data/test/cases/transactions_test.rb +835 -834
  254. data/test/cases/type/adapter_specific_registry_test.rb +133 -133
  255. data/test/cases/type/date_time_test.rb +14 -14
  256. data/test/cases/type/integer_test.rb +27 -27
  257. data/test/cases/type/string_test.rb +22 -22
  258. data/test/cases/type/type_map_test.rb +177 -177
  259. data/test/cases/type_test.rb +39 -39
  260. data/test/cases/types_test.rb +24 -24
  261. data/test/cases/unconnected_test.rb +33 -33
  262. data/test/cases/validations/absence_validation_test.rb +73 -73
  263. data/test/cases/validations/association_validation_test.rb +97 -97
  264. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  265. data/test/cases/validations/i18n_validation_test.rb +86 -86
  266. data/test/cases/validations/length_validation_test.rb +79 -79
  267. data/test/cases/validations/presence_validation_test.rb +103 -103
  268. data/test/cases/validations/uniqueness_validation_test.rb +548 -548
  269. data/test/cases/validations_repair_helper.rb +19 -19
  270. data/test/cases/validations_test.rb +194 -194
  271. data/test/cases/view_test.rb +216 -216
  272. data/test/cases/yaml_serialization_test.rb +121 -121
  273. data/test/config.example.yml +97 -97
  274. data/test/config.rb +5 -5
  275. data/test/connections/native_ibm_db/connection.rb +44 -0
  276. data/test/fixtures/accounts.yml +29 -29
  277. data/test/fixtures/admin/accounts.yml +2 -2
  278. data/test/fixtures/admin/users.yml +10 -10
  279. data/test/fixtures/author_addresses.yml +17 -17
  280. data/test/fixtures/author_favorites.yml +3 -3
  281. data/test/fixtures/authors.yml +23 -23
  282. data/test/fixtures/bad_posts.yml +9 -9
  283. data/test/fixtures/binaries.yml +133 -133
  284. data/test/fixtures/books.yml +31 -31
  285. data/test/fixtures/bulbs.yml +5 -5
  286. data/test/fixtures/cars.yml +9 -9
  287. data/test/fixtures/categories.yml +19 -19
  288. data/test/fixtures/categories/special_categories.yml +9 -9
  289. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  290. data/test/fixtures/categories_ordered.yml +7 -7
  291. data/test/fixtures/categories_posts.yml +31 -31
  292. data/test/fixtures/categorizations.yml +23 -23
  293. data/test/fixtures/clubs.yml +8 -8
  294. data/test/fixtures/collections.yml +3 -3
  295. data/test/fixtures/colleges.yml +3 -3
  296. data/test/fixtures/comments.yml +65 -65
  297. data/test/fixtures/companies.yml +67 -67
  298. data/test/fixtures/computers.yml +10 -10
  299. data/test/fixtures/content.yml +3 -3
  300. data/test/fixtures/content_positions.yml +3 -3
  301. data/test/fixtures/courses.yml +8 -8
  302. data/test/fixtures/customers.yml +25 -25
  303. data/test/fixtures/dashboards.yml +6 -6
  304. data/test/fixtures/dead_parrots.yml +5 -5
  305. data/test/fixtures/developers.yml +22 -22
  306. data/test/fixtures/developers_projects.yml +16 -16
  307. data/test/fixtures/dog_lovers.yml +7 -7
  308. data/test/fixtures/dogs.yml +4 -4
  309. data/test/fixtures/doubloons.yml +3 -3
  310. data/test/fixtures/edges.yml +5 -5
  311. data/test/fixtures/entrants.yml +14 -14
  312. data/test/fixtures/essays.yml +6 -6
  313. data/test/fixtures/faces.yml +11 -11
  314. data/test/fixtures/fk_test_has_fk.yml +3 -3
  315. data/test/fixtures/fk_test_has_pk.yml +1 -1
  316. data/test/fixtures/friendships.yml +4 -4
  317. data/test/fixtures/funny_jokes.yml +10 -10
  318. data/test/fixtures/interests.yml +33 -33
  319. data/test/fixtures/items.yml +3 -3
  320. data/test/fixtures/jobs.yml +7 -7
  321. data/test/fixtures/legacy_things.yml +3 -3
  322. data/test/fixtures/live_parrots.yml +4 -4
  323. data/test/fixtures/mateys.yml +4 -4
  324. data/test/fixtures/member_details.yml +8 -8
  325. data/test/fixtures/member_types.yml +6 -6
  326. data/test/fixtures/members.yml +11 -11
  327. data/test/fixtures/memberships.yml +34 -34
  328. data/test/fixtures/men.yml +5 -5
  329. data/test/fixtures/minimalistics.yml +2 -2
  330. data/test/fixtures/minivans.yml +5 -5
  331. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  332. data/test/fixtures/mixins.yml +29 -29
  333. data/test/fixtures/movies.yml +7 -7
  334. data/test/fixtures/naked/yml/accounts.yml +1 -1
  335. data/test/fixtures/naked/yml/companies.yml +1 -1
  336. data/test/fixtures/naked/yml/courses.yml +1 -1
  337. data/test/fixtures/naked/yml/parrots.yml +2 -2
  338. data/test/fixtures/naked/yml/trees.yml +3 -3
  339. data/test/fixtures/nodes.yml +29 -29
  340. data/test/fixtures/organizations.yml +5 -5
  341. data/test/fixtures/other_comments.yml +6 -6
  342. data/test/fixtures/other_dogs.yml +2 -2
  343. data/test/fixtures/other_posts.yml +7 -7
  344. data/test/fixtures/other_topics.yml +42 -42
  345. data/test/fixtures/owners.yml +9 -9
  346. data/test/fixtures/parrots.yml +27 -27
  347. data/test/fixtures/parrots_pirates.yml +7 -7
  348. data/test/fixtures/people.yml +24 -24
  349. data/test/fixtures/peoples_treasures.yml +3 -3
  350. data/test/fixtures/pets.yml +19 -19
  351. data/test/fixtures/pirates.yml +12 -15
  352. data/test/fixtures/posts.yml +80 -80
  353. data/test/fixtures/price_estimates.yml +16 -16
  354. data/test/fixtures/products.yml +4 -4
  355. data/test/fixtures/projects.yml +7 -7
  356. data/test/fixtures/ratings.yml +14 -14
  357. data/test/fixtures/readers.yml +11 -11
  358. data/test/fixtures/references.yml +17 -17
  359. data/test/fixtures/reserved_words/distinct.yml +5 -5
  360. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  361. data/test/fixtures/reserved_words/group.yml +14 -14
  362. data/test/fixtures/reserved_words/select.yml +8 -8
  363. data/test/fixtures/reserved_words/values.yml +7 -7
  364. data/test/fixtures/ships.yml +6 -6
  365. data/test/fixtures/speedometers.yml +8 -8
  366. data/test/fixtures/sponsors.yml +12 -12
  367. data/test/fixtures/string_key_objects.yml +7 -7
  368. data/test/fixtures/subscribers.yml +10 -10
  369. data/test/fixtures/subscriptions.yml +12 -12
  370. data/test/fixtures/taggings.yml +78 -78
  371. data/test/fixtures/tags.yml +11 -11
  372. data/test/fixtures/tasks.yml +7 -7
  373. data/test/fixtures/teapots.yml +3 -3
  374. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  375. data/test/fixtures/to_be_linked/users.yml +10 -10
  376. data/test/fixtures/topics.yml +49 -49
  377. data/test/fixtures/toys.yml +14 -14
  378. data/test/fixtures/traffic_lights.yml +9 -9
  379. data/test/fixtures/treasures.yml +10 -10
  380. data/test/fixtures/trees.yml +3 -3
  381. data/test/fixtures/uuid_children.yml +3 -3
  382. data/test/fixtures/uuid_parents.yml +2 -2
  383. data/test/fixtures/variants.yml +4 -4
  384. data/test/fixtures/vegetables.yml +19 -19
  385. data/test/fixtures/vertices.yml +3 -3
  386. data/test/fixtures/warehouse_things.yml +2 -2
  387. data/test/fixtures/zines.yml +5 -5
  388. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  389. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  390. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  391. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  392. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  393. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  394. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  395. data/test/migrations/rename/1_we_need_things.rb +11 -11
  396. data/test/migrations/rename/2_rename_things.rb +9 -9
  397. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  398. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  399. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  400. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  401. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  402. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  403. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  404. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  405. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  406. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  407. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  408. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  409. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  410. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  411. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  412. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  413. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  414. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  415. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  416. data/test/models/admin.rb +5 -5
  417. data/test/models/admin/account.rb +3 -3
  418. data/test/models/admin/user.rb +40 -40
  419. data/test/models/aircraft.rb +5 -5
  420. data/test/models/arunit2_model.rb +3 -3
  421. data/test/models/author.rb +209 -209
  422. data/test/models/auto_id.rb +4 -4
  423. data/test/models/autoloadable/extra_firm.rb +2 -2
  424. data/test/models/binary.rb +2 -2
  425. data/test/models/bird.rb +12 -12
  426. data/test/models/book.rb +23 -23
  427. data/test/models/boolean.rb +2 -2
  428. data/test/models/bulb.rb +52 -52
  429. data/test/models/cake_designer.rb +3 -3
  430. data/test/models/car.rb +29 -29
  431. data/test/models/carrier.rb +2 -2
  432. data/test/models/cat.rb +10 -10
  433. data/test/models/categorization.rb +19 -19
  434. data/test/models/category.rb +35 -35
  435. data/test/models/chef.rb +8 -8
  436. data/test/models/citation.rb +3 -3
  437. data/test/models/club.rb +25 -25
  438. data/test/models/college.rb +10 -10
  439. data/test/models/column.rb +3 -3
  440. data/test/models/column_name.rb +3 -3
  441. data/test/models/comment.rb +76 -76
  442. data/test/models/company.rb +230 -230
  443. data/test/models/company_in_module.rb +98 -98
  444. data/test/models/computer.rb +3 -3
  445. data/test/models/contact.rb +41 -41
  446. data/test/models/content.rb +40 -40
  447. data/test/models/contract.rb +20 -20
  448. data/test/models/country.rb +7 -7
  449. data/test/models/course.rb +6 -6
  450. data/test/models/customer.rb +83 -83
  451. data/test/models/customer_carrier.rb +14 -14
  452. data/test/models/dashboard.rb +3 -3
  453. data/test/models/default.rb +2 -2
  454. data/test/models/department.rb +4 -4
  455. data/test/models/developer.rb +274 -274
  456. data/test/models/dog.rb +5 -5
  457. data/test/models/dog_lover.rb +5 -5
  458. data/test/models/doubloon.rb +12 -12
  459. data/test/models/drink_designer.rb +3 -3
  460. data/test/models/edge.rb +5 -5
  461. data/test/models/electron.rb +5 -5
  462. data/test/models/engine.rb +4 -4
  463. data/test/models/entrant.rb +3 -3
  464. data/test/models/essay.rb +5 -5
  465. data/test/models/event.rb +3 -3
  466. data/test/models/eye.rb +37 -37
  467. data/test/models/face.rb +9 -9
  468. data/test/models/friendship.rb +6 -6
  469. data/test/models/guid.rb +2 -2
  470. data/test/models/guitar.rb +4 -4
  471. data/test/models/hotel.rb +11 -11
  472. data/test/models/image.rb +3 -3
  473. data/test/models/interest.rb +5 -5
  474. data/test/models/invoice.rb +4 -4
  475. data/test/models/item.rb +7 -7
  476. data/test/models/job.rb +7 -7
  477. data/test/models/joke.rb +7 -7
  478. data/test/models/keyboard.rb +3 -3
  479. data/test/models/legacy_thing.rb +3 -3
  480. data/test/models/lesson.rb +11 -11
  481. data/test/models/line_item.rb +3 -3
  482. data/test/models/liquid.rb +4 -4
  483. data/test/models/man.rb +11 -11
  484. data/test/models/matey.rb +4 -4
  485. data/test/models/member.rb +42 -42
  486. data/test/models/member_detail.rb +8 -8
  487. data/test/models/member_type.rb +3 -3
  488. data/test/models/membership.rb +35 -35
  489. data/test/models/mentor.rb +2 -2
  490. data/test/models/minimalistic.rb +2 -2
  491. data/test/models/minivan.rb +9 -9
  492. data/test/models/mixed_case_monkey.rb +3 -3
  493. data/test/models/mocktail_designer.rb +2 -2
  494. data/test/models/molecule.rb +6 -6
  495. data/test/models/movie.rb +5 -5
  496. data/test/models/node.rb +5 -5
  497. data/test/models/non_primary_key.rb +2 -2
  498. data/test/models/notification.rb +3 -3
  499. data/test/models/order.rb +4 -4
  500. data/test/models/organization.rb +14 -14
  501. data/test/models/other_dog.rb +5 -5
  502. data/test/models/owner.rb +37 -37
  503. data/test/models/parrot.rb +28 -28
  504. data/test/models/person.rb +142 -142
  505. data/test/models/personal_legacy_thing.rb +4 -4
  506. data/test/models/pet.rb +18 -18
  507. data/test/models/pet_treasure.rb +6 -6
  508. data/test/models/pirate.rb +92 -92
  509. data/test/models/possession.rb +3 -3
  510. data/test/models/post.rb +273 -273
  511. data/test/models/price_estimate.rb +4 -4
  512. data/test/models/professor.rb +5 -5
  513. data/test/models/project.rb +40 -40
  514. data/test/models/publisher.rb +2 -2
  515. data/test/models/publisher/article.rb +4 -4
  516. data/test/models/publisher/magazine.rb +3 -3
  517. data/test/models/rating.rb +4 -4
  518. data/test/models/reader.rb +23 -23
  519. data/test/models/recipe.rb +3 -3
  520. data/test/models/record.rb +2 -2
  521. data/test/models/reference.rb +22 -22
  522. data/test/models/reply.rb +61 -61
  523. data/test/models/ship.rb +39 -39
  524. data/test/models/ship_part.rb +8 -8
  525. data/test/models/shop.rb +17 -17
  526. data/test/models/shop_account.rb +6 -6
  527. data/test/models/speedometer.rb +6 -6
  528. data/test/models/sponsor.rb +7 -7
  529. data/test/models/string_key_object.rb +3 -3
  530. data/test/models/student.rb +4 -4
  531. data/test/models/subject.rb +16 -16
  532. data/test/models/subscriber.rb +8 -8
  533. data/test/models/subscription.rb +4 -4
  534. data/test/models/tag.rb +13 -13
  535. data/test/models/tagging.rb +13 -13
  536. data/test/models/task.rb +5 -5
  537. data/test/models/topic.rb +118 -118
  538. data/test/models/toy.rb +6 -6
  539. data/test/models/traffic_light.rb +4 -4
  540. data/test/models/treasure.rb +14 -14
  541. data/test/models/treaty.rb +7 -7
  542. data/test/models/tree.rb +3 -3
  543. data/test/models/tuning_peg.rb +4 -4
  544. data/test/models/tyre.rb +11 -11
  545. data/test/models/user.rb +14 -14
  546. data/test/models/uuid_child.rb +3 -3
  547. data/test/models/uuid_item.rb +6 -6
  548. data/test/models/uuid_parent.rb +3 -3
  549. data/test/models/vegetables.rb +24 -24
  550. data/test/models/vehicle.rb +6 -6
  551. data/test/models/vertex.rb +9 -9
  552. data/test/models/warehouse_thing.rb +5 -5
  553. data/test/models/wheel.rb +3 -3
  554. data/test/models/without_table.rb +3 -3
  555. data/test/models/zine.rb +3 -3
  556. data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
  557. data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
  558. data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
  559. data/test/schema/mysql2_specific_schema.rb +68 -68
  560. data/test/schema/oracle_specific_schema.rb +40 -40
  561. data/test/schema/postgresql_specific_schema.rb +114 -114
  562. data/test/schema/schema.rb +1057 -1057
  563. data/test/schema/schema.rb.original +1057 -1057
  564. data/test/schema/sqlite_specific_schema.rb +18 -18
  565. data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
  566. data/test/support/config.rb +43 -43
  567. data/test/support/connection.rb +23 -23
  568. data/test/support/connection_helper.rb +14 -14
  569. data/test/support/ddl_helper.rb +8 -8
  570. data/test/support/schema_dumping_helper.rb +20 -20
  571. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -22
  572. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -182
  573. metadata +30 -14
  574. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  575. data/test/fixtures/author_addresses.original +0 -11
  576. data/test/fixtures/authors.original +0 -17
@@ -1,49 +1,49 @@
1
- require "cases/helper"
2
-
3
- class PostgresqlNumberTest < ActiveRecord::PostgreSQLTestCase
4
- class PostgresqlNumber < ActiveRecord::Base; end
5
-
6
- setup do
7
- @connection = ActiveRecord::Base.connection
8
- @connection.create_table('postgresql_numbers', force: true) do |t|
9
- t.column 'single', 'REAL'
10
- t.column 'double', 'DOUBLE PRECISION'
11
- end
12
- end
13
-
14
- teardown do
15
- @connection.drop_table 'postgresql_numbers', if_exists: true
16
- end
17
-
18
- def test_data_type
19
- assert_equal :float, PostgresqlNumber.columns_hash["single"].type
20
- assert_equal :float, PostgresqlNumber.columns_hash["double"].type
21
- end
22
-
23
- def test_values
24
- @connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (1, 123.456, 123456.789)")
25
- @connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (2, '-Infinity', 'Infinity')")
26
- @connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (3, 123.456, 'NaN')")
27
-
28
- first, second, third = PostgresqlNumber.find(1, 2, 3)
29
-
30
- assert_equal 123.456, first.single
31
- assert_equal 123456.789, first.double
32
- assert_equal(-::Float::INFINITY, second.single)
33
- assert_equal ::Float::INFINITY, second.double
34
- assert_send [third.double, :nan?]
35
- end
36
-
37
- def test_update
38
- record = PostgresqlNumber.create! single: "123.456", double: "123456.789"
39
- new_single = 789.012
40
- new_double = 789012.345
41
- record.single = new_single
42
- record.double = new_double
43
- record.save!
44
-
45
- record.reload
46
- assert_equal new_single, record.single
47
- assert_equal new_double, record.double
48
- end
49
- end
1
+ require "cases/helper"
2
+
3
+ class PostgresqlNumberTest < ActiveRecord::PostgreSQLTestCase
4
+ class PostgresqlNumber < ActiveRecord::Base; end
5
+
6
+ setup do
7
+ @connection = ActiveRecord::Base.connection
8
+ @connection.create_table('postgresql_numbers', force: true) do |t|
9
+ t.column 'single', 'REAL'
10
+ t.column 'double', 'DOUBLE PRECISION'
11
+ end
12
+ end
13
+
14
+ teardown do
15
+ @connection.drop_table 'postgresql_numbers', if_exists: true
16
+ end
17
+
18
+ def test_data_type
19
+ assert_equal :float, PostgresqlNumber.columns_hash["single"].type
20
+ assert_equal :float, PostgresqlNumber.columns_hash["double"].type
21
+ end
22
+
23
+ def test_values
24
+ @connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (1, 123.456, 123456.789)")
25
+ @connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (2, '-Infinity', 'Infinity')")
26
+ @connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (3, 123.456, 'NaN')")
27
+
28
+ first, second, third = PostgresqlNumber.find(1, 2, 3)
29
+
30
+ assert_equal 123.456, first.single
31
+ assert_equal 123456.789, first.double
32
+ assert_equal(-::Float::INFINITY, second.single)
33
+ assert_equal ::Float::INFINITY, second.double
34
+ assert_send [third.double, :nan?]
35
+ end
36
+
37
+ def test_update
38
+ record = PostgresqlNumber.create! single: "123.456", double: "123456.789"
39
+ new_single = 789.012
40
+ new_double = 789012.345
41
+ record.single = new_single
42
+ record.double = new_double
43
+ record.save!
44
+
45
+ record.reload
46
+ assert_equal new_single, record.single
47
+ assert_equal new_double, record.double
48
+ end
49
+ end
@@ -1,405 +1,405 @@
1
- require "cases/helper"
2
- require 'support/ddl_helper'
3
- require 'support/connection_helper'
4
-
5
- module ActiveRecord
6
- module ConnectionAdapters
7
- class PostgreSQLAdapterTest < ActiveRecord::PostgreSQLTestCase
8
- self.use_transactional_tests = false
9
- include DdlHelper
10
- include ConnectionHelper
11
-
12
- def setup
13
- @connection = ActiveRecord::Base.connection
14
- end
15
-
16
- def test_bad_connection
17
- assert_raise ActiveRecord::NoDatabaseError do
18
- configuration = ActiveRecord::Base.configurations['arunit'].merge(database: 'should_not_exist-cinco-dog-db')
19
- connection = ActiveRecord::Base.postgresql_connection(configuration)
20
- connection.exec_query('SELECT 1')
21
- end
22
- end
23
-
24
- def test_valid_column
25
- with_example_table do
26
- column = @connection.columns('ex').find { |col| col.name == 'id' }
27
- assert @connection.valid_type?(column.type)
28
- end
29
- end
30
-
31
- def test_invalid_column
32
- assert_not @connection.valid_type?(:foobar)
33
- end
34
-
35
- def test_primary_key
36
- with_example_table do
37
- assert_equal 'id', @connection.primary_key('ex')
38
- end
39
- end
40
-
41
- def test_primary_key_works_tables_containing_capital_letters
42
- assert_equal 'id', @connection.primary_key('CamelCase')
43
- end
44
-
45
- def test_non_standard_primary_key
46
- with_example_table 'data character varying(255) primary key' do
47
- assert_equal 'data', @connection.primary_key('ex')
48
- end
49
- end
50
-
51
- def test_primary_key_returns_nil_for_no_pk
52
- with_example_table 'id integer' do
53
- assert_nil @connection.primary_key('ex')
54
- end
55
- end
56
-
57
- def test_primary_key_raises_error_if_table_not_found
58
- assert_raises(ActiveRecord::StatementInvalid) do
59
- @connection.primary_key('unobtainium')
60
- end
61
- end
62
-
63
- def test_exec_insert_with_returning_disabled
64
- connection = connection_without_insert_returning
65
- result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [], 'id', 'postgresql_partitioned_table_parent_id_seq')
66
- expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
67
- assert_equal expect.to_i, result.rows.first.first
68
- end
69
-
70
- def test_exec_insert_with_returning_disabled_and_no_sequence_name_given
71
- connection = connection_without_insert_returning
72
- result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [], 'id')
73
- expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
74
- assert_equal expect.to_i, result.rows.first.first
75
- end
76
-
77
- def test_exec_insert_default_values_with_returning_disabled_and_no_sequence_name_given
78
- connection = connection_without_insert_returning
79
- result = connection.exec_insert("insert into postgresql_partitioned_table_parent DEFAULT VALUES", nil, [], 'id')
80
- expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
81
- assert_equal expect.to_i, result.rows.first.first
82
- end
83
-
84
- def test_exec_insert_default_values_quoted_schema_with_returning_disabled_and_no_sequence_name_given
85
- connection = connection_without_insert_returning
86
- result = connection.exec_insert('insert into "public"."postgresql_partitioned_table_parent" DEFAULT VALUES', nil, [], 'id')
87
- expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
88
- assert_equal expect.to_i, result.rows.first.first
89
- end
90
-
91
- def test_sql_for_insert_with_returning_disabled
92
- connection = connection_without_insert_returning
93
- sql, binds = connection.sql_for_insert('sql', nil, nil, nil, 'binds')
94
- assert_equal ['sql', 'binds'], [sql, binds]
95
- end
96
-
97
- def test_serial_sequence
98
- assert_equal 'public.accounts_id_seq',
99
- @connection.serial_sequence('accounts', 'id')
100
-
101
- assert_raises(ActiveRecord::StatementInvalid) do
102
- @connection.serial_sequence('zomg', 'id')
103
- end
104
- end
105
-
106
- def test_default_sequence_name
107
- assert_equal 'public.accounts_id_seq',
108
- @connection.default_sequence_name('accounts', 'id')
109
-
110
- assert_equal 'public.accounts_id_seq',
111
- @connection.default_sequence_name('accounts')
112
- end
113
-
114
- def test_default_sequence_name_bad_table
115
- assert_equal 'zomg_id_seq',
116
- @connection.default_sequence_name('zomg', 'id')
117
-
118
- assert_equal 'zomg_id_seq',
119
- @connection.default_sequence_name('zomg')
120
- end
121
-
122
- def test_pk_and_sequence_for
123
- with_example_table do
124
- pk, seq = @connection.pk_and_sequence_for('ex')
125
- assert_equal 'id', pk
126
- assert_equal @connection.default_sequence_name('ex', 'id'), seq.to_s
127
- end
128
- end
129
-
130
- def test_pk_and_sequence_for_with_non_standard_primary_key
131
- with_example_table 'code serial primary key' do
132
- pk, seq = @connection.pk_and_sequence_for('ex')
133
- assert_equal 'code', pk
134
- assert_equal @connection.default_sequence_name('ex', 'code'), seq.to_s
135
- end
136
- end
137
-
138
- def test_pk_and_sequence_for_returns_nil_if_no_seq
139
- with_example_table 'id integer primary key' do
140
- assert_nil @connection.pk_and_sequence_for('ex')
141
- end
142
- end
143
-
144
- def test_pk_and_sequence_for_returns_nil_if_no_pk
145
- with_example_table 'id integer' do
146
- assert_nil @connection.pk_and_sequence_for('ex')
147
- end
148
- end
149
-
150
- def test_pk_and_sequence_for_returns_nil_if_table_not_found
151
- assert_nil @connection.pk_and_sequence_for('unobtainium')
152
- end
153
-
154
- def test_pk_and_sequence_for_with_collision_pg_class_oid
155
- @connection.exec_query('create table ex(id serial primary key)')
156
- @connection.exec_query('create table ex2(id serial primary key)')
157
-
158
- correct_depend_record = [
159
- "'pg_class'::regclass",
160
- "'ex_id_seq'::regclass",
161
- '0',
162
- "'pg_class'::regclass",
163
- "'ex'::regclass",
164
- '1',
165
- "'a'"
166
- ]
167
-
168
- collision_depend_record = [
169
- "'pg_attrdef'::regclass",
170
- "'ex2_id_seq'::regclass",
171
- '0',
172
- "'pg_class'::regclass",
173
- "'ex'::regclass",
174
- '1',
175
- "'a'"
176
- ]
177
-
178
- @connection.exec_query(
179
- "DELETE FROM pg_depend WHERE objid = 'ex_id_seq'::regclass AND refobjid = 'ex'::regclass AND deptype = 'a'"
180
- )
181
- @connection.exec_query(
182
- "INSERT INTO pg_depend VALUES(#{collision_depend_record.join(',')})"
183
- )
184
- @connection.exec_query(
185
- "INSERT INTO pg_depend VALUES(#{correct_depend_record.join(',')})"
186
- )
187
-
188
- seq = @connection.pk_and_sequence_for('ex').last
189
- assert_equal PostgreSQL::Name.new("public", "ex_id_seq"), seq
190
-
191
- @connection.exec_query(
192
- "DELETE FROM pg_depend WHERE objid = 'ex2_id_seq'::regclass AND refobjid = 'ex'::regclass AND deptype = 'a'"
193
- )
194
- ensure
195
- @connection.drop_table 'ex', if_exists: true
196
- @connection.drop_table 'ex2', if_exists: true
197
- end
198
-
199
- def test_table_alias_length
200
- assert_nothing_raised do
201
- @connection.table_alias_length
202
- end
203
- end
204
-
205
- def test_exec_no_binds
206
- with_example_table do
207
- result = @connection.exec_query('SELECT id, data FROM ex')
208
- assert_equal 0, result.rows.length
209
- assert_equal 2, result.columns.length
210
- assert_equal %w{ id data }, result.columns
211
-
212
- string = @connection.quote('foo')
213
- @connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
214
- result = @connection.exec_query('SELECT id, data FROM ex')
215
- assert_equal 1, result.rows.length
216
- assert_equal 2, result.columns.length
217
-
218
- assert_equal [[1, 'foo']], result.rows
219
- end
220
- end
221
-
222
- if ActiveRecord::Base.connection.prepared_statements
223
- def test_exec_with_binds
224
- with_example_table do
225
- string = @connection.quote('foo')
226
- @connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
227
-
228
- bind = Relation::QueryAttribute.new("id", 1, Type::Value.new)
229
- result = @connection.exec_query('SELECT id, data FROM ex WHERE id = $1', nil, [bind])
230
-
231
- assert_equal 1, result.rows.length
232
- assert_equal 2, result.columns.length
233
-
234
- assert_equal [[1, 'foo']], result.rows
235
- end
236
- end
237
-
238
- def test_exec_typecasts_bind_vals
239
- with_example_table do
240
- string = @connection.quote('foo')
241
- @connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
242
-
243
- bind = Relation::QueryAttribute.new("id", "1-fuu", Type::Integer.new)
244
- result = @connection.exec_query('SELECT id, data FROM ex WHERE id = $1', nil, [bind])
245
-
246
- assert_equal 1, result.rows.length
247
- assert_equal 2, result.columns.length
248
-
249
- assert_equal [[1, 'foo']], result.rows
250
- end
251
- end
252
- end
253
-
254
- def test_partial_index
255
- with_example_table do
256
- @connection.add_index 'ex', %w{ id number }, :name => 'partial', :where => "number > 100"
257
- index = @connection.indexes('ex').find { |idx| idx.name == 'partial' }
258
- assert_equal "(number > 100)", index.where
259
- end
260
- end
261
-
262
- def test_expression_index
263
- with_example_table do
264
- @connection.add_index 'ex', 'mod(id, 10), abs(number)', name: 'expression'
265
- index = @connection.indexes('ex').find { |idx| idx.name == 'expression' }
266
- assert_equal 'mod(id, 10), abs(number)', index.columns
267
- end
268
- end
269
-
270
- def test_index_with_opclass
271
- with_example_table do
272
- @connection.add_index "ex", "data varchar_pattern_ops"
273
- index = @connection.indexes("ex").find { |idx| idx.name == "index_ex_on_data_varchar_pattern_ops" }
274
- assert_equal "data varchar_pattern_ops", index.columns
275
-
276
- @connection.remove_index "ex", "data varchar_pattern_ops"
277
- assert_not @connection.indexes("ex").find { |idx| idx.name == "index_ex_on_data_varchar_pattern_ops" }
278
- end
279
- end
280
-
281
- def test_columns_for_distinct_zero_orders
282
- assert_equal "posts.id",
283
- @connection.columns_for_distinct("posts.id", [])
284
- end
285
-
286
- def test_columns_for_distinct_one_order
287
- assert_equal "posts.id, posts.created_at AS alias_0",
288
- @connection.columns_for_distinct("posts.id", ["posts.created_at desc"])
289
- end
290
-
291
- def test_columns_for_distinct_few_orders
292
- assert_equal "posts.id, posts.created_at AS alias_0, posts.position AS alias_1",
293
- @connection.columns_for_distinct("posts.id", ["posts.created_at desc", "posts.position asc"])
294
- end
295
-
296
- def test_columns_for_distinct_with_case
297
- assert_equal(
298
- 'posts.id, CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END AS alias_0',
299
- @connection.columns_for_distinct('posts.id',
300
- ["CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END"])
301
- )
302
- end
303
-
304
- def test_columns_for_distinct_blank_not_nil_orders
305
- assert_equal "posts.id, posts.created_at AS alias_0",
306
- @connection.columns_for_distinct("posts.id", ["posts.created_at desc", "", " "])
307
- end
308
-
309
- def test_columns_for_distinct_with_arel_order
310
- order = Object.new
311
- def order.to_sql
312
- "posts.created_at desc"
313
- end
314
- assert_equal "posts.id, posts.created_at AS alias_0",
315
- @connection.columns_for_distinct("posts.id", [order])
316
- end
317
-
318
- def test_columns_for_distinct_with_nulls
319
- assert_equal "posts.title, posts.updater_id AS alias_0", @connection.columns_for_distinct("posts.title", ["posts.updater_id desc nulls first"])
320
- assert_equal "posts.title, posts.updater_id AS alias_0", @connection.columns_for_distinct("posts.title", ["posts.updater_id desc nulls last"])
321
- end
322
-
323
- def test_columns_for_distinct_without_order_specifiers
324
- assert_equal "posts.title, posts.updater_id AS alias_0",
325
- @connection.columns_for_distinct("posts.title", ["posts.updater_id"])
326
-
327
- assert_equal "posts.title, posts.updater_id AS alias_0",
328
- @connection.columns_for_distinct("posts.title", ["posts.updater_id nulls last"])
329
-
330
- assert_equal "posts.title, posts.updater_id AS alias_0",
331
- @connection.columns_for_distinct("posts.title", ["posts.updater_id nulls first"])
332
- end
333
-
334
- def test_raise_error_when_cannot_translate_exception
335
- assert_raise TypeError do
336
- @connection.send(:log, nil) { @connection.execute(nil) }
337
- end
338
- end
339
-
340
- def test_reload_type_map_for_newly_defined_types
341
- @connection.execute "CREATE TYPE feeling AS ENUM ('good', 'bad')"
342
- result = @connection.select_all "SELECT 'good'::feeling"
343
- assert_instance_of(PostgreSQLAdapter::OID::Enum,
344
- result.column_types["feeling"])
345
- ensure
346
- @connection.execute "DROP TYPE IF EXISTS feeling"
347
- reset_connection
348
- end
349
-
350
- def test_only_reload_type_map_once_for_every_unknown_type
351
- silence_warnings do
352
- assert_queries 2, ignore_none: true do
353
- @connection.select_all "SELECT NULL::anyelement"
354
- end
355
- assert_queries 1, ignore_none: true do
356
- @connection.select_all "SELECT NULL::anyelement"
357
- end
358
- assert_queries 2, ignore_none: true do
359
- @connection.select_all "SELECT NULL::anyarray"
360
- end
361
- end
362
- ensure
363
- reset_connection
364
- end
365
-
366
- def test_only_warn_on_first_encounter_of_unknown_oid
367
- warning = capture(:stderr) {
368
- @connection.select_all "SELECT NULL::anyelement"
369
- @connection.select_all "SELECT NULL::anyelement"
370
- @connection.select_all "SELECT NULL::anyelement"
371
- }
372
- assert_match(/\Aunknown OID \d+: failed to recognize type of 'anyelement'. It will be treated as String.\n\z/, warning)
373
- ensure
374
- reset_connection
375
- end
376
-
377
- def test_unparsed_defaults_are_at_least_set_when_saving
378
- with_example_table "id SERIAL PRIMARY KEY, number INTEGER NOT NULL DEFAULT (4 + 4) * 2 / 4" do
379
- number_klass = Class.new(ActiveRecord::Base) do
380
- self.table_name = 'ex'
381
- end
382
- column = number_klass.columns_hash["number"]
383
- assert_nil column.default
384
- assert_nil column.default_function
385
-
386
- first_number = number_klass.new
387
- assert_nil first_number.number
388
-
389
- first_number.save!
390
- assert_equal 4, first_number.reload.number
391
- end
392
- end
393
-
394
- private
395
-
396
- def with_example_table(definition = 'id serial primary key, number integer, data character varying(255)', &block)
397
- super(@connection, 'ex', definition, &block)
398
- end
399
-
400
- def connection_without_insert_returning
401
- ActiveRecord::Base.postgresql_connection(ActiveRecord::Base.configurations['arunit'].merge(:insert_returning => false))
402
- end
403
- end
404
- end
405
- end
1
+ require "cases/helper"
2
+ require 'support/ddl_helper'
3
+ require 'support/connection_helper'
4
+
5
+ module ActiveRecord
6
+ module ConnectionAdapters
7
+ class PostgreSQLAdapterTest < ActiveRecord::PostgreSQLTestCase
8
+ self.use_transactional_tests = false
9
+ include DdlHelper
10
+ include ConnectionHelper
11
+
12
+ def setup
13
+ @connection = ActiveRecord::Base.connection
14
+ end
15
+
16
+ def test_bad_connection
17
+ assert_raise ActiveRecord::NoDatabaseError do
18
+ configuration = ActiveRecord::Base.configurations['arunit'].merge(database: 'should_not_exist-cinco-dog-db')
19
+ connection = ActiveRecord::Base.postgresql_connection(configuration)
20
+ connection.exec_query('SELECT 1')
21
+ end
22
+ end
23
+
24
+ def test_valid_column
25
+ with_example_table do
26
+ column = @connection.columns('ex').find { |col| col.name == 'id' }
27
+ assert @connection.valid_type?(column.type)
28
+ end
29
+ end
30
+
31
+ def test_invalid_column
32
+ assert_not @connection.valid_type?(:foobar)
33
+ end
34
+
35
+ def test_primary_key
36
+ with_example_table do
37
+ assert_equal 'id', @connection.primary_key('ex')
38
+ end
39
+ end
40
+
41
+ def test_primary_key_works_tables_containing_capital_letters
42
+ assert_equal 'id', @connection.primary_key('CamelCase')
43
+ end
44
+
45
+ def test_non_standard_primary_key
46
+ with_example_table 'data character varying(255) primary key' do
47
+ assert_equal 'data', @connection.primary_key('ex')
48
+ end
49
+ end
50
+
51
+ def test_primary_key_returns_nil_for_no_pk
52
+ with_example_table 'id integer' do
53
+ assert_nil @connection.primary_key('ex')
54
+ end
55
+ end
56
+
57
+ def test_primary_key_raises_error_if_table_not_found
58
+ assert_raises(ActiveRecord::StatementInvalid) do
59
+ @connection.primary_key('unobtainium')
60
+ end
61
+ end
62
+
63
+ def test_exec_insert_with_returning_disabled
64
+ connection = connection_without_insert_returning
65
+ result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [], 'id', 'postgresql_partitioned_table_parent_id_seq')
66
+ expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
67
+ assert_equal expect.to_i, result.rows.first.first
68
+ end
69
+
70
+ def test_exec_insert_with_returning_disabled_and_no_sequence_name_given
71
+ connection = connection_without_insert_returning
72
+ result = connection.exec_insert("insert into postgresql_partitioned_table_parent (number) VALUES (1)", nil, [], 'id')
73
+ expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
74
+ assert_equal expect.to_i, result.rows.first.first
75
+ end
76
+
77
+ def test_exec_insert_default_values_with_returning_disabled_and_no_sequence_name_given
78
+ connection = connection_without_insert_returning
79
+ result = connection.exec_insert("insert into postgresql_partitioned_table_parent DEFAULT VALUES", nil, [], 'id')
80
+ expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
81
+ assert_equal expect.to_i, result.rows.first.first
82
+ end
83
+
84
+ def test_exec_insert_default_values_quoted_schema_with_returning_disabled_and_no_sequence_name_given
85
+ connection = connection_without_insert_returning
86
+ result = connection.exec_insert('insert into "public"."postgresql_partitioned_table_parent" DEFAULT VALUES', nil, [], 'id')
87
+ expect = connection.query('select max(id) from postgresql_partitioned_table_parent').first.first
88
+ assert_equal expect.to_i, result.rows.first.first
89
+ end
90
+
91
+ def test_sql_for_insert_with_returning_disabled
92
+ connection = connection_without_insert_returning
93
+ sql, binds = connection.sql_for_insert('sql', nil, nil, nil, 'binds')
94
+ assert_equal ['sql', 'binds'], [sql, binds]
95
+ end
96
+
97
+ def test_serial_sequence
98
+ assert_equal 'public.accounts_id_seq',
99
+ @connection.serial_sequence('accounts', 'id')
100
+
101
+ assert_raises(ActiveRecord::StatementInvalid) do
102
+ @connection.serial_sequence('zomg', 'id')
103
+ end
104
+ end
105
+
106
+ def test_default_sequence_name
107
+ assert_equal 'public.accounts_id_seq',
108
+ @connection.default_sequence_name('accounts', 'id')
109
+
110
+ assert_equal 'public.accounts_id_seq',
111
+ @connection.default_sequence_name('accounts')
112
+ end
113
+
114
+ def test_default_sequence_name_bad_table
115
+ assert_equal 'zomg_id_seq',
116
+ @connection.default_sequence_name('zomg', 'id')
117
+
118
+ assert_equal 'zomg_id_seq',
119
+ @connection.default_sequence_name('zomg')
120
+ end
121
+
122
+ def test_pk_and_sequence_for
123
+ with_example_table do
124
+ pk, seq = @connection.pk_and_sequence_for('ex')
125
+ assert_equal 'id', pk
126
+ assert_equal @connection.default_sequence_name('ex', 'id'), seq.to_s
127
+ end
128
+ end
129
+
130
+ def test_pk_and_sequence_for_with_non_standard_primary_key
131
+ with_example_table 'code serial primary key' do
132
+ pk, seq = @connection.pk_and_sequence_for('ex')
133
+ assert_equal 'code', pk
134
+ assert_equal @connection.default_sequence_name('ex', 'code'), seq.to_s
135
+ end
136
+ end
137
+
138
+ def test_pk_and_sequence_for_returns_nil_if_no_seq
139
+ with_example_table 'id integer primary key' do
140
+ assert_nil @connection.pk_and_sequence_for('ex')
141
+ end
142
+ end
143
+
144
+ def test_pk_and_sequence_for_returns_nil_if_no_pk
145
+ with_example_table 'id integer' do
146
+ assert_nil @connection.pk_and_sequence_for('ex')
147
+ end
148
+ end
149
+
150
+ def test_pk_and_sequence_for_returns_nil_if_table_not_found
151
+ assert_nil @connection.pk_and_sequence_for('unobtainium')
152
+ end
153
+
154
+ def test_pk_and_sequence_for_with_collision_pg_class_oid
155
+ @connection.exec_query('create table ex(id serial primary key)')
156
+ @connection.exec_query('create table ex2(id serial primary key)')
157
+
158
+ correct_depend_record = [
159
+ "'pg_class'::regclass",
160
+ "'ex_id_seq'::regclass",
161
+ '0',
162
+ "'pg_class'::regclass",
163
+ "'ex'::regclass",
164
+ '1',
165
+ "'a'"
166
+ ]
167
+
168
+ collision_depend_record = [
169
+ "'pg_attrdef'::regclass",
170
+ "'ex2_id_seq'::regclass",
171
+ '0',
172
+ "'pg_class'::regclass",
173
+ "'ex'::regclass",
174
+ '1',
175
+ "'a'"
176
+ ]
177
+
178
+ @connection.exec_query(
179
+ "DELETE FROM pg_depend WHERE objid = 'ex_id_seq'::regclass AND refobjid = 'ex'::regclass AND deptype = 'a'"
180
+ )
181
+ @connection.exec_query(
182
+ "INSERT INTO pg_depend VALUES(#{collision_depend_record.join(',')})"
183
+ )
184
+ @connection.exec_query(
185
+ "INSERT INTO pg_depend VALUES(#{correct_depend_record.join(',')})"
186
+ )
187
+
188
+ seq = @connection.pk_and_sequence_for('ex').last
189
+ assert_equal PostgreSQL::Name.new("public", "ex_id_seq"), seq
190
+
191
+ @connection.exec_query(
192
+ "DELETE FROM pg_depend WHERE objid = 'ex2_id_seq'::regclass AND refobjid = 'ex'::regclass AND deptype = 'a'"
193
+ )
194
+ ensure
195
+ @connection.drop_table 'ex', if_exists: true
196
+ @connection.drop_table 'ex2', if_exists: true
197
+ end
198
+
199
+ def test_table_alias_length
200
+ assert_nothing_raised do
201
+ @connection.table_alias_length
202
+ end
203
+ end
204
+
205
+ def test_exec_no_binds
206
+ with_example_table do
207
+ result = @connection.exec_query('SELECT id, data FROM ex')
208
+ assert_equal 0, result.rows.length
209
+ assert_equal 2, result.columns.length
210
+ assert_equal %w{ id data }, result.columns
211
+
212
+ string = @connection.quote('foo')
213
+ @connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
214
+ result = @connection.exec_query('SELECT id, data FROM ex')
215
+ assert_equal 1, result.rows.length
216
+ assert_equal 2, result.columns.length
217
+
218
+ assert_equal [[1, 'foo']], result.rows
219
+ end
220
+ end
221
+
222
+ if ActiveRecord::Base.connection.prepared_statements
223
+ def test_exec_with_binds
224
+ with_example_table do
225
+ string = @connection.quote('foo')
226
+ @connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
227
+
228
+ bind = Relation::QueryAttribute.new("id", 1, Type::Value.new)
229
+ result = @connection.exec_query('SELECT id, data FROM ex WHERE id = $1', nil, [bind])
230
+
231
+ assert_equal 1, result.rows.length
232
+ assert_equal 2, result.columns.length
233
+
234
+ assert_equal [[1, 'foo']], result.rows
235
+ end
236
+ end
237
+
238
+ def test_exec_typecasts_bind_vals
239
+ with_example_table do
240
+ string = @connection.quote('foo')
241
+ @connection.exec_query("INSERT INTO ex (id, data) VALUES (1, #{string})")
242
+
243
+ bind = Relation::QueryAttribute.new("id", "1-fuu", Type::Integer.new)
244
+ result = @connection.exec_query('SELECT id, data FROM ex WHERE id = $1', nil, [bind])
245
+
246
+ assert_equal 1, result.rows.length
247
+ assert_equal 2, result.columns.length
248
+
249
+ assert_equal [[1, 'foo']], result.rows
250
+ end
251
+ end
252
+ end
253
+
254
+ def test_partial_index
255
+ with_example_table do
256
+ @connection.add_index 'ex', %w{ id number }, :name => 'partial', :where => "number > 100"
257
+ index = @connection.indexes('ex').find { |idx| idx.name == 'partial' }
258
+ assert_equal "(number > 100)", index.where
259
+ end
260
+ end
261
+
262
+ def test_expression_index
263
+ with_example_table do
264
+ @connection.add_index 'ex', 'mod(id, 10), abs(number)', name: 'expression'
265
+ index = @connection.indexes('ex').find { |idx| idx.name == 'expression' }
266
+ assert_equal 'mod(id, 10), abs(number)', index.columns
267
+ end
268
+ end
269
+
270
+ def test_index_with_opclass
271
+ with_example_table do
272
+ @connection.add_index "ex", "data varchar_pattern_ops"
273
+ index = @connection.indexes("ex").find { |idx| idx.name == "index_ex_on_data_varchar_pattern_ops" }
274
+ assert_equal "data varchar_pattern_ops", index.columns
275
+
276
+ @connection.remove_index "ex", "data varchar_pattern_ops"
277
+ assert_not @connection.indexes("ex").find { |idx| idx.name == "index_ex_on_data_varchar_pattern_ops" }
278
+ end
279
+ end
280
+
281
+ def test_columns_for_distinct_zero_orders
282
+ assert_equal "posts.id",
283
+ @connection.columns_for_distinct("posts.id", [])
284
+ end
285
+
286
+ def test_columns_for_distinct_one_order
287
+ assert_equal "posts.id, posts.created_at AS alias_0",
288
+ @connection.columns_for_distinct("posts.id", ["posts.created_at desc"])
289
+ end
290
+
291
+ def test_columns_for_distinct_few_orders
292
+ assert_equal "posts.id, posts.created_at AS alias_0, posts.position AS alias_1",
293
+ @connection.columns_for_distinct("posts.id", ["posts.created_at desc", "posts.position asc"])
294
+ end
295
+
296
+ def test_columns_for_distinct_with_case
297
+ assert_equal(
298
+ 'posts.id, CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END AS alias_0',
299
+ @connection.columns_for_distinct('posts.id',
300
+ ["CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END"])
301
+ )
302
+ end
303
+
304
+ def test_columns_for_distinct_blank_not_nil_orders
305
+ assert_equal "posts.id, posts.created_at AS alias_0",
306
+ @connection.columns_for_distinct("posts.id", ["posts.created_at desc", "", " "])
307
+ end
308
+
309
+ def test_columns_for_distinct_with_arel_order
310
+ order = Object.new
311
+ def order.to_sql
312
+ "posts.created_at desc"
313
+ end
314
+ assert_equal "posts.id, posts.created_at AS alias_0",
315
+ @connection.columns_for_distinct("posts.id", [order])
316
+ end
317
+
318
+ def test_columns_for_distinct_with_nulls
319
+ assert_equal "posts.title, posts.updater_id AS alias_0", @connection.columns_for_distinct("posts.title", ["posts.updater_id desc nulls first"])
320
+ assert_equal "posts.title, posts.updater_id AS alias_0", @connection.columns_for_distinct("posts.title", ["posts.updater_id desc nulls last"])
321
+ end
322
+
323
+ def test_columns_for_distinct_without_order_specifiers
324
+ assert_equal "posts.title, posts.updater_id AS alias_0",
325
+ @connection.columns_for_distinct("posts.title", ["posts.updater_id"])
326
+
327
+ assert_equal "posts.title, posts.updater_id AS alias_0",
328
+ @connection.columns_for_distinct("posts.title", ["posts.updater_id nulls last"])
329
+
330
+ assert_equal "posts.title, posts.updater_id AS alias_0",
331
+ @connection.columns_for_distinct("posts.title", ["posts.updater_id nulls first"])
332
+ end
333
+
334
+ def test_raise_error_when_cannot_translate_exception
335
+ assert_raise TypeError do
336
+ @connection.send(:log, nil) { @connection.execute(nil) }
337
+ end
338
+ end
339
+
340
+ def test_reload_type_map_for_newly_defined_types
341
+ @connection.execute "CREATE TYPE feeling AS ENUM ('good', 'bad')"
342
+ result = @connection.select_all "SELECT 'good'::feeling"
343
+ assert_instance_of(PostgreSQLAdapter::OID::Enum,
344
+ result.column_types["feeling"])
345
+ ensure
346
+ @connection.execute "DROP TYPE IF EXISTS feeling"
347
+ reset_connection
348
+ end
349
+
350
+ def test_only_reload_type_map_once_for_every_unknown_type
351
+ silence_warnings do
352
+ assert_queries 2, ignore_none: true do
353
+ @connection.select_all "SELECT NULL::anyelement"
354
+ end
355
+ assert_queries 1, ignore_none: true do
356
+ @connection.select_all "SELECT NULL::anyelement"
357
+ end
358
+ assert_queries 2, ignore_none: true do
359
+ @connection.select_all "SELECT NULL::anyarray"
360
+ end
361
+ end
362
+ ensure
363
+ reset_connection
364
+ end
365
+
366
+ def test_only_warn_on_first_encounter_of_unknown_oid
367
+ warning = capture(:stderr) {
368
+ @connection.select_all "SELECT NULL::anyelement"
369
+ @connection.select_all "SELECT NULL::anyelement"
370
+ @connection.select_all "SELECT NULL::anyelement"
371
+ }
372
+ assert_match(/\Aunknown OID \d+: failed to recognize type of 'anyelement'. It will be treated as String.\n\z/, warning)
373
+ ensure
374
+ reset_connection
375
+ end
376
+
377
+ def test_unparsed_defaults_are_at_least_set_when_saving
378
+ with_example_table "id SERIAL PRIMARY KEY, number INTEGER NOT NULL DEFAULT (4 + 4) * 2 / 4" do
379
+ number_klass = Class.new(ActiveRecord::Base) do
380
+ self.table_name = 'ex'
381
+ end
382
+ column = number_klass.columns_hash["number"]
383
+ assert_nil column.default
384
+ assert_nil column.default_function
385
+
386
+ first_number = number_klass.new
387
+ assert_nil first_number.number
388
+
389
+ first_number.save!
390
+ assert_equal 4, first_number.reload.number
391
+ end
392
+ end
393
+
394
+ private
395
+
396
+ def with_example_table(definition = 'id serial primary key, number integer, data character varying(255)', &block)
397
+ super(@connection, 'ex', definition, &block)
398
+ end
399
+
400
+ def connection_without_insert_returning
401
+ ActiveRecord::Base.postgresql_connection(ActiveRecord::Base.configurations['arunit'].merge(:insert_returning => false))
402
+ end
403
+ end
404
+ end
405
+ end