sequel 4.49.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +130 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +6 -9
  6. data/doc/advanced_associations.rdoc +91 -168
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/release_notes/5.1.0.txt +31 -0
  29. data/doc/release_notes/5.2.0.txt +33 -0
  30. data/doc/release_notes/5.3.0.txt +121 -0
  31. data/doc/schema_modification.rdoc +78 -64
  32. data/doc/security.rdoc +97 -88
  33. data/doc/sharding.rdoc +43 -30
  34. data/doc/sql.rdoc +53 -65
  35. data/doc/testing.rdoc +4 -5
  36. data/doc/thread_safety.rdoc +2 -4
  37. data/doc/transactions.rdoc +18 -17
  38. data/doc/validations.rdoc +48 -45
  39. data/doc/virtual_rows.rdoc +87 -115
  40. data/lib/sequel/adapters/ado/access.rb +7 -13
  41. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  42. data/lib/sequel/adapters/ado.rb +9 -25
  43. data/lib/sequel/adapters/amalgalite.rb +3 -18
  44. data/lib/sequel/adapters/ibmdb.rb +9 -45
  45. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  46. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  47. data/lib/sequel/adapters/jdbc/h2.rb +6 -26
  48. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
  49. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  50. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  51. data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
  52. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  53. data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
  54. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  55. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  56. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  57. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  58. data/lib/sequel/adapters/jdbc.rb +18 -74
  59. data/lib/sequel/adapters/mock.rb +4 -30
  60. data/lib/sequel/adapters/mysql.rb +7 -44
  61. data/lib/sequel/adapters/mysql2.rb +5 -23
  62. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  63. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  64. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  65. data/lib/sequel/adapters/odbc.rb +0 -19
  66. data/lib/sequel/adapters/oracle.rb +8 -13
  67. data/lib/sequel/adapters/postgres.rb +28 -150
  68. data/lib/sequel/adapters/postgresql.rb +1 -1
  69. data/lib/sequel/adapters/shared/access.rb +11 -51
  70. data/lib/sequel/adapters/shared/db2.rb +3 -61
  71. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  72. data/lib/sequel/adapters/shared/mysql.rb +61 -227
  73. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  74. data/lib/sequel/adapters/shared/postgres.rb +58 -264
  75. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  76. data/lib/sequel/adapters/shared/sqlite.rb +22 -101
  77. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  78. data/lib/sequel/adapters/sqlite.rb +2 -19
  79. data/lib/sequel/adapters/tinytds.rb +5 -15
  80. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  81. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
  82. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  83. data/lib/sequel/adapters/utils/replace.rb +0 -5
  84. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  85. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  86. data/lib/sequel/ast_transformer.rb +3 -94
  87. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  88. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  89. data/lib/sequel/connection_pool/single.rb +0 -2
  90. data/lib/sequel/connection_pool/threaded.rb +94 -110
  91. data/lib/sequel/connection_pool.rb +38 -28
  92. data/lib/sequel/core.rb +42 -101
  93. data/lib/sequel/database/connecting.rb +23 -60
  94. data/lib/sequel/database/dataset.rb +6 -9
  95. data/lib/sequel/database/dataset_defaults.rb +4 -48
  96. data/lib/sequel/database/features.rb +5 -4
  97. data/lib/sequel/database/logging.rb +2 -9
  98. data/lib/sequel/database/misc.rb +36 -55
  99. data/lib/sequel/database/query.rb +8 -13
  100. data/lib/sequel/database/schema_generator.rb +93 -64
  101. data/lib/sequel/database/schema_methods.rb +61 -79
  102. data/lib/sequel/database/transactions.rb +4 -24
  103. data/lib/sequel/database.rb +12 -2
  104. data/lib/sequel/dataset/actions.rb +57 -107
  105. data/lib/sequel/dataset/dataset_module.rb +4 -16
  106. data/lib/sequel/dataset/features.rb +35 -30
  107. data/lib/sequel/dataset/graph.rb +40 -49
  108. data/lib/sequel/dataset/misc.rb +12 -37
  109. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  110. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  111. data/lib/sequel/dataset/query.rb +91 -161
  112. data/lib/sequel/dataset/sql.rb +33 -225
  113. data/lib/sequel/dataset.rb +18 -10
  114. data/lib/sequel/deprecated.rb +18 -27
  115. data/lib/sequel/exceptions.rb +1 -17
  116. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  117. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  118. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  119. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  120. data/lib/sequel/extensions/connection_validator.rb +1 -1
  121. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  122. data/lib/sequel/extensions/core_extensions.rb +39 -49
  123. data/lib/sequel/extensions/core_refinements.rb +39 -45
  124. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  125. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  126. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  127. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  128. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  129. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  130. data/lib/sequel/extensions/from_block.rb +1 -35
  131. data/lib/sequel/extensions/graph_each.rb +2 -2
  132. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  133. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  134. data/lib/sequel/extensions/inflector.rb +4 -4
  135. data/lib/sequel/extensions/migration.rb +27 -43
  136. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  137. data/lib/sequel/extensions/null_dataset.rb +2 -8
  138. data/lib/sequel/extensions/pagination.rb +1 -17
  139. data/lib/sequel/extensions/pg_array.rb +20 -189
  140. data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
  141. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  142. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  143. data/lib/sequel/extensions/pg_inet.rb +3 -16
  144. data/lib/sequel/extensions/pg_interval.rb +1 -20
  145. data/lib/sequel/extensions/pg_json.rb +7 -27
  146. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  147. data/lib/sequel/extensions/pg_range.rb +6 -121
  148. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  149. data/lib/sequel/extensions/pg_row.rb +5 -77
  150. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  151. data/lib/sequel/extensions/query.rb +3 -4
  152. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  153. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  154. data/lib/sequel/extensions/select_remove.rb +3 -3
  155. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  156. data/lib/sequel/extensions/sql_comments.rb +2 -2
  157. data/lib/sequel/extensions/string_agg.rb +11 -8
  158. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  159. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  160. data/lib/sequel/model/associations.rb +129 -131
  161. data/lib/sequel/model/base.rb +133 -731
  162. data/lib/sequel/model/default_inflections.rb +1 -1
  163. data/lib/sequel/model/errors.rb +0 -3
  164. data/lib/sequel/model/exceptions.rb +2 -6
  165. data/lib/sequel/model/inflections.rb +1 -26
  166. data/lib/sequel/model/plugins.rb +1 -0
  167. data/lib/sequel/model.rb +27 -62
  168. data/lib/sequel/plugins/active_model.rb +2 -5
  169. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  170. data/lib/sequel/plugins/association_pks.rb +14 -28
  171. data/lib/sequel/plugins/association_proxies.rb +6 -7
  172. data/lib/sequel/plugins/auto_validations.rb +4 -4
  173. data/lib/sequel/plugins/before_after_save.rb +0 -43
  174. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  175. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  176. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  177. data/lib/sequel/plugins/caching.rb +5 -5
  178. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  179. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  180. data/lib/sequel/plugins/column_select.rb +2 -2
  181. data/lib/sequel/plugins/composition.rb +15 -24
  182. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  183. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  184. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  185. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  186. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  187. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  188. data/lib/sequel/plugins/finder.rb +16 -10
  189. data/lib/sequel/plugins/force_encoding.rb +1 -7
  190. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  191. data/lib/sequel/plugins/input_transformer.rb +10 -11
  192. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  193. data/lib/sequel/plugins/instance_filters.rb +5 -5
  194. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  195. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  196. data/lib/sequel/plugins/json_serializer.rb +19 -19
  197. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  198. data/lib/sequel/plugins/list.rb +6 -6
  199. data/lib/sequel/plugins/many_through_many.rb +11 -8
  200. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  201. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  202. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  203. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  204. data/lib/sequel/plugins/pg_row.rb +2 -11
  205. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  206. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  207. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  208. data/lib/sequel/plugins/serialization.rb +15 -33
  209. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  210. data/lib/sequel/plugins/sharding.rb +2 -8
  211. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  212. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  213. data/lib/sequel/plugins/static_cache.rb +8 -9
  214. data/lib/sequel/plugins/string_stripper.rb +3 -3
  215. data/lib/sequel/plugins/subclasses.rb +1 -1
  216. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  217. data/lib/sequel/plugins/table_select.rb +2 -2
  218. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  219. data/lib/sequel/plugins/timestamps.rb +6 -7
  220. data/lib/sequel/plugins/touch.rb +4 -8
  221. data/lib/sequel/plugins/tree.rb +3 -3
  222. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  223. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  224. data/lib/sequel/plugins/update_or_create.rb +3 -3
  225. data/lib/sequel/plugins/update_refresh.rb +3 -3
  226. data/lib/sequel/plugins/uuid.rb +7 -11
  227. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  228. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  229. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  230. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  231. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  232. data/lib/sequel/sql.rb +145 -276
  233. data/lib/sequel/timezones.rb +8 -23
  234. data/lib/sequel/version.rb +2 -2
  235. data/lib/sequel.rb +1 -1
  236. data/spec/adapter_spec.rb +1 -1
  237. data/spec/adapters/db2_spec.rb +2 -103
  238. data/spec/adapters/mssql_spec.rb +89 -68
  239. data/spec/adapters/mysql_spec.rb +111 -478
  240. data/spec/adapters/oracle_spec.rb +1 -9
  241. data/spec/adapters/postgres_spec.rb +459 -664
  242. data/spec/adapters/spec_helper.rb +12 -31
  243. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  244. data/spec/adapters/sqlite_spec.rb +8 -146
  245. data/spec/bin_spec.rb +11 -16
  246. data/spec/core/connection_pool_spec.rb +173 -74
  247. data/spec/core/database_spec.rb +96 -244
  248. data/spec/core/dataset_spec.rb +99 -414
  249. data/spec/core/deprecated_spec.rb +3 -3
  250. data/spec/core/expression_filters_spec.rb +37 -144
  251. data/spec/core/mock_adapter_spec.rb +241 -4
  252. data/spec/core/object_graph_spec.rb +11 -60
  253. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  254. data/spec/core/schema_generator_spec.rb +51 -40
  255. data/spec/core/schema_spec.rb +88 -77
  256. data/spec/core/spec_helper.rb +6 -24
  257. data/spec/core/version_spec.rb +1 -1
  258. data/spec/core_extensions_spec.rb +7 -83
  259. data/spec/core_model_spec.rb +2 -2
  260. data/spec/deprecation_helper.rb +2 -14
  261. data/spec/extensions/accessed_columns_spec.rb +1 -1
  262. data/spec/extensions/active_model_spec.rb +3 -3
  263. data/spec/extensions/after_initialize_spec.rb +1 -1
  264. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  265. data/spec/extensions/association_dependencies_spec.rb +1 -1
  266. data/spec/extensions/association_pks_spec.rb +30 -92
  267. data/spec/extensions/association_proxies_spec.rb +1 -1
  268. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  269. data/spec/extensions/auto_validations_spec.rb +1 -1
  270. data/spec/extensions/blacklist_security_spec.rb +1 -1
  271. data/spec/extensions/blank_spec.rb +1 -1
  272. data/spec/extensions/boolean_readers_spec.rb +1 -1
  273. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  274. data/spec/extensions/caching_spec.rb +1 -1
  275. data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
  276. data/spec/extensions/column_conflicts_spec.rb +1 -1
  277. data/spec/extensions/column_select_spec.rb +4 -4
  278. data/spec/extensions/columns_introspection_spec.rb +1 -1
  279. data/spec/extensions/columns_updated_spec.rb +1 -1
  280. data/spec/extensions/composition_spec.rb +8 -30
  281. data/spec/extensions/connection_expiration_spec.rb +3 -3
  282. data/spec/extensions/connection_validator_spec.rb +3 -3
  283. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  284. data/spec/extensions/constraint_validations_spec.rb +1 -1
  285. data/spec/extensions/core_refinements_spec.rb +1 -3
  286. data/spec/extensions/csv_serializer_spec.rb +4 -9
  287. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  288. data/spec/extensions/dataset_associations_spec.rb +2 -1
  289. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  290. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  291. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  292. data/spec/extensions/defaults_setter_spec.rb +2 -2
  293. data/spec/extensions/delay_add_association_spec.rb +8 -9
  294. data/spec/extensions/dirty_spec.rb +1 -1
  295. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  296. data/spec/extensions/eager_each_spec.rb +2 -2
  297. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  298. data/spec/extensions/error_splitter_spec.rb +1 -1
  299. data/spec/extensions/error_sql_spec.rb +1 -1
  300. data/spec/extensions/eval_inspect_spec.rb +1 -1
  301. data/spec/extensions/finder_spec.rb +1 -1
  302. data/spec/extensions/force_encoding_spec.rb +2 -5
  303. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  304. data/spec/extensions/graph_each_spec.rb +5 -5
  305. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  306. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  307. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  308. data/spec/extensions/inflector_spec.rb +1 -1
  309. data/spec/extensions/input_transformer_spec.rb +7 -2
  310. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  311. data/spec/extensions/instance_filters_spec.rb +1 -1
  312. data/spec/extensions/instance_hooks_spec.rb +1 -95
  313. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  314. data/spec/extensions/json_serializer_spec.rb +1 -1
  315. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  316. data/spec/extensions/list_spec.rb +5 -6
  317. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  318. data/spec/extensions/many_through_many_spec.rb +25 -33
  319. data/spec/extensions/migration_spec.rb +12 -2
  320. data/spec/extensions/modification_detection_spec.rb +1 -1
  321. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  322. data/spec/extensions/named_timezones_spec.rb +3 -3
  323. data/spec/extensions/nested_attributes_spec.rb +1 -29
  324. data/spec/extensions/null_dataset_spec.rb +1 -11
  325. data/spec/extensions/optimistic_locking_spec.rb +2 -2
  326. data/spec/extensions/pagination_spec.rb +1 -1
  327. data/spec/extensions/pg_array_associations_spec.rb +22 -26
  328. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_array_spec.rb +3 -48
  330. data/spec/extensions/pg_enum_spec.rb +1 -1
  331. data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
  332. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  333. data/spec/extensions/pg_hstore_spec.rb +22 -31
  334. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_inet_spec.rb +1 -14
  336. data/spec/extensions/pg_interval_spec.rb +3 -13
  337. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  338. data/spec/extensions/pg_json_spec.rb +1 -13
  339. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  340. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  341. data/spec/extensions/pg_range_spec.rb +3 -88
  342. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  343. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  344. data/spec/extensions/pg_row_spec.rb +1 -44
  345. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  346. data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
  347. data/spec/extensions/prepared_statements_spec.rb +13 -48
  348. data/spec/extensions/pretty_table_spec.rb +40 -9
  349. data/spec/extensions/query_spec.rb +1 -12
  350. data/spec/extensions/rcte_tree_spec.rb +23 -34
  351. data/spec/extensions/round_timestamps_spec.rb +1 -5
  352. data/spec/extensions/s_spec.rb +1 -1
  353. data/spec/extensions/schema_caching_spec.rb +1 -1
  354. data/spec/extensions/schema_dumper_spec.rb +43 -32
  355. data/spec/extensions/select_remove_spec.rb +1 -1
  356. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  357. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  358. data/spec/extensions/serialization_spec.rb +5 -17
  359. data/spec/extensions/server_block_spec.rb +1 -1
  360. data/spec/extensions/server_logging_spec.rb +2 -2
  361. data/spec/extensions/sharding_spec.rb +1 -1
  362. data/spec/extensions/shared_caching_spec.rb +1 -28
  363. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  364. data/spec/extensions/singular_table_names_spec.rb +1 -1
  365. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  366. data/spec/extensions/spec_helper.rb +5 -27
  367. data/spec/extensions/split_array_nil_spec.rb +1 -1
  368. data/spec/extensions/split_values_spec.rb +1 -1
  369. data/spec/extensions/sql_comments_spec.rb +1 -1
  370. data/spec/extensions/sql_expr_spec.rb +1 -1
  371. data/spec/extensions/static_cache_spec.rb +1 -1
  372. data/spec/extensions/string_agg_spec.rb +2 -2
  373. data/spec/extensions/string_date_time_spec.rb +1 -1
  374. data/spec/extensions/string_stripper_spec.rb +1 -1
  375. data/spec/extensions/subclasses_spec.rb +1 -1
  376. data/spec/extensions/subset_conditions_spec.rb +1 -1
  377. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  378. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  379. data/spec/extensions/synchronize_sql_spec.rb +124 -0
  380. data/spec/extensions/table_select_spec.rb +4 -4
  381. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  382. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  383. data/spec/extensions/timestamps_spec.rb +5 -7
  384. data/spec/extensions/to_dot_spec.rb +1 -1
  385. data/spec/extensions/touch_spec.rb +1 -1
  386. data/spec/extensions/tree_spec.rb +1 -1
  387. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  388. data/spec/extensions/unlimited_update_spec.rb +1 -1
  389. data/spec/extensions/update_or_create_spec.rb +12 -16
  390. data/spec/extensions/update_primary_key_spec.rb +4 -3
  391. data/spec/extensions/update_refresh_spec.rb +1 -1
  392. data/spec/extensions/uuid_spec.rb +10 -13
  393. data/spec/extensions/validate_associated_spec.rb +1 -1
  394. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  395. data/spec/extensions/validation_contexts_spec.rb +1 -1
  396. data/spec/extensions/validation_helpers_spec.rb +10 -44
  397. data/spec/extensions/whitelist_security_spec.rb +5 -5
  398. data/spec/extensions/xml_serializer_spec.rb +8 -13
  399. data/spec/guards_helper.rb +2 -1
  400. data/spec/integration/associations_test.rb +1 -23
  401. data/spec/integration/database_test.rb +7 -7
  402. data/spec/integration/dataset_test.rb +12 -47
  403. data/spec/integration/eager_loader_test.rb +1 -1
  404. data/spec/integration/migrator_test.rb +1 -1
  405. data/spec/integration/model_test.rb +4 -82
  406. data/spec/integration/plugin_test.rb +7 -23
  407. data/spec/integration/prepared_statement_test.rb +8 -88
  408. data/spec/integration/schema_test.rb +10 -10
  409. data/spec/integration/spec_helper.rb +17 -21
  410. data/spec/integration/timezone_test.rb +5 -5
  411. data/spec/integration/transaction_test.rb +3 -55
  412. data/spec/integration/type_test.rb +9 -9
  413. data/spec/model/association_reflection_spec.rb +24 -9
  414. data/spec/model/associations_spec.rb +124 -303
  415. data/spec/model/base_spec.rb +43 -137
  416. data/spec/model/class_dataset_methods_spec.rb +2 -20
  417. data/spec/model/dataset_methods_spec.rb +1 -20
  418. data/spec/model/eager_loading_spec.rb +48 -17
  419. data/spec/model/hooks_spec.rb +5 -300
  420. data/spec/model/inflector_spec.rb +1 -1
  421. data/spec/model/model_spec.rb +29 -339
  422. data/spec/model/plugins_spec.rb +2 -16
  423. data/spec/model/record_spec.rb +33 -129
  424. data/spec/model/spec_helper.rb +5 -15
  425. data/spec/model/validations_spec.rb +1 -1
  426. data/spec/sequel_warning.rb +1 -12
  427. metadata +19 -65
  428. data/doc/active_record.rdoc +0 -927
  429. data/lib/sequel/adapters/cubrid.rb +0 -160
  430. data/lib/sequel/adapters/do/mysql.rb +0 -69
  431. data/lib/sequel/adapters/do/postgres.rb +0 -46
  432. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  433. data/lib/sequel/adapters/do.rb +0 -166
  434. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  435. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  436. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  437. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  438. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  439. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  440. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  441. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  442. data/lib/sequel/adapters/shared/informix.rb +0 -63
  443. data/lib/sequel/adapters/shared/progress.rb +0 -40
  444. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  445. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  446. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  447. data/lib/sequel/adapters/swift.rb +0 -169
  448. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  449. data/lib/sequel/dataset/mutation.rb +0 -98
  450. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  451. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  452. data/lib/sequel/extensions/filter_having.rb +0 -65
  453. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  454. data/lib/sequel/extensions/meta_def.rb +0 -37
  455. data/lib/sequel/extensions/query_literals.rb +0 -86
  456. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  457. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  458. data/lib/sequel/extensions/set_overrides.rb +0 -82
  459. data/lib/sequel/no_core_ext.rb +0 -4
  460. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  461. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  462. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  463. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  464. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  465. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  466. data/lib/sequel/plugins/schema.rb +0 -84
  467. data/lib/sequel/plugins/scissors.rb +0 -37
  468. data/spec/core/dataset_mutation_spec.rb +0 -253
  469. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  470. data/spec/extensions/before_after_save_spec.rb +0 -40
  471. data/spec/extensions/filter_having_spec.rb +0 -42
  472. data/spec/extensions/from_block_spec.rb +0 -21
  473. data/spec/extensions/hash_aliases_spec.rb +0 -26
  474. data/spec/extensions/identifier_columns_spec.rb +0 -19
  475. data/spec/extensions/meta_def_spec.rb +0 -35
  476. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  477. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  478. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  479. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  480. data/spec/extensions/query_literals_spec.rb +0 -185
  481. data/spec/extensions/schema_spec.rb +0 -123
  482. data/spec/extensions/scissors_spec.rb +0 -27
  483. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  484. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Prepared Statements and Bound Arguments" do
