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
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,19 @@ 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
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe "Database :connect_sqls option" do
|
|
106
|
+
it "should issue the each sql query for each new connection" do
|
|
107
|
+
db = Sequel.mock(:connect_sqls=>['SELECT 1', 'SELECT 2'])
|
|
108
|
+
db.sqls.must_equal ['SELECT 1', 'SELECT 2']
|
|
109
|
+
db['SELECT 3'].get
|
|
110
|
+
db.sqls.must_equal ['SELECT 3']
|
|
111
|
+
db.disconnect
|
|
112
|
+
db['SELECT 3'].get
|
|
113
|
+
db.sqls.must_equal ['SELECT 1', 'SELECT 2', 'SELECT 3']
|
|
114
|
+
end
|
|
129
115
|
end
|
|
130
116
|
|
|
131
117
|
describe "Database#freeze" do
|
|
@@ -188,79 +174,6 @@ describe "Database#log_info" do
|
|
|
188
174
|
end
|
|
189
175
|
end
|
|
190
176
|
|
|
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
177
|
describe "Database#log_connection_yield" do
|
|
265
178
|
before do
|
|
266
179
|
@o = Object.new
|
|
@@ -357,6 +270,7 @@ describe "Database#uri" do
|
|
|
357
270
|
before do
|
|
358
271
|
@c = Class.new(Sequel::Database) do
|
|
359
272
|
def dataset_class_default; Sequel::Dataset end
|
|
273
|
+
def connect(*); Object.new end
|
|
360
274
|
set_adapter_scheme :mau
|
|
361
275
|
end
|
|
362
276
|
|
|
@@ -412,10 +326,8 @@ describe "Database#dataset" do
|
|
|
412
326
|
e.sql.must_equal 'SELECT * FROM miu'
|
|
413
327
|
end
|
|
414
328
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
d.must_be_kind_of(Sequel::Dataset)
|
|
418
|
-
d.sql.must_equal 'SELECT * FROM mau WHERE (x > 100)'
|
|
329
|
+
it "should provide a #from dataset that supports virtual row blocks" do
|
|
330
|
+
@db.from{a(b)}.sql.must_equal 'SELECT * FROM a(b)'
|
|
419
331
|
end
|
|
420
332
|
|
|
421
333
|
it "should provide a #select dataset" do
|
|
@@ -610,6 +522,12 @@ describe "Database#extend_datasets custom methods" do
|
|
|
610
522
|
ds.order(:bar).foo.sql.must_equal 'SELECT * FROM items ORDER BY baz, bar'
|
|
611
523
|
end
|
|
612
524
|
|
|
525
|
+
it "should have dataset_module support a reverse method" do
|
|
526
|
+
@db.extend_datasets{reverse(:foo){:baz}}
|
|
527
|
+
ds.foo.sql.must_equal 'SELECT * FROM items ORDER BY baz DESC'
|
|
528
|
+
ds.where(:bar).foo.sql.must_equal 'SELECT * FROM items WHERE bar ORDER BY baz DESC'
|
|
529
|
+
end
|
|
530
|
+
|
|
613
531
|
it "should have dataset_module support a select method" do
|
|
614
532
|
@db.extend_datasets{select :foo, :baz}
|
|
615
533
|
ds.foo.sql.must_equal 'SELECT baz FROM items'
|
|
@@ -710,7 +628,7 @@ end
|
|
|
710
628
|
describe "Database#synchronize" do
|
|
711
629
|
before do
|
|
712
630
|
@db = Sequel::Database.new(:max_connections => 1)
|
|
713
|
-
|
|
631
|
+
@db.define_singleton_method(:connect){|c| 12345}
|
|
714
632
|
end
|
|
715
633
|
|
|
716
634
|
it "should wrap the supplied block in pool.hold" do
|
|
@@ -735,7 +653,7 @@ describe "Database#test_connection" do
|
|
|
735
653
|
before do
|
|
736
654
|
@db = Sequel::Database.new
|
|
737
655
|
pr = proc{@test = rand(100)}
|
|
738
|
-
|
|
656
|
+
@db.define_singleton_method(:connect){|c| pr.call}
|
|
739
657
|
end
|
|
740
658
|
|
|
741
659
|
it "should attempt to get a connection" do
|
|
@@ -781,7 +699,7 @@ DatabaseTransactionSpecs = shared_description do
|
|
|
781
699
|
end
|
|
782
700
|
|
|
783
701
|
it "should support transaction isolation levels" do
|
|
784
|
-
|
|
702
|
+
@db.define_singleton_method(:supports_transaction_isolation_levels?){true}
|
|
785
703
|
[:uncommitted, :committed, :repeatable, :serializable].each do |l|
|
|
786
704
|
@db.transaction(:isolation=>l){@db.run "DROP TABLE #{l}"}
|
|
787
705
|
end
|
|
@@ -792,7 +710,7 @@ DatabaseTransactionSpecs = shared_description do
|
|
|
792
710
|
end
|
|
793
711
|
|
|
794
712
|
it "should allow specifying a default transaction isolation level" do
|
|
795
|
-
|
|
713
|
+
@db.define_singleton_method(:supports_transaction_isolation_levels?){true}
|
|
796
714
|
[:uncommitted, :committed, :repeatable, :serializable].each do |l|
|
|
797
715
|
@db.transaction_isolation_level = l
|
|
798
716
|
@db.transaction{@db.run "DROP TABLE #{l}"}
|
|
@@ -883,8 +801,8 @@ DatabaseTransactionSpecs = shared_description do
|
|
|
883
801
|
|
|
884
802
|
it "should handle errors when sending BEGIN" do
|
|
885
803
|
ec = Class.new(StandardError)
|
|
886
|
-
|
|
887
|
-
|
|
804
|
+
@db.define_singleton_method(:database_error_classes){[ec]}
|
|
805
|
+
@db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /BEGIN/ ? raise(ec, 'bad') : super(c, sql)}
|
|
888
806
|
begin
|
|
889
807
|
@db.transaction{@db.execute 'DROP TABLE test;'}
|
|
890
808
|
rescue Sequel::DatabaseError => e
|
|
@@ -896,8 +814,8 @@ DatabaseTransactionSpecs = shared_description do
|
|
|
896
814
|
|
|
897
815
|
it "should handle errors when sending COMMIT" do
|
|
898
816
|
ec = Class.new(StandardError)
|
|
899
|
-
|
|
900
|
-
|
|
817
|
+
@db.define_singleton_method(:database_error_classes){[ec]}
|
|
818
|
+
@db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /COMMIT/ ? raise(ec, 'bad') : super(c, sql)}
|
|
901
819
|
begin
|
|
902
820
|
@db.transaction{@db.execute 'DROP TABLE test;'}
|
|
903
821
|
rescue Sequel::DatabaseError => e
|
|
@@ -909,8 +827,8 @@ DatabaseTransactionSpecs = shared_description do
|
|
|
909
827
|
|
|
910
828
|
it "should raise original exception if there is an exception raised when rolling back" do
|
|
911
829
|
ec = Class.new(StandardError)
|
|
912
|
-
|
|
913
|
-
|
|
830
|
+
@db.define_singleton_method(:database_error_classes){[ec]}
|
|
831
|
+
@db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /ROLLBACK/ ? raise(ec, 'bad') : super(c, sql)}
|
|
914
832
|
begin
|
|
915
833
|
@db.transaction{raise ArgumentError, 'asdf'}
|
|
916
834
|
rescue => e
|
|
@@ -921,8 +839,8 @@ DatabaseTransactionSpecs = shared_description do
|
|
|
921
839
|
|
|
922
840
|
it "should raise original exception if there is an exception raised when rolling back when using :rollback=>:always" do
|
|
923
841
|
ec = Class.new(StandardError)
|
|
924
|
-
|
|
925
|
-
|
|
842
|
+
@db.define_singleton_method(:database_error_classes){[ec]}
|
|
843
|
+
@db.define_singleton_method(:log_connection_execute){|c, sql| sql =~ /ROLLBACK/ ? raise(ec, 'bad') : super(c, sql)}
|
|
926
844
|
begin
|
|
927
845
|
@db.transaction(:rollback=>:always){}
|
|
928
846
|
rescue => e
|
|
@@ -1014,10 +932,10 @@ DatabaseTransactionSpecs = shared_description do
|
|
|
1014
932
|
end
|
|
1015
933
|
|
|
1016
934
|
it "should raise database errors when commiting a transaction as Sequel::DatabaseError" do
|
|
1017
|
-
|
|
935
|
+
@db.define_singleton_method(:commit_transaction){raise ArgumentError}
|
|
1018
936
|
lambda{@db.transaction{}}.must_raise(ArgumentError)
|
|
1019
937
|
|
|
1020
|
-
|
|
938
|
+
@db.define_singleton_method(:database_error_classes){[ArgumentError]}
|
|
1021
939
|
lambda{@db.transaction{}}.must_raise(Sequel::DatabaseError)
|
|
1022
940
|
end
|
|
1023
941
|
|
|
@@ -1144,13 +1062,13 @@ DatabaseTransactionSpecs = shared_description do
|
|
|
1144
1062
|
end
|
|
1145
1063
|
|
|
1146
1064
|
it "should raise an error if you attempt to use after_commit inside a prepared transaction" do
|
|
1147
|
-
|
|
1065
|
+
@db.define_singleton_method(:supports_prepared_transactions?){true}
|
|
1148
1066
|
proc{@db.transaction(:prepare=>'XYZ'){@db.after_commit{@db.execute('foo')}}}.must_raise(Sequel::Error)
|
|
1149
1067
|
@db.sqls.must_equal ['BEGIN', 'ROLLBACK']
|
|
1150
1068
|
end
|
|
1151
1069
|
|
|
1152
1070
|
it "should raise an error if you attempt to use after_rollback inside a prepared transaction" do
|
|
1153
|
-
|
|
1071
|
+
@db.define_singleton_method(:supports_prepared_transactions?){true}
|
|
1154
1072
|
proc{@db.transaction(:prepare=>'XYZ'){@db.after_rollback{@db.execute('foo')}}}.must_raise(Sequel::Error)
|
|
1155
1073
|
@db.sqls.must_equal ['BEGIN', 'ROLLBACK']
|
|
1156
1074
|
end
|
|
@@ -1216,13 +1134,13 @@ describe "Database#transaction with savepoint support" do
|
|
|
1216
1134
|
end
|
|
1217
1135
|
|
|
1218
1136
|
it "should raise an error if you attempt to use after_commit inside a savepoint in a prepared transaction" do
|
|
1219
|
-
|
|
1137
|
+
@db.define_singleton_method(:supports_prepared_transactions?){true}
|
|
1220
1138
|
proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_commit{@db.execute('foo')}}}}.must_raise(Sequel::Error)
|
|
1221
1139
|
@db.sqls.must_equal ['BEGIN', 'SAVEPOINT autopoint_1','ROLLBACK TO SAVEPOINT autopoint_1', 'ROLLBACK']
|
|
1222
1140
|
end
|
|
1223
1141
|
|
|
1224
1142
|
it "should raise an error if you attempt to use after_rollback inside a savepoint in a prepared transaction" do
|
|
1225
|
-
|
|
1143
|
+
@db.define_singleton_method(:supports_prepared_transactions?){true}
|
|
1226
1144
|
proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_rollback{@db.execute('foo')}}}}.must_raise(Sequel::Error)
|
|
1227
1145
|
@db.sqls.must_equal ['BEGIN', 'SAVEPOINT autopoint_1','ROLLBACK TO SAVEPOINT autopoint_1', 'ROLLBACK']
|
|
1228
1146
|
end
|
|
@@ -1241,7 +1159,7 @@ end
|
|
|
1241
1159
|
describe "Database#transaction without savepoint support" do
|
|
1242
1160
|
before do
|
|
1243
1161
|
@db = Sequel.mock(:servers=>{:test=>{}})
|
|
1244
|
-
|
|
1162
|
+
@db.define_singleton_method(:supports_savepoints?){false}
|
|
1245
1163
|
end
|
|
1246
1164
|
|
|
1247
1165
|
it "should not create savepoint if inside a transaction when :savepoint=>:only is used" do
|
|
@@ -1405,11 +1323,11 @@ describe "Database#transaction with savepoints" do
|
|
|
1405
1323
|
end
|
|
1406
1324
|
|
|
1407
1325
|
it "should raise database errors when commiting a transaction as Sequel::DatabaseError" do
|
|
1408
|
-
|
|
1326
|
+
@db.define_singleton_method(:commit_transaction){raise ArgumentError}
|
|
1409
1327
|
lambda{@db.transaction{}}.must_raise(ArgumentError)
|
|
1410
1328
|
lambda{@db.transaction{@db.transaction(:savepoint=>true){}}}.must_raise(ArgumentError)
|
|
1411
1329
|
|
|
1412
|
-
|
|
1330
|
+
@db.define_singleton_method(:database_error_classes){[ArgumentError]}
|
|
1413
1331
|
lambda{@db.transaction{}}.must_raise(Sequel::DatabaseError)
|
|
1414
1332
|
lambda{@db.transaction{@db.transaction(:savepoint=>true){}}}.must_raise(Sequel::DatabaseError)
|
|
1415
1333
|
end
|
|
@@ -1417,7 +1335,7 @@ end
|
|
|
1417
1335
|
|
|
1418
1336
|
describe "A Database adapter with a scheme" do
|
|
1419
1337
|
before do
|
|
1420
|
-
|
|
1338
|
+
require_relative '../../lib/sequel/adapters/mock'
|
|
1421
1339
|
@ccc = Class.new(Sequel::Mock::Database)
|
|
1422
1340
|
@ccc.send(:set_adapter_scheme, :ccc)
|
|
1423
1341
|
end
|
|
@@ -1475,7 +1393,7 @@ describe "A Database adapter with a scheme" do
|
|
|
1475
1393
|
Sequel.send(:def_adapter_method, :ccc)
|
|
1476
1394
|
Sequel.ccc('db', :host=>'localhost', &p).must_equal returnValue
|
|
1477
1395
|
@ccc::DISCONNECTS.must_equal [z, y, x]
|
|
1478
|
-
|
|
1396
|
+
Sequel.singleton_class.send(:remove_method, :ccc)
|
|
1479
1397
|
end
|
|
1480
1398
|
|
|
1481
1399
|
it "should be accessible through Sequel.<adapter>" do
|
|
@@ -1500,7 +1418,7 @@ describe "A Database adapter with a scheme" do
|
|
|
1500
1418
|
c = Sequel.ccc(:database => 'mydb', :host => 'localhost')
|
|
1501
1419
|
c.must_be_kind_of(@ccc)
|
|
1502
1420
|
c.opts.values_at(:adapter, :database, :host, :adapter_class).must_equal [:ccc, 'mydb', 'localhost', @ccc]
|
|
1503
|
-
|
|
1421
|
+
Sequel.singleton_class.send(:remove_method, :ccc)
|
|
1504
1422
|
end
|
|
1505
1423
|
|
|
1506
1424
|
it "should be accessible through Sequel.connect with options" do
|
|
@@ -1608,14 +1526,6 @@ describe "A single threaded database" do
|
|
|
1608
1526
|
db.pool.must_be_kind_of(Sequel::SingleConnectionPool)
|
|
1609
1527
|
end
|
|
1610
1528
|
|
|
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
1529
|
it "should be constructable using Sequel.single_threaded = true" do
|
|
1620
1530
|
Sequel.single_threaded = true
|
|
1621
1531
|
Sequel.single_threaded.must_equal true
|
|
@@ -1628,7 +1538,7 @@ describe "A single threaded database" do
|
|
|
1628
1538
|
before do
|
|
1629
1539
|
conn = 1234567
|
|
1630
1540
|
@db = Sequel::Database.new(:single_threaded => true)
|
|
1631
|
-
|
|
1541
|
+
@db.define_singleton_method(:connect) do |c|
|
|
1632
1542
|
conn += 1
|
|
1633
1543
|
end
|
|
1634
1544
|
end
|
|
@@ -1649,14 +1559,12 @@ describe "A single threaded database" do
|
|
|
1649
1559
|
end
|
|
1650
1560
|
|
|
1651
1561
|
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
|
|
1562
|
+
db = Class.new(Sequel::Database){def connect(*) raise Exception end}.new(:single_threaded => true, :servers=>{}, :test=>false)
|
|
1654
1563
|
proc {db.pool.hold {|c|}}.must_raise(Sequel::DatabaseConnectionError)
|
|
1655
1564
|
end
|
|
1656
1565
|
|
|
1657
1566
|
it "should raise a DatabaseConnectionError if the connection proc returns nil" do
|
|
1658
|
-
db = Sequel.
|
|
1659
|
-
def db.connect(*) end
|
|
1567
|
+
db = Class.new(Sequel::Database){def connect(*) end}.new(:single_threaded => true, :servers=>{}, :test=>false)
|
|
1660
1568
|
proc {db.pool.hold {|c|}}.must_raise(Sequel::DatabaseConnectionError)
|
|
1661
1569
|
end
|
|
1662
1570
|
end
|
|
@@ -1776,11 +1684,11 @@ describe "Database#inspect" do
|
|
|
1776
1684
|
end
|
|
1777
1685
|
|
|
1778
1686
|
it "should include the class name and the connection options if an options hash was given" do
|
|
1779
|
-
Sequel.connect(:adapter=>:mock).inspect.
|
|
1687
|
+
Sequel.connect(:adapter=>:mock).inspect.must_equal '#<Sequel::Mock::Database: {:adapter=>:mock}>'
|
|
1780
1688
|
end
|
|
1781
1689
|
|
|
1782
1690
|
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.
|
|
1691
|
+
Sequel.connect('mock://foo', :database=>'bar').inspect.must_equal '#<Sequel::Mock::Database: "mock://foo" {:database=>"bar"}>'
|
|
1784
1692
|
end
|
|
1785
1693
|
end
|
|
1786
1694
|
|
|
@@ -1890,6 +1798,10 @@ describe "Database#add_servers" do
|
|
|
1890
1798
|
@db.synchronize(:server1){|c| c.opts[:host].must_equal 8}
|
|
1891
1799
|
@db.synchronize(:server2){|c| c.opts[:host].must_equal 4}
|
|
1892
1800
|
end
|
|
1801
|
+
|
|
1802
|
+
it "should raise error for unsharded pool" do
|
|
1803
|
+
proc{Sequel.mock.add_servers(:server1=>{})}.must_raise Sequel::Error
|
|
1804
|
+
end
|
|
1893
1805
|
end
|
|
1894
1806
|
|
|
1895
1807
|
describe "Database#remove_servers" do
|
|
@@ -1940,86 +1852,12 @@ describe "Database#remove_servers" do
|
|
|
1940
1852
|
c1.opts[:host].must_equal 1
|
|
1941
1853
|
end
|
|
1942
1854
|
end
|
|
1943
|
-
end
|
|
1944
1855
|
|
|
1945
|
-
|
|
1946
|
-
|
|
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
|
-
|
|
1986
|
-
deprecated "should raise if not given a block" do
|
|
1987
|
-
proc{Sequel.mock.each_server}.must_raise(Sequel::Error)
|
|
1856
|
+
it "should raise error for unsharded pool" do
|
|
1857
|
+
proc{Sequel.mock.remove_servers(:server1)}.must_raise Sequel::Error
|
|
1988
1858
|
end
|
|
1989
1859
|
end
|
|
1990
1860
|
|
|
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
1861
|
describe "Database#raise_error" do
|
|
2024
1862
|
before do
|
|
2025
1863
|
@db = Sequel.mock
|
|
@@ -2156,9 +1994,9 @@ describe "Database#typecast_value" do
|
|
|
2156
1994
|
t2 = Time.mktime(2011, 1, 2, 3, 4, 5, 500000) # Local Time
|
|
2157
1995
|
t3 = Time.utc(2011, 1, 2, 3, 4, 5, 500000) - (t - t2) # Local Time in UTC Time
|
|
2158
1996
|
t4 = Time.mktime(2011, 1, 2, 3, 4, 5, 500000) + (t - t2) # UTC Time in Local Time
|
|
2159
|
-
secs =
|
|
2160
|
-
r1 =
|
|
2161
|
-
r2 =
|
|
1997
|
+
secs = Rational(11, 2)
|
|
1998
|
+
r1 = Rational(t2.utc_offset, 86400)
|
|
1999
|
+
r2 = Rational((t - t2).to_i, 86400)
|
|
2162
2000
|
dt = DateTime.civil(2011, 1, 2, 3, 4, secs)
|
|
2163
2001
|
dt2 = DateTime.civil(2011, 1, 2, 3, 4, secs, r1)
|
|
2164
2002
|
dt3 = DateTime.civil(2011, 1, 2, 3, 4, secs) - r2
|
|
@@ -2297,8 +2135,8 @@ describe "Database#typecast_value" do
|
|
|
2297
2135
|
|
|
2298
2136
|
Sequel.datetime_class = DateTime
|
|
2299
2137
|
@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,
|
|
2138
|
+
@db.typecast_value(:datetime, [2011, 10, 11, 12, 13, 14, 500000000]).must_equal DateTime.civil(2011, 10, 11, 12, 13, Rational(29, 2))
|
|
2139
|
+
@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
2140
|
ensure
|
|
2303
2141
|
Sequel.datetime_class = Time
|
|
2304
2142
|
end
|
|
@@ -2313,13 +2151,13 @@ describe "Database#typecast_value" do
|
|
|
2313
2151
|
|
|
2314
2152
|
Sequel.datetime_class = DateTime
|
|
2315
2153
|
@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,
|
|
2154
|
+
@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
2155
|
@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'=>
|
|
2156
|
+
@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))
|
|
2157
|
+
@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))
|
|
2158
|
+
@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))
|
|
2159
|
+
@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))
|
|
2160
|
+
@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
2161
|
ensure
|
|
2324
2162
|
Sequel.datetime_class = Time
|
|
2325
2163
|
end
|
|
@@ -2397,7 +2235,7 @@ describe "Database#typecast_value" do
|
|
|
2397
2235
|
rescue => e1
|
|
2398
2236
|
begin
|
|
2399
2237
|
raise RuntimeError
|
|
2400
|
-
rescue
|
|
2238
|
+
rescue
|
|
2401
2239
|
@db.send(:raise_error, e1)
|
|
2402
2240
|
end
|
|
2403
2241
|
end
|
|
@@ -2411,7 +2249,7 @@ describe "Database#typecast_value" do
|
|
|
2411
2249
|
@db.typecast_value(:date, 'a')
|
|
2412
2250
|
true.must_equal false
|
|
2413
2251
|
rescue Sequel::InvalidValue => e
|
|
2414
|
-
e.inspect.
|
|
2252
|
+
e.inspect.must_equal '#<Sequel::InvalidValue: ArgumentError: invalid date>'
|
|
2415
2253
|
end
|
|
2416
2254
|
end
|
|
2417
2255
|
end
|
|
@@ -2559,8 +2397,8 @@ describe "Database#supports_savepoints_in_prepared_transactions?" do
|
|
|
2559
2397
|
|
|
2560
2398
|
it "should be true if both savepoints and prepared transactions are supported" do
|
|
2561
2399
|
db = Sequel::Database.new
|
|
2562
|
-
|
|
2563
|
-
|
|
2400
|
+
db.define_singleton_method(:supports_savepoints?){true}
|
|
2401
|
+
db.define_singleton_method(:supports_prepared_transactions?){true}
|
|
2564
2402
|
db.supports_savepoints_in_prepared_transactions?.must_equal true
|
|
2565
2403
|
end
|
|
2566
2404
|
end
|
|
@@ -2669,7 +2507,7 @@ describe "Database extensions" do
|
|
|
2669
2507
|
end
|
|
2670
2508
|
end
|
|
2671
2509
|
before do
|
|
2672
|
-
@db = Sequel.mock
|
|
2510
|
+
@db = Sequel.mock
|
|
2673
2511
|
end
|
|
2674
2512
|
after do
|
|
2675
2513
|
Sequel::Database.instance_variable_set(:@initialize_hook, Proc.new {|db| })
|
|
@@ -2724,8 +2562,22 @@ describe "Database extensions" do
|
|
|
2724
2562
|
Sequel::Database.extension(:foo, :bar)
|
|
2725
2563
|
@db.wont_respond_to(:a)
|
|
2726
2564
|
@db.wont_respond_to(:b)
|
|
2727
|
-
Sequel.mock
|
|
2728
|
-
Sequel.mock
|
|
2565
|
+
Sequel.mock.a.must_equal 1
|
|
2566
|
+
Sequel.mock.b.must_equal 2
|
|
2567
|
+
end
|
|
2568
|
+
|
|
2569
|
+
it "should be loadable via the :extensions Database option" do
|
|
2570
|
+
Sequel::Database.register_extension(:a, Module.new{def a; 1; end})
|
|
2571
|
+
Sequel::Database.register_extension(:b, Module.new{def b; 2; end})
|
|
2572
|
+
Sequel.mock(:extensions=>:a).a.must_equal 1
|
|
2573
|
+
db = Sequel.mock(:extensions=>'a,b')
|
|
2574
|
+
db.a.must_equal 1
|
|
2575
|
+
db.b.must_equal 2
|
|
2576
|
+
db = Sequel.mock(:extensions=>[:a, :b])
|
|
2577
|
+
db.a.must_equal 1
|
|
2578
|
+
db.b.must_equal 2
|
|
2579
|
+
proc{Sequel.mock(:extensions=>nil).a}.must_raise NoMethodError
|
|
2580
|
+
proc{Sequel.mock(:extensions=>Object.new)}.must_raise Sequel::Error
|
|
2729
2581
|
end
|
|
2730
2582
|
end
|
|
2731
2583
|
|
|
@@ -2816,6 +2668,6 @@ end
|
|
|
2816
2668
|
|
|
2817
2669
|
describe "Dataset identifier folding" do
|
|
2818
2670
|
it "should fold to uppercase by default, as per SQL" do
|
|
2819
|
-
Sequel::Database.new
|
|
2671
|
+
Sequel::Database.new.send(:folds_unquoted_identifiers_to_uppercase?).must_equal true
|
|
2820
2672
|
end
|
|
2821
2673
|
end
|