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
@@ -53,10 +53,6 @@ module Sequel
|
|
53
53
|
|
54
54
|
# DateTime subclass literalized as CURRENT_TIMESTAMP
|
55
55
|
class DateTime < ::DateTime; end
|
56
|
-
|
57
|
-
# Mapping of Time/DateTime classes to subclasses literalized as CURRENT_TIMESTAMP
|
58
|
-
MAP = {::Time=>Time, ::DateTime=>DateTime}
|
59
|
-
Sequel::Deprecation.deprecate_constant(self, :MAP)
|
60
56
|
end
|
61
57
|
|
62
58
|
Dataset.register_extension(:current_datetime_timestamp, CurrentDateTimeTimestamp::DatasetMethods)
|
@@ -10,8 +10,8 @@
|
|
10
10
|
# Then you can use the Sequel.date_add and Sequel.date_sub methods
|
11
11
|
# to return Sequel expressions:
|
12
12
|
#
|
13
|
-
# add = Sequel.date_add(:date_column, :
|
14
|
-
# sub = Sequel.date_sub(:date_column, :
|
13
|
+
# add = Sequel.date_add(:date_column, years: 1, months: 2, days: 3)
|
14
|
+
# sub = Sequel.date_sub(:date_column, hours: 1, minutes: 2, seconds: 3)
|
15
15
|
#
|
16
16
|
# In addition to specifying the interval as a hash, there is also
|
17
17
|
# support for specifying the interval as an ActiveSupport::Duration
|
@@ -66,8 +66,6 @@ module Sequel
|
|
66
66
|
DERBY_DURATION_UNITS = DURATION_UNITS.zip(DURATION_UNITS.map{|s| Sequel.lit("SQL_TSI_#{s.to_s.upcase[0...-1]}").freeze}).freeze
|
67
67
|
ACCESS_DURATION_UNITS = DURATION_UNITS.zip(%w'yyyy m d h n s'.map(&:freeze)).freeze
|
68
68
|
DB2_DURATION_UNITS = DURATION_UNITS.zip(DURATION_UNITS.map{|s| Sequel.lit(s.to_s).freeze}).freeze
|
69
|
-
FDBSQL_DURATION_UNITS = DURATION_UNITS.zip(DURATION_UNITS.map{|s| Sequel.lit(s.to_s.chop).freeze}).freeze
|
70
|
-
Sequel::Deprecation.deprecate_constant(self, :FDBSQL_DURATION_UNITS)
|
71
69
|
|
72
70
|
# Append the SQL fragment for the DateAdd expression to the SQL query.
|
73
71
|
def date_add_sql_append(sql, da)
|
@@ -93,8 +91,7 @@ module Sequel
|
|
93
91
|
args << "#{value} #{sql_unit}"
|
94
92
|
end
|
95
93
|
return function_sql_append(sql, Sequel.function(:datetime, *args))
|
96
|
-
|
97
|
-
when :mysql, :hsqldb, :cubrid
|
94
|
+
when :mysql, :hsqldb
|
98
95
|
if db_type == :hsqldb
|
99
96
|
# HSQLDB requires 2.2.9+ for the DATE_ADD function
|
100
97
|
expr = Sequel.cast(expr, Time)
|
@@ -181,12 +178,15 @@ module Sequel
|
|
181
178
|
raise Sequel::InvalidValue, "cannot provide String value as interval part: #{v.inspect}"
|
182
179
|
end
|
183
180
|
end
|
184
|
-
interval
|
181
|
+
Hash[interval]
|
185
182
|
else
|
186
183
|
h = Hash.new(0)
|
187
184
|
interval.parts.each{|unit, value| h[unit] += value}
|
188
185
|
Hash[h]
|
189
186
|
end
|
187
|
+
|
188
|
+
@interval.freeze
|
189
|
+
freeze
|
190
190
|
end
|
191
191
|
|
192
192
|
to_s_method :date_add_sql
|
@@ -10,24 +10,28 @@
|
|
10
10
|
#
|
11
11
|
# DB.extension :duplicate_columns_handler
|
12
12
|
#
|
13
|
+
# or into individual datasets:
|
14
|
+
#
|
15
|
+
# ds = DB[:items].extension(:duplicate_columns_handler)
|
16
|
+
#
|
13
17
|
# A database option is introduced: :on_duplicate_columns. It accepts a Symbol
|
14
18
|
# or any object that responds to :call.
|
15
19
|
#
|
16
|
-
# :
|
17
|
-
# :
|
18
|
-
# :
|
19
|
-
# :
|
20
|
+
# on_duplicate_columns: :raise
|
21
|
+
# on_duplicate_columns: :warn
|
22
|
+
# on_duplicate_columns: :ignore
|
23
|
+
# on_duplicate_columns: lambda{|columns| arbitrary_condition? ? :raise : :warn}
|
20
24
|
#
|
21
25
|
# You may also configure duplicate columns handling for a specific dataset:
|
22
26
|
#
|
23
27
|
# ds.on_duplicate_columns(:warn)
|
24
28
|
# ds.on_duplicate_columns(:raise)
|
25
29
|
# ds.on_duplicate_columns(:ignore)
|
26
|
-
# ds.on_duplicate_columns
|
27
|
-
# ds.on_duplicate_columns(
|
30
|
+
# ds.on_duplicate_columns{|columns| arbitrary_condition? ? :raise : :warn}
|
31
|
+
# ds.on_duplicate_columns(lambda{|columns| arbitrary_condition? ? :raise : :warn})
|
28
32
|
#
|
29
33
|
# If :raise is specified, a Sequel::DuplicateColumnError is raised.
|
30
|
-
# If :warn is specified, you will receive a warning via
|
34
|
+
# If :warn is specified, you will receive a warning via +warn+.
|
31
35
|
# If a callable is specified, it will be called.
|
32
36
|
# If no on_duplicate_columns is specified, the default is :warn.
|
33
37
|
#
|
@@ -45,8 +49,7 @@ module Sequel
|
|
45
49
|
|
46
50
|
private
|
47
51
|
|
48
|
-
#
|
49
|
-
# handle_duplicate_columns if necessary.
|
52
|
+
# Call handle_duplicate_columns if there are duplicate columns.
|
50
53
|
def columns=(cols)
|
51
54
|
if cols && cols.uniq.size != cols.size
|
52
55
|
handle_duplicate_columns(cols)
|
@@ -4,9 +4,9 @@
|
|
4
4
|
# array value to consider NULL values if one of the referenced
|
5
5
|
# columns is NULL:
|
6
6
|
#
|
7
|
-
# DB[:test].where(:
|
7
|
+
# DB[:test].where(name: [])
|
8
8
|
# # SELECT * FROM test WHERE (name != name)
|
9
|
-
# DB[:test].exclude(:
|
9
|
+
# DB[:test].exclude(name: [])
|
10
10
|
# # SELECT * FROM test WHERE (name = name)
|
11
11
|
#
|
12
12
|
# The default Sequel behavior is to ignore NULLs, as the above
|
@@ -36,16 +36,7 @@ module Sequel
|
|
36
36
|
"{#{obj.map{|k, v| "#{eval_inspect(k)} => #{eval_inspect(v)}"}.join(', ')}}"
|
37
37
|
when Time
|
38
38
|
datepart = "%Y-%m-%dT" unless obj.is_a?(Sequel::SQLTime)
|
39
|
-
if
|
40
|
-
# :nocov:
|
41
|
-
# Time on 1.8 doesn't handle %N (or %z on Windows), manually set the usec value in the string
|
42
|
-
hours, mins = obj.utc_offset.divmod(3600)
|
43
|
-
mins /= 60
|
44
|
-
"#{obj.class}.parse(#{obj.strftime("#{datepart}%H:%M:%S.#{sprintf('%06i%+03i%02i', obj.usec, hours, mins)}").inspect})#{'.utc' if obj.utc?}"
|
45
|
-
# :nocov:
|
46
|
-
else
|
47
|
-
"#{obj.class}.parse(#{obj.strftime("#{datepart}%T.%N%z").inspect})#{'.utc' if obj.utc?}"
|
48
|
-
end
|
39
|
+
"#{obj.class}.parse(#{obj.strftime("#{datepart}%T.%N%z").inspect})#{'.utc' if obj.utc?}"
|
49
40
|
when DateTime
|
50
41
|
# Ignore date of calendar reform
|
51
42
|
"DateTime.parse(#{obj.strftime('%FT%T.%N%z').inspect})"
|
@@ -73,9 +64,11 @@ module Sequel
|
|
73
64
|
args = inspect_args.map do |arg|
|
74
65
|
if arg.is_a?(String) && arg =~ /\A\*/
|
75
66
|
# Special case string arguments starting with *, indicating that
|
76
|
-
# they should return an array to be splatted as the remaining arguments
|
67
|
+
# they should return an array to be splatted as the remaining arguments.
|
68
|
+
# Allow calling private methods to get inspect output.
|
77
69
|
send(arg.sub('*', '')).map{|a| Sequel.eval_inspect(a)}.join(', ')
|
78
70
|
else
|
71
|
+
# Allow calling private methods to get inspect output.
|
79
72
|
Sequel.eval_inspect(send(arg))
|
80
73
|
end
|
81
74
|
end
|
@@ -1,71 +1,3 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
|
-
#
|
3
|
-
# The freeze_datasets extension freezes a databases's datasets by
|
4
|
-
# default, and makes it so the databases's datasets are always
|
5
|
-
# frozen. This makes sure you can never accidentally modify a
|
6
|
-
# dataset that may be used elsewhere (such as a model class's
|
7
|
-
# dataset or the same dataset being used in another thread).
|
8
|
-
# Frozen datasets can also perform caching for many
|
9
|
-
# different methods that can significantly improve performance.
|
10
|
-
#
|
11
|
-
# In addition to the caching provided by frozen datasets, this
|
12
|
-
# also adds caching of Database#from calls if the method is
|
13
|
-
# called with a single Symbol argument and not a block. In
|
14
|
-
# addition to speeding up Dataset#from itself, because it
|
15
|
-
# returns a cached dataset, all caching done by that dataset
|
16
|
-
# can also improve performance.
|
17
|
-
#
|
18
|
-
# Usage:
|
19
|
-
#
|
20
|
-
# DB.extension(:freeze_datasets)
|
21
|
-
#
|
22
|
-
# Related module: Sequel::FreezeDatasets
|
23
2
|
|
24
|
-
|
25
|
-
module Sequel
|
26
|
-
class Database
|
27
|
-
module FreezeDatasets
|
28
|
-
module DatasetMethods
|
29
|
-
# Make dup be an alias to clone, so that it
|
30
|
-
# returns a frozen dataset.
|
31
|
-
def dup
|
32
|
-
clone
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# Reset the default dataset for this database after
|
37
|
-
# loading the extension.
|
38
|
-
def self.extended(db)
|
39
|
-
db.extend_datasets(DatasetMethods)
|
40
|
-
end
|
41
|
-
|
42
|
-
# Cache returned dataset if given a single argument and no block.
|
43
|
-
def from(*args, &block)
|
44
|
-
if !block && args.length == 1 && (table = args[0]).is_a?(Symbol)
|
45
|
-
@default_dataset.send(:cached_dataset, :"_from_#{table}_ds"){super}
|
46
|
-
else
|
47
|
-
super
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
# Freeze datasets created from this dataset.
|
52
|
-
def dataset
|
53
|
-
super.freeze
|
54
|
-
end
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
# Clear the cache of the default dataset when removing a cached
|
59
|
-
# schema, in order to clear the from table cache.
|
60
|
-
def remove_cached_schema(table)
|
61
|
-
cache = @default_dataset.send(:cache)
|
62
|
-
Sequel.synchronize{cache.clear}
|
63
|
-
super
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
register_extension(:freeze_datasets, FreezeDatasets)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# Sequel::Database.register_extension(:freeze_datasets){} # SEQUEL5
|
3
|
+
Sequel::Database.register_extension(:freeze_datasets){}
|
@@ -1,37 +1,3 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
|
-
#
|
3
|
-
# The from_block extension changes Database#from so that blocks given
|
4
|
-
# to it are treated as virtual rows applying to the FROM clause,
|
5
|
-
# instead of virtual rows applying to the WHERE clause. This will
|
6
|
-
# probably be made the default in the next major version of Sequel.
|
7
|
-
#
|
8
|
-
# This makes it easier to use table returning functions:
|
9
|
-
#
|
10
|
-
# DB.from{table_function(1)}
|
11
|
-
# # SELECT * FROM table_function(1)
|
12
|
-
#
|
13
|
-
# To load the extension into the database:
|
14
|
-
#
|
15
|
-
# DB.extension :from_block
|
16
|
-
#
|
17
|
-
# Related module: Sequel::Database::FromBlock
|
18
2
|
|
19
|
-
|
20
|
-
module Sequel
|
21
|
-
module Database::FromBlock
|
22
|
-
# If a block is given, make it affect the FROM clause:
|
23
|
-
# DB.from{table_function(1)}
|
24
|
-
# # SELECT * FROM table_function(1)
|
25
|
-
def from(*args, &block)
|
26
|
-
if block
|
27
|
-
@default_dataset.from(*args, &block)
|
28
|
-
else
|
29
|
-
super
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
Database.register_extension(:from_block, Database::FromBlock)
|
35
|
-
end
|
36
|
-
|
37
|
-
# Sequel::Database.register_extension(:from_block){} # SEQUEL5
|
3
|
+
Sequel::Database.register_extension(:from_block){}
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# makes Dataset#each call #graph_each if the dataset has been graphed.
|
5
5
|
# Dataset#graph_each splits result hashes into subhashes per table:
|
6
6
|
#
|
7
|
-
# DB[:a].graph(:b, :
|
7
|
+
# DB[:a].graph(:b, id: :b_id).all
|
8
8
|
# # => {:a=>{:id=>1, :b_id=>2}, :b=>{:id=>2}}
|
9
9
|
#
|
10
10
|
# You can load this extension into specific datasets:
|
@@ -56,7 +56,7 @@ module Sequel
|
|
56
56
|
datasets = datasets.map{|ta, ds| [ta, ds, ds.row_proc]}
|
57
57
|
# Use the manually set graph aliases, if any, otherwise
|
58
58
|
# use the ones automatically created by .graph
|
59
|
-
column_aliases = @opts[:
|
59
|
+
column_aliases = @opts[:graph][:column_aliases]
|
60
60
|
fetch_rows(sql) do |r|
|
61
61
|
graph = {}
|
62
62
|
# Create the sub hashes, one per table
|
@@ -120,10 +120,9 @@ module Sequel
|
|
120
120
|
# Reset the identifier mangling options. Overrides any already set on
|
121
121
|
# the instance. Only for internal use by shared adapters.
|
122
122
|
def reset_identifier_mangling
|
123
|
-
|
124
|
-
@
|
125
|
-
@
|
126
|
-
@identifier_output_method = @opts.fetch(:identifier_output_method){(iom = Database.identifier_output_method).nil? ? identifier_output_method_default : (iom if iom)}
|
123
|
+
@quote_identifiers = @opts.fetch(:quote_identifiers, quote_identifiers_default)
|
124
|
+
@identifier_input_method = @opts.fetch(:identifier_input_method, identifier_input_method_default)
|
125
|
+
@identifier_output_method = @opts.fetch(:identifier_output_method, identifier_output_method_default)
|
127
126
|
reset_default_dataset
|
128
127
|
end
|
129
128
|
end
|
@@ -135,25 +134,12 @@ module Sequel
|
|
135
134
|
@opts.fetch(:identifier_input_method, db.identifier_input_method)
|
136
135
|
end
|
137
136
|
|
138
|
-
# Set the method to call on identifiers going into the database for this dataset
|
139
|
-
def identifier_input_method=(v)
|
140
|
-
raise_if_frozen!(%w"identifier_input_method= with_identifier_input_method")
|
141
|
-
skip_symbol_cache!
|
142
|
-
@opts[:identifier_input_method] = v
|
143
|
-
end
|
144
|
-
|
145
137
|
# The String instance method to call on identifiers before sending them to
|
146
138
|
# the database.
|
147
139
|
def identifier_output_method
|
148
140
|
@opts.fetch(:identifier_output_method, db.identifier_output_method)
|
149
141
|
end
|
150
142
|
|
151
|
-
# Set the method to call on identifiers coming the database for this dataset
|
152
|
-
def identifier_output_method=(v)
|
153
|
-
raise_if_frozen!(%w"identifier_output_method= with_identifier_output_method")
|
154
|
-
@opts[:identifier_output_method] = v
|
155
|
-
end
|
156
|
-
|
157
143
|
# Check with the database to see if identifier quoting is enabled
|
158
144
|
def quote_identifiers?
|
159
145
|
@opts.fetch(:quote_identifiers, db.quote_identifiers?)
|
@@ -174,14 +160,18 @@ module Sequel
|
|
174
160
|
# Convert the identifier to the version used in the database via
|
175
161
|
# identifier_input_method.
|
176
162
|
def input_identifier(v)
|
177
|
-
(i = identifier_input_method) ? v.to_s.
|
163
|
+
(i = identifier_input_method) ? v.to_s.public_send(i) : v.to_s
|
178
164
|
end
|
179
165
|
|
180
166
|
# Modify the identifier returned from the database based on the
|
181
167
|
# identifier_output_method.
|
182
168
|
def output_identifier(v)
|
183
169
|
v = 'untitled' if v == ''
|
184
|
-
(i = identifier_output_method) ? v.to_s.
|
170
|
+
(i = identifier_output_method) ? v.to_s.public_send(i).to_sym : v.to_sym
|
171
|
+
end
|
172
|
+
|
173
|
+
def non_sql_option?(key)
|
174
|
+
super || key == :identifier_input_method || key == :identifier_output_method
|
185
175
|
end
|
186
176
|
end
|
187
177
|
end
|
@@ -27,7 +27,7 @@
|
|
27
27
|
module Sequel
|
28
28
|
class Dataset
|
29
29
|
module ImplicitSubquery
|
30
|
-
exceptions = [:
|
30
|
+
exceptions = [:add_graph_aliases, :filter, :from, :from_self, :naked, :or, :order_more,
|
31
31
|
:qualify, :reverse, :reverse_order, :select_all, :select_more, :server,
|
32
32
|
:set_graph_aliases, :unfiltered, :ungraphed, :ungrouped, :unlimited, :unordered,
|
33
33
|
:with_sql]
|
@@ -35,7 +35,7 @@ module Sequel
|
|
35
35
|
(Dataset::QUERY_METHODS - Dataset::JOIN_METHODS - exceptions + additions).each do |meth|
|
36
36
|
define_method(meth) do |*a, &b|
|
37
37
|
if opts[:sql]
|
38
|
-
from_self.
|
38
|
+
from_self.public_send(meth, *a, &b)
|
39
39
|
else
|
40
40
|
super(*a, &b)
|
41
41
|
end
|
@@ -95,8 +95,8 @@ class String
|
|
95
95
|
(@uncountables << words).flatten!
|
96
96
|
end
|
97
97
|
|
98
|
-
|
99
|
-
|
98
|
+
require_relative '../model/default_inflections'
|
99
|
+
instance_exec(&Sequel::DEFAULT_INFLECTIONS_PROC)
|
100
100
|
end
|
101
101
|
|
102
102
|
# Yield the Inflections module if a block is given, and return
|
@@ -151,7 +151,7 @@ class String
|
|
151
151
|
# Example
|
152
152
|
# "puni_puni".dasherize #=> "puni-puni"
|
153
153
|
def dasherize
|
154
|
-
gsub(
|
154
|
+
gsub('_', '-')
|
155
155
|
end
|
156
156
|
|
157
157
|
# Removes the module part from the expression in the string
|
@@ -181,7 +181,7 @@ class String
|
|
181
181
|
# "employee_salary" #=> "Employee salary"
|
182
182
|
# "author_id" #=> "Author"
|
183
183
|
def humanize
|
184
|
-
gsub(/_id$/, "").gsub(
|
184
|
+
gsub(/_id$/, "").gsub('_', " ").capitalize
|
185
185
|
end
|
186
186
|
|
187
187
|
# Returns the plural form of the word in the string.
|
@@ -41,7 +41,7 @@ module Sequel
|
|
41
41
|
# direction.
|
42
42
|
def self.apply(db, direction)
|
43
43
|
raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
|
44
|
-
new(db).
|
44
|
+
new(db).public_send(direction)
|
45
45
|
end
|
46
46
|
|
47
47
|
# Returns the list of Migration descendants.
|
@@ -65,6 +65,7 @@ module Sequel
|
|
65
65
|
|
66
66
|
# Intercepts method calls intended for the database and sends them along.
|
67
67
|
def method_missing(method_sym, *args, &block)
|
68
|
+
# Allow calling private methods for backwards compatibility
|
68
69
|
@db.send(method_sym, *args, &block)
|
69
70
|
end
|
70
71
|
|
@@ -99,29 +100,29 @@ module Sequel
|
|
99
100
|
end
|
100
101
|
|
101
102
|
# Apply the appropriate block on the +Database+
|
102
|
-
# instance using
|
103
|
+
# instance using instance_exec.
|
103
104
|
def apply(db, direction)
|
104
105
|
raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
|
105
|
-
if prok =
|
106
|
-
db.
|
106
|
+
if prok = public_send(direction)
|
107
|
+
db.instance_exec(&prok)
|
107
108
|
end
|
108
109
|
end
|
109
110
|
end
|
110
111
|
|
111
112
|
# Internal class used by the Sequel.migration DSL, part of the +migration+ extension.
|
112
113
|
class MigrationDSL < BasicObject
|
113
|
-
# The underlying
|
114
|
+
# The underlying SimpleMigration instance
|
114
115
|
attr_reader :migration
|
115
116
|
|
116
117
|
def self.create(&block)
|
117
118
|
new(&block).migration
|
118
119
|
end
|
119
120
|
|
120
|
-
# Create a new migration class, and
|
121
|
+
# Create a new migration class, and instance_exec the block.
|
121
122
|
def initialize(&block)
|
122
123
|
@migration = SimpleMigration.new
|
123
124
|
Migration.descendants << migration
|
124
|
-
|
125
|
+
instance_exec(&block)
|
125
126
|
end
|
126
127
|
|
127
128
|
# Defines the migration's down action.
|
@@ -150,7 +151,7 @@ module Sequel
|
|
150
151
|
# the block.
|
151
152
|
#
|
152
153
|
# There are no guarantees that this will work perfectly
|
153
|
-
# in all cases, but it
|
154
|
+
# in all cases, but it works for some simple cases.
|
154
155
|
def change(&block)
|
155
156
|
migration.up = block
|
156
157
|
migration.down = MigrationReverser.new.reverse(&block)
|
@@ -170,7 +171,7 @@ module Sequel
|
|
170
171
|
# the given block.
|
171
172
|
def reverse(&block)
|
172
173
|
begin
|
173
|
-
|
174
|
+
instance_exec(&block)
|
174
175
|
rescue
|
175
176
|
just_raise = true
|
176
177
|
end
|
@@ -180,12 +181,9 @@ module Sequel
|
|
180
181
|
actions = @actions.reverse
|
181
182
|
Proc.new do
|
182
183
|
actions.each do |a|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
else
|
187
|
-
send(*a)
|
188
|
-
end
|
184
|
+
pr = a.last.is_a?(Proc) ? a.pop : nil
|
185
|
+
# Allow calling private methods as the reversing methods are private
|
186
|
+
send(*a, &pr)
|
189
187
|
end
|
190
188
|
end
|
191
189
|
end
|
@@ -233,8 +231,9 @@ module Sequel
|
|
233
231
|
end
|
234
232
|
|
235
233
|
def reverse(&block)
|
236
|
-
|
234
|
+
instance_exec(&block)
|
237
235
|
actions = @actions.reverse
|
236
|
+
# Allow calling private methods as the reversing methods are private
|
238
237
|
Proc.new{actions.each{|a| send(*a)}}
|
239
238
|
end
|
240
239
|
|
@@ -339,25 +338,20 @@ module Sequel
|
|
339
338
|
#
|
340
339
|
# For example, to migrate the database all the way down:
|
341
340
|
#
|
342
|
-
# Sequel::Migrator.run(DB, '.', :
|
341
|
+
# Sequel::Migrator.run(DB, '.', target: 0)
|
343
342
|
#
|
344
343
|
# For example, to migrate the database to version 4:
|
345
344
|
#
|
346
|
-
# Sequel::Migrator.run(DB, '.', :
|
345
|
+
# Sequel::Migrator.run(DB, '.', target: 4)
|
347
346
|
#
|
348
347
|
# To migrate the database from version 1 to version 5:
|
349
348
|
#
|
350
|
-
# Sequel::Migrator.run(DB, '.', :
|
349
|
+
# Sequel::Migrator.run(DB, '.', target: 5, current: 1)
|
351
350
|
#
|
352
351
|
# Part of the +migration+ extension.
|
353
352
|
class Migrator
|
354
353
|
MIGRATION_FILE_PATTERN = /\A(\d+)_.+\.rb\z/i.freeze
|
355
354
|
|
356
|
-
MIGRATION_SPLITTER = '_'.freeze
|
357
|
-
Sequel::Deprecation.deprecate_constant(self, :MIGRATION_SPLITTER)
|
358
|
-
MINIMUM_TIMESTAMP = 20000101
|
359
|
-
Sequel::Deprecation.deprecate_constant(self, :MINIMUM_TIMESTAMP)
|
360
|
-
|
361
355
|
# Exception class raised when there is an error with the migrator's
|
362
356
|
# file structure, database, or arguments.
|
363
357
|
class Error < Sequel::Error
|
@@ -397,16 +391,15 @@ module Sequel
|
|
397
391
|
#
|
398
392
|
# Examples:
|
399
393
|
# Sequel::Migrator.run(DB, "migrations")
|
400
|
-
# Sequel::Migrator.run(DB, "migrations", :
|
401
|
-
# Sequel::Migrator.run(DB, "app1/migrations", :
|
402
|
-
# Sequel::Migrator.run(DB, "app2/migrations", :
|
394
|
+
# Sequel::Migrator.run(DB, "migrations", target: 15, current: 10)
|
395
|
+
# Sequel::Migrator.run(DB, "app1/migrations", column: :app2_version)
|
396
|
+
# Sequel::Migrator.run(DB, "app2/migrations", column: :app2_version, table: :schema_info2)
|
403
397
|
def self.run(db, directory, opts=OPTS)
|
404
398
|
migrator_class(directory).new(db, directory, opts).run
|
405
399
|
end
|
406
400
|
|
407
401
|
# Choose the Migrator subclass to use. Uses the TimestampMigrator
|
408
|
-
# if the version number
|
409
|
-
# after 2005, otherwise uses the IntegerMigrator.
|
402
|
+
# if the version number is greater than 20000101, otherwise uses the IntegerMigrator.
|
410
403
|
def self.migrator_class(directory)
|
411
404
|
if self.equal?(Migrator)
|
412
405
|
Dir.new(directory).each do |file|
|
@@ -508,11 +501,6 @@ module Sequel
|
|
508
501
|
# version number starting with 1, where missing or duplicate migration file
|
509
502
|
# versions are not allowed. Part of the +migration+ extension.
|
510
503
|
class IntegerMigrator < Migrator
|
511
|
-
DEFAULT_SCHEMA_COLUMN = :version
|
512
|
-
DEFAULT_SCHEMA_TABLE = :schema_info
|
513
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_SCHEMA_COLUMN)
|
514
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_SCHEMA_TABLE)
|
515
|
-
|
516
504
|
Error = Migrator::Error
|
517
505
|
|
518
506
|
# The current version for this migrator
|
@@ -663,17 +651,12 @@ module Sequel
|
|
663
651
|
end
|
664
652
|
end
|
665
653
|
|
666
|
-
# The migrator used if any migration file version
|
654
|
+
# The migrator used if any migration file version is greater than 20000101.
|
667
655
|
# Stores filenames of migration files, and can figure out which migrations
|
668
656
|
# have not been applied and apply them, even if earlier migrations are added
|
669
657
|
# after later migrations. If you plan to do that, the responsibility is on
|
670
658
|
# you to make sure the migrations don't conflict. Part of the +migration+ extension.
|
671
659
|
class TimestampMigrator < Migrator
|
672
|
-
DEFAULT_SCHEMA_COLUMN = :filename
|
673
|
-
DEFAULT_SCHEMA_TABLE = :schema_migrations
|
674
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_SCHEMA_COLUMN)
|
675
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_SCHEMA_TABLE)
|
676
|
-
|
677
660
|
Error = Migrator::Error
|
678
661
|
|
679
662
|
# Array of strings of applied migration filenames
|