4
4
  before do
@@ -332,27 +332,27 @@ describe "Bound Argument Types" do
332
332
  @db.drop_table?(:items)
333
333
  end
334
334
 
335
- cspecify "should handle date type", [:do, :sqlite], [:tinytds], [:jdbc, :mssql], [:jdbc, :sqlite], :oracle do
335
+ cspecify "should handle date type", [:tinytds], [:jdbc, :mssql], [:jdbc, :sqlite], :oracle do
336
336
  @ds.filter(:d=>:$x).prepare(:first, :ps_date).call(:x=>@vs[:d])[:d].must_equal @vs[:d]
337
337
  end
338
338
 
339
- cspecify "should handle datetime type", [:do], [:mysql2], [:jdbc, :sqlite], [:tinytds], [:oracle] do
339
+ cspecify "should handle datetime type", [:mysql2], [:jdbc, :sqlite], [:tinytds], [:oracle] do
340
340
  Sequel.datetime_class = DateTime
341
341
  @ds.filter(:dt=>:$x).prepare(:first, :ps_datetime).call(:x=>@vs[:dt])[:dt].must_equal @vs[:dt]
342
342
  end
343
343
 
344
- cspecify "should handle datetime type with fractional seconds", [:do, :postgres], [:jdbc, :sqlite], [:oracle] do
344
+ cspecify "should handle datetime type with fractional seconds", [:jdbc, :sqlite], [:jdbc, :mysql], [:oracle] do
345
345
  Sequel.datetime_class = DateTime
