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/lib/sequel/database.rb
CHANGED
@@ -12,7 +12,8 @@ module Sequel
|
|
12
12
|
|
13
13
|
# Array of all databases to which Sequel has connected. If you are
|
14
14
|
# developing an application that can connect to an arbitrary number of
|
15
|
-
# databases, delete the database objects from this or
|
15
|
+
# databases, delete the database objects from this (or use the :keep_reference
|
16
|
+
# Database option or a block when connecting) or they will not get
|
16
17
|
# garbage collected.
|
17
18
|
DATABASES = []
|
18
19
|
|
@@ -23,5 +24,14 @@ module Sequel
|
|
23
24
|
OPTS = Sequel::OPTS
|
24
25
|
end
|
25
26
|
|
26
|
-
|
27
|
+
require_relative "database/connecting"
|
28
|
+
require_relative "database/dataset"
|
29
|
+
require_relative "database/dataset_defaults"
|
30
|
+
require_relative "database/logging"
|
31
|
+
require_relative "database/features"
|
32
|
+
require_relative "database/misc"
|
33
|
+
require_relative "database/query"
|
34
|
+
require_relative "database/transactions"
|
35
|
+
require_relative "database/schema_generator"
|
36
|
+
require_relative "database/schema_methods"
|
27
37
|
end
|
@@ -8,35 +8,13 @@ module Sequel
|
|
8
8
|
# ---------------------
|
9
9
|
|
10
10
|
# Array of supported database adapters
|
11
|
-
ADAPTERS = %w'ado amalgalite
|
12
|
-
# SEQUEL5: Remove cubrid do swift
|
13
|
-
|
14
|
-
def self.single_threaded
|
15
|
-
Sequel::Deprecation.deprecate("Sequel::Database.single_threaded", "Use Sequel.single_threaded instead")
|
16
|
-
Sequel.single_threaded
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.single_threaded=(v)
|
20
|
-
Sequel::Deprecation.deprecate("Sequel::Database.single_threaded=", "Use Sequel.single_threaded= instead")
|
21
|
-
Sequel.single_threaded = v
|
22
|
-
end
|
11
|
+
ADAPTERS = %w'ado amalgalite ibmdb jdbc mock mysql mysql2 odbc oracle postgres sqlanywhere sqlite tinytds'.map(&:to_sym)
|
23
12
|
|
24
13
|
# The Database subclass for the given adapter scheme.
|
25
14
|
# Raises Sequel::AdapterNotFound if the adapter
|
26
15
|
# could not be loaded.
|
27
16
|
def self.adapter_class(scheme)
|
28
|
-
|
29
|
-
|
30
|
-
if scheme.to_s.include?('-')
|
31
|
-
# :nocov:
|
32
|
-
Sequel::Deprecation.deprecate("Automatically converting '-' to '_' in adapter schemes", "Use '_' instead of '-' in the adapter scheme")
|
33
|
-
# :nocov:
|
34
|
-
end
|
35
|
-
|
36
|
-
scheme = scheme.to_s.gsub('-', '_').to_sym # SEQUEL5: Remove
|
37
|
-
# scheme = scheme.to_sym # SEQUEL5
|
38
|
-
|
39
|
-
load_adapter(scheme)
|
17
|
+
scheme.is_a?(Class) ? scheme : load_adapter(scheme.to_sym)
|
40
18
|
end
|
41
19
|
|
42
20
|
# Returns the scheme symbol for the Database class.
|
@@ -48,9 +26,8 @@ module Sequel
|
|
48
26
|
def self.connect(conn_string, opts = OPTS)
|
49
27
|
case conn_string
|
50
28
|
when String
|
51
|
-
|
52
|
-
|
53
|
-
c = adapter_class(match[1].to_sym)
|
29
|
+
if conn_string.start_with?('jdbc:')
|
30
|
+
c = adapter_class(:jdbc)
|
54
31
|
opts = opts.merge(:orig_opts=>opts.dup)
|
55
32
|
opts = {:uri=>conn_string}.merge!(opts)
|
56
33
|
else
|
@@ -69,16 +46,16 @@ module Sequel
|
|
69
46
|
else
|
70
47
|
raise Error, "Sequel::Database.connect takes either a Hash or a String, given: #{conn_string.inspect}"
|
71
48
|
end
|
72
|
-
|
49
|
+
|
73
50
|
opts = opts.inject({}) do |m, (k,v)|
|
74
51
|
k = :user if k.to_s == 'username'
|
75
52
|
m[k.to_sym] = v
|
76
53
|
m
|
77
54
|
end
|
55
|
+
|
78
56
|
begin
|
79
57
|
db = c.new(opts)
|
80
|
-
|
81
|
-
db.test_connection if opts[:test] && db.send(:typecast_value_boolean, opts[:test])
|
58
|
+
db.test_connection if db.send(:typecast_value_boolean, opts.fetch(:test, true))
|
82
59
|
if block_given?
|
83
60
|
return yield(db)
|
84
61
|
end
|
@@ -155,7 +132,6 @@ module Sequel
|
|
155
132
|
# end
|
156
133
|
#
|
157
134
|
# module DatabaseMethods
|
158
|
-
# extend Sequel::Database::ResetIdentifierMangling
|
159
135
|
# # ...
|
160
136
|
# end
|
161
137
|
#
|
@@ -181,27 +157,26 @@ module Sequel
|
|
181
157
|
# +database_type+ (for native adapters), in others (i.e. adapters with
|
182
158
|
# subadapters), it will be different.
|
183
159
|
#
|
184
|
-
# Sequel.connect('jdbc:postgres://...').adapter_scheme
|
160
|
+
# Sequel.connect('jdbc:postgres://...').adapter_scheme
|
161
|
+
# # => :jdbc
|
185
162
|
def adapter_scheme
|
186
163
|
self.class.adapter_scheme
|
187
164
|
end
|
188
165
|
|
189
166
|
# Dynamically add new servers or modify server options at runtime. Also adds new
|
190
|
-
# servers to the connection pool.
|
191
|
-
# configurations where it is useful to add new server hosts at runtime.
|
167
|
+
# servers to the connection pool. Only usable when using a sharded connection pool.
|
192
168
|
#
|
193
169
|
# servers argument should be a hash with server name symbol keys and hash or
|
194
170
|
# proc values. If a servers key is already in use, it's value is overridden
|
195
171
|
# with the value provided.
|
196
172
|
#
|
197
|
-
# DB.add_servers(:
|
173
|
+
# DB.add_servers(f: {host: "hash_host_f"})
|
198
174
|
def add_servers(servers)
|
199
|
-
unless
|
200
|
-
|
201
|
-
# raise Error, "cannot call Database#add_servers on a Database instance that does not use a sharded connection pool" # SEQUEL5
|
202
|
-
return
|
175
|
+
unless sharded?
|
176
|
+
raise Error, "cannot call Database#add_servers on a Database instance that does not use a sharded connection pool"
|
203
177
|
end
|
204
178
|
|
179
|
+
h = @opts[:servers]
|
205
180
|
Sequel.synchronize{h.merge!(servers)}
|
206
181
|
@pool.add_servers(servers.keys)
|
207
182
|
end
|
@@ -213,7 +188,8 @@ module Sequel
|
|
213
188
|
# type. Even better, you can tell that two Database objects that are using
|
214
189
|
# the same adapter are connecting to different database types.
|
215
190
|
#
|
216
|
-
# Sequel.connect('jdbc:postgres://...').database_type
|
191
|
+
# Sequel.connect('jdbc:postgres://...').database_type
|
192
|
+
# # => :postgres
|
217
193
|
def database_type
|
218
194
|
adapter_scheme
|
219
195
|
end
|
@@ -226,8 +202,8 @@ module Sequel
|
|
226
202
|
# Example:
|
227
203
|
#
|
228
204
|
# DB.disconnect # All servers
|
229
|
-
# DB.disconnect(:
|
230
|
-
# DB.disconnect(:
|
205
|
+
# DB.disconnect(server: :server1) # Single server
|
206
|
+
# DB.disconnect(server: [:server1, :server2]) # Multiple servers
|
231
207
|
def disconnect(opts = OPTS)
|
232
208
|
pool.disconnect(opts)
|
233
209
|
end
|
@@ -239,20 +215,8 @@ module Sequel
|
|
239
215
|
conn.close
|
240
216
|
end
|
241
217
|
|
242
|
-
#
|
243
|
-
#
|
244
|
-
# modifications (DDL queries) on each shard.
|
245
|
-
#
|
246
|
-
# DB.each_server{|db| db.create_table(:users){primary_key :id; String :name}}
|
247
|
-
def each_server(&block)
|
248
|
-
Sequel::Deprecation.deprecate("Database#each_server", "Switching to using Dataset#servers and Database#with_server from the server_block extension: \"DB.servers.each{|s| DB.with_server(s){}}\"")
|
249
|
-
raise(Error, "Database#each_server must be passed a block") unless block
|
250
|
-
servers.each{|s| self.class.connect(server_opts(s), &block)}
|
251
|
-
end
|
252
|
-
|
253
|
-
# Dynamically remove existing servers from the connection pool. Intended for
|
254
|
-
# use with master/slave or shard configurations where it is useful to remove
|
255
|
-
# existing server hosts at runtime.
|
218
|
+
# Dynamically remove existing servers from the connection pool. Only usable
|
219
|
+
# when using a sharded connection pool
|
256
220
|
#
|
257
221
|
# servers should be symbols or arrays of symbols. If a nonexistent server
|
258
222
|
# is specified, it is ignored. If no servers have been specified for
|
@@ -261,12 +225,11 @@ module Sequel
|
|
261
225
|
#
|
262
226
|
# DB.remove_servers(:f1, :f2)
|
263
227
|
def remove_servers(*servers)
|
264
|
-
unless
|
265
|
-
|
266
|
-
# raise Error, "cannot call Database#remove_servers on a Database instance that does not use a sharded connection pool" # SEQUEL5
|
267
|
-
return
|
228
|
+
unless sharded?
|
229
|
+
raise Error, "cannot call Database#remove_servers on a Database instance that does not use a sharded connection pool"
|
268
230
|
end
|
269
231
|
|
232
|
+
h = @opts[:servers]
|
270
233
|
servers.flatten.each{|s| Sequel.synchronize{h.delete(s)}}
|
271
234
|
@pool.remove_servers(servers)
|
272
235
|
end
|
@@ -53,18 +53,15 @@ module Sequel
|
|
53
53
|
end
|
54
54
|
|
55
55
|
# Returns a new dataset with the +from+ method invoked. If a block is given,
|
56
|
-
# it
|
56
|
+
# it acts as a virtual row block
|
57
57
|
#
|
58
58
|
# DB.from(:items) # SELECT * FROM items
|
59
|
-
# DB.from
|
59
|
+
# DB.from{schema[:table]} # SELECT * FROM schema.table
|
60
60
|
def from(*args, &block)
|
61
61
|
if block
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
# @default_dataset.from(*args, &block)
|
66
|
-
#elsif args.length == 1 && (table = args[0]).is_a?(Symbol)
|
67
|
-
# @default_dataset.send(:cached_dataset, :"_from_#{table}_ds"){@default_dataset.from(table)}
|
62
|
+
@default_dataset.from(*args, &block)
|
63
|
+
elsif args.length == 1 && (table = args[0]).is_a?(Symbol)
|
64
|
+
@default_dataset.send(:cached_dataset, :"_from_#{table}_ds"){@default_dataset.from(table)}
|
68
65
|
else
|
69
66
|
@default_dataset.from(*args)
|
70
67
|
end
|
@@ -73,7 +70,7 @@ module Sequel
|
|
73
70
|
# Returns a new dataset with the select method invoked.
|
74
71
|
#
|
75
72
|
# DB.select(1) # SELECT 1
|
76
|
-
# DB.select{server_version
|
73
|
+
# DB.select{server_version.function} # SELECT server_version()
|
77
74
|
# DB.select(:id).from(:items) # SELECT id FROM items
|
78
75
|
def select(*args, &block)
|
79
76
|
@default_dataset.select(*args, &block)
|
@@ -7,42 +7,6 @@ module Sequel
|
|
7
7
|
# This methods change the default behavior of this database's datasets.
|
8
8
|
# ---------------------
|
9
9
|
|
10
|
-
# The default class to use for datasets
|
11
|
-
DatasetClass = Sequel::Dataset
|
12
|
-
Sequel::Deprecation.deprecate_constant(self, :DatasetClass)
|
13
|
-
|
14
|
-
# SEQUEL5: Remove
|
15
|
-
@identifier_input_method = nil
|
16
|
-
@identifier_output_method = nil
|
17
|
-
@quote_identifiers = nil
|
18
|
-
class << self
|
19
|
-
# The identifier input method to use by default for all databases (default: adapter default)
|
20
|
-
attr_reader :identifier_input_method
|
21
|
-
|
22
|
-
# The identifier output method to use by default for all databases (default: adapter default)
|
23
|
-
attr_reader :identifier_output_method
|
24
|
-
|
25
|
-
# Whether to quote identifiers (columns and tables) by default for all databases (default: adapter default)
|
26
|
-
attr_reader :quote_identifiers
|
27
|
-
end
|
28
|
-
|
29
|
-
# Change the default identifier input method to use for all databases,
|
30
|
-
def self.identifier_input_method=(v)
|
31
|
-
Sequel::Deprecation.deprecate("Sequel.identifier_input_method= and Sequel::Database.identifier_input_method=", "Call Sequel::Database#identifier_input_method= instead")
|
32
|
-
@identifier_input_method = v.nil? ? false : v
|
33
|
-
end
|
34
|
-
|
35
|
-
# Change the default identifier output method to use for all databases,
|
36
|
-
def self.identifier_output_method=(v)
|
37
|
-
Sequel::Deprecation.deprecate("Sequel.identifier_output_method= and Sequel::Database.identifier_output_method=", "Call Sequel::Database#identifier_output_method= instead")
|
38
|
-
@identifier_output_method = v.nil? ? false : v
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.quote_identifiers=(v)
|
42
|
-
Sequel::Deprecation.deprecate("Sequel.quote_identifiers= and Sequel::Database.quote_identifiers=", "Call Sequel::Database#quote_identifiers= instead")
|
43
|
-
@quote_identifiers = v
|
44
|
-
end
|
45
|
-
|
46
10
|
# The class to use for creating datasets. Should respond to
|
47
11
|
# new with the Database argument as the first argument, and
|
48
12
|
# an optional options hash.
|
@@ -74,7 +38,7 @@ module Sequel
|
|
74
38
|
#
|
75
39
|
# Examples:
|
76
40
|
#
|
77
|
-
# #
|
41
|
+
# # Introspect columns for all of DB's datasets
|
78
42
|
# DB.extend_datasets(Sequel::ColumnsIntrospection)
|
79
43
|
#
|
80
44
|
# # Trace all SELECT queries by printing the SQL and the full backtrace
|
@@ -112,24 +76,16 @@ module Sequel
|
|
112
76
|
|
113
77
|
# The default dataset class to use for the database
|
114
78
|
def dataset_class_default
|
115
|
-
|
116
|
-
Sequel::Dataset
|
117
|
-
else
|
118
|
-
Sequel::Deprecation.deprecate("Using self.class.const_get(:DatasetClass) to get the default dataset class", "Modify the database adapter to implement Database#dataset_class_default")
|
119
|
-
self.class.const_get(:DatasetClass)
|
120
|
-
end
|
79
|
+
Sequel::Dataset
|
121
80
|
end
|
122
81
|
|
123
|
-
# Reset the default dataset used by most Database methods that
|
124
|
-
# create datasets. Usually done after changes to the identifier
|
125
|
-
# mangling methods.
|
82
|
+
# Reset the default dataset used by most Database methods that create datasets.
|
126
83
|
def reset_default_dataset
|
127
84
|
Sequel.synchronize{@symbol_literal_cache.clear}
|
128
85
|
@default_dataset = dataset
|
129
86
|
end
|
130
87
|
|
131
|
-
# Whether to quote identifiers by default for this database, true
|
132
|
-
# by default.
|
88
|
+
# Whether to quote identifiers by default for this database, true by default.
|
133
89
|
def quote_identifiers_default
|
134
90
|
true
|
135
91
|
end
|
@@ -8,7 +8,7 @@ module Sequel
|
|
8
8
|
# database supprots a given feature.
|
9
9
|
# ---------------------
|
10
10
|
|
11
|
-
# Whether the database uses a global namespace for the index. If
|
11
|
+
# Whether the database uses a global namespace for the index, true by default. If
|
12
12
|
# false, the indexes are going to be namespaced per table.
|
13
13
|
def global_index_namespace?
|
14
14
|
true
|
@@ -33,7 +33,7 @@ module Sequel
|
|
33
33
|
end
|
34
34
|
|
35
35
|
# Whether the database supports DROP TABLE IF EXISTS syntax,
|
36
|
-
#
|
36
|
+
# false by default.
|
37
37
|
def supports_drop_table_if_exists?
|
38
38
|
supports_create_table_if_not_exists?
|
39
39
|
end
|
@@ -49,7 +49,8 @@ module Sequel
|
|
49
49
|
respond_to?(:indexes)
|
50
50
|
end
|
51
51
|
|
52
|
-
# Whether the database supports partial indexes (indexes on a subset of a table)
|
52
|
+
# Whether the database supports partial indexes (indexes on a subset of a table),
|
53
|
+
# false by default.
|
53
54
|
def supports_partial_indexes?
|
54
55
|
false
|
55
56
|
end
|
@@ -66,7 +67,7 @@ module Sequel
|
|
66
67
|
end
|
67
68
|
|
68
69
|
# Whether the database and adapter support savepoints inside prepared transactions
|
69
|
-
# (two-phase commit),
|
70
|
+
# (two-phase commit), false by default.
|
70
71
|
def supports_savepoints_in_prepared_transactions?
|
71
72
|
supports_prepared_transactions? && supports_savepoints?
|
72
73
|
end
|
@@ -32,13 +32,6 @@ module Sequel
|
|
32
32
|
log_each(:info, args ? "#{message}; #{args.inspect}" : message)
|
33
33
|
end
|
34
34
|
|
35
|
-
# Yield to the block, logging any errors at error level to all loggers,
|
36
|
-
# and all other queries with the duration at warn or info level.
|
37
|
-
def log_yield(sql, args=nil, &block)
|
38
|
-
Sequel::Deprecation.deprecate("Sequel::Database#log_yield", "Update the adapter to use Sequel::Database#log_connection_yield")
|
39
|
-
log_connection_yield(sql, nil, args, &block)
|
40
|
-
end
|
41
|
-
|
42
35
|
# Yield to the block, logging any errors at error level to all loggers,
|
43
36
|
# and all other queries with the duration at warn or info level.
|
44
37
|
def log_connection_yield(sql, conn, args=nil)
|
@@ -73,7 +66,7 @@ module Sequel
|
|
73
66
|
# Log the given SQL and then execute it on the connection, used by
|
74
67
|
# the transaction code.
|
75
68
|
def log_connection_execute(conn, sql)
|
76
|
-
log_connection_yield(sql, conn){conn.
|
69
|
+
log_connection_yield(sql, conn){conn.public_send(connection_execute_method, sql)}
|
77
70
|
end
|
78
71
|
|
79
72
|
# Log message with message prefixed by duration at info level, or
|
@@ -85,7 +78,7 @@ module Sequel
|
|
85
78
|
# Log message at level (which should be :error, :warn, or :info)
|
86
79
|
# to all loggers.
|
87
80
|
def log_each(level, message)
|
88
|
-
@loggers.each{|logger| logger.
|
81
|
+
@loggers.each{|logger| logger.public_send(level, message)}
|
89
82
|
end
|
90
83
|
end
|
91
84
|
end
|
data/lib/sequel/database/misc.rb
CHANGED
@@ -26,18 +26,6 @@ module Sequel
|
|
26
26
|
:time=>Sequel::SQLTime, :boolean=>[TrueClass, FalseClass].freeze, :float=>Float, :decimal=>BigDecimal,
|
27
27
|
:blob=>Sequel::SQL::Blob}.freeze
|
28
28
|
|
29
|
-
# Module to be included in shared adapters so that when the DatabaseMethods are
|
30
|
-
# included in the database, the identifier mangling defaults are reset correctly.
|
31
|
-
module ResetIdentifierMangling
|
32
|
-
def self.extended(obj)
|
33
|
-
# :nocov:
|
34
|
-
Sequel::Deprecation.deprecate("Sequel::Database::ResetIdentifierMangling is no longer needed and will be removed in Sequel 5. Please update your adapter")
|
35
|
-
obj.send(:reset_identifier_mangling) if obj.respond_to?(:reset_identifier_mangling)
|
36
|
-
# :nocov:
|
37
|
-
end
|
38
|
-
end
|
39
|
-
Sequel::Deprecation.deprecate_constant(self, :ResetIdentifierMangling)
|
40
|
-
|
41
29
|
# Nested hook Proc; each new hook Proc just wraps the previous one.
|
42
30
|
@initialize_hook = Proc.new {|db| }
|
43
31
|
|
@@ -88,7 +76,7 @@ module Sequel
|
|
88
76
|
:user => uri.user,
|
89
77
|
:password => uri.password,
|
90
78
|
:port => uri.port,
|
91
|
-
:host =>
|
79
|
+
:host => uri.hostname,
|
92
80
|
:database => (m = /\/(.*)/.match(uri.path)) && (m[1])
|
93
81
|
}
|
94
82
|
end
|
@@ -107,12 +95,16 @@ module Sequel
|
|
107
95
|
# options hash.
|
108
96
|
#
|
109
97
|
# Accepts the following options:
|
98
|
+
# :cache_schema :: Whether schema should be cached for this Database instance
|
110
99
|
# :default_string_column_size :: The default size of string columns, 255 by default.
|
111
|
-
# :
|
100
|
+
# :keep_reference :: Whether to keep a reference to this instance in Sequel::DATABASES, true by default.
|
112
101
|
# :logger :: A specific logger to use.
|
113
102
|
# :loggers :: An array of loggers to use.
|
103
|
+
# :log_connection_info :: Whether connection information should be logged when logging queries.
|
104
|
+
# :log_warn_duration :: The number of elapsed seconds after which queries should be logged at warn level.
|
114
105
|
# :name :: A name to use for the Database object.
|
115
|
-
# :preconnect :: Whether to automatically connect to the maximum number of servers.
|
106
|
+
# :preconnect :: Whether to automatically connect to the maximum number of servers. Can use a valid
|
107
|
+
# of 'concurrently' to preconnect in separate threads.
|
116
108
|
# :quote_identifiers :: Whether to quote identifiers.
|
117
109
|
# :servers :: A hash specifying a server/shard specific options, keyed by shard symbol .
|
118
110
|
# :single_threaded :: Whether to use a single-threaded connection pool.
|
@@ -150,10 +142,6 @@ module Sequel
|
|
150
142
|
|
151
143
|
reset_default_dataset
|
152
144
|
adapter_initialize
|
153
|
-
if typecast_value_boolean(@opts.fetch(:identifier_mangling, true))
|
154
|
-
# SEQUEL5: Remove
|
155
|
-
extension(:_deprecated_identifier_mangling)
|
156
|
-
end
|
157
145
|
|
158
146
|
unless typecast_value_boolean(@opts[:keep_reference]) == false
|
159
147
|
Sequel.synchronize{::Sequel::DATABASES.push(self)}
|
@@ -176,22 +164,20 @@ module Sequel
|
|
176
164
|
@dataset_modules.freeze
|
177
165
|
@schema_type_classes.freeze
|
178
166
|
@loaded_extensions.freeze
|
179
|
-
|
180
|
-
@default_dataset.freeze
|
181
|
-
metadata_dataset.freeze
|
167
|
+
metadata_dataset
|
182
168
|
super
|
183
169
|
end
|
184
170
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
171
|
+
# Disallow dup/clone for Database instances
|
172
|
+
undef_method :dup, :clone, :initialize_copy
|
173
|
+
if RUBY_VERSION >= '1.9.3'
|
174
|
+
undef_method :initialize_clone, :initialize_dup
|
189
175
|
end
|
190
176
|
|
191
177
|
# Cast the given type to a literal type
|
192
178
|
#
|
193
179
|
# DB.cast_type_literal(Float) # double precision
|
194
|
-
# DB.cast_type_literal(:foo)
|
180
|
+
# DB.cast_type_literal(:foo) # foo
|
195
181
|
def cast_type_literal(type)
|
196
182
|
type_literal(:type=>type)
|
197
183
|
end
|
@@ -236,8 +222,8 @@ module Sequel
|
|
236
222
|
|
237
223
|
# Proxy the literal call to the dataset.
|
238
224
|
#
|
239
|
-
# DB.literal(1)
|
240
|
-
# DB.literal(:a)
|
225
|
+
# DB.literal(1) # 1
|
226
|
+
# DB.literal(:a) # a
|
241
227
|
# DB.literal('a') # 'a'
|
242
228
|
def literal(v)
|
243
229
|
schema_utility_dataset.literal(v)
|
@@ -271,8 +257,7 @@ module Sequel
|
|
271
257
|
@schema_type_classes[type]
|
272
258
|
end
|
273
259
|
|
274
|
-
# Default serial primary key options, used by the table creation
|
275
|
-
# code.
|
260
|
+
# Default serial primary key options, used by the table creation code.
|
276
261
|
def serial_primary_key_options
|
277
262
|
{:primary_key => true, :type => Integer, :auto_increment => true}
|
278
263
|
end
|
@@ -309,6 +294,7 @@ module Sequel
|
|
309
294
|
return nil if value.nil?
|
310
295
|
meth = "typecast_value_#{column_type}"
|
311
296
|
begin
|
297
|
+
# Allow calling private methods as per-type typecasting methods are private
|
312
298
|
respond_to?(meth, true) ? send(meth, value) : value
|
313
299
|
rescue ArgumentError, TypeError => e
|
314
300
|
raise Sequel.convert_exception_class(e, InvalidValue)
|
@@ -363,8 +349,7 @@ module Sequel
|
|
363
349
|
database_specific_error_class(exception, opts) || DatabaseError
|
364
350
|
end
|
365
351
|
|
366
|
-
# Return the SQLState for the given exception, if one can be
|
367
|
-
# determined
|
352
|
+
# Return the SQLState for the given exception, if one can be determined
|
368
353
|
def database_exception_sqlstate(exception, opts)
|
369
354
|
nil
|
370
355
|
end
|
@@ -415,7 +400,7 @@ module Sequel
|
|
415
400
|
end
|
416
401
|
|
417
402
|
# Convert the given exception to an appropriate Sequel::DatabaseError
|
418
|
-
# subclass, keeping message and
|
403
|
+
# subclass, keeping message and backtrace.
|
419
404
|
def raise_error(exception, opts=OPTS)
|
420
405
|
if !opts[:classes] || Array(opts[:classes]).any?{|c| exception.is_a?(c)}
|
421
406
|
raise Sequel.convert_exception_class(exception, database_error_class(exception, opts))
|
@@ -503,25 +488,9 @@ module Sequel
|
|
503
488
|
Float(value)
|
504
489
|
end
|
505
490
|
|
506
|
-
#
|
507
|
-
|
508
|
-
|
509
|
-
Sequel::Deprecation.deprecate_constant(self, :LEADING_ZERO_RE)
|
510
|
-
|
511
|
-
if RUBY_VERSION >= '1.9'
|
512
|
-
# Typecast the value to an Integer
|
513
|
-
def typecast_value_integer(value)
|
514
|
-
(value.is_a?(String) && value =~ /\A0+(\d)/) ? Integer(value, 10) : Integer(value)
|
515
|
-
end
|
516
|
-
else
|
517
|
-
# :nocov:
|
518
|
-
# Replacement string when replacing leading zeroes.
|
519
|
-
LEADING_ZERO_REP = "\\1".freeze
|
520
|
-
# Typecast the value to an Integer
|
521
|
-
def typecast_value_integer(value)
|
522
|
-
Integer(value.is_a?(String) ? value.sub(LEADING_ZERO_RE, LEADING_ZERO_REP) : value)
|
523
|
-
end
|
524
|
-
# :nocov:
|
491
|
+
# Typecast the value to an Integer
|
492
|
+
def typecast_value_integer(value)
|
493
|
+
(value.is_a?(String) && value =~ /\A0+(\d)/) ? Integer(value, 10) : Integer(value)
|
525
494
|
end
|
526
495
|
|
527
496
|
# Typecast the value to a String
|
@@ -541,8 +510,7 @@ module Sequel
|
|
541
510
|
if value.is_a?(SQLTime)
|
542
511
|
value
|
543
512
|
else
|
544
|
-
|
545
|
-
SQLTime.create(value.hour, value.min, value.sec, (value.respond_to?(:nsec) && value.nsec != 0) ? value.nsec/1000.0 : value.usec)
|
513
|
+
SQLTime.create(value.hour, value.min, value.sec, value.nsec/1000.0)
|
546
514
|
end
|
547
515
|
when String
|
548
516
|
Sequel.string_to_time(value)
|