sequel 4.49.0 → 5.0.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 +70 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +3 -5
- data/doc/advanced_associations.rdoc +86 -163
- 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/schema_modification.rdoc +63 -60
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +3 -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.rb +1 -1
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc.rb +13 -73
- 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 +4 -25
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
- 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 +1 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
- 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/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.rb +0 -19
- 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/oracle.rb +7 -13
- data/lib/sequel/adapters/postgres.rb +13 -57
- 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 +23 -224
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +44 -259
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +12 -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 +2 -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.rb +26 -28
- 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/core.rb +42 -101
- data/lib/sequel/database.rb +12 -2
- 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 +23 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +89 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/dataset/actions.rb +53 -107
- data/lib/sequel/dataset/dataset_module.rb +3 -15
- data/lib/sequel/dataset/features.rb +30 -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 +71 -155
- data/lib/sequel/dataset/sql.rb +30 -225
- 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 +23 -40
- 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_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +2 -15
- 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/model.rb +27 -62
- data/lib/sequel/model/associations.rb +128 -131
- data/lib/sequel/model/base.rb +171 -711
- 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/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 -22
- data/lib/sequel/version.rb +2 -2
- 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 +101 -480
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +312 -565
- 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 +64 -244
- data/spec/core/dataset_spec.rb +81 -415
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +176 -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 +74 -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 +4 -59
- 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 +35 -1086
- 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 +1 -7
- 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 +1 -1
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +2 -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 +1 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +4 -1
- 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_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +23 -32
- 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 +1 -1
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +1 -1
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +1 -1
- 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 +1 -1
- 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 +2 -14
- 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/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 +3 -3
- 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 +1 -1
- 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 -12
- 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 +3 -3
- 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 +5 -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 +6 -22
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +6 -6
- data/spec/integration/spec_helper.rb +13 -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 +18 -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 +17 -11
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +15 -320
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +29 -121
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +8 -64
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do.rb +0 -166
- 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/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.rb +0 -169
- 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/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
data/spec/core/database_spec.rb
CHANGED
@@ -1,32 +1,14 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe "A new Database" do
|
4
4
|
before do
|
5
5
|
@db = Sequel::Database.new(1 => 2, :logger => 3)
|
6
6
|
end
|
7
|
-
after do
|
8
|
-
deprecated do
|
9
|
-
Sequel.quote_identifiers = false
|
10
|
-
Sequel.identifier_input_method = nil
|
11
|
-
Sequel.identifier_output_method = nil
|
12
|
-
end
|
13
|
-
end
|
14
7
|
|
15
|
-
deprecated "should support DatasetClass constant" do
|
16
|
-
dbc = Class.new(Sequel::Database)
|
17
|
-
dbc::DatasetClass = dsc = Class.new(Sequel::Dataset)
|
18
|
-
dbc.new.dataset.must_be_kind_of(dsc)
|
19
|
-
end
|
20
|
-
|
21
|
-
deprecated "should allow dup/clone" do
|
22
|
-
@db.dup.must_be_kind_of @db.class
|
23
|
-
@db.clone.must_be_kind_of @db.class
|
24
|
-
end
|
25
|
-
|
26
8
|
it "should not allow dup/clone" do
|
27
|
-
proc{@db.dup}.must_raise
|
28
|
-
proc{@db.clone}.must_raise
|
29
|
-
end
|
9
|
+
proc{@db.dup}.must_raise NoMethodError
|
10
|
+
proc{@db.clone}.must_raise NoMethodError
|
11
|
+
end
|
30
12
|
|
31
13
|
it "should receive options" do
|
32
14
|
@db.opts[1].must_equal 2
|
@@ -78,7 +60,7 @@ describe "A new Database" do
|
|
78
60
|
it "should have the connection pool use the connect method to get connections" do
|
79
61
|
cc = nil
|
80
62
|
d = Sequel::Database.new
|
81
|
-
|
63
|
+
d.define_singleton_method(:connect){|c| 1234}
|
82
64
|
d.synchronize {|c| cc = c}
|
83
65
|
cc.must_equal 1234
|
84
66
|
end
|
@@ -99,21 +81,13 @@ describe "A new Database" do
|
|
99
81
|
end
|
100
82
|
|
101
83
|
it "should just use a :uri option for jdbc with the full connection string" do
|
102
|
-
db = Sequel::Database.stub(:adapter_class, Sequel::Database) do
|
84
|
+
db = Sequel::Database.stub(:adapter_class, Class.new(Sequel::Database){def connect(*); Object.new end}) do
|
103
85
|
Sequel.connect('jdbc:test://host/db_name')
|
104
86
|
end
|
105
87
|
db.must_be_kind_of(Sequel::Database)
|
106
88
|
db.opts[:uri].must_equal 'jdbc:test://host/db_name'
|
107
89
|
end
|
108
90
|
|
109
|
-
it "should just use a :uri option for do with the full connection string" do
|
110
|
-
db = Sequel::Database.stub(:adapter_class, Sequel::Database) do
|
111
|
-
Sequel.connect('do:test://host/db_name')
|
112
|
-
end
|
113
|
-
db.must_be_kind_of(Sequel::Database)
|
114
|
-
db.opts[:uri].must_equal 'do:test://host/db_name'
|
115
|
-
end
|
116
|
-
|
117
91
|
it "should populate :adapter option when using connection string" do
|
118
92
|
Sequel.connect('mock:/').opts[:adapter].must_equal "mock"
|
119
93
|
end
|
@@ -125,7 +99,7 @@ describe "A new Database" do
|
|
125
99
|
|
126
100
|
it 'should strip square brackets for ipv6 hosts' do
|
127
101
|
Sequel.connect('mock://[::1]').opts[:host].must_equal "::1"
|
128
|
-
end
|
102
|
+
end
|
129
103
|
end
|
130
104
|
|
131
105
|
describe "Database#freeze" do
|
@@ -188,79 +162,6 @@ describe "Database#log_info" do
|
|
188
162
|
end
|
189
163
|
end
|
190
164
|
|
191
|
-
describe "Database#log_yield" do
|
192
|
-
before do
|
193
|
-
@o = Object.new
|
194
|
-
def @o.logs; @logs || []; end
|
195
|
-
def @o.warn(*args); (@logs ||= []) << [:warn] + args; end
|
196
|
-
def @o.method_missing(*args); (@logs ||= []) << args; end
|
197
|
-
def @o.to_ary; [self]; end
|
198
|
-
@db = Sequel::Database.new(:logger=>@o)
|
199
|
-
end
|
200
|
-
|
201
|
-
deprecated "should yield to the passed block" do
|
202
|
-
a = nil
|
203
|
-
@db.log_yield('blah'){a = 1}
|
204
|
-
a.must_equal 1
|
205
|
-
end
|
206
|
-
|
207
|
-
deprecated "should raise an exception if a block is not passed" do
|
208
|
-
proc{@db.log_yield('blah')}.must_raise LocalJumpError
|
209
|
-
end
|
210
|
-
|
211
|
-
deprecated "should log message with duration at info level to all loggers" do
|
212
|
-
@db.log_yield('blah'){}
|
213
|
-
@o.logs.length.must_equal 1
|
214
|
-
@o.logs.first.length.must_equal 2
|
215
|
-
@o.logs.first.first.must_equal :info
|
216
|
-
@o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah\z/)
|
217
|
-
end
|
218
|
-
|
219
|
-
deprecated "should respect sql_log_level setting" do
|
220
|
-
@db.sql_log_level = :debug
|
221
|
-
@db.log_yield('blah'){}
|
222
|
-
@o.logs.length.must_equal 1
|
223
|
-
@o.logs.first.length.must_equal 2
|
224
|
-
@o.logs.first.first.must_equal :debug
|
225
|
-
@o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah\z/)
|
226
|
-
end
|
227
|
-
|
228
|
-
deprecated "should log message with duration at warn level if duration greater than log_warn_duration" do
|
229
|
-
@db.log_warn_duration = 0
|
230
|
-
@db.log_yield('blah'){}
|
231
|
-
@o.logs.length.must_equal 1
|
232
|
-
@o.logs.first.length.must_equal 2
|
233
|
-
@o.logs.first.first.must_equal :warn
|
234
|
-
@o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah\z/)
|
235
|
-
end
|
236
|
-
|
237
|
-
deprecated "should log message with duration at info level if duration less than log_warn_duration" do
|
238
|
-
@db.log_warn_duration = 1000
|
239
|
-
@db.log_yield('blah'){}
|
240
|
-
@o.logs.length.must_equal 1
|
241
|
-
@o.logs.first.length.must_equal 2
|
242
|
-
@o.logs.first.first.must_equal :info
|
243
|
-
@o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah\z/)
|
244
|
-
end
|
245
|
-
|
246
|
-
deprecated "should log message at error level if block raises an error" do
|
247
|
-
@db.log_warn_duration = 0
|
248
|
-
proc{@db.log_yield('blah'){raise Sequel::Error, 'adsf'}}.must_raise Sequel::Error
|
249
|
-
@o.logs.length.must_equal 1
|
250
|
-
@o.logs.first.length.must_equal 2
|
251
|
-
@o.logs.first.first.must_equal :error
|
252
|
-
@o.logs.first.last.must_match(/\ASequel::Error: adsf: blah\z/)
|
253
|
-
end
|
254
|
-
|
255
|
-
deprecated "should include args with message if args passed" do
|
256
|
-
@db.log_yield('blah', [1, 2]){}
|
257
|
-
@o.logs.length.must_equal 1
|
258
|
-
@o.logs.first.length.must_equal 2
|
259
|
-
@o.logs.first.first.must_equal :info
|
260
|
-
@o.logs.first.last.must_match(/\A\(\d\.\d{6}s\) blah; \[1, 2\]\z/)
|
261
|
-
end
|
262
|
-
end
|
263
|
-
|
264
165
|
describe "Database#log_connection_yield" do
|
265
166
|
before do
|
266
167
|
@o = Object.new
|
@@ -357,6 +258,7 @@ describe "Database#uri" do
|
|
357
258
|
before do
|
358
259
|
@c = Class.new(Sequel::Database) do
|
359
260
|
def dataset_class_default; Sequel::Dataset end
|
261
|
+
def connect(*); Object.new end
|
360
262
|
set_adapter_scheme :mau
|
361
263
|
end
|
362
264
|
|
@@ -412,10 +314,8 @@ describe "Database#dataset" do
|
|
412
314
|
e.sql.must_equal 'SELECT * FROM miu'
|
413
315
|
end
|
414
316
|
|
415
|
-
|
416
|
-
|
417
|
-
d.must_be_kind_of(Sequel::Dataset)
|
418
|
-
d.sql.must_equal 'SELECT * FROM mau WHERE (x > 100)'
|
317
|
+
it "should provide a #from dataset that supports virtual row blocks" do
|
318
|
+
@db.from{a(b)}.sql.must_equal 'SELECT * FROM a(b)'
|
419
319
|
end
|
420
320
|
|
421
321
|
it "should provide a #select dataset" do
|
@@ -710,7 +610,7 @@ end
|
|
710
610
|
describe "Database#synchronize" do
|
711
611
|
before do
|
712
612
|
@db = Sequel::Database.new(:max_connections => 1)
|
713
|
-
|
613
|
+
@db.define_singleton_method(:connect){|c| 12345}
|
714
614
|
end
|
715
615
|
|
716
616
|
it "should wrap the supplied block in pool.hold" do
|
@@ -735,7 +635,7 @@ describe "Database#test_connection" do
|
|
735
635
|
before do
|
736
636
|
@db = Sequel::Database.new
|
737
637
|
pr = proc{@test = rand(100)}
|
738
|
-
|
638
|
+
@db.define_singleton_method(:connect){|c| pr.call}
|
739
639
|
end
|
740
640
|
|
741
641
|
it "should attempt to get a connection" do
|
@@ -781,7 +681,7 @@ DatabaseTransactionSpecs = shared_description do
|
|
781
681
|
end
|
782
682
|
|
783
683
|
it "should support transaction isolation levels" do
|
784
|
-
|
684
|
+
@db.define_singleton_method(:supports_transaction_isolation_levels?){true}
|
785
685
|
[:uncommitted, :committed, :repeatable, :serializable].each do |l|
|
786
686
|
@db.transaction(:isolation=>l){@db.run "DROP TABLE #{l}"}
|
787
687
|
end
|
@@ -792,7 +692,7 @@ DatabaseTransactionSpecs = shared_description do
|
|
792
692
|
end
|
793
693
|
|
794
694
|
it "should allow specifying a default transaction isolation level" do
|
795
|
-
|
695
|
+
@db.define_singleton_method(:supports_transaction_isolation_levels?){true}
|
796
696
|
[:uncommitted, :committed, :repeatable, :serializable].each do |l|
|
797
697
|
@db.transaction_isolation_level = l
|
798
698
|
@db.transaction{@db.run "DROP TABLE #{l}"}
|
@@ -883,8 +783,8 @@ DatabaseTransactionSpecs = shared_description do
|
|
883
783
|
|
884
784
|
it "should handle errors when sending BEGIN" do
|
885
785
|
ec = Class.new(StandardError)
|
886
|
-
|
887
|
-
|
786
|
+
@db.define_singleton_method(:database_error_classes){[ec]}
|
787
|
+
@db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /BEGIN/ ? raise(ec, 'bad') : super(c, sql)}
|
888
788
|
begin
|
889
789
|
@db.transaction{@db.execute 'DROP TABLE test;'}
|
890
790
|
rescue Sequel::DatabaseError => e
|
@@ -896,8 +796,8 @@ DatabaseTransactionSpecs = shared_description do
|
|
896
796
|
|
897
797
|
it "should handle errors when sending COMMIT" do
|
898
798
|
ec = Class.new(StandardError)
|
899
|
-
|
900
|
-
|
799
|
+
@db.define_singleton_method(:database_error_classes){[ec]}
|
800
|
+
@db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /COMMIT/ ? raise(ec, 'bad') : super(c, sql)}
|
901
801
|
begin
|
902
802
|
@db.transaction{@db.execute 'DROP TABLE test;'}
|
903
803
|
rescue Sequel::DatabaseError => e
|
@@ -909,8 +809,8 @@ DatabaseTransactionSpecs = shared_description do
|
|
909
809
|
|
910
810
|
it "should raise original exception if there is an exception raised when rolling back" do
|
911
811
|
ec = Class.new(StandardError)
|
912
|
-
|
913
|
-
|
812
|
+
@db.define_singleton_method(:database_error_classes){[ec]}
|
813
|
+
@db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /ROLLBACK/ ? raise(ec, 'bad') : super(c, sql)}
|
914
814
|
begin
|
915
815
|
@db.transaction{raise ArgumentError, 'asdf'}
|
916
816
|
rescue => e
|
@@ -921,8 +821,8 @@ DatabaseTransactionSpecs = shared_description do
|
|
921
821
|
|
922
822
|
it "should raise original exception if there is an exception raised when rolling back when using :rollback=>:always" do
|
923
823
|
ec = Class.new(StandardError)
|
924
|
-
|
925
|
-
|
824
|
+
@db.define_singleton_method(:database_error_classes){[ec]}
|
825
|
+
@db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /ROLLBACK/ ? raise(ec, 'bad') : super(c, sql)}
|
926
826
|
begin
|
927
827
|
@db.transaction(:rollback=>:always){}
|
928
828
|
rescue => e
|
@@ -1014,10 +914,10 @@ DatabaseTransactionSpecs = shared_description do
|
|
1014
914
|
end
|
1015
915
|
|
1016
916
|
it "should raise database errors when commiting a transaction as Sequel::DatabaseError" do
|
1017
|
-
|
917
|
+
@db.define_singleton_method(:commit_transaction){raise ArgumentError}
|
1018
918
|
lambda{@db.transaction{}}.must_raise(ArgumentError)
|
1019
919
|
|
1020
|
-
|
920
|
+
@db.define_singleton_method(:database_error_classes){[ArgumentError]}
|
1021
921
|
lambda{@db.transaction{}}.must_raise(Sequel::DatabaseError)
|
1022
922
|
end
|
1023
923
|
|
@@ -1144,13 +1044,13 @@ DatabaseTransactionSpecs = shared_description do
|
|
1144
1044
|
end
|
1145
1045
|
|
1146
1046
|
it "should raise an error if you attempt to use after_commit inside a prepared transaction" do
|
1147
|
-
|
1047
|
+
@db.define_singleton_method(:supports_prepared_transactions?){true}
|
1148
1048
|
proc{@db.transaction(:prepare=>'XYZ'){@db.after_commit{@db.execute('foo')}}}.must_raise(Sequel::Error)
|
1149
1049
|
@db.sqls.must_equal ['BEGIN', 'ROLLBACK']
|
1150
1050
|
end
|
1151
1051
|
|
1152
1052
|
it "should raise an error if you attempt to use after_rollback inside a prepared transaction" do
|
1153
|
-
|
1053
|
+
@db.define_singleton_method(:supports_prepared_transactions?){true}
|
1154
1054
|
proc{@db.transaction(:prepare=>'XYZ'){@db.after_rollback{@db.execute('foo')}}}.must_raise(Sequel::Error)
|
1155
1055
|
@db.sqls.must_equal ['BEGIN', 'ROLLBACK']
|
1156
1056
|
end
|
@@ -1216,13 +1116,13 @@ describe "Database#transaction with savepoint support" do
|
|
1216
1116
|
end
|
1217
1117
|
|
1218
1118
|
it "should raise an error if you attempt to use after_commit inside a savepoint in a prepared transaction" do
|
1219
|
-
|
1119
|
+
@db.define_singleton_method(:supports_prepared_transactions?){true}
|
1220
1120
|
proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_commit{@db.execute('foo')}}}}.must_raise(Sequel::Error)
|
1221
1121
|
@db.sqls.must_equal ['BEGIN', 'SAVEPOINT autopoint_1','ROLLBACK TO SAVEPOINT autopoint_1', 'ROLLBACK']
|
1222
1122
|
end
|
1223
1123
|
|
1224
1124
|
it "should raise an error if you attempt to use after_rollback inside a savepoint in a prepared transaction" do
|
1225
|
-
|
1125
|
+
@db.define_singleton_method(:supports_prepared_transactions?){true}
|
1226
1126
|
proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_rollback{@db.execute('foo')}}}}.must_raise(Sequel::Error)
|
1227
1127
|
@db.sqls.must_equal ['BEGIN', 'SAVEPOINT autopoint_1','ROLLBACK TO SAVEPOINT autopoint_1', 'ROLLBACK']
|
1228
1128
|
end
|
@@ -1241,7 +1141,7 @@ end
|
|
1241
1141
|
describe "Database#transaction without savepoint support" do
|
1242
1142
|
before do
|
1243
1143
|
@db = Sequel.mock(:servers=>{:test=>{}})
|
1244
|
-
|
1144
|
+
@db.define_singleton_method(:supports_savepoints?){false}
|
1245
1145
|
end
|
1246
1146
|
|
1247
1147
|
it "should not create savepoint if inside a transaction when :savepoint=>:only is used" do
|
@@ -1405,11 +1305,11 @@ describe "Database#transaction with savepoints" do
|
|
1405
1305
|
end
|
1406
1306
|
|
1407
1307
|
it "should raise database errors when commiting a transaction as Sequel::DatabaseError" do
|
1408
|
-
|
1308
|
+
@db.define_singleton_method(:commit_transaction){raise ArgumentError}
|
1409
1309
|
lambda{@db.transaction{}}.must_raise(ArgumentError)
|
1410
1310
|
lambda{@db.transaction{@db.transaction(:savepoint=>true){}}}.must_raise(ArgumentError)
|
1411
1311
|
|
1412
|
-
|
1312
|
+
@db.define_singleton_method(:database_error_classes){[ArgumentError]}
|
1413
1313
|
lambda{@db.transaction{}}.must_raise(Sequel::DatabaseError)
|
1414
1314
|
lambda{@db.transaction{@db.transaction(:savepoint=>true){}}}.must_raise(Sequel::DatabaseError)
|
1415
1315
|
end
|
@@ -1417,7 +1317,7 @@ end
|
|
1417
1317
|
|
1418
1318
|
describe "A Database adapter with a scheme" do
|
1419
1319
|
before do
|
1420
|
-
|
1320
|
+
require_relative '../../lib/sequel/adapters/mock'
|
1421
1321
|
@ccc = Class.new(Sequel::Mock::Database)
|
1422
1322
|
@ccc.send(:set_adapter_scheme, :ccc)
|
1423
1323
|
end
|
@@ -1475,7 +1375,7 @@ describe "A Database adapter with a scheme" do
|
|
1475
1375
|
Sequel.send(:def_adapter_method, :ccc)
|
1476
1376
|
Sequel.ccc('db', :host=>'localhost', &p).must_equal returnValue
|
1477
1377
|
@ccc::DISCONNECTS.must_equal [z, y, x]
|
1478
|
-
|
1378
|
+
Sequel.singleton_class.send(:remove_method, :ccc)
|
1479
1379
|
end
|
1480
1380
|
|
1481
1381
|
it "should be accessible through Sequel.<adapter>" do
|
@@ -1500,7 +1400,7 @@ describe "A Database adapter with a scheme" do
|
|
1500
1400
|
c = Sequel.ccc(:database => 'mydb', :host => 'localhost')
|
1501
1401
|
c.must_be_kind_of(@ccc)
|
1502
1402
|
c.opts.values_at(:adapter, :database, :host, :adapter_class).must_equal [:ccc, 'mydb', 'localhost', @ccc]
|
1503
|
-
|
1403
|
+
Sequel.singleton_class.send(:remove_method, :ccc)
|
1504
1404
|
end
|
1505
1405
|
|
1506
1406
|
it "should be accessible through Sequel.connect with options" do
|
@@ -1608,14 +1508,6 @@ describe "A single threaded database" do
|
|
1608
1508
|
db.pool.must_be_kind_of(Sequel::SingleConnectionPool)
|
1609
1509
|
end
|
1610
1510
|
|
1611
|
-
deprecated "should be constructable using Database.single_threaded = true" do
|
1612
|
-
Sequel::Database.single_threaded = true
|
1613
|
-
Sequel.single_threaded.must_equal true
|
1614
|
-
Sequel::Database.single_threaded.must_equal true
|
1615
|
-
db = Sequel::Database.new{123}
|
1616
|
-
db.pool.must_be_kind_of(Sequel::SingleConnectionPool)
|
1617
|
-
end
|
1618
|
-
|
1619
1511
|
it "should be constructable using Sequel.single_threaded = true" do
|
1620
1512
|
Sequel.single_threaded = true
|
1621
1513
|
Sequel.single_threaded.must_equal true
|
@@ -1628,7 +1520,7 @@ describe "A single threaded database" do
|
|
1628
1520
|
before do
|
1629
1521
|
conn = 1234567
|
1630
1522
|
@db = Sequel::Database.new(:single_threaded => true)
|
1631
|
-
|
1523
|
+
@db.define_singleton_method(:connect) do |c|
|
1632
1524
|
conn += 1
|
1633
1525
|
end
|
1634
1526
|
end
|
@@ -1649,14 +1541,12 @@ describe "A single threaded database" do
|
|
1649
1541
|
end
|
1650
1542
|
|
1651
1543
|
it "should convert an Exception on connection into a DatabaseConnectionError" do
|
1652
|
-
db = Sequel::Database.new(:single_threaded => true, :servers=>{})
|
1653
|
-
def db.connect(*) raise Exception end
|
1544
|
+
db = Class.new(Sequel::Database){def connect(*) raise Exception end}.new(:single_threaded => true, :servers=>{}, :test=>false)
|
1654
1545
|
proc {db.pool.hold {|c|}}.must_raise(Sequel::DatabaseConnectionError)
|
1655
1546
|
end
|
1656
1547
|
|
1657
1548
|
it "should raise a DatabaseConnectionError if the connection proc returns nil" do
|
1658
|
-
db = Sequel.
|
1659
|
-
def db.connect(*) end
|
1549
|
+
db = Class.new(Sequel::Database){def connect(*) end}.new(:single_threaded => true, :servers=>{}, :test=>false)
|
1660
1550
|
proc {db.pool.hold {|c|}}.must_raise(Sequel::DatabaseConnectionError)
|
1661
1551
|
end
|
1662
1552
|
end
|
@@ -1776,11 +1666,11 @@ describe "Database#inspect" do
|
|
1776
1666
|
end
|
1777
1667
|
|
1778
1668
|
it "should include the class name and the connection options if an options hash was given" do
|
1779
|
-
Sequel.connect(:adapter=>:mock).inspect.
|
1669
|
+
Sequel.connect(:adapter=>:mock).inspect.must_equal '#<Sequel::Mock::Database: {:adapter=>:mock}>'
|
1780
1670
|
end
|
1781
1671
|
|
1782
1672
|
it "should include the class name, uri, and connection options if uri and options hash was given" do
|
1783
|
-
Sequel.connect('mock://foo', :database=>'bar').inspect.
|
1673
|
+
Sequel.connect('mock://foo', :database=>'bar').inspect.must_equal '#<Sequel::Mock::Database: "mock://foo" {:database=>"bar"}>'
|
1784
1674
|
end
|
1785
1675
|
end
|
1786
1676
|
|
@@ -1890,6 +1780,10 @@ describe "Database#add_servers" do
|
|
1890
1780
|
@db.synchronize(:server1){|c| c.opts[:host].must_equal 8}
|
1891
1781
|
@db.synchronize(:server2){|c| c.opts[:host].must_equal 4}
|
1892
1782
|
end
|
1783
|
+
|
1784
|
+
it "should raise error for unsharded pool" do
|
1785
|
+
proc{Sequel.mock.add_servers(:server1=>{})}.must_raise Sequel::Error
|
1786
|
+
end
|
1893
1787
|
end
|
1894
1788
|
|
1895
1789
|
describe "Database#remove_servers" do
|
@@ -1940,86 +1834,12 @@ describe "Database#remove_servers" do
|
|
1940
1834
|
c1.opts[:host].must_equal 1
|
1941
1835
|
end
|
1942
1836
|
end
|
1943
|
-
end
|
1944
|
-
|
1945
|
-
describe "Database#add_servers and #remove_servers when not sharded" do
|
1946
|
-
deprecated "should do nothing" do
|
1947
|
-
db = Sequel.mock
|
1948
|
-
db.opts[:servers].must_be_nil
|
1949
|
-
db.add_servers(:foo=>{}).must_be_nil
|
1950
|
-
db.opts[:servers].must_be_nil
|
1951
|
-
db.remove_servers(:foo).must_be_nil
|
1952
|
-
db.opts[:servers].must_be_nil
|
1953
|
-
end
|
1954
|
-
|
1955
|
-
it "should raise Error" do
|
1956
|
-
db = Sequel.mock
|
1957
|
-
db.opts[:servers].must_be_nil
|
1958
|
-
proc{db.add_servers(:foo=>{})}.must_raise Sequel::Error
|
1959
|
-
db.opts[:servers].must_be_nil
|
1960
|
-
proc{db.remove_servers(:foo)}.must_raise Sequel::Error
|
1961
|
-
db.opts[:servers].must_be_nil
|
1962
|
-
end if false # SEQUEL5
|
1963
|
-
end
|
1964
|
-
|
1965
|
-
describe "Database#each_server with do/jdbc adapter connection string without :adapter option" do
|
1966
|
-
deprecated "should yield a separate database object for each server" do
|
1967
|
-
require 'sequel/adapters/mock'
|
1968
|
-
klass = Class.new(Sequel::Database)
|
1969
|
-
def klass.adapter_class(v)
|
1970
|
-
raise unless v == :jdbc
|
1971
|
-
Sequel::Mock::Database
|
1972
|
-
end
|
1973
|
-
@db = klass.connect('jdbc:blah:', :host=>1, :database=>2, :servers=>{:server1=>{:host=>3}})
|
1974
|
-
|
1975
|
-
hosts = []
|
1976
|
-
@db.each_server do |db|
|
1977
|
-
db.must_be_kind_of(Sequel::Database)
|
1978
|
-
db.wont_equal @db
|
1979
|
-
db.opts[:adapter_class].must_equal Sequel::Mock::Database
|
1980
|
-
db.opts[:database].must_equal 2
|
1981
|
-
hosts << db.opts[:host]
|
1982
|
-
end
|
1983
|
-
hosts.sort.must_equal [1, 3]
|
1984
|
-
end
|
1985
1837
|
|
1986
|
-
|
1987
|
-
proc{Sequel.mock.
|
1838
|
+
it "should raise error for unsharded pool" do
|
1839
|
+
proc{Sequel.mock.remove_servers(:server1)}.must_raise Sequel::Error
|
1988
1840
|
end
|
1989
1841
|
end
|
1990
1842
|
|
1991
|
-
describe "Database#each_server" do
|
1992
|
-
before do
|
1993
|
-
@db = Sequel.mock(:host=>1, :database=>2, :servers=>{:server1=>{:host=>3}, :server2=>{:host=>4}})
|
1994
|
-
end
|
1995
|
-
|
1996
|
-
deprecated "should yield a separate database object for each server" do
|
1997
|
-
hosts = []
|
1998
|
-
@db.each_server do |db|
|
1999
|
-
db.must_be_kind_of(Sequel::Database)
|
2000
|
-
db.wont_equal @db
|
2001
|
-
db.opts[:adapter].must_equal :mock
|
2002
|
-
db.opts[:database].must_equal 2
|
2003
|
-
hosts << db.opts[:host]
|
2004
|
-
end
|
2005
|
-
hosts.sort.must_equal [1, 3, 4]
|
2006
|
-
end
|
2007
|
-
|
2008
|
-
deprecated "should disconnect and remove entry from Sequel::DATABASES after use" do
|
2009
|
-
dbs = []
|
2010
|
-
dcs = []
|
2011
|
-
@db.each_server do |db|
|
2012
|
-
dbs << db
|
2013
|
-
Sequel::DATABASES.must_include(db)
|
2014
|
-
meta_def(db, :disconnect){dcs << db}
|
2015
|
-
end
|
2016
|
-
dbs.each do |db|
|
2017
|
-
Sequel::DATABASES.wont_include(db)
|
2018
|
-
end
|
2019
|
-
dbs.must_equal dcs
|
2020
|
-
end
|
2021
|
-
end
|
2022
|
-
|
2023
1843
|
describe "Database#raise_error" do
|
2024
1844
|
before do
|
2025
1845
|
@db = Sequel.mock
|
@@ -2156,9 +1976,9 @@ describe "Database#typecast_value" do
|
|
2156
1976
|
t2 = Time.mktime(2011, 1, 2, 3, 4, 5, 500000) # Local Time
|
2157
1977
|
t3 = Time.utc(2011, 1, 2, 3, 4, 5, 500000) - (t - t2) # Local Time in UTC Time
|
2158
1978
|
t4 = Time.mktime(2011, 1, 2, 3, 4, 5, 500000) + (t - t2) # UTC Time in Local Time
|
2159
|
-
secs =
|
2160
|
-
r1 =
|
2161
|
-
r2 =
|
1979
|
+
secs = Rational(11, 2)
|
1980
|
+
r1 = Rational(t2.utc_offset, 86400)
|
1981
|
+
r2 = Rational((t - t2).to_i, 86400)
|
2162
1982
|
dt = DateTime.civil(2011, 1, 2, 3, 4, secs)
|
2163
1983
|
dt2 = DateTime.civil(2011, 1, 2, 3, 4, secs, r1)
|
2164
1984
|
dt3 = DateTime.civil(2011, 1, 2, 3, 4, secs) - r2
|
@@ -2297,8 +2117,8 @@ describe "Database#typecast_value" do
|
|
2297
2117
|
|
2298
2118
|
Sequel.datetime_class = DateTime
|
2299
2119
|
@db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14]).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14)
|
2300
|
-
@db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14, 500000000]).must_equal DateTime.civil(2011, 10, 11, 12, 13,
|
2301
|
-
@db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14, 500000000,
|
2120
|
+
@db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14, 500000000]).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2))
|
2121
|
+
@db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14, 500000000, Rational(1, 2)]).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2), Rational(1, 2))
|
2302
2122
|
ensure
|
2303
2123
|
Sequel.datetime_class = Time
|
2304
2124
|
end
|
@@ -2313,13 +2133,13 @@ describe "Database#typecast_value" do
|
|
2313
2133
|
|
2314
2134
|
Sequel.datetime_class = DateTime
|
2315
2135
|
@db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14)
|
2316
|
-
@db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :nanos=>500000000).must_equal DateTime.civil(2011, 10, 11, 12, 13,
|
2136
|
+
@db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :nanos=>500000000).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2))
|
2317
2137
|
@db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14)
|
2318
|
-
@db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'nanos'=>500000000).must_equal DateTime.civil(2011, 10, 11, 12, 13,
|
2319
|
-
@db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :offset=>
|
2320
|
-
@db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :nanos=>500000000, :offset=>
|
2321
|
-
@db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'offset'=>
|
2322
|
-
@db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'nanos'=>500000000, 'offset'=>
|
2138
|
+
@db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'nanos'=>500000000).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2))
|
2139
|
+
@db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :offset=>Rational(1, 2)).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14, Rational(1, 2))
|
2140
|
+
@db.typecast_value(:datetime, :year=>2011, :month=>10, :day=>11, :hour=>12, :minute=>13, :second=>14, :nanos=>500000000, :offset=>Rational(1, 2)).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2), Rational(1, 2))
|
2141
|
+
@db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'offset'=>Rational(1, 2)).must_equal DateTime.civil(2011, 10, 11, 12, 13, 14, Rational(1, 2))
|
2142
|
+
@db.typecast_value(:datetime, 'year'=>2011, 'month'=>10, 'day'=>11, 'hour'=>12, 'minute'=>13, 'second'=>14, 'nanos'=>500000000, 'offset'=>Rational(1, 2)).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2), Rational(1, 2))
|
2323
2143
|
ensure
|
2324
2144
|
Sequel.datetime_class = Time
|
2325
2145
|
end
|
@@ -2397,7 +2217,7 @@ describe "Database#typecast_value" do
|
|
2397
2217
|
rescue => e1
|
2398
2218
|
begin
|
2399
2219
|
raise RuntimeError
|
2400
|
-
rescue
|
2220
|
+
rescue
|
2401
2221
|
@db.send(:raise_error, e1)
|
2402
2222
|
end
|
2403
2223
|
end
|
@@ -2411,7 +2231,7 @@ describe "Database#typecast_value" do
|
|
2411
2231
|
@db.typecast_value(:date, 'a')
|
2412
2232
|
true.must_equal false
|
2413
2233
|
rescue Sequel::InvalidValue => e
|
2414
|
-
e.inspect.
|
2234
|
+
e.inspect.must_equal '#<Sequel::InvalidValue: ArgumentError: invalid date>'
|
2415
2235
|
end
|
2416
2236
|
end
|
2417
2237
|
end
|
@@ -2559,8 +2379,8 @@ describe "Database#supports_savepoints_in_prepared_transactions?" do
|
|
2559
2379
|
|
2560
2380
|
it "should be true if both savepoints and prepared transactions are supported" do
|
2561
2381
|
db = Sequel::Database.new
|
2562
|
-
|
2563
|
-
|
2382
|
+
db.define_singleton_method(:supports_savepoints?){true}
|
2383
|
+
db.define_singleton_method(:supports_prepared_transactions?){true}
|
2564
2384
|
db.supports_savepoints_in_prepared_transactions?.must_equal true
|
2565
2385
|
end
|
2566
2386
|
end
|
@@ -2669,7 +2489,7 @@ describe "Database extensions" do
|
|
2669
2489
|
end
|
2670
2490
|
end
|
2671
2491
|
before do
|
2672
|
-
@db = Sequel.mock
|
2492
|
+
@db = Sequel.mock
|
2673
2493
|
end
|
2674
2494
|
after do
|
2675
2495
|
Sequel::Database.instance_variable_set(:@initialize_hook, Proc.new {|db| })
|
@@ -2724,8 +2544,8 @@ describe "Database extensions" do
|
|
2724
2544
|
Sequel::Database.extension(:foo, :bar)
|
2725
2545
|
@db.wont_respond_to(:a)
|
2726
2546
|
@db.wont_respond_to(:b)
|
2727
|
-
Sequel.mock
|
2728
|
-
Sequel.mock
|
2547
|
+
Sequel.mock.a.must_equal 1
|
2548
|
+
Sequel.mock.b.must_equal 2
|
2729
2549
|
end
|
2730
2550
|
end
|
2731
2551
|
|
@@ -2816,6 +2636,6 @@ end
|
|
2816
2636
|
|
2817
2637
|
describe "Dataset identifier folding" do
|
2818
2638
|
it "should fold to uppercase by default, as per SQL" do
|
2819
|
-
Sequel::Database.new
|
2639
|
+
Sequel::Database.new.send(:folds_unquoted_identifiers_to_uppercase?).must_equal true
|
2820
2640
|
end
|
2821
2641
|
end
|