346
346
  fract_time = DateTime.parse('2010-10-12 13:14:15.500000')
347
347
  @ds.prepare(:update, :ps_datetime_up, :dt=>:$x).call(:x=>fract_time)
348
348
  @ds.literal(@ds.filter(:dt=>:$x).prepare(:first, :ps_datetime).call(:x=>fract_time)[:dt]).must_equal @ds.literal(fract_time)
349
349
  end
350
350
 
351
- cspecify "should handle time type", [:do], [:jdbc, :sqlite], [:swift], [:oracle] do
351
+ cspecify "should handle time type", [:jdbc, :sqlite] do
352
352
  @ds.filter(:t=>:$x).prepare(:first, :ps_time).call(:x=>@vs[:t])[:t].must_equal @vs[:t]
353
353
  end
354
354
 
355
- cspecify "should handle time type with fractional seconds", [:do, :postgres], [:jdbc, :sqlite], [:oracle], [:swift, :postgres] do
355
+ cspecify "should handle time type with fractional seconds", [:jdbc, :sqlite], [:jdbc, :mysql] do
356
356
  fract_time = @vs[:t] + 0.5
357
357
  @ds.prepare(:update, :ps_time_up, :t=>:$x).call(:x=>fract_time)
358
358
  @ds.literal(@ds.filter(:t=>:$x).prepare(:first, :ps_time).call(:x=>fract_time)[:t]).must_equal @ds.literal(fract_time)
