ibm_db 3.0.5-x86-mingw32 → 5.0.5-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 +5 -5
- data/CHANGES +4 -0
- data/LICENSE +1 -1
- data/ParameterizedQueries README +6 -6
- data/README +38 -55
- data/ext/Makefile +269 -0
- data/ext/extconf.rb +34 -3
- data/ext/gil_release_version +3 -0
- data/ext/ibm_db-i386-mingw32.def +2 -0
- data/ext/ibm_db.c +100 -108
- data/ext/ibm_db.o +0 -0
- data/ext/ibm_db.so +0 -0
- data/ext/mkmf.log +110 -0
- data/ext/ruby_ibm_db_cli.o +0 -0
- data/ext/unicode_support_version +3 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
- data/lib/mswin32/ibm_db.rb +7 -39
- data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
- data/test/cases/adapter_test.rb +133 -58
- data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
- data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
- data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
- data/test/cases/adapters/mysql2/connection_test.rb +210 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
- data/test/cases/adapters/mysql2/enum_test.rb +26 -0
- data/test/cases/adapters/mysql2/explain_test.rb +21 -0
- data/test/cases/adapters/mysql2/json_test.rb +195 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
- data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
- data/test/cases/adapters/mysql2/schema_test.rb +126 -0
- data/test/cases/adapters/mysql2/sp_test.rb +36 -0
- data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
- data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
- data/test/cases/adapters/postgresql/array_test.rb +339 -0
- data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
- data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
- data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
- data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
- data/test/cases/adapters/postgresql/citext_test.rb +78 -0
- data/test/cases/adapters/postgresql/collation_test.rb +53 -0
- data/test/cases/adapters/postgresql/composite_test.rb +132 -0
- data/test/cases/adapters/postgresql/connection_test.rb +257 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
- data/test/cases/adapters/postgresql/domain_test.rb +47 -0
- data/test/cases/adapters/postgresql/enum_test.rb +91 -0
- data/test/cases/adapters/postgresql/explain_test.rb +20 -0
- data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
- data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
- data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
- data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
- data/test/cases/adapters/postgresql/integer_test.rb +25 -0
- data/test/cases/adapters/postgresql/json_test.rb +237 -0
- data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
- data/test/cases/adapters/postgresql/money_test.rb +96 -0
- data/test/cases/adapters/postgresql/network_test.rb +94 -0
- data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
- data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
- data/test/cases/adapters/postgresql/range_test.rb +343 -0
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
- data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
- data/test/cases/adapters/postgresql/schema_test.rb +597 -0
- data/test/cases/adapters/postgresql/serial_test.rb +154 -0
- data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
- data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
- data/test/cases/adapters/postgresql/utils_test.rb +62 -0
- data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
- data/test/cases/adapters/postgresql/xml_test.rb +54 -0
- data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
- data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
- data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
- data/test/cases/aggregations_test.rb +11 -1
- data/test/cases/ar_schema_test.rb +35 -50
- data/test/cases/associations/association_scope_test.rb +1 -6
- data/test/cases/associations/belongs_to_associations_test.rb +122 -10
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
- data/test/cases/associations/callbacks_test.rb +5 -7
- data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
- data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
- data/test/cases/associations/eager_test.rb +158 -73
- data/test/cases/associations/extension_test.rb +7 -2
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
- data/test/cases/associations/has_many_associations_test.rb +362 -43
- data/test/cases/associations/has_many_through_associations_test.rb +108 -41
- data/test/cases/associations/has_one_associations_test.rb +105 -8
- data/test/cases/associations/has_one_through_associations_test.rb +6 -3
- data/test/cases/associations/inner_join_association_test.rb +3 -3
- data/test/cases/associations/inverse_associations_test.rb +38 -11
- data/test/cases/associations/join_model_test.rb +59 -36
- data/test/cases/associations/left_outer_join_association_test.rb +88 -0
- data/test/cases/associations/nested_through_associations_test.rb +2 -2
- data/test/cases/associations/required_test.rb +25 -5
- data/test/cases/associations_test.rb +39 -34
- data/test/cases/attribute_decorators_test.rb +9 -8
- data/test/cases/attribute_methods/read_test.rb +5 -5
- data/test/cases/attribute_methods_test.rb +97 -40
- data/test/cases/attribute_set_test.rb +64 -4
- data/test/cases/attribute_test.rb +84 -18
- data/test/cases/attributes_test.rb +151 -34
- data/test/cases/autosave_association_test.rb +149 -36
- data/test/cases/base_test.rb +290 -241
- data/test/cases/batches_test.rb +299 -22
- data/test/cases/binary_test.rb +2 -10
- data/test/cases/bind_parameter_test.rb +76 -66
- data/test/cases/cache_key_test.rb +26 -0
- data/test/cases/calculations_test.rb +167 -15
- data/test/cases/callbacks_test.rb +161 -68
- data/test/cases/coders/json_test.rb +15 -0
- data/test/cases/collection_cache_key_test.rb +115 -0
- data/test/cases/column_definition_test.rb +26 -57
- data/test/cases/comment_test.rb +145 -0
- data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
- data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
- data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
- data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
- data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
- data/test/cases/connection_management_test.rb +46 -56
- data/test/cases/connection_pool_test.rb +195 -20
- data/test/cases/connection_specification/resolver_test.rb +15 -0
- data/test/cases/counter_cache_test.rb +10 -5
- data/test/cases/custom_locking_test.rb +1 -1
- data/test/cases/database_statements_test.rb +18 -3
- data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
- data/test/cases/date_time_precision_test.rb +107 -0
- data/test/cases/defaults_test.rb +85 -89
- data/test/cases/dirty_test.rb +30 -52
- data/test/cases/disconnected_test.rb +4 -2
- data/test/cases/enum_test.rb +178 -24
- data/test/cases/errors_test.rb +16 -0
- data/test/cases/explain_test.rb +32 -21
- data/test/cases/finder_test.rb +273 -148
- data/test/cases/fixture_set/file_test.rb +18 -0
- data/test/cases/fixtures_test.rb +112 -32
- data/test/cases/forbidden_attributes_protection_test.rb +69 -3
- data/test/cases/helper.rb +10 -16
- data/test/cases/hot_compatibility_test.rb +89 -1
- data/test/cases/inheritance_test.rb +284 -53
- data/test/cases/integration_test.rb +23 -7
- data/test/cases/invalid_connection_test.rb +4 -2
- data/test/cases/invertible_migration_test.rb +124 -32
- data/test/cases/json_serialization_test.rb +11 -2
- data/test/cases/locking_test.rb +22 -6
- data/test/cases/log_subscriber_test.rb +106 -17
- data/test/cases/migration/change_schema_test.rb +60 -114
- data/test/cases/migration/change_table_test.rb +34 -2
- data/test/cases/migration/column_attributes_test.rb +7 -23
- data/test/cases/migration/column_positioning_test.rb +8 -8
- data/test/cases/migration/columns_test.rb +17 -11
- data/test/cases/migration/command_recorder_test.rb +47 -2
- data/test/cases/migration/compatibility_test.rb +118 -0
- data/test/cases/migration/create_join_table_test.rb +21 -12
- data/test/cases/migration/foreign_key_test.rb +52 -18
- data/test/cases/migration/index_test.rb +14 -12
- data/test/cases/migration/logger_test.rb +1 -1
- data/test/cases/migration/pending_migrations_test.rb +0 -1
- data/test/cases/migration/references_foreign_key_test.rb +59 -7
- data/test/cases/migration/references_index_test.rb +4 -4
- data/test/cases/migration/references_statements_test.rb +26 -6
- data/test/cases/migration/rename_table_test.rb +25 -25
- data/test/cases/migration_test.rb +279 -81
- data/test/cases/migrator_test.rb +91 -8
- data/test/cases/mixin_test.rb +0 -2
- data/test/cases/modules_test.rb +3 -4
- data/test/cases/multiparameter_attributes_test.rb +24 -2
- data/test/cases/multiple_db_test.rb +11 -4
- data/test/cases/nested_attributes_test.rb +61 -33
- data/test/cases/persistence_test.rb +102 -10
- data/test/cases/pooled_connections_test.rb +3 -3
- data/test/cases/primary_keys_test.rb +170 -31
- data/test/cases/query_cache_test.rb +216 -96
- data/test/cases/quoting_test.rb +65 -19
- data/test/cases/readonly_test.rb +2 -1
- data/test/cases/reflection_test.rb +68 -22
- data/test/cases/relation/delegation_test.rb +3 -8
- data/test/cases/relation/merging_test.rb +10 -14
- data/test/cases/relation/mutation_test.rb +42 -24
- data/test/cases/relation/or_test.rb +92 -0
- data/test/cases/relation/predicate_builder_test.rb +4 -2
- data/test/cases/relation/record_fetch_warning_test.rb +40 -0
- data/test/cases/relation/where_chain_test.rb +23 -99
- data/test/cases/relation/where_clause_test.rb +182 -0
- data/test/cases/relation/where_test.rb +45 -23
- data/test/cases/relation_test.rb +67 -58
- data/test/cases/relations_test.rb +249 -38
- data/test/cases/result_test.rb +10 -0
- data/test/cases/sanitize_test.rb +108 -15
- data/test/cases/schema_dumper_test.rb +119 -125
- data/test/cases/schema_loading_test.rb +52 -0
- data/test/cases/scoping/default_scoping_test.rb +113 -39
- data/test/cases/scoping/named_scoping_test.rb +46 -9
- data/test/cases/scoping/relation_scoping_test.rb +47 -4
- data/test/cases/secure_token_test.rb +32 -0
- data/test/cases/serialization_test.rb +1 -1
- data/test/cases/serialized_attribute_test.rb +93 -6
- data/test/cases/statement_cache_test.rb +38 -0
- data/test/cases/store_test.rb +2 -1
- data/test/cases/suppressor_test.rb +63 -0
- data/test/cases/tasks/database_tasks_test.rb +73 -9
- data/test/cases/tasks/mysql_rake_test.rb +139 -118
- data/test/cases/tasks/postgresql_rake_test.rb +60 -6
- data/test/cases/tasks/sqlite_rake_test.rb +30 -3
- data/test/cases/test_case.rb +28 -20
- data/test/cases/test_fixtures_test.rb +36 -0
- data/test/cases/time_precision_test.rb +103 -0
- data/test/cases/timestamp_test.rb +44 -10
- data/test/cases/touch_later_test.rb +121 -0
- data/test/cases/transaction_callbacks_test.rb +128 -62
- data/test/cases/transaction_isolation_test.rb +2 -2
- data/test/cases/transactions_test.rb +61 -43
- data/test/cases/type/adapter_specific_registry_test.rb +133 -0
- data/test/cases/type/date_time_test.rb +14 -0
- data/test/cases/type/integer_test.rb +2 -96
- data/test/cases/type/string_test.rb +0 -14
- data/test/cases/type_test.rb +39 -0
- data/test/cases/types_test.rb +1 -118
- data/test/cases/unconnected_test.rb +1 -1
- data/test/cases/validations/absence_validation_test.rb +73 -0
- data/test/cases/validations/association_validation_test.rb +13 -2
- data/test/cases/validations/i18n_validation_test.rb +6 -10
- data/test/cases/validations/length_validation_test.rb +62 -30
- data/test/cases/validations/presence_validation_test.rb +36 -1
- data/test/cases/validations/uniqueness_validation_test.rb +128 -37
- data/test/cases/validations_repair_helper.rb +2 -6
- data/test/cases/validations_test.rb +36 -7
- data/test/cases/view_test.rb +102 -5
- data/test/cases/yaml_serialization_test.rb +21 -26
- data/test/config.example.yml +97 -0
- data/test/fixtures/bad_posts.yml +9 -0
- data/test/fixtures/books.yml +20 -0
- data/test/fixtures/content.yml +3 -0
- data/test/fixtures/content_positions.yml +3 -0
- data/test/fixtures/dead_parrots.yml +5 -0
- data/test/fixtures/live_parrots.yml +4 -0
- data/test/fixtures/naked/yml/parrots.yml +2 -0
- data/test/fixtures/naked/yml/trees.yml +3 -0
- data/test/fixtures/nodes.yml +29 -0
- data/test/fixtures/other_comments.yml +6 -0
- data/test/fixtures/other_dogs.yml +2 -0
- data/test/fixtures/other_posts.yml +7 -0
- data/test/fixtures/price_estimates.yml +10 -1
- data/test/fixtures/trees.yml +3 -0
- data/test/migrations/10_urban/9_add_expressions.rb +1 -1
- data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
- data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
- data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
- data/test/migrations/missing/1_people_have_last_names.rb +2 -2
- data/test/migrations/missing/3_we_need_reminders.rb +2 -2
- data/test/migrations/missing/4_innocent_jointable.rb +2 -2
- data/test/migrations/rename/1_we_need_things.rb +2 -2
- data/test/migrations/rename/2_rename_things.rb +2 -2
- data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
- data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
- data/test/migrations/to_copy2/1_create_articles.rb +1 -1
- data/test/migrations/to_copy2/2_create_comments.rb +1 -1
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
- data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
- data/test/migrations/valid/2_we_need_reminders.rb +2 -2
- data/test/migrations/valid/3_innocent_jointable.rb +2 -2
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
- data/test/models/admin/randomly_named_c1.rb +6 -2
- data/test/models/aircraft.rb +1 -0
- data/test/models/author.rb +4 -7
- data/test/models/bird.rb +1 -1
- data/test/models/book.rb +5 -0
- data/test/models/bulb.rb +2 -1
- data/test/models/car.rb +3 -0
- data/test/models/cat.rb +10 -0
- data/test/models/chef.rb +1 -0
- data/test/models/club.rb +2 -0
- data/test/models/comment.rb +17 -5
- data/test/models/company.rb +4 -2
- data/test/models/company_in_module.rb +1 -1
- data/test/models/contact.rb +1 -1
- data/test/models/content.rb +40 -0
- data/test/models/customer.rb +8 -2
- data/test/models/developer.rb +19 -0
- data/test/models/face.rb +1 -1
- data/test/models/guitar.rb +4 -0
- data/test/models/hotel.rb +2 -0
- data/test/models/member.rb +1 -0
- data/test/models/member_detail.rb +4 -3
- data/test/models/mentor.rb +3 -0
- data/test/models/mocktail_designer.rb +2 -0
- data/test/models/node.rb +5 -0
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +3 -0
- data/test/models/other_dog.rb +5 -0
- data/test/models/owner.rb +4 -1
- data/test/models/parrot.rb +6 -7
- data/test/models/person.rb +0 -1
- data/test/models/pet.rb +3 -0
- data/test/models/pet_treasure.rb +6 -0
- data/test/models/pirate.rb +3 -3
- data/test/models/post.rb +18 -9
- data/test/models/project.rb +9 -0
- data/test/models/randomly_named_c1.rb +1 -1
- data/test/models/recipe.rb +3 -0
- data/test/models/ship.rb +8 -2
- data/test/models/tag.rb +6 -0
- data/test/models/topic.rb +2 -8
- data/test/models/tree.rb +3 -0
- data/test/models/tuning_peg.rb +4 -0
- data/test/models/user.rb +14 -0
- data/test/models/uuid_item.rb +6 -0
- data/test/schema/mysql2_specific_schema.rb +33 -23
- data/test/schema/oracle_specific_schema.rb +1 -4
- data/test/schema/postgresql_specific_schema.rb +36 -124
- data/test/schema/schema.rb +170 -65
- data/test/schema/schema.rb.original +1057 -0
- data/test/schema/sqlite_specific_schema.rb +1 -5
- data/test/support/connection.rb +1 -0
- data/test/support/schema_dumping_helper.rb +1 -1
- data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
- data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
- metadata +146 -30
- data/lib/mswin32/rb19x/ibm_db.so +0 -0
- data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
- data/test/cases/attribute_methods/serialization_test.rb +0 -29
- data/test/cases/migration/change_schema_test - Copy.rb +0 -448
- data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
- data/test/cases/migration/table_and_index_test.rb +0 -24
- data/test/cases/relation/where_test2.rb +0 -36
- data/test/cases/type/decimal_test.rb +0 -56
- data/test/cases/type/unsigned_integer_test.rb +0 -18
- data/test/cases/xml_serialization_test.rb +0 -457
- data/test/fixtures/naked/csv/accounts.csv +0 -1
- data/test/schema/mysql_specific_schema.rb +0 -70
@@ -0,0 +1,52 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
|
3
|
+
module SchemaLoadCounter
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
attr_accessor :load_schema_calls
|
8
|
+
|
9
|
+
def load_schema!
|
10
|
+
self.load_schema_calls ||= 0
|
11
|
+
self.load_schema_calls +=1
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class SchemaLoadingTest < ActiveRecord::TestCase
|
18
|
+
def test_basic_model_is_loaded_once
|
19
|
+
klass = define_model
|
20
|
+
klass.new
|
21
|
+
assert_equal 1, klass.load_schema_calls
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_model_with_custom_lock_is_loaded_once
|
25
|
+
klass = define_model do |c|
|
26
|
+
c.table_name = :lock_without_defaults_cust
|
27
|
+
c.locking_column = :custom_lock_version
|
28
|
+
end
|
29
|
+
klass.new
|
30
|
+
assert_equal 1, klass.load_schema_calls
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_model_with_changed_custom_lock_is_loaded_twice
|
34
|
+
klass = define_model do |c|
|
35
|
+
c.table_name = :lock_without_defaults_cust
|
36
|
+
end
|
37
|
+
klass.new
|
38
|
+
klass.locking_column = :custom_lock_version
|
39
|
+
klass.new
|
40
|
+
assert_equal 2, klass.load_schema_calls
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def define_model
|
46
|
+
Class.new(ActiveRecord::Base) do
|
47
|
+
include SchemaLoadCounter
|
48
|
+
self.table_name = :lock_without_defaults
|
49
|
+
yield self if block_given?
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -4,13 +4,14 @@ require 'models/comment'
|
|
4
4
|
require 'models/developer'
|
5
5
|
require 'models/computer'
|
6
6
|
require 'models/vehicle'
|
7
|
+
require 'models/cat'
|
7
8
|
|
8
9
|
class DefaultScopingTest < ActiveRecord::TestCase
|
9
10
|
fixtures :developers, :posts, :comments
|
10
11
|
|
11
12
|
def test_default_scope
|
12
|
-
expected = Developer.all.merge!(:order => 'salary DESC').to_a.collect
|
13
|
-
received = DeveloperOrderedBySalary.all.collect
|
13
|
+
expected = Developer.all.merge!(:order => 'salary DESC').to_a.collect(&:salary)
|
14
|
+
received = DeveloperOrderedBySalary.all.collect(&:salary)
|
14
15
|
assert_equal expected, received
|
15
16
|
end
|
16
17
|
|
@@ -87,14 +88,14 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
87
88
|
end
|
88
89
|
|
89
90
|
def test_scope_overwrites_default
|
90
|
-
expected = Developer.all.merge!(order: 'salary DESC, name DESC').to_a.collect
|
91
|
-
received = DeveloperOrderedBySalary.by_name.to_a.collect
|
91
|
+
expected = Developer.all.merge!(order: 'salary DESC, name DESC').to_a.collect(&:name)
|
92
|
+
received = DeveloperOrderedBySalary.by_name.to_a.collect(&:name)
|
92
93
|
assert_equal expected, received
|
93
94
|
end
|
94
95
|
|
95
96
|
def test_reorder_overrides_default_scope_order
|
96
|
-
expected = Developer.order('name DESC').collect
|
97
|
-
received = DeveloperOrderedBySalary.reorder('name DESC').collect
|
97
|
+
expected = Developer.order('name DESC').collect(&:name)
|
98
|
+
received = DeveloperOrderedBySalary.reorder('name DESC').collect(&:name)
|
98
99
|
assert_equal expected, received
|
99
100
|
end
|
100
101
|
|
@@ -144,6 +145,14 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
144
145
|
expected_5 = Developer.order('salary DESC').collect(&:name)
|
145
146
|
received_5 = DeveloperOrderedBySalary.where.not("name" => ["Jamis", "David"]).unscope(where: :name).collect(&:name)
|
146
147
|
assert_equal expected_5, received_5
|
148
|
+
|
149
|
+
expected_6 = Developer.order('salary DESC').collect(&:name)
|
150
|
+
received_6 = DeveloperOrderedBySalary.where(Developer.arel_table['name'].eq('David')).unscope(where: :name).collect(&:name)
|
151
|
+
assert_equal expected_6, received_6
|
152
|
+
|
153
|
+
expected_7 = Developer.order('salary DESC').collect(&:name)
|
154
|
+
received_7 = DeveloperOrderedBySalary.where(Developer.arel_table[:name].eq('David')).unscope(where: :name).collect(&:name)
|
155
|
+
assert_equal expected_7, received_7
|
147
156
|
end
|
148
157
|
|
149
158
|
def test_unscope_comparison_where_clauses
|
@@ -159,34 +168,34 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
159
168
|
end
|
160
169
|
|
161
170
|
def test_unscope_multiple_where_clauses
|
162
|
-
expected = Developer.order('salary DESC').collect
|
163
|
-
received = DeveloperOrderedBySalary.where(name: 'Jamis').where(id: 1).unscope(where: [:name, :id]).collect
|
171
|
+
expected = Developer.order('salary DESC').collect(&:name)
|
172
|
+
received = DeveloperOrderedBySalary.where(name: 'Jamis').where(id: 1).unscope(where: [:name, :id]).collect(&:name)
|
164
173
|
assert_equal expected, received
|
165
174
|
end
|
166
175
|
|
167
176
|
def test_unscope_string_where_clauses_involved
|
168
177
|
dev_relation = Developer.order('salary DESC').where("created_at > ?", 1.year.ago)
|
169
|
-
expected = dev_relation.collect
|
178
|
+
expected = dev_relation.collect(&:name)
|
170
179
|
|
171
180
|
dev_ordered_relation = DeveloperOrderedBySalary.where(name: 'Jamis').where("created_at > ?", 1.year.ago)
|
172
|
-
received = dev_ordered_relation.unscope(where: [:name]).collect
|
181
|
+
received = dev_ordered_relation.unscope(where: [:name]).collect(&:name)
|
173
182
|
|
174
183
|
assert_equal expected, received
|
175
184
|
end
|
176
185
|
|
177
186
|
def test_unscope_with_grouping_attributes
|
178
|
-
expected = Developer.order('salary DESC').collect
|
179
|
-
received = DeveloperOrderedBySalary.group(:name).unscope(:group).collect
|
187
|
+
expected = Developer.order('salary DESC').collect(&:name)
|
188
|
+
received = DeveloperOrderedBySalary.group(:name).unscope(:group).collect(&:name)
|
180
189
|
assert_equal expected, received
|
181
190
|
|
182
|
-
expected_2 = Developer.order('salary DESC').collect
|
183
|
-
received_2 = DeveloperOrderedBySalary.group("name").unscope(:group).collect
|
191
|
+
expected_2 = Developer.order('salary DESC').collect(&:name)
|
192
|
+
received_2 = DeveloperOrderedBySalary.group("name").unscope(:group).collect(&:name)
|
184
193
|
assert_equal expected_2, received_2
|
185
194
|
end
|
186
195
|
|
187
196
|
def test_unscope_with_limit_in_query
|
188
|
-
expected = Developer.order('salary DESC').collect
|
189
|
-
received = DeveloperOrderedBySalary.limit(1).unscope(:limit).collect
|
197
|
+
expected = Developer.order('salary DESC').collect(&:name)
|
198
|
+
received = DeveloperOrderedBySalary.limit(1).unscope(:limit).collect(&:name)
|
190
199
|
assert_equal expected, received
|
191
200
|
end
|
192
201
|
|
@@ -196,42 +205,42 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
196
205
|
end
|
197
206
|
|
198
207
|
def test_unscope_reverse_order
|
199
|
-
expected = Developer.all.collect
|
200
|
-
received = Developer.order('salary DESC').reverse_order.unscope(:order).collect
|
208
|
+
expected = Developer.all.collect(&:name)
|
209
|
+
received = Developer.order('salary DESC').reverse_order.unscope(:order).collect(&:name)
|
201
210
|
assert_equal expected, received
|
202
211
|
end
|
203
212
|
|
204
213
|
def test_unscope_select
|
205
|
-
expected = Developer.order('salary ASC').collect
|
206
|
-
received = Developer.order('salary DESC').reverse_order.select(:name).unscope(:select).collect
|
214
|
+
expected = Developer.order('salary ASC').collect(&:name)
|
215
|
+
received = Developer.order('salary DESC').reverse_order.select(:name).unscope(:select).collect(&:name)
|
207
216
|
assert_equal expected, received
|
208
217
|
|
209
|
-
expected_2 = Developer.all.collect
|
210
|
-
received_2 = Developer.select(:name).unscope(:select).collect
|
218
|
+
expected_2 = Developer.all.collect(&:id)
|
219
|
+
received_2 = Developer.select(:name).unscope(:select).collect(&:id)
|
211
220
|
assert_equal expected_2, received_2
|
212
221
|
end
|
213
222
|
|
214
223
|
def test_unscope_offset
|
215
|
-
expected = Developer.all.collect
|
216
|
-
received = Developer.offset(5).unscope(:offset).collect
|
224
|
+
expected = Developer.all.collect(&:name)
|
225
|
+
received = Developer.offset(5).unscope(:offset).collect(&:name)
|
217
226
|
assert_equal expected, received
|
218
227
|
end
|
219
228
|
|
220
229
|
def test_unscope_joins_and_select_on_developers_projects
|
221
|
-
expected = Developer.all.collect
|
222
|
-
received = Developer.joins('JOIN developers_projects ON id = developer_id').select(:id).unscope(:joins, :select).collect
|
230
|
+
expected = Developer.all.collect(&:name)
|
231
|
+
received = Developer.joins('JOIN developers_projects ON id = developer_id').select(:id).unscope(:joins, :select).collect(&:name)
|
223
232
|
assert_equal expected, received
|
224
233
|
end
|
225
234
|
|
226
235
|
def test_unscope_includes
|
227
|
-
expected = Developer.all.collect
|
228
|
-
received = Developer.includes(:projects).select(:id).unscope(:includes, :select).collect
|
236
|
+
expected = Developer.all.collect(&:name)
|
237
|
+
received = Developer.includes(:projects).select(:id).unscope(:includes, :select).collect(&:name)
|
229
238
|
assert_equal expected, received
|
230
239
|
end
|
231
240
|
|
232
241
|
def test_unscope_having
|
233
|
-
expected = DeveloperOrderedBySalary.all.collect
|
234
|
-
received = DeveloperOrderedBySalary.having("name IN ('Jamis', 'David')").unscope(:having).collect
|
242
|
+
expected = DeveloperOrderedBySalary.all.collect(&:name)
|
243
|
+
received = DeveloperOrderedBySalary.having("name IN ('Jamis', 'David')").unscope(:having).collect(&:name)
|
235
244
|
assert_equal expected, received
|
236
245
|
end
|
237
246
|
|
@@ -289,13 +298,13 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
289
298
|
|
290
299
|
def test_unscope_merging
|
291
300
|
merged = Developer.where(name: "Jamis").merge(Developer.unscope(:where))
|
292
|
-
assert merged.
|
293
|
-
assert !merged.where(name: "Jon").
|
301
|
+
assert merged.where_clause.empty?
|
302
|
+
assert !merged.where(name: "Jon").where_clause.empty?
|
294
303
|
end
|
295
304
|
|
296
305
|
def test_order_in_default_scope_should_not_prevail
|
297
|
-
expected = Developer.all.merge!(order: 'salary desc').to_a.collect
|
298
|
-
received = DeveloperOrderedBySalary.all.merge!(order: 'salary').to_a.collect
|
306
|
+
expected = Developer.all.merge!(order: 'salary desc').to_a.collect(&:salary)
|
307
|
+
received = DeveloperOrderedBySalary.all.merge!(order: 'salary').to_a.collect(&:salary)
|
299
308
|
assert_equal expected, received
|
300
309
|
end
|
301
310
|
|
@@ -366,6 +375,46 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
366
375
|
assert_equal 10, DeveloperCalledJamis.unscoped { DeveloperCalledJamis.poor }.length
|
367
376
|
end
|
368
377
|
|
378
|
+
def test_default_scope_with_joins
|
379
|
+
assert_equal Comment.where(post_id: SpecialPostWithDefaultScope.pluck(:id)).count,
|
380
|
+
Comment.joins(:special_post_with_default_scope).count
|
381
|
+
assert_equal Comment.where(post_id: Post.pluck(:id)).count,
|
382
|
+
Comment.joins(:post).count
|
383
|
+
end
|
384
|
+
|
385
|
+
def test_joins_not_affected_by_scope_other_than_default_or_unscoped
|
386
|
+
without_scope_on_post = Comment.joins(:post).to_a
|
387
|
+
with_scope_on_post = nil
|
388
|
+
Post.where(id: [1, 5, 6]).scoping do
|
389
|
+
with_scope_on_post = Comment.joins(:post).to_a
|
390
|
+
end
|
391
|
+
|
392
|
+
assert_equal with_scope_on_post, without_scope_on_post
|
393
|
+
end
|
394
|
+
|
395
|
+
def test_unscoped_with_joins_should_not_have_default_scope
|
396
|
+
assert_equal SpecialPostWithDefaultScope.unscoped { Comment.joins(:special_post_with_default_scope).to_a },
|
397
|
+
Comment.joins(:post).to_a
|
398
|
+
end
|
399
|
+
|
400
|
+
def test_sti_association_with_unscoped_not_affected_by_default_scope
|
401
|
+
post = posts(:thinking)
|
402
|
+
comments = [comments(:does_it_hurt)]
|
403
|
+
|
404
|
+
post.special_comments.update_all(deleted_at: Time.now)
|
405
|
+
|
406
|
+
assert_raises(ActiveRecord::RecordNotFound) { Post.joins(:special_comments).find(post.id) }
|
407
|
+
assert_equal [], post.special_comments
|
408
|
+
|
409
|
+
SpecialComment.unscoped do
|
410
|
+
assert_equal post, Post.joins(:special_comments).find(post.id)
|
411
|
+
assert_equal comments, Post.joins(:special_comments).find(post.id).special_comments
|
412
|
+
assert_equal comments, Post.eager_load(:special_comments).find(post.id).special_comments
|
413
|
+
assert_equal comments, Post.includes(:special_comments).find(post.id).special_comments
|
414
|
+
assert_equal comments, Post.preload(:special_comments).find(post.id).special_comments
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
369
418
|
def test_default_scope_select_ignored_by_aggregations
|
370
419
|
assert_equal DeveloperWithSelect.all.to_a.count, DeveloperWithSelect.count
|
371
420
|
end
|
@@ -431,24 +480,49 @@ class DefaultScopingTest < ActiveRecord::TestCase
|
|
431
480
|
|
432
481
|
test "additional conditions are ANDed with the default scope" do
|
433
482
|
scope = DeveloperCalledJamis.where(name: "David")
|
434
|
-
assert_equal 2, scope.
|
483
|
+
assert_equal 2, scope.where_clause.ast.children.length
|
435
484
|
assert_equal [], scope.to_a
|
436
485
|
end
|
437
486
|
|
438
487
|
test "additional conditions in a scope are ANDed with the default scope" do
|
439
488
|
scope = DeveloperCalledJamis.david
|
440
|
-
assert_equal 2, scope.
|
489
|
+
assert_equal 2, scope.where_clause.ast.children.length
|
441
490
|
assert_equal [], scope.to_a
|
442
491
|
end
|
443
492
|
|
444
493
|
test "a scope can remove the condition from the default scope" do
|
445
494
|
scope = DeveloperCalledJamis.david2
|
446
|
-
assert_equal 1, scope.
|
447
|
-
assert_equal Developer.where(name: "David")
|
495
|
+
assert_equal 1, scope.where_clause.ast.children.length
|
496
|
+
assert_equal Developer.where(name: "David"), scope
|
448
497
|
end
|
449
498
|
|
450
499
|
def test_with_abstract_class_where_clause_should_not_be_duplicated
|
451
500
|
scope = Bus.all
|
452
|
-
assert_equal scope.
|
501
|
+
assert_equal scope.where_clause.ast.children.length, 1
|
502
|
+
end
|
503
|
+
|
504
|
+
def test_sti_conditions_are_not_carried_in_default_scope
|
505
|
+
ConditionalStiPost.create! body: ''
|
506
|
+
SubConditionalStiPost.create! body: ''
|
507
|
+
SubConditionalStiPost.create! title: 'Hello world', body: ''
|
508
|
+
|
509
|
+
assert_equal 2, ConditionalStiPost.count
|
510
|
+
assert_equal 2, ConditionalStiPost.all.to_a.size
|
511
|
+
assert_equal 3, ConditionalStiPost.unscope(where: :title).to_a.size
|
512
|
+
|
513
|
+
assert_equal 1, SubConditionalStiPost.count
|
514
|
+
assert_equal 1, SubConditionalStiPost.all.to_a.size
|
515
|
+
assert_equal 2, SubConditionalStiPost.unscope(where: :title).to_a.size
|
516
|
+
end
|
517
|
+
|
518
|
+
def test_with_abstract_class_scope_should_be_executed_in_correct_context
|
519
|
+
vegetarian_pattern, gender_pattern = if current_adapter?(:Mysql2Adapter)
|
520
|
+
[/`lions`.`is_vegetarian`/, /`lions`.`gender`/]
|
521
|
+
else
|
522
|
+
[/"lions"."is_vegetarian"/, /"lions"."gender"/]
|
523
|
+
end
|
524
|
+
|
525
|
+
assert_match vegetarian_pattern, Lion.all.to_sql
|
526
|
+
assert_match gender_pattern, Lion.female.to_sql
|
453
527
|
end
|
454
528
|
end
|
@@ -188,8 +188,9 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
188
188
|
def test_any_should_call_proxy_found_if_using_a_block
|
189
189
|
topics = Topic.base
|
190
190
|
assert_queries(1) do
|
191
|
-
topics
|
192
|
-
|
191
|
+
assert_not_called(topics, :empty?) do
|
192
|
+
topics.any? { true }
|
193
|
+
end
|
193
194
|
end
|
194
195
|
end
|
195
196
|
|
@@ -217,8 +218,9 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
217
218
|
def test_many_should_call_proxy_found_if_using_a_block
|
218
219
|
topics = Topic.base
|
219
220
|
assert_queries(1) do
|
220
|
-
topics
|
221
|
-
|
221
|
+
assert_not_called(topics, :size) do
|
222
|
+
topics.many? { true }
|
223
|
+
end
|
222
224
|
end
|
223
225
|
end
|
224
226
|
|
@@ -299,7 +301,7 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
299
301
|
:relation, # private class method on AR::Base
|
300
302
|
:new, # redefined class method on AR::Base
|
301
303
|
:all, # a default scope
|
302
|
-
:public, # some
|
304
|
+
:public, # some important methods on Module and Class
|
303
305
|
:protected,
|
304
306
|
:private,
|
305
307
|
:name,
|
@@ -317,13 +319,15 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
317
319
|
]
|
318
320
|
|
319
321
|
conflicts.each do |name|
|
320
|
-
assert_raises(ArgumentError, "scope `#{name}` should not be allowed") do
|
322
|
+
e = assert_raises(ArgumentError, "scope `#{name}` should not be allowed") do
|
321
323
|
klass.class_eval { scope name, ->{ where(approved: true) } }
|
322
324
|
end
|
325
|
+
assert_match(/You tried to define a scope named \"#{name}\" on the model/, e.message)
|
323
326
|
|
324
|
-
assert_raises(ArgumentError, "scope `#{name}` should not be allowed") do
|
327
|
+
e = assert_raises(ArgumentError, "scope `#{name}` should not be allowed") do
|
325
328
|
subklass.class_eval { scope name, ->{ where(approved: true) } }
|
326
329
|
end
|
330
|
+
assert_match(/You tried to define a scope named \"#{name}\" on the model/, e.message)
|
327
331
|
end
|
328
332
|
|
329
333
|
non_conflicts.each do |name|
|
@@ -380,8 +384,8 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
380
384
|
end
|
381
385
|
|
382
386
|
def test_should_not_duplicates_where_values
|
383
|
-
|
384
|
-
assert_equal
|
387
|
+
relation = Topic.where("1=1")
|
388
|
+
assert_equal relation.where_clause, relation.scope_with_lambda.where_clause
|
385
389
|
end
|
386
390
|
|
387
391
|
def test_chaining_with_duplicate_joins
|
@@ -436,6 +440,25 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
436
440
|
end
|
437
441
|
end
|
438
442
|
|
443
|
+
def test_scopes_with_reserved_names
|
444
|
+
class << Topic
|
445
|
+
def public_method; end
|
446
|
+
public :public_method
|
447
|
+
|
448
|
+
def protected_method; end
|
449
|
+
protected :protected_method
|
450
|
+
|
451
|
+
def private_method; end
|
452
|
+
private :private_method
|
453
|
+
end
|
454
|
+
|
455
|
+
[:public_method, :protected_method, :private_method].each do |reserved_method|
|
456
|
+
assert Topic.respond_to?(reserved_method, true)
|
457
|
+
ActiveRecord::Base.logger.expects(:warn)
|
458
|
+
silence_warnings { Topic.scope(reserved_method, -> { }) }
|
459
|
+
end
|
460
|
+
end
|
461
|
+
|
439
462
|
def test_scopes_on_relations
|
440
463
|
# Topic.replied
|
441
464
|
approved_topics = Topic.all.approved.order('id DESC')
|
@@ -521,4 +544,18 @@ class NamedScopingTest < ActiveRecord::TestCase
|
|
521
544
|
assert_equal 1, SpecialComment.where(body: 'go crazy').created.count
|
522
545
|
end
|
523
546
|
|
547
|
+
def test_model_class_should_respond_to_none
|
548
|
+
assert !Topic.none?
|
549
|
+
Topic.delete_all
|
550
|
+
assert Topic.none?
|
551
|
+
end
|
552
|
+
|
553
|
+
def test_model_class_should_respond_to_one
|
554
|
+
assert !Topic.one?
|
555
|
+
Topic.delete_all
|
556
|
+
assert !Topic.one?
|
557
|
+
Topic.create!
|
558
|
+
assert Topic.one?
|
559
|
+
end
|
560
|
+
|
524
561
|
end
|
@@ -10,7 +10,7 @@ require 'models/person'
|
|
10
10
|
require 'models/reference'
|
11
11
|
|
12
12
|
class RelationScopingTest < ActiveRecord::TestCase
|
13
|
-
fixtures :authors, :developers, :projects, :comments, :posts, :developers_projects
|
13
|
+
fixtures :authors, :developers, :projects, :comments, :posts, :developers_projects
|
14
14
|
|
15
15
|
setup do
|
16
16
|
developers(:david)
|
@@ -184,7 +184,7 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
184
184
|
rescue
|
185
185
|
end
|
186
186
|
|
187
|
-
|
187
|
+
assert_not Developer.all.to_sql.include?("name = 'Jamis'"), "scope was not restored"
|
188
188
|
end
|
189
189
|
|
190
190
|
def test_default_scope_filters_on_joins
|
@@ -208,6 +208,49 @@ class RelationScopingTest < ActiveRecord::TestCase
|
|
208
208
|
assert_equal [], DeveloperFilteredOnJoins.all
|
209
209
|
assert_not_equal [], Developer.all
|
210
210
|
end
|
211
|
+
|
212
|
+
def test_current_scope_does_not_pollute_sibling_subclasses
|
213
|
+
Comment.none.scoping do
|
214
|
+
assert_not SpecialComment.all.any?
|
215
|
+
assert_not VerySpecialComment.all.any?
|
216
|
+
assert_not SubSpecialComment.all.any?
|
217
|
+
end
|
218
|
+
|
219
|
+
SpecialComment.none.scoping do
|
220
|
+
assert Comment.all.any?
|
221
|
+
assert VerySpecialComment.all.any?
|
222
|
+
assert_not SubSpecialComment.all.any?
|
223
|
+
end
|
224
|
+
|
225
|
+
SubSpecialComment.none.scoping do
|
226
|
+
assert Comment.all.any?
|
227
|
+
assert VerySpecialComment.all.any?
|
228
|
+
assert SpecialComment.all.any?
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_scoping_is_correctly_restored
|
233
|
+
Comment.unscoped do
|
234
|
+
SpecialComment.unscoped.created
|
235
|
+
end
|
236
|
+
|
237
|
+
assert_nil Comment.current_scope
|
238
|
+
assert_nil SpecialComment.current_scope
|
239
|
+
end
|
240
|
+
|
241
|
+
def test_circular_joins_with_scoping_does_not_crash
|
242
|
+
posts = Post.joins(comments: :post).scoping do
|
243
|
+
Post.first(10)
|
244
|
+
end
|
245
|
+
assert_equal posts, Post.joins(comments: :post).first(10)
|
246
|
+
end
|
247
|
+
|
248
|
+
def test_circular_left_joins_with_scoping_does_not_crash
|
249
|
+
posts = Post.left_joins(comments: :post).scoping do
|
250
|
+
Post.first(10)
|
251
|
+
end
|
252
|
+
assert_equal posts, Post.left_joins(comments: :post).first(10)
|
253
|
+
end
|
211
254
|
end
|
212
255
|
|
213
256
|
class NestedRelationScopingTest < ActiveRecord::TestCase
|
@@ -218,8 +261,8 @@ class NestedRelationScopingTest < ActiveRecord::TestCase
|
|
218
261
|
Developer.limit(10).scoping do
|
219
262
|
devs = Developer.all
|
220
263
|
sql = devs.to_sql
|
221
|
-
assert_match
|
222
|
-
assert_match
|
264
|
+
assert_match "(salary = 80000)", sql
|
265
|
+
assert_match(/LIMIT 10|ROWNUM <= 10|FETCH FIRST 10 ROWS ONLY/, sql)
|
223
266
|
end
|
224
267
|
end
|
225
268
|
end
|