ibm_db 5.2.0-x86-mingw32 → 5.3.2-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.
- checksums.yaml +4 -4
- data/CHANGES +9 -0
- data/LICENSE +55 -18
- data/ext/Makefile +15 -13
- data/ext/ibm_db.c +62 -57
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +26 -24
- data/ext/ruby_ibm_db_cli.c +1 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +1463 -1279
- data/lib/ibm_db.so +1 -0
- data/lib/mswin32/rb3x/i386/ruby30/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +5 -2
- data/test/activejob/destroy_association_async_test.rb +305 -0
- data/test/activejob/destroy_async_job_not_present_test.rb +31 -0
- data/test/activejob/helper.rb +15 -0
- data/test/assets/schema_dump_5_1.yml +345 -0
- data/test/cases/adapter_prevent_writes_test.rb +334 -0
- data/test/cases/adapter_test.rb +432 -218
- data/test/cases/adapters/mysql2/active_schema_test.rb +85 -75
- data/test/cases/adapters/mysql2/auto_increment_test.rb +34 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +5 -3
- data/test/cases/adapters/mysql2/boolean_test.rb +6 -4
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +26 -24
- data/test/cases/adapters/mysql2/charset_collation_test.rb +20 -17
- data/test/cases/adapters/mysql2/connection_test.rb +48 -50
- data/test/cases/adapters/mysql2/count_deleted_rows_with_lock_test.rb +28 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +23 -19
- data/test/cases/adapters/mysql2/enum_test.rb +32 -11
- data/test/cases/adapters/mysql2/explain_test.rb +13 -11
- data/test/cases/adapters/mysql2/json_test.rb +17 -188
- data/test/cases/adapters/mysql2/mysql2_adapter_prevent_writes_test.rb +208 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +183 -28
- data/test/cases/adapters/mysql2/nested_deadlock_test.rb +75 -0
- data/test/cases/adapters/mysql2/optimizer_hints_test.rb +69 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +26 -21
- data/test/cases/adapters/mysql2/schema_test.rb +24 -22
- data/test/cases/adapters/mysql2/set_test.rb +32 -0
- data/test/cases/adapters/mysql2/sp_test.rb +10 -8
- data/test/cases/adapters/mysql2/sql_types_test.rb +8 -6
- data/test/cases/adapters/mysql2/table_options_test.rb +93 -10
- data/test/cases/adapters/mysql2/transaction_test.rb +151 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +11 -9
- data/test/cases/adapters/mysql2/virtual_column_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +40 -25
- data/test/cases/adapters/postgresql/array_test.rb +118 -63
- data/test/cases/adapters/postgresql/bit_string_test.rb +12 -10
- data/test/cases/adapters/postgresql/bytea_test.rb +26 -25
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +10 -9
- data/test/cases/adapters/postgresql/change_schema_test.rb +7 -5
- data/test/cases/adapters/postgresql/cidr_test.rb +2 -0
- data/test/cases/adapters/postgresql/citext_test.rb +58 -58
- data/test/cases/adapters/postgresql/collation_test.rb +17 -15
- data/test/cases/adapters/postgresql/composite_test.rb +25 -23
- data/test/cases/adapters/postgresql/connection_test.rb +73 -85
- data/test/cases/adapters/postgresql/create_unlogged_tables_test.rb +74 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +19 -22
- data/test/cases/adapters/postgresql/date_test.rb +42 -0
- data/test/cases/adapters/postgresql/domain_test.rb +9 -7
- data/test/cases/adapters/postgresql/enum_test.rb +12 -10
- data/test/cases/adapters/postgresql/explain_test.rb +10 -8
- data/test/cases/adapters/postgresql/extension_migration_test.rb +13 -12
- data/test/cases/adapters/postgresql/foreign_table_test.rb +109 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +8 -6
- data/test/cases/adapters/postgresql/geometric_test.rb +57 -63
- data/test/cases/adapters/postgresql/hstore_test.rb +288 -280
- data/test/cases/adapters/postgresql/infinity_test.rb +54 -15
- data/test/cases/adapters/postgresql/integer_test.rb +2 -0
- data/test/cases/adapters/postgresql/interval_test.rb +99 -0
- data/test/cases/adapters/postgresql/json_test.rb +16 -201
- data/test/cases/adapters/postgresql/ltree_test.rb +14 -16
- data/test/cases/adapters/postgresql/money_test.rb +47 -16
- data/test/cases/adapters/postgresql/network_test.rb +36 -28
- data/test/cases/adapters/postgresql/numbers_test.rb +7 -5
- data/test/cases/adapters/postgresql/optimizer_hints_test.rb +71 -0
- data/test/cases/adapters/postgresql/partitions_test.rb +22 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_prevent_writes_test.rb +205 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +178 -136
- data/test/cases/adapters/postgresql/prepared_statements_disabled_test.rb +27 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +12 -6
- data/test/cases/adapters/postgresql/range_test.rb +406 -292
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +16 -15
- data/test/cases/adapters/postgresql/rename_table_test.rb +9 -8
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +14 -23
- data/test/cases/adapters/postgresql/schema_test.rb +207 -91
- data/test/cases/adapters/postgresql/serial_test.rb +9 -7
- data/test/cases/adapters/postgresql/statement_pool_test.rb +26 -6
- data/test/cases/adapters/postgresql/timestamp_test.rb +17 -15
- data/test/cases/adapters/postgresql/transaction_nested_test.rb +114 -0
- data/test/cases/adapters/postgresql/transaction_test.rb +189 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +12 -10
- data/test/cases/adapters/postgresql/utils_test.rb +11 -9
- data/test/cases/adapters/postgresql/uuid_test.rb +226 -109
- data/test/cases/adapters/postgresql/xml_test.rb +10 -14
- data/test/cases/adapters/sqlite3/collation_test.rb +26 -15
- data/test/cases/adapters/sqlite3/copy_table_test.rb +31 -28
- data/test/cases/adapters/sqlite3/explain_test.rb +13 -11
- data/test/cases/adapters/sqlite3/json_test.rb +29 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +35 -57
- data/test/cases/adapters/sqlite3/sqlite3_adapter_prevent_writes_test.rb +186 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +318 -131
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +11 -11
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +7 -6
- data/test/cases/adapters/sqlite3/transaction_test.rb +123 -0
- data/test/cases/aggregations_test.rb +14 -12
- data/test/cases/annotate_test.rb +46 -0
- data/test/cases/ar_schema_test.rb +153 -86
- data/test/cases/arel/attributes/attribute_test.rb +1145 -0
- data/test/cases/arel/attributes/math_test.rb +83 -0
- data/test/cases/arel/attributes_test.rb +27 -0
- data/test/cases/arel/collectors/bind_test.rb +40 -0
- data/test/cases/arel/collectors/composite_test.rb +47 -0
- data/test/cases/arel/collectors/sql_string_test.rb +41 -0
- data/test/cases/arel/collectors/substitute_bind_collector_test.rb +48 -0
- data/test/cases/arel/crud_test.rb +65 -0
- data/test/cases/arel/delete_manager_test.rb +53 -0
- data/test/cases/arel/factory_methods_test.rb +46 -0
- data/test/cases/arel/helper.rb +45 -0
- data/test/cases/arel/insert_manager_test.rb +241 -0
- data/test/cases/arel/nodes/and_test.rb +30 -0
- data/test/cases/arel/nodes/as_test.rb +36 -0
- data/test/cases/arel/nodes/ascending_test.rb +46 -0
- data/test/cases/arel/nodes/bin_test.rb +35 -0
- data/test/cases/arel/nodes/binary_test.rb +29 -0
- data/test/cases/arel/nodes/bind_param_test.rb +22 -0
- data/test/cases/arel/nodes/case_test.rb +96 -0
- data/test/cases/arel/nodes/casted_test.rb +18 -0
- data/test/cases/arel/nodes/comment_test.rb +22 -0
- data/test/cases/arel/nodes/count_test.rb +35 -0
- data/test/cases/arel/nodes/delete_statement_test.rb +36 -0
- data/test/cases/arel/nodes/descending_test.rb +46 -0
- data/test/cases/arel/nodes/distinct_test.rb +21 -0
- data/test/cases/arel/nodes/equality_test.rb +62 -0
- data/test/cases/arel/nodes/extract_test.rb +43 -0
- data/test/cases/arel/nodes/false_test.rb +21 -0
- data/test/cases/arel/nodes/grouping_test.rb +26 -0
- data/test/cases/arel/nodes/infix_operation_test.rb +42 -0
- data/test/cases/arel/nodes/insert_statement_test.rb +44 -0
- data/test/cases/arel/nodes/named_function_test.rb +48 -0
- data/test/cases/arel/nodes/node_test.rb +22 -0
- data/test/cases/arel/nodes/not_test.rb +31 -0
- data/test/cases/arel/nodes/or_test.rb +36 -0
- data/test/cases/arel/nodes/over_test.rb +69 -0
- data/test/cases/arel/nodes/select_core_test.rb +79 -0
- data/test/cases/arel/nodes/select_statement_test.rb +51 -0
- data/test/cases/arel/nodes/sql_literal_test.rb +75 -0
- data/test/cases/arel/nodes/sum_test.rb +35 -0
- data/test/cases/arel/nodes/table_alias_test.rb +29 -0
- data/test/cases/arel/nodes/true_test.rb +21 -0
- data/test/cases/arel/nodes/unary_operation_test.rb +41 -0
- data/test/cases/arel/nodes/update_statement_test.rb +60 -0
- data/test/cases/arel/nodes/window_test.rb +81 -0
- data/test/cases/arel/nodes_test.rb +34 -0
- data/test/cases/arel/select_manager_test.rb +1238 -0
- data/test/cases/arel/support/fake_record.rb +135 -0
- data/test/cases/arel/table_test.rb +216 -0
- data/test/cases/arel/update_manager_test.rb +126 -0
- data/test/cases/arel/visitors/dispatch_contamination_test.rb +78 -0
- data/test/cases/arel/visitors/dot_test.rb +90 -0
- data/test/cases/arel/visitors/mysql_test.rb +157 -0
- data/test/cases/arel/visitors/postgres_test.rb +366 -0
- data/test/cases/arel/visitors/sqlite_test.rb +75 -0
- data/test/cases/arel/visitors/to_sql_test.rb +750 -0
- data/test/cases/associations/belongs_to_associations_test.rb +510 -158
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +4 -2
- data/test/cases/associations/callbacks_test.rb +56 -38
- data/test/cases/associations/cascaded_eager_loading_test.rb +118 -61
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +138 -18
- data/test/cases/associations/eager_load_nested_include_test.rb +38 -37
- data/test/cases/associations/eager_singularization_test.rb +21 -21
- data/test/cases/associations/eager_test.rb +559 -415
- data/test/cases/associations/extension_test.rb +18 -12
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +234 -213
- data/test/cases/associations/has_many_associations_test.rb +1038 -465
- data/test/cases/associations/has_many_through_associations_test.rb +558 -249
- data/test/cases/associations/has_one_associations_test.rb +294 -129
- data/test/cases/associations/has_one_through_associations_test.rb +121 -75
- data/test/cases/associations/inner_join_association_test.rb +114 -38
- data/test/cases/associations/inverse_associations_test.rb +606 -398
- data/test/cases/associations/join_model_test.rb +158 -148
- data/test/cases/associations/left_outer_join_association_test.rb +59 -24
- data/test/cases/associations/nested_through_associations_test.rb +166 -109
- data/test/cases/associations/required_test.rb +35 -10
- data/test/cases/associations_test.rb +241 -110
- data/test/cases/attribute_methods/read_test.rb +11 -11
- data/test/cases/attribute_methods_test.rb +413 -298
- data/test/cases/attributes_test.rb +145 -27
- data/test/cases/autosave_association_test.rb +681 -436
- data/test/cases/base_prevent_writes_test.rb +229 -0
- data/test/cases/base_test.rb +599 -542
- data/test/cases/batches_test.rb +288 -82
- data/test/cases/binary_test.rb +26 -31
- data/test/cases/bind_parameter_test.rb +194 -21
- data/test/cases/boolean_test.rb +52 -0
- data/test/cases/cache_key_test.rb +110 -5
- data/test/cases/calculations_test.rb +740 -177
- data/test/cases/callbacks_test.rb +74 -207
- data/test/cases/clone_test.rb +15 -10
- data/test/cases/coders/json_test.rb +2 -0
- data/test/cases/coders/yaml_column_test.rb +16 -13
- data/test/cases/collection_cache_key_test.rb +177 -20
- data/test/cases/column_alias_test.rb +9 -7
- data/test/cases/column_definition_test.rb +10 -68
- data/test/cases/comment_test.rb +166 -107
- data/test/cases/connection_adapters/adapter_leasing_test.rb +14 -10
- data/test/cases/connection_adapters/connection_handler_test.rb +358 -51
- data/test/cases/connection_adapters/connection_handlers_multi_db_test.rb +400 -0
- data/test/cases/connection_adapters/connection_handlers_multi_pool_config_test.rb +103 -0
- data/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +499 -0
- data/test/cases/connection_adapters/connection_swapping_nested_test.rb +457 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_multi_db_test.rb +486 -0
- data/test/cases/connection_adapters/legacy_connection_handlers_sharding_db_test.rb +586 -0
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +319 -138
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +62 -50
- data/test/cases/connection_adapters/schema_cache_test.rb +259 -26
- data/test/cases/connection_adapters/type_lookup_test.rb +96 -95
- data/test/cases/connection_management_test.rb +13 -11
- data/test/cases/connection_pool_test.rb +316 -83
- data/test/cases/core_test.rb +82 -58
- data/test/cases/counter_cache_test.rb +204 -50
- data/test/cases/custom_locking_test.rb +5 -3
- data/test/cases/database_configurations/hash_config_test.rb +74 -0
- data/test/cases/database_configurations/resolver_test.rb +150 -0
- data/test/cases/database_configurations_test.rb +145 -0
- data/test/cases/database_selector_test.rb +296 -0
- data/test/cases/database_statements_test.rb +18 -16
- data/test/cases/date_test.rb +8 -16
- data/test/cases/date_time_precision_test.rb +100 -78
- data/test/cases/date_time_test.rb +23 -8
- data/test/cases/defaults_test.rb +106 -71
- data/test/cases/delegated_type_test.rb +57 -0
- data/test/cases/dirty_test.rb +419 -223
- data/test/cases/disconnected_test.rb +6 -6
- data/test/cases/dup_test.rb +54 -27
- data/test/cases/enum_test.rb +461 -82
- data/test/cases/errors_test.rb +7 -7
- data/test/cases/explain_subscriber_test.rb +17 -15
- data/test/cases/explain_test.rb +11 -19
- data/test/cases/filter_attributes_test.rb +153 -0
- data/test/cases/finder_respond_to_test.rb +14 -14
- data/test/cases/finder_test.rb +669 -287
- data/test/cases/fixture_set/file_test.rb +34 -38
- data/test/cases/fixtures_test.rb +833 -176
- data/test/cases/forbidden_attributes_protection_test.rb +32 -67
- data/test/cases/habtm_destroy_order_test.rb +25 -25
- data/test/cases/helper.rb +78 -49
- data/test/cases/hot_compatibility_test.rb +33 -32
- data/test/cases/i18n_test.rb +18 -17
- data/test/cases/inheritance_test.rb +180 -115
- data/test/cases/insert_all_test.rb +489 -0
- data/test/cases/instrumentation_test.rb +101 -0
- data/test/cases/integration_test.rb +119 -31
- data/test/cases/invalid_connection_test.rb +18 -16
- data/test/cases/invertible_migration_test.rb +183 -43
- data/test/cases/json_attribute_test.rb +35 -0
- data/test/cases/json_serialization_test.rb +57 -58
- data/test/cases/json_shared_test_cases.rb +290 -0
- data/test/cases/locking_test.rb +413 -119
- data/test/cases/log_subscriber_test.rb +68 -26
- data/test/cases/marshal_serialization_test.rb +39 -0
- data/test/cases/migration/change_schema_test.rb +118 -72
- data/test/cases/migration/change_table_test.rb +138 -30
- data/test/cases/migration/check_constraint_test.rb +162 -0
- data/test/cases/migration/column_attributes_test.rb +45 -35
- data/test/cases/migration/column_positioning_test.rb +18 -6
- data/test/cases/migration/columns_test.rb +93 -77
- data/test/cases/migration/command_recorder_test.rb +121 -34
- data/test/cases/migration/compatibility_test.rb +578 -23
- data/test/cases/migration/create_join_table_test.rb +35 -25
- data/test/cases/migration/foreign_key_test.rb +503 -284
- data/test/cases/migration/helper.rb +4 -3
- data/test/cases/migration/index_test.rb +119 -70
- data/test/cases/migration/logger_test.rb +9 -6
- data/test/cases/migration/pending_migrations_test.rb +88 -34
- data/test/cases/migration/references_foreign_key_test.rb +164 -150
- data/test/cases/migration/references_index_test.rb +38 -19
- data/test/cases/migration/references_statements_test.rb +15 -14
- data/test/cases/migration/rename_table_test.rb +53 -30
- data/test/cases/migration_test.rb +637 -269
- data/test/cases/migrator_test.rb +191 -135
- data/test/cases/mixin_test.rb +7 -11
- data/test/cases/modules_test.rb +36 -34
- data/test/cases/multi_db_migrator_test.rb +223 -0
- data/test/cases/multiparameter_attributes_test.rb +60 -33
- data/test/cases/multiple_db_test.rb +16 -22
- data/test/cases/nested_attributes_test.rb +341 -320
- data/test/cases/nested_attributes_with_callbacks_test.rb +26 -24
- data/test/cases/null_relation_test.rb +84 -0
- data/test/cases/numeric_data_test.rb +93 -0
- data/test/cases/persistence_test.rb +361 -269
- data/test/cases/pooled_connections_test.rb +18 -26
- data/test/cases/prepared_statement_status_test.rb +48 -0
- data/test/cases/primary_keys_test.rb +210 -104
- data/test/cases/query_cache_test.rb +610 -141
- data/test/cases/quoting_test.rb +132 -31
- data/test/cases/readonly_test.rb +49 -48
- data/test/cases/reaper_test.rb +146 -32
- data/test/cases/reflection_test.rb +167 -156
- data/test/cases/relation/delegation_test.rb +49 -36
- data/test/cases/relation/delete_all_test.rb +117 -0
- data/test/cases/relation/merging_test.rb +319 -42
- data/test/cases/relation/mutation_test.rb +55 -93
- data/test/cases/relation/or_test.rb +129 -29
- data/test/cases/relation/predicate_builder_test.rb +21 -6
- data/test/cases/relation/record_fetch_warning_test.rb +5 -3
- data/test/cases/relation/select_test.rb +67 -0
- data/test/cases/relation/update_all_test.rb +317 -0
- data/test/cases/relation/where_chain_test.rb +68 -32
- data/test/cases/relation/where_clause_test.rb +136 -61
- data/test/cases/relation/where_test.rb +155 -48
- data/test/cases/relation_test.rb +266 -112
- data/test/cases/relations_test.rb +969 -744
- data/test/cases/reload_models_test.rb +13 -9
- data/test/cases/reserved_word_test.rb +141 -0
- data/test/cases/result_test.rb +68 -17
- data/test/cases/sanitize_test.rb +87 -71
- data/test/cases/schema_dumper_test.rb +221 -128
- data/test/cases/schema_loading_test.rb +3 -2
- data/test/cases/scoping/default_scoping_test.rb +185 -144
- data/test/cases/scoping/named_scoping_test.rb +177 -89
- data/test/cases/scoping/relation_scoping_test.rb +197 -75
- data/test/cases/secure_token_test.rb +18 -3
- data/test/cases/serialization_test.rb +30 -28
- data/test/cases/serialized_attribute_test.rb +133 -42
- data/test/cases/signed_id_test.rb +168 -0
- data/test/cases/statement_cache_test.rb +41 -24
- data/test/cases/statement_invalid_test.rb +42 -0
- data/test/cases/store_test.rb +180 -55
- data/test/cases/strict_loading_test.rb +473 -0
- data/test/cases/suppressor_test.rb +26 -12
- data/test/cases/tasks/database_tasks_test.rb +1258 -194
- data/test/cases/tasks/mysql_rake_test.rb +370 -298
- data/test/cases/tasks/postgresql_rake_test.rb +481 -251
- data/test/cases/tasks/sqlite_rake_test.rb +225 -178
- data/test/cases/test_case.rb +51 -40
- data/test/cases/test_databases_test.rb +79 -0
- data/test/cases/test_fixtures_test.rb +79 -19
- data/test/cases/time_precision_test.rb +98 -76
- data/test/cases/timestamp_test.rb +102 -99
- data/test/cases/touch_later_test.rb +12 -10
- data/test/cases/transaction_callbacks_test.rb +344 -90
- data/test/cases/transaction_isolation_test.rb +12 -12
- data/test/cases/transactions_test.rb +612 -162
- data/test/cases/type/adapter_specific_registry_test.rb +14 -2
- data/test/cases/type/date_time_test.rb +4 -2
- data/test/cases/type/integer_test.rb +4 -2
- data/test/cases/type/string_test.rb +10 -8
- data/test/cases/type/time_test.rb +28 -0
- data/test/cases/type/type_map_test.rb +29 -28
- data/test/cases/type/unsigned_integer_test.rb +19 -0
- data/test/cases/type_test.rb +2 -0
- data/test/cases/types_test.rb +3 -1
- data/test/cases/unconnected_test.rb +14 -1
- data/test/cases/unsafe_raw_sql_test.rb +274 -0
- data/test/cases/validations/absence_validation_test.rb +19 -17
- data/test/cases/validations/association_validation_test.rb +30 -28
- data/test/cases/validations/i18n_generate_message_validation_test.rb +34 -16
- data/test/cases/validations/i18n_validation_test.rb +22 -21
- data/test/cases/validations/length_validation_test.rb +34 -33
- data/test/cases/validations/numericality_validation_test.rb +181 -0
- data/test/cases/validations/presence_validation_test.rb +21 -19
- data/test/cases/validations/uniqueness_validation_test.rb +156 -86
- data/test/cases/validations_repair_helper.rb +2 -0
- data/test/cases/validations_test.rb +61 -26
- data/test/cases/view_test.rb +122 -116
- data/test/cases/yaml_serialization_test.rb +79 -34
- data/test/config.example.yml +19 -19
- data/test/config.rb +3 -1
- data/test/config.yml +16 -6
- data/test/fixtures/all/namespaced/accounts.yml +2 -0
- data/test/fixtures/author_addresses.yml +1 -8
- data/test/fixtures/authors.yml +1 -7
- data/test/fixtures/binaries.yml +4 -0
- data/test/fixtures/books.yml +9 -2
- data/test/fixtures/categories_posts.yml +3 -0
- data/test/fixtures/citations.yml +5 -0
- data/test/fixtures/comments.yml +7 -0
- data/test/fixtures/companies.yml +5 -0
- data/test/fixtures/computers.yml +2 -0
- data/test/fixtures/customers.yml +10 -1
- data/test/fixtures/developers.yml +1 -1
- data/test/fixtures/essays.yml +10 -0
- data/test/fixtures/faces.yml +3 -3
- data/test/fixtures/humans.yml +5 -0
- data/test/fixtures/interests.yml +7 -7
- data/test/fixtures/memberships.yml +7 -0
- data/test/fixtures/minimalistics.yml +3 -0
- data/test/fixtures/mixed_case_monkeys.yml +2 -2
- data/test/fixtures/naked/yml/courses_with_invalid_key.yml +3 -0
- data/test/fixtures/naked/yml/parrots.yml +1 -0
- data/test/fixtures/other_books.yml +26 -0
- data/test/fixtures/other_posts.yml +1 -0
- data/test/fixtures/parrots.yml +7 -1
- data/test/fixtures/pirates.yml +3 -0
- data/test/fixtures/posts.yml +11 -3
- data/test/fixtures/readers.yml +6 -0
- data/test/fixtures/reserved_words/values.yml +2 -2
- data/test/fixtures/sponsors.yml +3 -0
- data/test/fixtures/strict_zines.yml +2 -0
- data/test/fixtures/subscribers.yml +1 -1
- data/test/fixtures/tasks.yml +1 -1
- data/test/fixtures/warehouse-things.yml +3 -0
- data/test/migrations/10_urban/9_add_expressions.rb +2 -0
- data/test/migrations/decimal/1_give_me_big_numbers.rb +6 -4
- data/test/migrations/magic/1_currencies_have_symbols.rb +3 -2
- data/test/migrations/missing/1000_people_have_middle_names.rb +2 -0
- data/test/migrations/missing/1_people_have_last_names.rb +2 -0
- data/test/migrations/missing/3_we_need_reminders.rb +2 -0
- data/test/migrations/missing/4_innocent_jointable.rb +3 -1
- data/test/migrations/rename/1_we_need_things.rb +2 -0
- data/test/migrations/rename/2_rename_things.rb +2 -0
- data/test/migrations/to_copy/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy/2_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy2/1_create_articles.rb +2 -0
- data/test/migrations/to_copy2/2_create_comments.rb +3 -1
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +3 -1
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +3 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +2 -0
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +2 -0
- data/test/migrations/valid/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +3 -1
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +2 -0
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +3 -1
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +2 -0
- data/test/models/account.rb +46 -0
- data/test/models/admin/account.rb +3 -1
- data/test/models/admin/randomly_named_c1.rb +2 -0
- data/test/models/admin/user.rb +16 -8
- data/test/models/admin.rb +4 -2
- data/test/models/aircraft.rb +3 -1
- data/test/models/arunit2_model.rb +2 -0
- data/test/models/author.rb +153 -102
- data/test/models/auto_id.rb +2 -0
- data/test/models/autoloadable/extra_firm.rb +2 -0
- data/test/models/binary.rb +3 -1
- data/test/models/binary_field.rb +6 -0
- data/test/models/bird.rb +13 -1
- data/test/models/book.rb +14 -4
- data/test/models/book_destroy_async.rb +24 -0
- data/test/models/boolean.rb +5 -0
- data/test/models/bulb.rb +13 -4
- data/test/models/cake_designer.rb +2 -0
- data/test/models/car.rb +17 -10
- data/test/models/carrier.rb +2 -0
- data/test/models/cart.rb +5 -0
- data/test/models/cat.rb +2 -0
- data/test/models/categorization.rb +8 -6
- data/test/models/category.rb +28 -16
- data/test/models/chef.rb +2 -0
- data/test/models/citation.rb +5 -1
- data/test/models/club.rb +13 -10
- data/test/models/college.rb +4 -2
- data/test/models/column.rb +2 -0
- data/test/models/column_name.rb +2 -0
- data/test/models/comment.rb +32 -10
- data/test/models/company.rb +102 -106
- data/test/models/company_in_module.rb +27 -26
- data/test/models/computer.rb +3 -1
- data/test/models/contact.rb +15 -13
- data/test/models/content.rb +5 -3
- data/test/models/contract.rb +21 -3
- data/test/models/country.rb +2 -4
- data/test/models/course.rb +3 -1
- data/test/models/customer.rb +10 -8
- data/test/models/customer_carrier.rb +2 -0
- data/test/models/dashboard.rb +2 -0
- data/test/models/default.rb +2 -0
- data/test/models/department.rb +2 -0
- data/test/models/destroy_async_parent.rb +15 -0
- data/test/models/destroy_async_parent_soft_delete.rb +20 -0
- data/test/models/developer.rb +152 -85
- data/test/models/dl_keyed_belongs_to.rb +13 -0
- data/test/models/dl_keyed_belongs_to_soft_delete.rb +19 -0
- data/test/models/dl_keyed_has_many.rb +5 -0
- data/test/models/dl_keyed_has_many_through.rb +5 -0
- data/test/models/dl_keyed_has_one.rb +5 -0
- data/test/models/dl_keyed_join.rb +10 -0
- data/test/models/dog.rb +2 -0
- data/test/models/dog_lover.rb +2 -0
- data/test/models/doubloon.rb +3 -1
- data/test/models/drink_designer.rb +17 -0
- data/test/models/edge.rb +4 -2
- data/test/models/electron.rb +2 -0
- data/test/models/engine.rb +3 -2
- data/test/models/entrant.rb +2 -0
- data/test/models/entry.rb +5 -0
- data/test/models/essay.rb +6 -3
- data/test/models/essay_destroy_async.rb +12 -0
- data/test/models/event.rb +3 -1
- data/test/models/eye.rb +5 -3
- data/test/models/face.rb +14 -6
- data/test/models/family.rb +6 -0
- data/test/models/family_tree.rb +6 -0
- data/test/models/friendship.rb +5 -3
- data/test/models/frog.rb +8 -0
- data/test/models/guid.rb +3 -1
- data/test/models/guitar.rb +2 -0
- data/test/models/hotel.rb +5 -3
- data/test/models/human.rb +39 -0
- data/test/models/image.rb +3 -1
- data/test/models/interest.rb +14 -3
- data/test/models/invoice.rb +4 -2
- data/test/models/item.rb +3 -1
- data/test/models/job.rb +5 -3
- data/test/models/joke.rb +4 -2
- data/test/models/keyboard.rb +3 -1
- data/test/models/legacy_thing.rb +2 -0
- data/test/models/lesson.rb +2 -0
- data/test/models/line_item.rb +3 -1
- data/test/models/liquid.rb +2 -0
- data/test/models/matey.rb +3 -1
- data/test/models/measurement.rb +4 -0
- data/test/models/member.rb +23 -20
- data/test/models/member_detail.rb +3 -0
- data/test/models/member_type.rb +2 -0
- data/test/models/membership.rb +4 -1
- data/test/models/mentor.rb +3 -1
- data/test/models/message.rb +5 -0
- data/test/models/minimalistic.rb +2 -0
- data/test/models/minivan.rb +3 -2
- data/test/models/mixed_case_monkey.rb +3 -1
- data/test/models/molecule.rb +2 -0
- data/test/models/mouse.rb +6 -0
- data/test/models/movie.rb +2 -0
- data/test/models/node.rb +4 -2
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +2 -0
- data/test/models/numeric_data.rb +12 -0
- data/test/models/order.rb +4 -2
- data/test/models/organization.rb +9 -7
- data/test/models/other_dog.rb +3 -1
- data/test/models/owner.rb +6 -4
- data/test/models/parrot.rb +12 -4
- data/test/models/person.rb +59 -54
- data/test/models/personal_legacy_thing.rb +3 -1
- data/test/models/pet.rb +4 -2
- data/test/models/pet_treasure.rb +2 -0
- data/test/models/pirate.rb +67 -43
- data/test/models/possession.rb +3 -1
- data/test/models/post.rb +184 -86
- data/test/models/price_estimate.rb +11 -1
- data/test/models/professor.rb +3 -1
- data/test/models/project.rb +14 -12
- data/test/models/publisher/article.rb +2 -0
- data/test/models/publisher/magazine.rb +2 -0
- data/test/models/publisher.rb +2 -0
- data/test/models/randomly_named_c1.rb +2 -0
- data/test/models/rating.rb +5 -1
- data/test/models/reader.rb +7 -5
- data/test/models/recipe.rb +2 -0
- data/test/models/record.rb +2 -0
- data/test/models/reference.rb +6 -3
- data/test/models/reply.rb +39 -21
- data/test/models/room.rb +6 -0
- data/test/models/section.rb +6 -0
- data/test/models/seminar.rb +6 -0
- data/test/models/session.rb +6 -0
- data/test/models/ship.rb +12 -9
- data/test/models/ship_part.rb +5 -3
- data/test/models/shop.rb +4 -2
- data/test/models/shop_account.rb +2 -0
- data/test/models/speedometer.rb +2 -0
- data/test/models/sponsor.rb +8 -5
- data/test/models/squeak.rb +6 -0
- data/test/models/strict_zine.rb +7 -0
- data/test/models/string_key_object.rb +2 -0
- data/test/models/student.rb +2 -0
- data/test/models/subscriber.rb +4 -2
- data/test/models/subscription.rb +5 -1
- data/test/models/tag.rb +6 -3
- data/test/models/tagging.rb +13 -6
- data/test/models/task.rb +2 -0
- data/test/models/topic.rb +54 -19
- data/test/models/toy.rb +4 -0
- data/test/models/traffic_light.rb +2 -0
- data/test/models/treasure.rb +5 -3
- data/test/models/treaty.rb +2 -4
- data/test/models/tree.rb +2 -0
- data/test/models/tuning_peg.rb +2 -0
- data/test/models/tyre.rb +2 -0
- data/test/models/user.rb +12 -4
- data/test/models/uuid_child.rb +2 -0
- data/test/models/uuid_item.rb +2 -0
- data/test/models/uuid_parent.rb +2 -0
- data/test/models/vegetables.rb +12 -3
- data/test/models/vertex.rb +6 -4
- data/test/models/warehouse_thing.rb +2 -0
- data/test/models/wheel.rb +3 -1
- data/test/models/without_table.rb +3 -1
- data/test/models/zine.rb +3 -1
- data/test/schema/mysql2_specific_schema.rb +49 -35
- data/test/schema/oracle_specific_schema.rb +13 -15
- data/test/schema/postgresql_specific_schema.rb +51 -40
- data/test/schema/schema.rb +334 -154
- data/test/schema/sqlite_specific_schema.rb +9 -16
- data/test/support/config.rb +26 -26
- data/test/support/connection.rb +14 -8
- data/test/support/connection_helper.rb +3 -1
- data/test/support/ddl_helper.rb +2 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/IBM_DB/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/Mysql2/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/PostgreSQL/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/SQLite/rails_6_0_topic_associations.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump +0 -0
- data/test/support/marshal_compatibility_fixtures/legacy_relation.dump +0 -0
- data/test/support/schema_dumping_helper.rb +2 -0
- data/test/support/stubs/strong_parameters.rb +40 -0
- data/test/support/yaml_compatibility_fixtures/rails_v1_mysql.yml +206 -0
- data/test/support/yaml_compatibility_fixtures/rails_v2.yml +55 -0
- metadata +190 -14
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "cases/helper"
|
2
4
|
require "models/binary"
|
3
5
|
require "models/developer"
|
@@ -21,6 +23,7 @@ class LogSubscriberTest < ActiveRecord::TestCase
|
|
21
23
|
TRANSACTION: REGEXP_CYAN,
|
22
24
|
OTHER: REGEXP_MAGENTA
|
23
25
|
}
|
26
|
+
Event = Struct.new(:duration, :payload)
|
24
27
|
|
25
28
|
class TestDebugLogSubscriber < ActiveRecord::LogSubscriber
|
26
29
|
attr_reader :debugs
|
@@ -30,8 +33,9 @@ class LogSubscriberTest < ActiveRecord::TestCase
|
|
30
33
|
super
|
31
34
|
end
|
32
35
|
|
33
|
-
def debug
|
34
|
-
@debugs <<
|
36
|
+
def debug(progname = nil, &block)
|
37
|
+
@debugs << progname
|
38
|
+
super
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
@@ -40,6 +44,7 @@ class LogSubscriberTest < ActiveRecord::TestCase
|
|
40
44
|
def setup
|
41
45
|
@old_logger = ActiveRecord::Base.logger
|
42
46
|
Developer.primary_key
|
47
|
+
ActiveRecord::Base.connection.materialize_transactions
|
43
48
|
super
|
44
49
|
ActiveRecord::LogSubscriber.attach_to(:active_record)
|
45
50
|
end
|
@@ -55,25 +60,22 @@ class LogSubscriberTest < ActiveRecord::TestCase
|
|
55
60
|
end
|
56
61
|
|
57
62
|
def test_schema_statements_are_ignored
|
58
|
-
event = Struct.new(:duration, :payload)
|
59
|
-
|
60
63
|
logger = TestDebugLogSubscriber.new
|
61
64
|
assert_equal 0, logger.debugs.length
|
62
65
|
|
63
|
-
logger.sql(
|
66
|
+
logger.sql(Event.new(0.9, sql: "hi mom!"))
|
64
67
|
assert_equal 1, logger.debugs.length
|
65
68
|
|
66
|
-
logger.sql(
|
69
|
+
logger.sql(Event.new(0.9, sql: "hi mom!", name: "foo"))
|
67
70
|
assert_equal 2, logger.debugs.length
|
68
71
|
|
69
|
-
logger.sql(
|
72
|
+
logger.sql(Event.new(0.9, sql: "hi mom!", name: "SCHEMA"))
|
70
73
|
assert_equal 2, logger.debugs.length
|
71
74
|
end
|
72
75
|
|
73
76
|
def test_sql_statements_are_not_squeezed
|
74
|
-
event = Struct.new(:duration, :payload)
|
75
77
|
logger = TestDebugLogSubscriber.new
|
76
|
-
logger.sql(
|
78
|
+
logger.sql(Event.new(0.9, sql: "ruby rails"))
|
77
79
|
assert_match(/ruby rails/, logger.debugs.first)
|
78
80
|
end
|
79
81
|
|
@@ -86,56 +88,61 @@ class LogSubscriberTest < ActiveRecord::TestCase
|
|
86
88
|
end
|
87
89
|
|
88
90
|
def test_basic_query_logging_coloration
|
89
|
-
event = Struct.new(:duration, :payload)
|
90
91
|
logger = TestDebugLogSubscriber.new
|
91
92
|
logger.colorize_logging = true
|
92
93
|
SQL_COLORINGS.each do |verb, color_regex|
|
93
|
-
logger.sql(
|
94
|
+
logger.sql(Event.new(0.9, sql: verb.to_s))
|
94
95
|
assert_match(/#{REGEXP_BOLD}#{color_regex}#{verb}#{REGEXP_CLEAR}/i, logger.debugs.last)
|
95
96
|
end
|
96
97
|
end
|
97
98
|
|
99
|
+
def test_logging_sql_coloration_disabled
|
100
|
+
logger = TestDebugLogSubscriber.new
|
101
|
+
logger.colorize_logging = false
|
102
|
+
|
103
|
+
SQL_COLORINGS.each do |verb, color_regex|
|
104
|
+
logger.sql(Event.new(0.9, sql: verb.to_s))
|
105
|
+
assert_no_match(/#{REGEXP_BOLD}#{color_regex}#{verb}#{REGEXP_CLEAR}/i, logger.debugs.last)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
98
109
|
def test_basic_payload_name_logging_coloration_generic_sql
|
99
|
-
event = Struct.new(:duration, :payload)
|
100
110
|
logger = TestDebugLogSubscriber.new
|
101
111
|
logger.colorize_logging = true
|
102
112
|
SQL_COLORINGS.each do |verb, _|
|
103
|
-
logger.sql(
|
113
|
+
logger.sql(Event.new(0.9, sql: verb.to_s))
|
104
114
|
assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
|
105
115
|
|
106
|
-
logger.sql(
|
116
|
+
logger.sql(Event.new(0.9, sql: verb.to_s, name: "SQL"))
|
107
117
|
assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA}SQL \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
|
108
118
|
end
|
109
119
|
end
|
110
120
|
|
111
121
|
def test_basic_payload_name_logging_coloration_named_sql
|
112
|
-
event = Struct.new(:duration, :payload)
|
113
122
|
logger = TestDebugLogSubscriber.new
|
114
123
|
logger.colorize_logging = true
|
115
124
|
SQL_COLORINGS.each do |verb, _|
|
116
|
-
logger.sql(
|
125
|
+
logger.sql(Event.new(0.9, sql: verb.to_s, name: "Model Load"))
|
117
126
|
assert_match(/#{REGEXP_BOLD}#{REGEXP_CYAN}Model Load \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
|
118
127
|
|
119
|
-
logger.sql(
|
128
|
+
logger.sql(Event.new(0.9, sql: verb.to_s, name: "Model Exists"))
|
120
129
|
assert_match(/#{REGEXP_BOLD}#{REGEXP_CYAN}Model Exists \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
|
121
130
|
|
122
|
-
logger.sql(
|
131
|
+
logger.sql(Event.new(0.9, sql: verb.to_s, name: "ANY SPECIFIC NAME"))
|
123
132
|
assert_match(/#{REGEXP_BOLD}#{REGEXP_CYAN}ANY SPECIFIC NAME \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
|
124
133
|
end
|
125
134
|
end
|
126
135
|
|
127
136
|
def test_query_logging_coloration_with_nested_select
|
128
|
-
event = Struct.new(:duration, :payload)
|
129
137
|
logger = TestDebugLogSubscriber.new
|
130
138
|
logger.colorize_logging = true
|
131
139
|
SQL_COLORINGS.slice(:SELECT, :INSERT, :UPDATE, :DELETE).each do |verb, color_regex|
|
132
|
-
logger.sql(
|
140
|
+
logger.sql(Event.new(0.9, sql: "#{verb} WHERE ID IN SELECT"))
|
133
141
|
assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{color_regex}#{verb} WHERE ID IN SELECT#{REGEXP_CLEAR}/i, logger.debugs.last)
|
134
142
|
end
|
135
143
|
end
|
136
144
|
|
137
145
|
def test_query_logging_coloration_with_multi_line_nested_select
|
138
|
-
event = Struct.new(:duration, :payload)
|
139
146
|
logger = TestDebugLogSubscriber.new
|
140
147
|
logger.colorize_logging = true
|
141
148
|
SQL_COLORINGS.slice(:SELECT, :INSERT, :UPDATE, :DELETE).each do |verb, color_regex|
|
@@ -145,13 +152,12 @@ class LogSubscriberTest < ActiveRecord::TestCase
|
|
145
152
|
SELECT ID FROM THINGS
|
146
153
|
)
|
147
154
|
EOS
|
148
|
-
logger.sql(
|
155
|
+
logger.sql(Event.new(0.9, sql: sql))
|
149
156
|
assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{color_regex}.*#{verb}.*#{REGEXP_CLEAR}/mi, logger.debugs.last)
|
150
157
|
end
|
151
158
|
end
|
152
159
|
|
153
160
|
def test_query_logging_coloration_with_lock
|
154
|
-
event = Struct.new(:duration, :payload)
|
155
161
|
logger = TestDebugLogSubscriber.new
|
156
162
|
logger.colorize_logging = true
|
157
163
|
sql = <<-EOS
|
@@ -159,13 +165,13 @@ class LogSubscriberTest < ActiveRecord::TestCase
|
|
159
165
|
(SELECT * FROM mytable FOR UPDATE) ss
|
160
166
|
WHERE col1 = 5;
|
161
167
|
EOS
|
162
|
-
logger.sql(
|
168
|
+
logger.sql(Event.new(0.9, sql: sql))
|
163
169
|
assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{SQL_COLORINGS[:LOCK]}.*FOR UPDATE.*#{REGEXP_CLEAR}/mi, logger.debugs.last)
|
164
170
|
|
165
171
|
sql = <<-EOS
|
166
172
|
LOCK TABLE films IN SHARE MODE;
|
167
173
|
EOS
|
168
|
-
logger.sql(
|
174
|
+
logger.sql(Event.new(0.9, sql: sql))
|
169
175
|
assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{SQL_COLORINGS[:LOCK]}.*LOCK TABLE.*#{REGEXP_CLEAR}/mi, logger.debugs.last)
|
170
176
|
end
|
171
177
|
|
@@ -177,6 +183,36 @@ class LogSubscriberTest < ActiveRecord::TestCase
|
|
177
183
|
assert_match(/SELECT .*?FROM .?developers.?/i, @logger.logged(:debug).last)
|
178
184
|
end
|
179
185
|
|
186
|
+
def test_vebose_query_logs
|
187
|
+
ActiveRecord::Base.verbose_query_logs = true
|
188
|
+
|
189
|
+
logger = TestDebugLogSubscriber.new
|
190
|
+
logger.sql(Event.new(0, sql: "hi mom!"))
|
191
|
+
assert_equal 2, @logger.logged(:debug).size
|
192
|
+
assert_match(/↳/, @logger.logged(:debug).last)
|
193
|
+
ensure
|
194
|
+
ActiveRecord::Base.verbose_query_logs = false
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_verbose_query_with_ignored_callstack
|
198
|
+
ActiveRecord::Base.verbose_query_logs = true
|
199
|
+
|
200
|
+
logger = TestDebugLogSubscriber.new
|
201
|
+
def logger.extract_query_source_location(*); nil; end
|
202
|
+
|
203
|
+
logger.sql(Event.new(0, sql: "hi mom!"))
|
204
|
+
assert_equal 1, @logger.logged(:debug).size
|
205
|
+
assert_no_match(/↳/, @logger.logged(:debug).last)
|
206
|
+
ensure
|
207
|
+
ActiveRecord::Base.verbose_query_logs = false
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_verbose_query_logs_disabled_by_default
|
211
|
+
logger = TestDebugLogSubscriber.new
|
212
|
+
logger.sql(Event.new(0, sql: "hi mom!"))
|
213
|
+
assert_no_match(/↳/, @logger.logged(:debug).last)
|
214
|
+
end
|
215
|
+
|
180
216
|
def test_cached_queries
|
181
217
|
ActiveRecord::Base.cache do
|
182
218
|
Developer.all.load
|
@@ -210,8 +246,14 @@ class LogSubscriberTest < ActiveRecord::TestCase
|
|
210
246
|
end
|
211
247
|
|
212
248
|
if ActiveRecord::Base.connection.prepared_statements
|
249
|
+
def test_where_in_binds_logging_include_attribute_names
|
250
|
+
Developer.where(id: [1, 2, 3, 4, 5]).load
|
251
|
+
wait
|
252
|
+
assert_match(%{["id", 1], ["id", 2], ["id", 3], ["id", 4], ["id", 5]}, @logger.logged(:debug).last)
|
253
|
+
end
|
254
|
+
|
213
255
|
def test_binary_data_is_not_logged
|
214
|
-
Binary.create(data:
|
256
|
+
Binary.create(data: "some binary data")
|
215
257
|
wait
|
216
258
|
assert_match(/<16 bytes of binary data>/, @logger.logged(:debug).join)
|
217
259
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
4
|
+
require "models/topic"
|
5
|
+
require "models/reply"
|
6
|
+
|
7
|
+
class MarshalSerializationTest < ActiveRecord::TestCase
|
8
|
+
fixtures :topics
|
9
|
+
|
10
|
+
def test_deserializing_rails_6_0_marshal_basic
|
11
|
+
topic = Marshal.load(marshal_fixture("rails_6_0_topic"))
|
12
|
+
|
13
|
+
assert_not_predicate topic, :new_record?
|
14
|
+
assert_equal 1, topic.id
|
15
|
+
assert_equal "The First Topic", topic.title
|
16
|
+
assert_equal "Have a nice day", topic.content
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_deserializing_rails_6_0_marshal_with_loaded_association_cache
|
20
|
+
topic = Marshal.load(marshal_fixture("rails_6_0_topic_associations"))
|
21
|
+
|
22
|
+
assert_not_predicate topic, :new_record?
|
23
|
+
assert_equal 1, topic.id
|
24
|
+
assert_equal "The First Topic", topic.title
|
25
|
+
assert_equal "Have a nice day", topic.content
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def marshal_fixture(file_name)
|
30
|
+
File.binread(marshal_fixture_path(file_name))
|
31
|
+
end
|
32
|
+
|
33
|
+
def marshal_fixture_path(file_name)
|
34
|
+
File.expand_path(
|
35
|
+
"support/marshal_compatibility_fixtures/#{ActiveRecord::Base.connection.adapter_name}/#{file_name}.dump",
|
36
|
+
TEST_ROOT
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cases/helper"
|
2
4
|
|
3
5
|
module ActiveRecord
|
4
6
|
class Migration
|
@@ -40,10 +42,10 @@ module ActiveRecord
|
|
40
42
|
|
41
43
|
def test_create_table_with_not_null_column
|
42
44
|
connection.create_table :testings do |t|
|
43
|
-
t.column :foo, :string, :
|
45
|
+
t.column :foo, :string, null: false
|
44
46
|
end
|
45
47
|
|
46
|
-
assert_raises(ActiveRecord::
|
48
|
+
assert_raises(ActiveRecord::NotNullViolation) do
|
47
49
|
connection.execute "insert into testings (foo) values (NULL)"
|
48
50
|
end
|
49
51
|
end
|
@@ -53,11 +55,11 @@ module ActiveRecord
|
|
53
55
|
mysql = current_adapter?(:Mysql2Adapter)
|
54
56
|
|
55
57
|
connection.create_table :testings do |t|
|
56
|
-
t.column :one, :string, :
|
57
|
-
t.column :two, :boolean, :
|
58
|
-
t.column :three, :boolean, :
|
59
|
-
t.column :four, :integer, :
|
60
|
-
t.column :five, :text, :
|
58
|
+
t.column :one, :string, default: "hello"
|
59
|
+
t.column :two, :boolean, default: true
|
60
|
+
t.column :three, :boolean, default: false
|
61
|
+
t.column :four, :integer, default: 1
|
62
|
+
t.column :five, :text, default: "hello" unless mysql
|
61
63
|
end
|
62
64
|
|
63
65
|
columns = connection.columns(:testings)
|
@@ -70,30 +72,30 @@ module ActiveRecord
|
|
70
72
|
assert_equal "hello", one.default
|
71
73
|
assert_equal true, connection.lookup_cast_type_from_column(two).deserialize(two.default)
|
72
74
|
assert_equal false, connection.lookup_cast_type_from_column(three).deserialize(three.default)
|
73
|
-
assert_equal
|
75
|
+
assert_equal "1", four.default
|
74
76
|
assert_equal "hello", five.default unless mysql
|
75
77
|
end
|
76
78
|
|
77
79
|
if current_adapter?(:PostgreSQLAdapter)
|
78
80
|
def test_add_column_with_array
|
79
81
|
connection.create_table :testings
|
80
|
-
connection.add_column :testings, :foo, :string, :
|
82
|
+
connection.add_column :testings, :foo, :string, array: true
|
81
83
|
|
82
84
|
columns = connection.columns(:testings)
|
83
85
|
array_column = columns.detect { |c| c.name == "foo" }
|
84
86
|
|
85
|
-
|
87
|
+
assert_predicate array_column, :array?
|
86
88
|
end
|
87
89
|
|
88
90
|
def test_create_table_with_array_column
|
89
91
|
connection.create_table :testings do |t|
|
90
|
-
t.string :foo, :
|
92
|
+
t.string :foo, array: true
|
91
93
|
end
|
92
94
|
|
93
95
|
columns = connection.columns(:testings)
|
94
96
|
array_column = columns.detect { |c| c.name == "foo" }
|
95
97
|
|
96
|
-
|
98
|
+
assert_predicate array_column, :array?
|
97
99
|
end
|
98
100
|
end
|
99
101
|
|
@@ -105,9 +107,9 @@ module ActiveRecord
|
|
105
107
|
eight = columns.detect { |c| c.name == "eight_int" }
|
106
108
|
|
107
109
|
if current_adapter?(:OracleAdapter)
|
108
|
-
assert_equal
|
110
|
+
assert_equal "NUMBER(19)", eight.sql_type
|
109
111
|
elsif current_adapter?(:SQLite3Adapter)
|
110
|
-
assert_equal
|
112
|
+
assert_equal "bigint", eight.sql_type
|
111
113
|
else
|
112
114
|
assert_equal :integer, eight.type
|
113
115
|
assert_equal 8, eight.limit
|
@@ -118,13 +120,13 @@ module ActiveRecord
|
|
118
120
|
|
119
121
|
def test_create_table_with_limits
|
120
122
|
connection.create_table :testings do |t|
|
121
|
-
t.column :foo, :string, :
|
123
|
+
t.column :foo, :string, limit: 255
|
122
124
|
|
123
125
|
t.column :default_int, :integer
|
124
126
|
|
125
|
-
t.column :one_int, :integer, :
|
126
|
-
t.column :four_int, :integer, :
|
127
|
-
t.column :eight_int, :integer, :
|
127
|
+
t.column :one_int, :integer, limit: 1
|
128
|
+
t.column :four_int, :integer, limit: 4
|
129
|
+
t.column :eight_int, :integer, limit: 8
|
128
130
|
end
|
129
131
|
|
130
132
|
columns = connection.columns(:testings)
|
@@ -137,20 +139,20 @@ module ActiveRecord
|
|
137
139
|
eight = columns.detect { |c| c.name == "eight_int" }
|
138
140
|
|
139
141
|
if current_adapter?(:PostgreSQLAdapter)
|
140
|
-
assert_equal
|
141
|
-
assert_equal
|
142
|
-
assert_equal
|
143
|
-
assert_equal
|
142
|
+
assert_equal "integer", default.sql_type
|
143
|
+
assert_equal "smallint", one.sql_type
|
144
|
+
assert_equal "integer", four.sql_type
|
145
|
+
assert_equal "bigint", eight.sql_type
|
144
146
|
elsif current_adapter?(:Mysql2Adapter)
|
145
|
-
assert_match
|
146
|
-
assert_match
|
147
|
-
assert_match
|
148
|
-
assert_match
|
147
|
+
assert_match %r/\Aint/, default.sql_type
|
148
|
+
assert_match %r/\Atinyint/, one.sql_type
|
149
|
+
assert_match %r/\Aint/, four.sql_type
|
150
|
+
assert_match %r/\Abigint/, eight.sql_type
|
149
151
|
elsif current_adapter?(:OracleAdapter)
|
150
|
-
assert_equal
|
151
|
-
assert_equal
|
152
|
-
assert_equal
|
153
|
-
assert_equal
|
152
|
+
assert_equal "NUMBER(38)", default.sql_type
|
153
|
+
assert_equal "NUMBER(1)", one.sql_type
|
154
|
+
assert_equal "NUMBER(4)", four.sql_type
|
155
|
+
assert_equal "NUMBER(8)", eight.sql_type
|
154
156
|
end
|
155
157
|
end
|
156
158
|
|
@@ -194,17 +196,28 @@ module ActiveRecord
|
|
194
196
|
assert_equal "you can't redefine the primary key column 'testing_id'. To define a custom primary key, pass { id: false } to create_table.", error.message
|
195
197
|
end
|
196
198
|
|
199
|
+
def test_create_table_raises_when_defining_existing_column
|
200
|
+
error = assert_raise(ArgumentError) do
|
201
|
+
connection.create_table :testings do |t|
|
202
|
+
t.column :testing_column, :string
|
203
|
+
t.column :testing_column, :integer
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
assert_equal "you can't define an already defined column 'testing_column'.", error.message
|
208
|
+
end
|
209
|
+
|
197
210
|
def test_create_table_with_timestamps_should_create_datetime_columns
|
198
211
|
connection.create_table table_name do |t|
|
199
212
|
t.timestamps
|
200
213
|
end
|
201
214
|
created_columns = connection.columns(table_name)
|
202
215
|
|
203
|
-
created_at_column = created_columns.detect {|c| c.name ==
|
204
|
-
updated_at_column = created_columns.detect {|c| c.name ==
|
216
|
+
created_at_column = created_columns.detect { |c| c.name == "created_at" }
|
217
|
+
updated_at_column = created_columns.detect { |c| c.name == "updated_at" }
|
205
218
|
|
206
|
-
|
207
|
-
|
219
|
+
assert_not created_at_column.null
|
220
|
+
assert_not updated_at_column.null
|
208
221
|
end
|
209
222
|
|
210
223
|
def test_create_table_with_timestamps_should_create_datetime_columns_with_options
|
@@ -213,8 +226,8 @@ module ActiveRecord
|
|
213
226
|
end
|
214
227
|
created_columns = connection.columns(table_name)
|
215
228
|
|
216
|
-
created_at_column = created_columns.detect {|c| c.name ==
|
217
|
-
updated_at_column = created_columns.detect {|c| c.name ==
|
229
|
+
created_at_column = created_columns.detect { |c| c.name == "created_at" }
|
230
|
+
updated_at_column = created_columns.detect { |c| c.name == "updated_at" }
|
218
231
|
|
219
232
|
assert created_at_column.null
|
220
233
|
assert updated_at_column.null
|
@@ -231,9 +244,9 @@ module ActiveRecord
|
|
231
244
|
connection.create_table :testings do |t|
|
232
245
|
t.column :foo, :string
|
233
246
|
end
|
234
|
-
connection.add_column :testings, :bar, :string, :
|
247
|
+
connection.add_column :testings, :bar, :string, null: false
|
235
248
|
|
236
|
-
assert_raise(ActiveRecord::
|
249
|
+
assert_raise(ActiveRecord::NotNullViolation) do
|
237
250
|
connection.execute "insert into testings (foo, bar) values ('hello', NULL)"
|
238
251
|
end
|
239
252
|
end
|
@@ -244,12 +257,16 @@ module ActiveRecord
|
|
244
257
|
t.column :foo, :string
|
245
258
|
end
|
246
259
|
|
247
|
-
|
248
|
-
|
249
|
-
|
260
|
+
quoted_id = connection.quote_column_name("id")
|
261
|
+
quoted_foo = connection.quote_column_name("foo")
|
262
|
+
quoted_bar = connection.quote_column_name("bar")
|
263
|
+
connection.execute("insert into testings (#{quoted_id}, #{quoted_foo}) values (1, 'hello')")
|
264
|
+
assert_nothing_raised do
|
265
|
+
connection.add_column :testings, :bar, :string, null: false, default: "default"
|
266
|
+
end
|
250
267
|
|
251
|
-
assert_raises(ActiveRecord::
|
252
|
-
connection.execute
|
268
|
+
assert_raises(ActiveRecord::NotNullViolation) do
|
269
|
+
connection.execute("insert into testings (#{quoted_id}, #{quoted_foo}, #{quoted_bar}) values (2, 'hello', NULL)")
|
253
270
|
end
|
254
271
|
end
|
255
272
|
|
@@ -258,15 +275,40 @@ module ActiveRecord
|
|
258
275
|
t.column :foo, :timestamp
|
259
276
|
end
|
260
277
|
|
261
|
-
|
262
|
-
|
278
|
+
column = connection.columns(:testings).find { |c| c.name == "foo" }
|
279
|
+
|
280
|
+
assert_equal :datetime, column.type
|
281
|
+
|
282
|
+
if current_adapter?(:PostgreSQLAdapter)
|
283
|
+
assert_equal "timestamp without time zone", column.sql_type
|
284
|
+
elsif current_adapter?(:Mysql2Adapter)
|
285
|
+
assert_equal "timestamp", column.sql_type
|
286
|
+
elsif current_adapter?(:OracleAdapter, :IBM_DBAdapter)
|
287
|
+
assert_equal "timestamp(6)", column.sql_type
|
288
|
+
else
|
289
|
+
assert_equal connection.type_to_sql("datetime"), column.sql_type
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
def test_change_column_with_timestamp_type
|
294
|
+
connection.create_table :testings do |t|
|
295
|
+
t.column :foo, :datetime, null: false
|
296
|
+
end
|
297
|
+
|
298
|
+
connection.change_column :testings, :foo, :timestamp
|
299
|
+
|
300
|
+
column = connection.columns(:testings).find { |c| c.name == "foo" }
|
263
301
|
|
264
|
-
assert_equal :datetime,
|
302
|
+
assert_equal :datetime, column.type
|
265
303
|
|
266
304
|
if current_adapter?(:PostgreSQLAdapter)
|
267
|
-
assert_equal
|
305
|
+
assert_equal "timestamp without time zone", column.sql_type
|
306
|
+
elsif current_adapter?(:Mysql2Adapter)
|
307
|
+
assert_equal "timestamp", column.sql_type
|
308
|
+
elsif current_adapter?(:OracleAdapter, :IBM_DBAdapter)
|
309
|
+
assert_equal "timestamp(6)", column.sql_type
|
268
310
|
else
|
269
|
-
assert_equal
|
311
|
+
assert_equal connection.type_to_sql("datetime"), column.sql_type
|
270
312
|
end
|
271
313
|
end
|
272
314
|
|
@@ -275,7 +317,7 @@ module ActiveRecord
|
|
275
317
|
t.column :select, :string
|
276
318
|
end
|
277
319
|
|
278
|
-
connection.change_column :testings, :select, :string, :
|
320
|
+
connection.change_column :testings, :select, :string, limit: 10
|
279
321
|
|
280
322
|
# Oracle needs primary key value from sequence
|
281
323
|
if current_adapter?(:OracleAdapter)
|
@@ -290,17 +332,17 @@ module ActiveRecord
|
|
290
332
|
t.column :title, :string
|
291
333
|
end
|
292
334
|
person_klass = Class.new(ActiveRecord::Base)
|
293
|
-
person_klass.table_name =
|
335
|
+
person_klass.table_name = "testings"
|
294
336
|
|
295
|
-
person_klass.connection.add_column "testings", "wealth", :integer, :
|
337
|
+
person_klass.connection.add_column "testings", "wealth", :integer, null: false, default: 99
|
296
338
|
person_klass.reset_column_information
|
297
339
|
assert_equal 99, person_klass.column_defaults["wealth"]
|
298
340
|
assert_equal false, person_klass.columns_hash["wealth"].null
|
299
341
|
# Oracle needs primary key value from sequence
|
300
342
|
if current_adapter?(:OracleAdapter)
|
301
|
-
assert_nothing_raised {person_klass.connection.execute("insert into testings (id, title) values (testings_seq.nextval, 'tester')")}
|
343
|
+
assert_nothing_raised { person_klass.connection.execute("insert into testings (id, title) values (testings_seq.nextval, 'tester')") }
|
302
344
|
else
|
303
|
-
assert_nothing_raised {person_klass.connection.execute("insert into testings (title) values ('tester')")}
|
345
|
+
assert_nothing_raised { person_klass.connection.execute("insert into testings (title) values ('tester')") }
|
304
346
|
end
|
305
347
|
|
306
348
|
# change column default to see that column doesn't lose its not null definition
|
@@ -317,19 +359,19 @@ module ActiveRecord
|
|
317
359
|
assert_equal false, person_klass.columns_hash["money"].null
|
318
360
|
|
319
361
|
# change column
|
320
|
-
person_klass.connection.change_column "testings", "money", :integer, :
|
362
|
+
person_klass.connection.change_column "testings", "money", :integer, null: false, default: 1000
|
321
363
|
person_klass.reset_column_information
|
322
364
|
assert_equal 1000, person_klass.column_defaults["money"]
|
323
365
|
assert_equal false, person_klass.columns_hash["money"].null
|
324
366
|
|
325
367
|
# change column, make it nullable and clear default
|
326
|
-
person_klass.connection.change_column "testings", "money", :integer, :
|
368
|
+
person_klass.connection.change_column "testings", "money", :integer, null: true, default: nil
|
327
369
|
person_klass.reset_column_information
|
328
370
|
assert_nil person_klass.columns_hash["money"].default
|
329
371
|
assert_equal true, person_klass.columns_hash["money"].null
|
330
372
|
|
331
373
|
# change_column_null, make it not nullable and set null values to a default value
|
332
|
-
person_klass.connection.execute(
|
374
|
+
person_klass.connection.execute("UPDATE testings SET money = NULL")
|
333
375
|
person_klass.connection.change_column_null "testings", "money", false, 2000
|
334
376
|
person_klass.reset_column_information
|
335
377
|
assert_nil person_klass.columns_hash["money"].default
|
@@ -346,9 +388,9 @@ module ActiveRecord
|
|
346
388
|
end
|
347
389
|
notnull_migration.new.suppress_messages do
|
348
390
|
notnull_migration.migrate(:up)
|
349
|
-
assert_equal false, connection.columns(:testings).find{ |c| c.name == "foo"}.null
|
391
|
+
assert_equal false, connection.columns(:testings).find { |c| c.name == "foo" }.null
|
350
392
|
notnull_migration.migrate(:down)
|
351
|
-
assert connection.columns(:testings).find{ |c| c.name == "foo"}.null
|
393
|
+
assert connection.columns(:testings).find { |c| c.name == "foo" }.null
|
352
394
|
end
|
353
395
|
end
|
354
396
|
end
|
@@ -365,7 +407,7 @@ module ActiveRecord
|
|
365
407
|
def test_column_exists_with_type
|
366
408
|
connection.create_table :testings do |t|
|
367
409
|
t.column :foo, :string
|
368
|
-
t.column :bar, :decimal, :
|
410
|
+
t.column :bar, :decimal, precision: 8, scale: 2
|
369
411
|
end
|
370
412
|
|
371
413
|
assert connection.column_exists?(:testings, :foo, :string)
|
@@ -380,7 +422,7 @@ module ActiveRecord
|
|
380
422
|
t.column :foo, :string, limit: 100
|
381
423
|
t.column :bar, :decimal, precision: 8, scale: 2
|
382
424
|
t.column :taggable_id, :integer, null: false
|
383
|
-
t.column :taggable_type, :string, default:
|
425
|
+
t.column :taggable_type, :string, default: "Photo"
|
384
426
|
end
|
385
427
|
|
386
428
|
assert connection.column_exists?(:testings, :foo, :string, limit: 100)
|
@@ -389,7 +431,7 @@ module ActiveRecord
|
|
389
431
|
assert_not connection.column_exists?(:testings, :bar, :decimal, precision: nil, scale: nil)
|
390
432
|
assert connection.column_exists?(:testings, :taggable_id, :integer, null: false)
|
391
433
|
assert_not connection.column_exists?(:testings, :taggable_id, :integer, null: true)
|
392
|
-
assert connection.column_exists?(:testings, :taggable_type, :string, default:
|
434
|
+
assert connection.column_exists?(:testings, :taggable_type, :string, default: "Photo")
|
393
435
|
assert_not connection.column_exists?(:testings, :taggable_type, :string, default: nil)
|
394
436
|
end
|
395
437
|
|
@@ -399,15 +441,15 @@ module ActiveRecord
|
|
399
441
|
end
|
400
442
|
connection.change_table :testings do |t|
|
401
443
|
assert t.column_exists?(:foo)
|
402
|
-
|
444
|
+
assert_not (t.column_exists?(:bar))
|
403
445
|
end
|
404
446
|
end
|
405
447
|
|
406
448
|
def test_drop_table_if_exists
|
407
449
|
connection.create_table(:testings)
|
408
|
-
|
450
|
+
assert connection.table_exists?(:testings)
|
409
451
|
connection.drop_table(:testings, if_exists: true)
|
410
|
-
|
452
|
+
assert_not connection.table_exists?(:testings)
|
411
453
|
end
|
412
454
|
|
413
455
|
def test_drop_table_if_exists_nothing_raised
|
@@ -415,13 +457,13 @@ module ActiveRecord
|
|
415
457
|
end
|
416
458
|
|
417
459
|
private
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
460
|
+
def testing_table_with_only_foo_attribute
|
461
|
+
connection.create_table :testings, id: false do |t|
|
462
|
+
t.column :foo, :string
|
463
|
+
end
|
422
464
|
|
423
|
-
|
424
|
-
|
465
|
+
yield
|
466
|
+
end
|
425
467
|
end
|
426
468
|
|
427
469
|
if ActiveRecord::Base.connection.supports_foreign_keys?
|
@@ -442,7 +484,11 @@ module ActiveRecord
|
|
442
484
|
end
|
443
485
|
|
444
486
|
def test_create_table_with_force_cascade_drops_dependent_objects
|
445
|
-
|
487
|
+
if current_adapter?(:Mysql2Adapter)
|
488
|
+
skip "MySQL > 5.5 does not drop dependent objects with DROP TABLE CASCADE"
|
489
|
+
elsif current_adapter?(:SQLite3Adapter)
|
490
|
+
skip "SQLite3 does not support DROP TABLE CASCADE syntax"
|
491
|
+
end
|
446
492
|
# can't re-create table referenced by foreign key
|
447
493
|
assert_raises(ActiveRecord::StatementInvalid) do
|
448
494
|
@connection.create_table :trains, force: true
|