@@ -384,7 +384,7 @@ describe "Bound Argument Types" do
384
384
  @ds.get(:file).must_equal zero_blob
385
385
  end
386
386
 
387
- cspecify "should handle float type", [:swift, :sqlite] do
387
+ it "should handle float type" do
388
388
  @ds.filter(:f=>:$x).prepare(:first, :ps_float).call(:x=>@vs[:f])[:f].must_equal @vs[:f]
389
389
  end
390
390
 
@@ -392,87 +392,7 @@ describe "Bound Argument Types" do
392
392
  @ds.filter(:s=>:$x).prepare(:first, :ps_string).call(:x=>@vs[:s])[:s].must_equal @vs[:s]
393
393
  end
394
394
 
395
- cspecify "should handle boolean type", [:do, :sqlite], [:jdbc, :sqlite], [:jdbc, :db2], :oracle do
395
+ cspecify "should handle boolean type", [:jdbc, :sqlite], [:jdbc, :db2], :oracle do
396
396
  @ds.filter(:b=>:$x).prepare(:first, :ps_string).call(:x=>@vs[:b])[:b].must_equal @vs[:b]
397
397
  end
398
398
  end
399
-
400
- describe "Dataset#unbind" do
401
- before do
402
- deprecated do
403
- @ds = ds = DB[:items]
404
- @ct = proc do |t, v|
405
- DB.create_table!(:items) do
406
- column :c, t
407
- end
408
- ds.insert(:c=>v)
409
- end
410
- @u = proc{|ds1| ds2, bv = ds1.unbind; ds2.call(:first, bv)}
411
- end
412
- end
413
- after do
414
- DB.drop_table?(:items)
415
- end
416
-
417
- deprecated "should unbind values assigned to equality and inequality statements" do
418
- @ct[Integer, 10]
419
- @u[@ds.filter(:c=>10)].must_equal(:c=>10)
420
- @u[@ds.exclude(:c=>10)].must_be_nil
421
- @u[@ds.filter{c < 10}].must_be_nil
422
- @u[@ds.filter{c <= 10}].must_equal(:c=>10)
423
- @u[@ds.filter{c > 10}].must_be_nil
424
- @u[@ds.filter{c >= 10}].must_equal(:c=>10)
425
- end
426
-
427
- cspecify "should handle numerics and strings", [:odbc], [:swift, :sqlite] do
428
- deprecated do
429
- @ct[Integer, 10]
430
- @u[@ds.filter(:c=>10)].must_equal(:c=>10)
431
- @ct[Float, 0.0]
432
- @u[@ds.filter{c < 1}].must_equal(:c=>0.0)
433
- @ct[String, 'foo']
434
- @u[@ds.filter(:c=>'foo')].must_equal(:c=>'foo')
435
-
436
- DB.create_table!(:items) do
437
- BigDecimal :c, :size=>[15,2]
438
- end
439
- @ds.insert(:c=>BigDecimal.new('1.1'))
440
- @u[@ds.filter{c > 0}].must_equal(:c=>BigDecimal.new('1.1'))
441
- end
442
- end
443
-
444
- cspecify "should handle dates and times", [:do], [:jdbc, :mssql], [:jdbc, :sqlite], [:swift], [:tinytds], :oracle do
445
- deprecated do
446
- @ct[Date, Date.today]
447
- @u[@ds.filter(:c=>Date.today)].must_equal(:c=>Date.today)
448
- t = Time.now
449
- @ct[Time, t]
450
- @u[@ds.filter{c < t + 1}][:c].to_i.must_equal t.to_i
451
- end
452
- end
453
-
454
- deprecated "should handle QualifiedIdentifiers" do
455
- @ct[Integer, 10]
456
- @u[@ds.filter{items[:c] > 1}].must_equal(:c=>10)
457
- end
458
-
459
- cspecify "should handle deep nesting", :h2 do
460
- deprecated do
461
- DB.create_table!(:items) do
462
- Integer :a
463
- Integer :b
464
- Integer :c
465
- Integer :d
466
- end
467
- @ds.insert(:a=>2, :b=>0, :c=>3, :d=>5)
468
- @u[@ds.filter{a > 1}.and{b < 2}.or(:c=>3).and(Sequel.case({~Sequel.expr(:d=>4)=>1}, 0) => 1)].must_equal(:a=>2, :b=>0, :c=>3, :d=>5)
469
- @u[@ds.filter{a > 1}.and{b < 2}.or(:c=>3).and(Sequel.case({~Sequel.expr(:d=>5)=>1}, 0) => 1)].must_be_nil
470
- end
471
- end
472
-
473
- deprecated "should handle case where the same variable has the same value in multiple places " do
474
- @ct[Integer, 1]
475
- @u[@ds.filter{c > 1}.or{c < 1}.invert].must_equal(:c=>1)
476
- @u[@ds.filter{c > 1}.or{c < 1}].must_be_nil
477
- end
478
- end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Database schema parser" do
4
4
  after do
