sequel 4.49.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +130 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +6 -9
- data/doc/advanced_associations.rdoc +91 -168
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/schema_modification.rdoc +78 -64
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +4 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +6 -26
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/jdbc.rb +18 -74
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/oracle.rb +8 -13
- data/lib/sequel/adapters/postgres.rb +28 -150
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +61 -227
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +58 -264
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +22 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/connection_pool.rb +38 -28
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +36 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +93 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/dataset/actions.rb +57 -107
- data/lib/sequel/dataset/dataset_module.rb +4 -16
- data/lib/sequel/dataset/features.rb +35 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +91 -161
- data/lib/sequel/dataset/sql.rb +33 -225
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +27 -43
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +3 -16
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/model/associations.rb +129 -131
- data/lib/sequel/model/base.rb +133 -731
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -23
- data/lib/sequel/version.rb +2 -2
- data/lib/sequel.rb +1 -1
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +111 -478
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +459 -664
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +96 -244
- data/spec/core/dataset_spec.rb +99 -414
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +241 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +88 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +30 -92
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +8 -30
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +5 -6
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +25 -33
- data/spec/extensions/migration_spec.rb +12 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +2 -2
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +22 -26
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +22 -31
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +40 -9
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +23 -34
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +43 -32
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +5 -17
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/synchronize_sql_spec.rb +124 -0
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +5 -7
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +12 -16
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -13
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +8 -13
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +12 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +7 -23
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +10 -10
- data/spec/integration/spec_helper.rb +17 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +43 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +48 -17
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +29 -339
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +33 -129
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +19 -65
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
model_class = proc do |klass, &block|
|
|
4
4
|
c = Class.new(klass)
|
|
@@ -140,39 +140,6 @@ describe Sequel::Model, "hook_class_methods plugin" do
|
|
|
140
140
|
adds.must_equal ['456']
|
|
141
141
|
end
|
|
142
142
|
|
|
143
|
-
deprecated "should stop processing if a before hook returns false" do
|
|
144
|
-
flag = true
|
|
145
|
-
adds = []
|
|
146
|
-
|
|
147
|
-
a = model_class.call Sequel::Model do
|
|
148
|
-
before_save{adds << 'cruel'; flag}
|
|
149
|
-
before_save{adds << 'blah'; flag}
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
a.new.before_save
|
|
153
|
-
adds.must_equal ['blah', 'cruel']
|
|
154
|
-
|
|
155
|
-
# chain should not break on nil
|
|
156
|
-
adds = []
|
|
157
|
-
flag = nil
|
|
158
|
-
a.new.before_save
|
|
159
|
-
adds.must_equal ['blah', 'cruel']
|
|
160
|
-
|
|
161
|
-
adds = []
|
|
162
|
-
flag = false
|
|
163
|
-
a.new.before_save
|
|
164
|
-
adds.must_equal ['blah']
|
|
165
|
-
|
|
166
|
-
b = Class.new(a)
|
|
167
|
-
b.class_eval do
|
|
168
|
-
before_save{adds << 'mau'}
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
adds = []
|
|
172
|
-
b.new.before_save
|
|
173
|
-
adds.must_equal ['mau', 'blah']
|
|
174
|
-
end
|
|
175
|
-
|
|
176
143
|
it "should stop processing if a before hook calls cancel_action" do
|
|
177
144
|
flag = true
|
|
178
145
|
adds = []
|
|
@@ -226,25 +193,12 @@ describe "Model#before_create && Model#after_create" do
|
|
|
226
193
|
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after']
|
|
227
194
|
end
|
|
228
195
|
|
|
229
|
-
deprecated ".create should cancel the save and raise an error if before_create returns false and raise_on_save_failure is true" do
|
|
230
|
-
@c.before_create{false}
|
|
231
|
-
proc{@c.create(:x => 2)}.must_raise(Sequel::HookFailed)
|
|
232
|
-
DB.sqls.must_equal []
|
|
233
|
-
end
|
|
234
|
-
|
|
235
196
|
it ".create should cancel the save and raise an error if before_create calls cancel_action and raise_on_save_failure is true" do
|
|
236
197
|
@c.before_create{cancel_action}
|
|
237
198
|
proc{@c.create(:x => 2)}.must_raise(Sequel::HookFailed)
|
|
238
199
|
DB.sqls.must_equal []
|
|
239
200
|
end
|
|
240
201
|
|
|
241
|
-
deprecated ".create should cancel the save and return nil if before_create returns false and raise_on_save_failure is false" do
|
|
242
|
-
@c.before_create{false}
|
|
243
|
-
@c.raise_on_save_failure = false
|
|
244
|
-
@c.create(:x => 2).must_be_nil
|
|
245
|
-
DB.sqls.must_equal []
|
|
246
|
-
end
|
|
247
|
-
|
|
248
202
|
it ".create should cancel the save and return nil if before_create calls cancel_action and raise_on_save_failure is false" do
|
|
249
203
|
@c.before_create{cancel_action}
|
|
250
204
|
@c.raise_on_save_failure = false
|
|
@@ -269,25 +223,12 @@ describe "Model#before_update && Model#after_update" do
|
|
|
269
223
|
DB.sqls.must_equal ['BLAH before', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'BLAH after']
|
|
270
224
|
end
|
|
271
225
|
|
|
272
|
-
deprecated "#save should cancel the save and raise an error if before_update returns false and raise_on_save_failure is true" do
|
|
273
|
-
@c.before_update{false}
|
|
274
|
-
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
|
275
|
-
DB.sqls.must_equal []
|
|
276
|
-
end
|
|
277
|
-
|
|
278
226
|
it "#save should cancel the save and raise an error if before_update calls cancel_action and raise_on_save_failure is true" do
|
|
279
227
|
@c.before_update{cancel_action}
|
|
280
228
|
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
|
281
229
|
DB.sqls.must_equal []
|
|
282
230
|
end
|
|
283
231
|
|
|
284
|
-
deprecated "#save should cancel the save and return nil if before_update returns false and raise_on_save_failure is false" do
|
|
285
|
-
@c.before_update{false}
|
|
286
|
-
@c.raise_on_save_failure = false
|
|
287
|
-
@c.load(:id => 2233).save.must_be_nil
|
|
288
|
-
DB.sqls.must_equal []
|
|
289
|
-
end
|
|
290
|
-
|
|
291
232
|
it "#save should cancel the save and return nil if before_update calls cancel_action and raise_on_save_failure is false" do
|
|
292
233
|
@c.before_update{cancel_action}
|
|
293
234
|
@c.raise_on_save_failure = false
|
|
@@ -320,25 +261,12 @@ describe "Model#before_save && Model#after_save" do
|
|
|
320
261
|
DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after']
|
|
321
262
|
end
|
|
322
263
|
|
|
323
|
-
deprecated "#save should cancel the save and raise an error if before_save returns false and raise_on_save_failure is true" do
|
|
324
|
-
@c.before_save{false}
|
|
325
|
-
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
|
326
|
-
DB.sqls.must_equal []
|
|
327
|
-
end
|
|
328
|
-
|
|
329
264
|
it "#save should cancel the save and raise an error if before_save calls cancel_action and raise_on_save_failure is true" do
|
|
330
265
|
@c.before_save{cancel_action}
|
|
331
266
|
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
|
332
267
|
DB.sqls.must_equal []
|
|
333
268
|
end
|
|
334
269
|
|
|
335
|
-
deprecated "#save should cancel the save and return nil if before_save returns false and raise_on_save_failure is false" do
|
|
336
|
-
@c.before_save{false}
|
|
337
|
-
@c.raise_on_save_failure = false
|
|
338
|
-
@c.load(:id => 2233).save.must_be_nil
|
|
339
|
-
DB.sqls.must_equal []
|
|
340
|
-
end
|
|
341
|
-
|
|
342
270
|
it "#save should cancel the save and return nil if before_save calls cancel_action and raise_on_save_failure is false" do
|
|
343
271
|
@c.before_save{cancel_action}
|
|
344
272
|
@c.raise_on_save_failure = false
|
|
@@ -363,25 +291,12 @@ describe "Model#before_destroy && Model#after_destroy" do
|
|
|
363
291
|
DB.sqls.must_equal ['BLAH before', "DELETE FROM items WHERE id = 2233", 'BLAH after']
|
|
364
292
|
end
|
|
365
293
|
|
|
366
|
-
deprecated "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_save_failure is true" do
|
|
367
|
-
@c.before_destroy{false}
|
|
368
|
-
proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
|
|
369
|
-
DB.sqls.must_equal []
|
|
370
|
-
end
|
|
371
|
-
|
|
372
294
|
it "#destroy should cancel the destroy and raise an error if before_destroy calls cancel_action and raise_on_save_failure is true" do
|
|
373
295
|
@c.before_destroy{cancel_action}
|
|
374
296
|
proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
|
|
375
297
|
DB.sqls.must_equal []
|
|
376
298
|
end
|
|
377
299
|
|
|
378
|
-
deprecated "#destroy should cancel the destroy and return nil if before_destroy returns false and raise_on_save_failure is false" do
|
|
379
|
-
@c.before_destroy{false}
|
|
380
|
-
@c.raise_on_save_failure = false
|
|
381
|
-
@c.load(:id => 2233).destroy.must_be_nil
|
|
382
|
-
DB.sqls.must_equal []
|
|
383
|
-
end
|
|
384
|
-
|
|
385
300
|
it "#destroy should cancel the destroy and return nil if before_destroy calls cancel_action and raise_on_save_failure is false" do
|
|
386
301
|
@c.before_destroy{cancel_action}
|
|
387
302
|
@c.raise_on_save_failure = false
|
|
@@ -430,25 +345,12 @@ describe "Model#before_validation && Model#after_validation" do
|
|
|
430
345
|
DB.sqls.must_equal ['BLAH before', 'BLAH after']
|
|
431
346
|
end
|
|
432
347
|
|
|
433
|
-
deprecated "#save should cancel the save and raise an error if before_validation returns false and raise_on_save_failure is true" do
|
|
434
|
-
@c.before_validation{false}
|
|
435
|
-
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
|
436
|
-
DB.sqls.must_equal []
|
|
437
|
-
end
|
|
438
|
-
|
|
439
348
|
it "#save should cancel the save and raise an error if before_validation calls cancel_action and raise_on_save_failure is true" do
|
|
440
349
|
@c.before_validation{cancel_action}
|
|
441
350
|
proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
|
|
442
351
|
DB.sqls.must_equal []
|
|
443
352
|
end
|
|
444
353
|
|
|
445
|
-
deprecated "#save should cancel the save and return nil if before_validation returns false and raise_on_save_failure is false" do
|
|
446
|
-
@c.before_validation{false}
|
|
447
|
-
@c.raise_on_save_failure = false
|
|
448
|
-
@c.load(:id => 2233).save.must_be_nil
|
|
449
|
-
DB.sqls.must_equal []
|
|
450
|
-
end
|
|
451
|
-
|
|
452
354
|
it "#save should cancel the save and return nil if before_validation calls cancel_action and raise_on_save_failure is false" do
|
|
453
355
|
@c.before_validation{cancel_action}
|
|
454
356
|
@c.raise_on_save_failure = false
|
|
@@ -457,52 +359,6 @@ describe "Model#before_validation && Model#after_validation" do
|
|
|
457
359
|
end
|
|
458
360
|
end
|
|
459
361
|
|
|
460
|
-
describe "Model transaction hooks" do
|
|
461
|
-
before do
|
|
462
|
-
DB.reset
|
|
463
|
-
|
|
464
|
-
@c = model_class.call(Sequel::Model(:items)) do
|
|
465
|
-
columns :x
|
|
466
|
-
after_save {DB << "AS"}
|
|
467
|
-
after_destroy {DB << "AD"}
|
|
468
|
-
self.use_transactions = true
|
|
469
|
-
end
|
|
470
|
-
end
|
|
471
|
-
|
|
472
|
-
deprecated "should call after_commit or after_rollback depending on whether the transaction commits or rolls back" do
|
|
473
|
-
@c.after_commit{DB << 'AC'}
|
|
474
|
-
@c.after_rollback{DB << 'AR'}
|
|
475
|
-
m = @c.load(:id => 2233, :x=>123)
|
|
476
|
-
|
|
477
|
-
m.save
|
|
478
|
-
DB.sqls.must_equal ['BEGIN', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'AS', 'COMMIT', 'AC']
|
|
479
|
-
|
|
480
|
-
@c.db.transaction(:rollback=>:always){m.save}
|
|
481
|
-
DB.sqls.must_equal ['BEGIN', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'AS', 'ROLLBACK', 'AR']
|
|
482
|
-
|
|
483
|
-
@c.db.transaction do
|
|
484
|
-
m.save
|
|
485
|
-
DB.sqls.must_equal ['BEGIN', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'AS']
|
|
486
|
-
end
|
|
487
|
-
end
|
|
488
|
-
|
|
489
|
-
deprecated "should call after_destroy_commit or after_destroy_rollback depending on whether the transaction commits or rolls back" do
|
|
490
|
-
@c.after_destroy_commit {DB << 'ADC'}
|
|
491
|
-
@c.after_destroy_rollback{DB << 'ADR'}
|
|
492
|
-
|
|
493
|
-
@c.load(:id => 2233).destroy
|
|
494
|
-
DB.sqls.must_equal ['BEGIN', 'DELETE FROM items WHERE id = 2233', 'AD', 'COMMIT', 'ADC']
|
|
495
|
-
|
|
496
|
-
@c.db.transaction(:rollback=>:always){@c.load(:id => 2233).destroy}
|
|
497
|
-
DB.sqls.must_equal ['BEGIN', 'DELETE FROM items WHERE id = 2233', 'AD', 'ROLLBACK', 'ADR']
|
|
498
|
-
|
|
499
|
-
@c.db.transaction do
|
|
500
|
-
@c.load(:id => 2233).destroy
|
|
501
|
-
DB.sqls.must_equal ['BEGIN', 'DELETE FROM items WHERE id = 2233', 'AD']
|
|
502
|
-
end
|
|
503
|
-
end
|
|
504
|
-
end
|
|
505
|
-
|
|
506
362
|
describe "Model.has_hooks?" do
|
|
507
363
|
before do
|
|
508
364
|
@c = model_class.call(Sequel::Model(:items))
|
|
@@ -522,52 +378,3 @@ describe "Model.has_hooks?" do
|
|
|
522
378
|
@d.has_hooks?(:before_save).must_equal false
|
|
523
379
|
end
|
|
524
380
|
end
|
|
525
|
-
|
|
526
|
-
describe "Model#add_hook_type" do
|
|
527
|
-
before do
|
|
528
|
-
deprecated do
|
|
529
|
-
class ::Foo < Sequel::Model(:items)
|
|
530
|
-
plugin :hook_class_methods
|
|
531
|
-
add_hook_type :before_bar, :after_bar
|
|
532
|
-
|
|
533
|
-
def bar
|
|
534
|
-
return :b if before_bar == false
|
|
535
|
-
return :a if after_bar == false
|
|
536
|
-
true
|
|
537
|
-
end
|
|
538
|
-
end
|
|
539
|
-
@f = Class.new(Foo)
|
|
540
|
-
end
|
|
541
|
-
end
|
|
542
|
-
after do
|
|
543
|
-
Object.send(:remove_const, :Foo)
|
|
544
|
-
end
|
|
545
|
-
|
|
546
|
-
deprecated "should have before_bar and after_bar class methods" do
|
|
547
|
-
@f.must_respond_to(:before_bar)
|
|
548
|
-
@f.must_respond_to(:before_bar)
|
|
549
|
-
end
|
|
550
|
-
|
|
551
|
-
deprecated "should have before_bar and after_bar instance methods" do
|
|
552
|
-
@f.new.must_respond_to(:before_bar)
|
|
553
|
-
@f.new.must_respond_to(:before_bar)
|
|
554
|
-
end
|
|
555
|
-
|
|
556
|
-
deprecated "it should return true for bar when before_bar and after_bar hooks are returing true" do
|
|
557
|
-
a = 1
|
|
558
|
-
@f.before_bar { a += 1}
|
|
559
|
-
@f.new.bar.must_equal true
|
|
560
|
-
a.must_equal 2
|
|
561
|
-
@f.after_bar { a *= 2}
|
|
562
|
-
@f.new.bar.must_equal true
|
|
563
|
-
a.must_equal 6
|
|
564
|
-
end
|
|
565
|
-
|
|
566
|
-
deprecated "it should return nil for bar when before_bar and after_bar hooks are returing false" do
|
|
567
|
-
@f.new.bar.must_equal true
|
|
568
|
-
@f.after_bar { false }
|
|
569
|
-
@f.new.bar.must_equal :a
|
|
570
|
-
@f.before_bar { false }
|
|
571
|
-
@f.new.bar.must_equal :b
|
|
572
|
-
end
|
|
573
|
-
end
|
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "identifier_mangling extension" do
|
|
4
|
-
after do
|
|
5
|
-
deprecated do
|
|
6
|
-
Sequel.quote_identifiers = false
|
|
7
|
-
Sequel.identifier_input_method = nil
|
|
8
|
-
Sequel.identifier_output_method = nil
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
4
|
it "should respect the :quote_identifiers option" do
|
|
13
5
|
db = Sequel::Database.new(:quote_identifiers=>false).extension(:identifier_mangling)
|
|
14
6
|
db.quote_identifiers?.must_equal false
|
|
@@ -18,78 +10,37 @@ describe "identifier_mangling extension" do
|
|
|
18
10
|
|
|
19
11
|
it "should respect the :quote_identifiers setting" do
|
|
20
12
|
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
21
|
-
db.quote_identifiers?.must_equal false
|
|
22
|
-
db.quote_identifiers = true
|
|
23
13
|
db.quote_identifiers?.must_equal true
|
|
14
|
+
db.quote_identifiers = false
|
|
15
|
+
db.quote_identifiers?.must_equal false
|
|
24
16
|
end
|
|
25
17
|
|
|
26
18
|
it "should upcase on input and downcase on output by default" do
|
|
27
|
-
|
|
28
|
-
db = Sequel::Database.new(:identifier_mangling=>false).extension(:identifier_mangling)
|
|
19
|
+
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
29
20
|
db.send(:identifier_input_method_default).must_equal :upcase
|
|
30
21
|
db.send(:identifier_output_method_default).must_equal :downcase
|
|
31
22
|
end
|
|
32
23
|
|
|
33
24
|
it "should respect the :identifier_input_method option" do
|
|
34
25
|
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
35
|
-
db.identifier_input_method.must_be_nil
|
|
36
|
-
db.identifier_input_method = :downcase
|
|
37
|
-
db.identifier_input_method.must_equal :downcase
|
|
38
|
-
db = Sequel::Database.new(:identifier_input_method=>nil).extension(:identifier_mangling)
|
|
39
|
-
db.identifier_input_method.must_be_nil
|
|
40
|
-
db.identifier_input_method = :downcase
|
|
41
|
-
db.identifier_input_method.must_equal :downcase
|
|
42
|
-
db = Sequel::Database.new(:identifier_input_method=>:upcase).extension(:identifier_mangling)
|
|
43
26
|
db.identifier_input_method.must_equal :upcase
|
|
44
27
|
db.identifier_input_method = nil
|
|
45
28
|
db.identifier_input_method.must_be_nil
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
deprecated "should default to Sequel.identifier_input_method" do
|
|
49
|
-
Sequel.identifier_input_method = :downcase
|
|
50
|
-
Sequel::Database.identifier_input_method.must_equal :downcase
|
|
51
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
52
|
-
db.identifier_input_method.must_equal :downcase
|
|
53
|
-
db.identifier_input_method = :upcase
|
|
54
|
-
db.identifier_input_method.must_equal :upcase
|
|
55
29
|
db = Sequel::Database.new(:identifier_input_method=>nil).extension(:identifier_mangling)
|
|
56
30
|
db.identifier_input_method.must_be_nil
|
|
57
|
-
db.identifier_input_method = :
|
|
58
|
-
db.identifier_input_method.must_equal :
|
|
31
|
+
db.identifier_input_method = :downcase
|
|
32
|
+
db.identifier_input_method.must_equal :downcase
|
|
59
33
|
db = Sequel::Database.new(:identifier_input_method=>:upcase).extension(:identifier_mangling)
|
|
60
34
|
db.identifier_input_method.must_equal :upcase
|
|
61
35
|
db.identifier_input_method = nil
|
|
62
36
|
db.identifier_input_method.must_be_nil
|
|
63
|
-
Sequel.identifier_input_method = nil
|
|
64
|
-
Sequel::Database.identifier_input_method.must_equal false
|
|
65
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
66
|
-
db.identifier_input_method.must_be_nil
|
|
67
|
-
db.identifier_input_method = :upcase
|
|
68
|
-
db.identifier_input_method.must_equal :upcase
|
|
69
37
|
end
|
|
70
38
|
|
|
71
39
|
it "should respect the :identifier_output_method option" do
|
|
72
40
|
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
73
|
-
db.identifier_output_method.must_be_nil
|
|
74
|
-
db.identifier_output_method = :upcase
|
|
75
|
-
db.identifier_output_method.must_equal :upcase
|
|
76
|
-
db = Sequel::Database.new(:identifier_output_method=>nil).extension(:identifier_mangling)
|
|
77
|
-
db.identifier_output_method.must_be_nil
|
|
78
|
-
db.identifier_output_method = :downcase
|
|
79
41
|
db.identifier_output_method.must_equal :downcase
|
|
80
|
-
db = Sequel::Database.new(:identifier_output_method=>:upcase).extension(:identifier_mangling)
|
|
81
|
-
db.identifier_output_method.must_equal :upcase
|
|
82
42
|
db.identifier_output_method = nil
|
|
83
43
|
db.identifier_output_method.must_be_nil
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
deprecated "should default to Sequel.identifier_output_method" do
|
|
87
|
-
Sequel.identifier_output_method = :upcase
|
|
88
|
-
Sequel::Database.identifier_output_method.must_equal :upcase
|
|
89
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
90
|
-
db.identifier_output_method.must_equal :upcase
|
|
91
|
-
db.identifier_output_method = :downcase
|
|
92
|
-
db.identifier_output_method.must_equal :downcase
|
|
93
44
|
db = Sequel::Database.new(:identifier_output_method=>nil).extension(:identifier_mangling)
|
|
94
45
|
db.identifier_output_method.must_be_nil
|
|
95
46
|
db.identifier_output_method = :downcase
|
|
@@ -98,56 +49,8 @@ describe "identifier_mangling extension" do
|
|
|
98
49
|
db.identifier_output_method.must_equal :upcase
|
|
99
50
|
db.identifier_output_method = nil
|
|
100
51
|
db.identifier_output_method.must_be_nil
|
|
101
|
-
Sequel.identifier_output_method = nil
|
|
102
|
-
Sequel::Database.identifier_output_method.must_equal false
|
|
103
|
-
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
104
|
-
db.identifier_output_method.must_be_nil
|
|
105
|
-
db.identifier_output_method = :downcase
|
|
106
|
-
db.identifier_output_method.must_equal :downcase
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
deprecated "should use the default Sequel.quote_identifiers value" do
|
|
110
|
-
Sequel.quote_identifiers = true
|
|
111
|
-
Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal true
|
|
112
|
-
Sequel.quote_identifiers = false
|
|
113
|
-
Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal false
|
|
114
|
-
Sequel::Database.quote_identifiers = true
|
|
115
|
-
Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal true
|
|
116
|
-
Sequel::Database.quote_identifiers = false
|
|
117
|
-
Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal false
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
deprecated "should use the default Sequel.identifier_input_method value" do
|
|
121
|
-
Sequel.identifier_input_method = :downcase
|
|
122
|
-
Sequel::Database.new.extension(:identifier_mangling).identifier_input_method.must_equal :downcase
|
|
123
|
-
Sequel.identifier_input_method = :upcase
|
|
124
|
-
Sequel::Database.new.extension(:identifier_mangling).identifier_input_method.must_equal :upcase
|
|
125
|
-
Sequel::Database.identifier_input_method = :downcase
|
|
126
|
-
Sequel::Database.new.extension(:identifier_mangling).identifier_input_method.must_equal :downcase
|
|
127
|
-
Sequel::Database.identifier_input_method = :upcase
|
|
128
|
-
Sequel::Database.new.extension(:identifier_mangling).identifier_input_method.must_equal :upcase
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
deprecated "should use the default Sequel.identifier_output_method value" do
|
|
132
|
-
Sequel.identifier_output_method = :downcase
|
|
133
|
-
Sequel::Database.new.extension(:identifier_mangling).identifier_output_method.must_equal :downcase
|
|
134
|
-
Sequel.identifier_output_method = :upcase
|
|
135
|
-
Sequel::Database.new.extension(:identifier_mangling).identifier_output_method.must_equal :upcase
|
|
136
|
-
Sequel::Database.identifier_output_method = :downcase
|
|
137
|
-
Sequel::Database.new.extension(:identifier_mangling).identifier_output_method.must_equal :downcase
|
|
138
|
-
Sequel::Database.identifier_output_method = :upcase
|
|
139
|
-
Sequel::Database.new.extension(:identifier_mangling).identifier_output_method.must_equal :upcase
|
|
140
52
|
end
|
|
141
53
|
|
|
142
|
-
deprecated "should respect the quote_indentifiers_default method if Sequel.quote_identifiers = nil" do
|
|
143
|
-
Sequel.quote_identifiers = nil
|
|
144
|
-
Sequel::Database.new.extension(:identifier_mangling).quote_identifiers?.must_equal true
|
|
145
|
-
x = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def quote_identifiers_default; false end}
|
|
146
|
-
x.new.extension(:identifier_mangling).quote_identifiers?.must_equal false
|
|
147
|
-
y = Class.new(Sequel::Database){def dataset_class_default; Sequel::Dataset end; def quote_identifiers_default; true end}
|
|
148
|
-
y.new.extension(:identifier_mangling).quote_identifiers?.must_equal true
|
|
149
|
-
end
|
|
150
|
-
|
|
151
54
|
it "should respect the identifier_input_method_default method if Sequel.identifier_input_method is not called" do
|
|
152
55
|
class Sequel::Database
|
|
153
56
|
@identifier_input_method = nil
|
|
@@ -172,6 +75,7 @@ end
|
|
|
172
75
|
describe "Database#input_identifier_meth" do
|
|
173
76
|
it "should be the input_identifer method of a default dataset for this database" do
|
|
174
77
|
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
78
|
+
db.identifier_input_method = nil
|
|
175
79
|
db.send(:input_identifier_meth).call(:a).must_equal 'a'
|
|
176
80
|
db.identifier_input_method = :upcase
|
|
177
81
|
db.send(:input_identifier_meth).call(:a).must_equal 'A'
|
|
@@ -181,6 +85,7 @@ end
|
|
|
181
85
|
describe "Database#output_identifier_meth" do
|
|
182
86
|
it "should be the output_identifer method of a default dataset for this database" do
|
|
183
87
|
db = Sequel::Database.new.extension(:identifier_mangling)
|
|
88
|
+
db.identifier_output_method = nil
|
|
184
89
|
db.send(:output_identifier_meth).call('A').must_equal :A
|
|
185
90
|
db.identifier_output_method = :downcase
|
|
186
91
|
db.send(:output_identifier_meth).call('A').must_equal :a
|
|
@@ -190,7 +95,7 @@ end
|
|
|
190
95
|
describe "Database#metadata_dataset" do
|
|
191
96
|
it "should be a dataset with the default settings for identifier_mangling" do
|
|
192
97
|
ds = Sequel::Database.new.extension(:identifier_mangling).send(:metadata_dataset)
|
|
193
|
-
ds.literal(:a).must_equal
|
|
98
|
+
ds.literal(:a).must_equal "\"A\""
|
|
194
99
|
ds.send(:output_identifier, 'A').must_equal :a
|
|
195
100
|
end
|
|
196
101
|
end
|
|
@@ -221,35 +126,6 @@ describe "Dataset" do
|
|
|
221
126
|
db[:a].identifier_output_method.must_equal :downcase
|
|
222
127
|
end
|
|
223
128
|
|
|
224
|
-
# SEQUEL5: Remove
|
|
225
|
-
unless Sequel.mock(:identifier_mangling=>true).dataset.frozen?
|
|
226
|
-
deprecated "should have quote_identifiers= method which changes literalization of identifiers" do
|
|
227
|
-
@dataset.quote_identifiers = true
|
|
228
|
-
@dataset.literal(:a).must_equal '"a"'
|
|
229
|
-
@dataset.quote_identifiers = false
|
|
230
|
-
@dataset.literal(:a).must_equal 'a'
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
deprecated "should have identifier_input_method= method which changes literalization of identifiers" do
|
|
234
|
-
@dataset.identifier_input_method = :upcase
|
|
235
|
-
@dataset.literal(:a).must_equal 'A'
|
|
236
|
-
@dataset.identifier_input_method = :downcase
|
|
237
|
-
@dataset.literal(:A).must_equal 'a'
|
|
238
|
-
@dataset.identifier_input_method = :reverse
|
|
239
|
-
@dataset.literal(:at_b).must_equal 'b_ta'
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
deprecated "should have identifier_output_method= method which changes identifiers returned from the database" do
|
|
243
|
-
@dataset.send(:output_identifier, "at_b_C").must_equal :at_b_C
|
|
244
|
-
@dataset.identifier_output_method = :upcase
|
|
245
|
-
@dataset.send(:output_identifier, "at_b_C").must_equal :AT_B_C
|
|
246
|
-
@dataset.identifier_output_method = :downcase
|
|
247
|
-
@dataset.send(:output_identifier, "at_b_C").must_equal :at_b_c
|
|
248
|
-
@dataset.identifier_output_method = :reverse
|
|
249
|
-
@dataset.send(:output_identifier, "at_b_C").must_equal :C_b_ta
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
|
|
253
129
|
it "should have with_quote_identifiers method which returns cloned dataset with changed literalization of identifiers" do
|
|
254
130
|
@dataset.with_quote_identifiers(true).literal(:a).must_equal '"a"'
|
|
255
131
|
@dataset.with_quote_identifiers(false).literal(:a).must_equal 'a'
|
|
@@ -285,45 +161,16 @@ describe "Dataset" do
|
|
|
285
161
|
end
|
|
286
162
|
end
|
|
287
163
|
|
|
288
|
-
describe "Frozen Datasets" do
|
|
289
|
-
before do
|
|
290
|
-
@ds = Sequel.mock(:identifier_mangling=>true)[:test].freeze
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
deprecated "should raise an error when calling mutation methods" do
|
|
294
|
-
proc{@ds.identifier_input_method = :a}.must_raise RuntimeError
|
|
295
|
-
proc{@ds.identifier_output_method = :a}.must_raise RuntimeError
|
|
296
|
-
proc{@ds.quote_identifiers = false}.must_raise RuntimeError
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
|
|
300
164
|
describe "identifier_mangling extension" do
|
|
301
165
|
it "should be able to load dialects based on the database name" do
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
class Sequel::Database; @identifier_output_method=nil; end
|
|
311
|
-
end
|
|
312
|
-
Sequel.mock(:host=>'access').select(Date.new(2011, 12, 13)).sql.must_equal 'SELECT #2011-12-13#'
|
|
313
|
-
Sequel.mock(:host=>'db2').select(1).sql.must_equal 'SELECT 1 FROM "SYSIBM"."SYSDUMMY1"'
|
|
314
|
-
Sequel.mock(:host=>'mssql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM [A] WHERE (CONTAINS ([B], 'c'))"
|
|
315
|
-
Sequel.mock(:host=>'mysql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM `a` WHERE (MATCH (`b`) AGAINST ('c'))"
|
|
316
|
-
Sequel.mock(:host=>'oracle')[:a].limit(1).sql.must_equal 'SELECT * FROM (SELECT * FROM "A") "T1" WHERE (ROWNUM <= 1)'
|
|
317
|
-
Sequel.mock(:host=>'postgres')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM \"a\" WHERE (to_tsvector(CAST('simple' AS regconfig), (COALESCE(\"b\", ''))) @@ to_tsquery(CAST('simple' AS regconfig), 'c'))"
|
|
318
|
-
Sequel.mock(:host=>'sqlanywhere').from(:a).offset(1).sql.must_equal 'SELECT TOP 2147483647 START AT (1 + 1) * FROM "A"'
|
|
319
|
-
Sequel.mock(:host=>'sqlite')[Sequel[:a].as(:b)].sql.must_equal "SELECT * FROM `a` AS 'b'"
|
|
320
|
-
ensure
|
|
321
|
-
deprecated do
|
|
322
|
-
Sequel.quote_identifiers = qi
|
|
323
|
-
Sequel::Database.send(:instance_variable_set, :@identifier_input_method, ii)
|
|
324
|
-
Sequel::Database.send(:instance_variable_set, :@identifier_output_method, io)
|
|
325
|
-
end
|
|
326
|
-
end
|
|
166
|
+
Sequel.mock(:host=>'access').select(Date.new(2011, 12, 13)).sql.must_equal 'SELECT #2011-12-13#'
|
|
167
|
+
Sequel.mock(:host=>'db2').select(1).sql.must_equal 'SELECT 1 FROM "SYSIBM"."SYSDUMMY1"'
|
|
168
|
+
Sequel.mock(:host=>'mssql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM [A] WHERE (CONTAINS ([B], 'c'))"
|
|
169
|
+
Sequel.mock(:host=>'mysql')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM `a` WHERE (MATCH (`b`) AGAINST ('c'))"
|
|
170
|
+
Sequel.mock(:host=>'oracle')[:a].limit(1).sql.must_equal 'SELECT * FROM (SELECT * FROM "A") "T1" WHERE (ROWNUM <= 1)'
|
|
171
|
+
Sequel.mock(:host=>'postgres')[:a].full_text_search(:b, 'c').sql.must_equal "SELECT * FROM \"a\" WHERE (to_tsvector(CAST('simple' AS regconfig), (COALESCE(\"b\", ''))) @@ to_tsquery(CAST('simple' AS regconfig), 'c'))"
|
|
172
|
+
Sequel.mock(:host=>'sqlanywhere').from(:a).offset(1).sql.must_equal 'SELECT TOP 2147483647 START AT (1 + 1) * FROM "A"'
|
|
173
|
+
Sequel.mock(:host=>'sqlite')[Sequel[:a].as(:b)].sql.must_equal "SELECT * FROM `a` AS 'b'"
|
|
327
174
|
end
|
|
328
175
|
end
|
|
329
176
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Sequel::Dataset::ImplicitSubquery" do
|
|
4
4
|
it "should implicitly use a subquery for most dataset query methods" do
|
|
@@ -9,10 +9,6 @@ describe "Sequel::Dataset::ImplicitSubquery" do
|
|
|
9
9
|
ods = db[:c]
|
|
10
10
|
ods.columns(:id, :b)
|
|
11
11
|
|
|
12
|
-
deprecated do
|
|
13
|
-
ds.and(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE c"
|
|
14
|
-
ds.exclude_where(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 WHERE NOT c"
|
|
15
|
-
end
|
|
16
12
|
ds.cross_join(:c).sql.must_equal "SELECT * FROM (SELECT * FROM table) AS t1 CROSS JOIN c"
|
|
17
13
|
ds.distinct.sql.must_equal "SELECT DISTINCT * FROM (SELECT * FROM table) AS t1"
|
|
18
14
|
ds.except(ods).sql.must_equal "SELECT * FROM (SELECT * FROM (SELECT * FROM table) AS t1 EXCEPT SELECT * FROM c) AS t1"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Sequel::Plugins::InputTransformer" do
|
|
4
4
|
before do
|
|
@@ -15,6 +15,12 @@ describe "Sequel::Plugins::InputTransformer" do
|
|
|
15
15
|
@o.name.must_equal [1, 2, 3]
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
it "should have working .input_transformer_order" do
|
|
19
|
+
@c.input_transformer_order.must_equal [:reverser]
|
|
20
|
+
@c.plugin(:input_transformer, :reverser2){|v| v.is_a?(String) ? v.reverse : v}
|
|
21
|
+
@c.input_transformer_order.must_equal [:reverser2, :reverser]
|
|
22
|
+
end
|
|
23
|
+
|
|
18
24
|
it "should not apply any transformers by default" do
|
|
19
25
|
c = Class.new(Sequel::Model)
|
|
20
26
|
c.columns :name, :b
|
|
@@ -56,7 +62,6 @@ describe "Sequel::Plugins::InputTransformer" do
|
|
|
56
62
|
@c.skip_input_transformer :reverser, :name
|
|
57
63
|
@c.freeze
|
|
58
64
|
@c.input_transformers.frozen?.must_equal true
|
|
59
|
-
@c.input_transformer_order.frozen?.must_equal true
|
|
60
65
|
skip = @c.instance_variable_get(:@skip_input_transformer_columns)
|
|
61
66
|
skip.frozen?.must_equal true
|
|
62
67
|
skip.values.all?(&:frozen?).must_equal true
|