@@ -129,7 +129,7 @@ describe "Database schema parser" do
129
129
  DB.schema(:items).first.last[:ruby_default].must_equal Sequel::CURRENT_TIMESTAMP
130
130
  end
131
131
 
132
- cspecify "should parse current date defaults from the schema properly", :mysql, :oracle do
132
+ cspecify "should parse current date defaults from the schema properly", [proc{|db| !db.mariadb? || db.server_version <= 100200}, :mysql], :oracle do
133
133
  DB.create_table!(:items){Date :a, :default=>Sequel::CURRENT_DATE}
134
134
  DB.schema(:items).first.last[:ruby_default].must_equal Sequel::CURRENT_DATE
135
135
  end
@@ -215,7 +215,7 @@ describe "Database index parsing" do
215
215
  DB.indexes(:items).must_equal({})
216
216
  end
217
217
 
218
- it "should not include partial indexes" do
218
+ cspecify "should not include partial indexes", [proc{|db| db.sqlite_version < 30808}, :sqlite] do
219
219
  DB.create_table!(:items){Integer :n; Integer :a; index :n, :where=>proc{n > 10}}
220
220
  DB.indexes(:items).must_equal({})
221
221
  end if DB.supports_partial_indexes?
@@ -610,7 +610,7 @@ describe "Database schema modifiers" do
610
610
  @ds.all.must_equal [{:id2=>10}]
611
611
  end
612
612
 
613
- cspecify "should set column NULL/NOT NULL correctly", [:jdbc, :db2], [:db2] do
613
+ cspecify "should set column NULL/NOT NULL correctly", [:jdbc, :db2] do
614
614
  @db.create_table!(:items, :engine=>:InnoDB){Integer :id}
615
615
  @ds.insert(:id=>10)
616
616
  @db.alter_table(:items){set_column_allow_null :id, false}
@@ -632,7 +632,7 @@ describe "Database schema modifiers" do
632
632
  @ds.all.must_equal [{:id=>10}, {:id=>20}]
633
633
  end
634
634
 
635
- cspecify "should set column types correctly", [:jdbc, :db2], [:db2], :oracle do
635
+ cspecify "should set column types correctly", [:jdbc, :db2], :oracle do
636
636
  @db.create_table!(:items){Integer :id}
637
637
  @ds.insert(:id=>10)
638
638
  @db.alter_table(:items){set_column_type :id, String}
@@ -642,7 +642,7 @@ describe "Database schema modifiers" do
642
642
  @ds.order(:id).all.must_equal [{:id=>"10"}, {:id=>"20"}]
643
643
  end
644
644
 
645
- cspecify "should set column types without modifying NULL/NOT NULL", [:jdbc, :db2], [:db2], :oracle, :derby do
645
+ cspecify "should set column types without modifying NULL/NOT NULL", [:jdbc, :db2], :derby do
646
646
  @db.create_table!(:items){Integer :id, :null=>false, :default=>2}
647
647
  proc{@ds.insert(:id=>nil)}.must_raise(Sequel::NotNullConstraintViolation, Sequel::ConstraintViolation, Sequel::DatabaseError)
648
648
  @db.alter_table(:items){set_column_type :id, String}
@@ -655,7 +655,7 @@ describe "Database schema modifiers" do
655
655
  @ds.map(:id).must_equal [nil, nil]
656
656
  end
657
657
 
658
- cspecify "should set column types without modifying defaults", [:jdbc, :db2], [:db2], :oracle, :derby do
658
+ cspecify "should set column types without modifying defaults", [:jdbc, :db2], :oracle, :derby do
659
659
  @db.create_table!(:items){Integer :id, :default=>0}
660
660
  @ds.insert
661
661
  @ds.map(:id).must_equal [0]
@@ -760,19 +760,19 @@ describe "Database schema modifiers" do
760
760
  @db.schema(:items, :reload=>true).map{|x| x.first}.must_equal [:id]
761
761
  end
762
762
 
763
- cspecify "should work correctly with many operations in a single alter_table call", [:jdbc, :db2], [:db2] do
763
+ cspecify "should work correctly with many operations in a single alter_table call", [:jdbc, :db2] do
764
764
  @db.create_table!(:items) do
765
765
  primary_key :id
766
766
  String :name2
767
767
  String :number2
768
- constraint :bar, Sequel.~(:id=>nil)
768
+ constraint :bar, Sequel.~(:number2=>nil, :name2=>nil)
769
769
  end
770
770
  @ds.insert(:name2=>'A12')
771
771
  @db.alter_table(:items) do
772
772
  add_column :number, Integer
773
+ drop_constraint :bar
773
774
  drop_column :number2
774
775
  rename_column :name2, :name
775
- drop_constraint :bar
776
776
  set_column_not_null :name
777
777
  set_column_default :name, 'A13'
778
778
  add_constraint :foo, Sequel.like(:name, 'A%')
@@ -1,39 +1,33 @@
1
- require 'rubygems'
2
1
  require 'logger'
3
- require "#{File.dirname(File.dirname(__FILE__))}/sequel_warning.rb"
2
+ require_relative "../sequel_warning"
4
3
 
5
4
  if ENV['COVERAGE']
6
- require File.join(File.dirname(File.expand_path(__FILE__)), "../sequel_coverage")
5
+ require_relative "../sequel_coverage"
7
6
  SimpleCov.sequel_coverage(:group=>%r{lib/sequel/adapters})
8
7
  end
9
8
 
10
- unless Object.const_defined?('Sequel')
11
- $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
12
- require 'sequel'
13
- end
9
+ $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
10
+ require_relative "../../lib/sequel"
11
+
14
12
  begin
15
- require File.join(File.dirname(File.dirname(__FILE__)), 'spec_config.rb') unless defined?(DB)
13
+ require_relative "../spec_config" unless defined?(DB)
16
14
  rescue LoadError
17
15
  end
18
16
  Sequel::Deprecation.backtrace_filter = lambda{|line, lineno| lineno < 4 || line =~ /_(spec|test)\.rb/}
19
17
 
20
- Sequel.split_symbols = false if ENV['SEQUEL_NO_SPLIT_SYMBOLS']
18
+ Sequel.split_symbols = true if ENV['SEQUEL_SPLIT_SYMBOLS']
21
19
  Sequel::Database.extension :columns_introspection if ENV['SEQUEL_COLUMNS_INTROSPECTION']
22
20
  Sequel::Model.cache_associations = false if ENV['SEQUEL_NO_CACHE_ASSOCIATIONS']
23
21
  Sequel::Model.plugin :prepared_statements if ENV['SEQUEL_MODEL_PREPARED_STATEMENTS']
24
22
  Sequel::Model.use_transactions = false
25
23
  Sequel::Model.cache_anonymous_models = false
26
24
 
27
- require './spec/guards_helper'
25
+ require_relative '../guards_helper'
28
26
 
29
- IDENTIFIER_MANGLING = !!ENV['SEQUEL_IDENTIFIER_MANGLING'] unless defined?(IDENTIFIER_MANGLING)
27
+ DB = Sequel.connect(ENV['SEQUEL_INTEGRATION_URL']) unless defined?(DB)
30
28
 
31
- unless defined?(DB)
32
- # SEQUEL5: Remove :identifier_mangling=>false
33
- DB = Sequel.connect(ENV['SEQUEL_INTEGRATION_URL'], :identifier_mangling=>false)
34
- DB.extension(:freeze_datasets) if ENV['SEQUEL_FREEZE_DATASETS']
35
- DB.extension(:identifier_mangling) if IDENTIFIER_MANGLING
36
- end
29
+ IDENTIFIER_MANGLING = !!ENV['SEQUEL_IDENTIFIER_MANGLING'] unless defined?(IDENTIFIER_MANGLING)
30
+ DB.extension(:identifier_mangling) if IDENTIFIER_MANGLING
37
31
 
38
32
  if DB.adapter_scheme == :ibmdb || (DB.adapter_scheme == :ado && DB.database_type == :access)
39
33
  def DB.drop_table(*tables)
@@ -44,14 +38,14 @@ if DB.adapter_scheme == :ibmdb || (DB.adapter_scheme == :ado && DB.database_type
44
38
  end
45
39
  end
46
40
 
47
- if ENV['SEQUEL_NO_AUTO_LITERAL_STRINGS']
48
- DB.extension :no_auto_literal_strings
49
- end
50
-
51
41
  if ENV['SEQUEL_ERROR_SQL']
52
42
  DB.extension :error_sql
53
43
  end
54
44
 
45
+ if ENV['SEQUEL_SYNCHRONIZE_SQL']
46
+ DB.extension :synchronize_sql
47
+ end
48
+
55
49
  if ENV['SEQUEL_CONNECTION_VALIDATOR']
56
50
  ENV['SEQUEL_NO_CHECK_SQLS'] = '1'
57
51
  DB.extension(:connection_validator)
@@ -68,3 +62,5 @@ if ENV['SEQUEL_FREEZE_DATABASE']
68
62
  DB.extension(:pg_array) if DB.database_type == :postgres
69
63
  DB.freeze
70
64
  end
65
+
66
+ puts "running #{defined?(SEQUEL_ADAPTER_TEST) ? SEQUEL_ADAPTER_TEST : "integration (database type: #{DB.database_type})"} specs on #{RUBY_ENGINE} #{defined?(JRUBY_VERSION) ? JRUBY_VERSION : RUBY_VERSION} with #{DB.adapter_scheme} adapter"
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Sequel timezone support" do
4
4
  def _test_timezone(timezone=Sequel.application_timezone)
@@ -39,7 +39,7 @@ describe "Sequel timezone support" do
39
39
  @db.drop_table(:t)
40
40
  end
41
41
 
42
- cspecify "should support using UTC for database storage and local time for the application", [:tinytds], [:do, :mysql], [:do, :postgres], [:oracle] do
42
+ cspecify "should support using UTC for database storage and local time for the application", [:tinytds], [:oracle] do
43
43
  Sequel.database_timezone = :utc
44
44
  Sequel.application_timezone = :local
45
45
  _test_timezone
@@ -48,7 +48,7 @@ describe "Sequel timezone support" do
48
48
  _test_timezone
49
49
  end
50
50
 
51
- cspecify "should support using local time for database storage and UTC for the application", [:tinytds], [:do, :mysql], [:do, :postgres], [:oracle] do
51
+ cspecify "should support using local time for database storage and UTC for the application", [:tinytds], [:oracle] do
52
52
  Sequel.database_timezone = :local
53
53
  Sequel.application_timezone = :utc
54
54
  _test_timezone
@@ -57,7 +57,7 @@ describe "Sequel timezone support" do
57
57
  _test_timezone
58
58
  end
59
59
 
60
- cspecify "should support using UTC for both database storage and for application", [:do, :mysql], [:do, :postgres], [:oracle] do
60
+ cspecify "should support using UTC for both database storage and for application", [:oracle] do
61
61
  Sequel.default_timezone = :utc
62
62
  _test_timezone
63
63
  Sequel.database_timezone = :local
@@ -65,7 +65,7 @@ describe "Sequel timezone support" do
65
65
  _test_timezone
66
66
  end
67
67
 
68
- cspecify "should support using local time for both database storage and for application", [:do, :postgres], [:oracle] do
68
+ cspecify "should support using local time for both database storage and for application", [:oracle] do
69
69
  Sequel.default_timezone = :local
70
70
  _test_timezone
71
71
  Sequel.database_timezone = :utc
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Database transactions" do
4
4
  before(:all) do
@@ -192,7 +192,6 @@ describe "Database transactions" do
192
192
  c = Class.new(Sequel::Model(@d))
193
193
  c.set_primary_key :name
194
194
  c.unrestrict_primary_key
195
- c.use_after_commit_rollback = false
196
195
  @db.transaction(:prepare=>'XYZ'){c.create(:name => '1'); c.create(:name => '2').destroy}
197
196
  @db.commit_prepared_transaction('XYZ')
198
197
  @d.select_order_map(:name).must_equal ['1']
@@ -315,57 +314,6 @@ describe "Database transactions" do
315
314
  end
316
315
  end
317
316
 
318
- if (! defined?(RUBY_ENGINE) or RUBY_ENGINE == 'ruby') and RUBY_VERSION < '1.9'
319
- describe "Database transactions and Thread#kill" do
320
- before do
321
- @db = DB
322
- @db.create_table!(:items, :engine=>'InnoDB'){String :name; Integer :value}
323
- @d = @db[:items]
324
- end
325
- after do
326
- @db.drop_table?(:items)
327
- end
328
-
329
- it "should handle transactions inside threads" do
330
- q = Queue.new
331
- q1 = Queue.new
332
- t = Thread.new do
333
- @db.transaction do
334
- @d.insert(:name => 'abc', :value => 1)
335
- q1.push nil
336
- q.pop
337
- @d.insert(:name => 'def', :value => 2)
338
- end
339
- end
340
- q1.pop
341
- t.kill
342
- @d.count.must_equal 0
343
- end
344
-
345
- if DB.supports_savepoints?
346
- it "should handle transactions with savepoints inside threads" do
347
- q = Queue.new
348
- q1 = Queue.new
349
- t = Thread.new do
350
- @db.transaction do
351
- @d.insert(:name => 'abc', :value => 1)
352
- @db.transaction(:savepoint=>true) do
353
- @d.insert(:name => 'def', :value => 2)
354
- q1.push nil
355
- q.pop
356
- @d.insert(:name => 'ghi', :value => 3)
357
- end
358
- @d.insert(:name => 'jkl', :value => 4)
359
- end
360
- end
361
- q1.pop
362
- t.kill
363
- @d.count.must_equal 0
364
- end
365
- end
366
- end
367
- end
368
-
369
317
  describe "Database transaction retrying" do
370
318
  before(:all) do
371
319
  @db = DB
@@ -379,7 +327,7 @@ describe "Database transaction retrying" do
379
327
  @db.drop_table?(:items)
380
328
  end
381
329
 
382
- cspecify "should be supported using the :retry_on option", [:db2] do
330
+ it "should be supported using the :retry_on option" do
383
331
  @d.insert('b')
384
332
  @d.insert('c')
385
333
  s = 'a'
@@ -390,7 +338,7 @@ describe "Database transaction retrying" do
390
338
  @d.select_order_map(:a).must_equal %w'b c d'
391
339
  end
392
340
 
393
- cspecify "should limit number of retries via the :num_retries option", [:db2] do
341
+ it "should limit number of retries via the :num_retries option" do
394
342
  @d.insert('b')
395
343
  @d.insert('c')
396
344
  s = 'a'
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Supported types" do
4
4
  def create_items_table_with_column(name, type, opts={})
@@ -37,13 +37,13 @@ describe "Supported types" do
37
37
  ds.all.must_equal [{:number=>2**34}]
38
38
  end
39
39
 
40
- cspecify "should support generic float type", [:swift, :sqlite] do
40
+ it "should support generic float type" do
41
41
  ds = create_items_table_with_column(:number, Float)
42
42
  ds.insert(:number => 2.1)
43
43
  ds.all.must_equal [{:number=>2.1}]
44
44
  end
45
45
 
46
- cspecify "should support generic numeric type", [:odbc, :mssql], [:swift, :sqlite] do
46
+ cspecify "should support generic numeric type", [:odbc, :mssql] do
47
47
  ds = create_items_table_with_column(:number, Numeric, :size=>[15, 10])
48
48
  ds.insert(:number => BigDecimal.new('2.123456789'))
49
49
  ds.all.must_equal [{:number=>BigDecimal.new('2.123456789')}]
@@ -67,7 +67,7 @@ describe "Supported types" do
67
67
  ds.all.must_equal [{:name=>'Test User'*100}]
68
68
  end
69
69
 
70
- cspecify "should support generic date type", [:do, :sqlite], [:jdbc, :sqlite], [:tinytds], [:jdbc, :mssql], :oracle do
70
+ cspecify "should support generic date type", [:jdbc, :sqlite], [:tinytds], [:jdbc, :mssql], :oracle do
71
71
  ds = create_items_table_with_column(:dat, Date)
72
72
  d = Date.today
73
73
  ds.insert(:dat => d)
@@ -75,7 +75,7 @@ describe "Supported types" do
75
75
  ds.first[:dat].to_s.must_equal d.to_s
76
76
  end
77
77
 
78
- cspecify "should support generic time type", [:do], [:swift], [:odbc], [:jdbc, :mssql], [:jdbc, :sqlite], [:mysql2], [:tinytds], :oracle, [:ado] do
78
+ cspecify "should support generic time type", [:odbc], [:jdbc, :mssql], [:jdbc, :sqlite], [:mysql2], [:tinytds], :oracle, [:ado] do
79
79
  ds = create_items_table_with_column(:tim, Time, :only_time=>true)
80
80
  t = Sequel::SQLTime.now
81
81
  ds.insert(:tim => t)
@@ -89,7 +89,7 @@ describe "Supported types" do
89
89
  v2.must_be_kind_of(Sequel::SQLTime)
90
90
  end
91
91
 
92
- cspecify "should support generic datetime type", [:do, :sqlite], [:jdbc, :sqlite] do
92
+ cspecify "should support generic datetime type", [:jdbc, :sqlite] do
93
93
  ds = create_items_table_with_column(:tim, DateTime)
94
94
  t = DateTime.now
95
95
  ds.insert(:tim => t)
@@ -100,14 +100,14 @@ describe "Supported types" do
100
100
  ds.first[:tim].strftime('%Y%m%d%H%M%S').must_equal t.strftime('%Y%m%d%H%M%S')
101
101
  end
102
102
 
103
- cspecify "should support generic file type", [:do], [:odbc, :mssql], [:mysql2], [:tinytds] do
103
+ cspecify "should support generic file type", [:odbc, :mssql], [:mysql2], [:tinytds] do
104
104
  ds = create_items_table_with_column(:name, File)
105
105
  ds.insert(:name =>Sequel.blob("a\0"*300))
106
106
  ds.all.must_equal [{:name=>Sequel.blob("a\0"*300)}]
107
107
  ds.first[:name].must_be_kind_of(::Sequel::SQL::Blob)
108
108
  end
109
109
 
110
- cspecify "should support generic boolean type", [:do, :sqlite], [:jdbc, :sqlite], [:jdbc, :db2], :oracle do
110
+ cspecify "should support generic boolean type", [:jdbc, :sqlite], [:jdbc, :db2], :oracle do
111
111
  ds = create_items_table_with_column(:number, TrueClass)
112
112
  ds.insert(:number => true)
113
113
  ds.all.must_equal [{:number=>true}]
@@ -116,7 +116,7 @@ describe "Supported types" do
116
116
  ds.all.must_equal [{:number=>true}]
117
117
  end
118
118
 
119
- cspecify "should support generic boolean type with defaults", [:do, :sqlite], [:jdbc, :sqlite], [:jdbc, :db2], :oracle do
119
+ cspecify "should support generic boolean type with defaults", [:jdbc, :sqlite], [:jdbc, :db2], :oracle do
120
120
  ds = create_items_table_with_column(:number, TrueClass, :default=>true)
121
121
  ds.insert
122
122
  ds.all.must_equal [{:number=>true}]
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe Sequel::Model::Associations::AssociationReflection, "#associated_class" do
4
4
  before do
@@ -15,14 +15,34 @@ describe Sequel::Model::Associations::AssociationReflection, "#associated_class"
15
15
  @c.association_reflection(:c).associated_class.must_equal ParParent
16
16
  end
17
17
 
18
+ it "should use the :class value if present" do
19
+ @c.many_to_one :c, :class=>@c
20
+ @c.one_to_many :cs, :class=>@c
21
+ c = @c.association_reflection(:c)
22
+ cs = @c.association_reflection(:cs)
23
+
24
+ c.association_method.must_equal :c
25
+ c.dataset_method.must_equal :c_dataset
26
+ c.setter_method.must_equal :c=
27
+ c._setter_method.must_equal :_c=
28
+
29
+ cs.association_method.must_equal :cs
30
+ cs.dataset_method.must_equal :cs_dataset
31
+ cs.add_method.must_equal :add_c
32
+ cs._add_method.must_equal :_add_c
33
+ cs.remove_method.must_equal :remove_c
34
+ cs._remove_method.must_equal :_remove_c
35
+ cs.remove_all_method.must_equal :remove_all_cs
36
+ cs._remove_all_method.must_equal :_remove_all_cs
37
+ end
38
+
18
39
  it "should have inspect include association class and representation of association definition " do
19
40
  ParParent.many_to_one :c
20
41
  ParParent.association_reflection(:c).inspect.must_equal "#<Sequel::Model::Associations::ManyToOneAssociationReflection ParParent.many_to_one :c>"
21
42
  ParParent.many_to_one :c, :class=>ParParent
22
43
  ParParent.association_reflection(:c).inspect.must_equal "#<Sequel::Model::Associations::ManyToOneAssociationReflection ParParent.many_to_one :c, :class=>ParParent>"
23
44
  ParParent.many_to_one :c, :class=>ParParent, :key=>:c_id
24
- ["#<Sequel::Model::Associations::ManyToOneAssociationReflection ParParent.many_to_one :c, :key=>:c_id, :class=>ParParent>",
25
- "#<Sequel::Model::Associations::ManyToOneAssociationReflection ParParent.many_to_one :c, :class=>ParParent, :key=>:c_id>"].must_include ParParent.association_reflection(:c).inspect
45
+ ParParent.association_reflection(:c).inspect.must_equal "#<Sequel::Model::Associations::ManyToOneAssociationReflection ParParent.many_to_one :c, :key=>:c_id, :class=>ParParent>"
26
46
 
27
47
  @c.one_to_many :foos do |ds| ds end
28
48
  @c.association_reflection(:foos).inspect.must_equal "#<Sequel::Model::Associations::OneToManyAssociationReflection #{@c.to_s}.one_to_many :foos, :block=>#{@c.association_reflection(:foos)[:block].inspect}>"
@@ -286,11 +306,6 @@ describe Sequel::Model::Associations::AssociationReflection do
286
306
  def @c.name() "C" end
287
307
  end
288
308
 
289
- deprecated "#eager_loading_predicate_key should be an alias of predicate_key for backwards compatibility" do
290
- @c.one_to_many :cs, :class=>@c
291
- @c.dataset.literal(@c.association_reflection(:cs).eager_loading_predicate_key).must_equal 'foo.c_id'
292
- end
293
-
294
309
  it "one_to_many #qualified_primary_key should be a qualified version of the primary key" do
295
310
  @c.one_to_many :cs, :class=>@c
296
311
  @c.dataset.literal(@c.association_reflection(:cs).qualified_primary_key).must_equal 'foo.id'
@@ -516,7 +531,7 @@ describe Sequel::Model, " association reflection methods" do
516
531
  c.associate :many_to_one, :parent2, :class => @c1
517
532
  @c1.associations.must_equal [:parent]
518
533
  c.associations.sort_by{|x| x.to_s}.must_equal [:parent, :parent2]
519
- c.instance_methods.map{|x| x.to_s}.must_include('parent')
534
+ c.instance_methods.must_include(:parent)
520
535
  end
521
536
  end
522
537