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
@@ -75,9 +75,7 @@ module Sequel
|
|
75
75
|
:starts_after => ["(".freeze, " &> ".freeze, ")".freeze].freeze,
|
76
76
|
:adjacent_to => ["(".freeze, " -|- ".freeze, ")".freeze].freeze,
|
77
77
|
:overlaps => ["(".freeze, " && ".freeze, ")".freeze].freeze,
|
78
|
-
}
|
79
|
-
FUNCTIONS = %w'lower upper isempty lower_inc upper_inc lower_inf upper_inf'
|
80
|
-
Sequel::Deprecation.deprecate_constant(self, :FUNCTIONS)
|
78
|
+
}.freeze
|
81
79
|
|
82
80
|
%w'lower upper isempty lower_inc upper_inc lower_inf upper_inf'.each do |f|
|
83
81
|
class_eval("def #{f}; function(:#{f}) end", __FILE__, __LINE__)
|
@@ -64,12 +64,12 @@
|
|
64
64
|
#
|
65
65
|
# You can also use a hash:
|
66
66
|
#
|
67
|
-
# DB.row_type(:address, :
|
67
|
+
# DB.row_type(:address, street: '123 Sesame St.', city: 'Some City', zip: '12345')
|
68
68
|
#
|
69
69
|
# So if you have a person table that has an address column, here's how you
|
70
70
|
# could insert into the column:
|
71
71
|
#
|
72
|
-
# DB[:table].insert(:
|
72
|
+
# DB[:table].insert(address: DB.row_type(:address, street: '123 Sesame St.', city: 'Some City', zip: '12345'))
|
73
73
|
#
|
74
74
|
# Note that registering row types without providing an explicit :converter option
|
75
75
|
# creates anonymous classes. This results in ruby being unable to Marshal such
|
@@ -88,16 +88,10 @@
|
|
88
88
|
|
89
89
|
require 'delegate'
|
90
90
|
require 'strscan'
|
91
|
-
Sequel.require 'adapters/shared/postgres'
|
92
91
|
|
93
92
|
module Sequel
|
94
93
|
module Postgres
|
95
94
|
module PGRow
|
96
|
-
ROW = 'ROW'.freeze
|
97
|
-
Sequel::Deprecation.deprecate_constant(self, :ROW)
|
98
|
-
CAST = '::'.freeze
|
99
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST)
|
100
|
-
|
101
95
|
# Class for row-valued/composite types that are treated as arrays. By default,
|
102
96
|
# this is only used for generic PostgreSQL record types, as registered
|
103
97
|
# types use HashRow by default.
|
@@ -216,7 +210,7 @@ module Sequel
|
|
216
210
|
end
|
217
211
|
end
|
218
212
|
|
219
|
-
ROW_TYPE_CLASSES = [HashRow, ArrayRow]
|
213
|
+
ROW_TYPE_CLASSES = [HashRow, ArrayRow].freeze
|
220
214
|
|
221
215
|
# This parser-like class splits the PostgreSQL
|
222
216
|
# row-valued/composite type output string format
|
@@ -225,25 +219,6 @@ module Sequel
|
|
225
219
|
# will accept, it only handles the output format that
|
226
220
|
# PostgreSQL uses.
|
227
221
|
class Splitter < StringScanner
|
228
|
-
OPEN_PAREN = /\(/.freeze
|
229
|
-
Sequel::Deprecation.deprecate_constant(self, :OPEN_PAREN)
|
230
|
-
CLOSE_PAREN = /\)/.freeze
|
231
|
-
Sequel::Deprecation.deprecate_constant(self, :CLOSE_PAREN)
|
232
|
-
UNQUOTED_RE = /[^,)]*/.freeze
|
233
|
-
Sequel::Deprecation.deprecate_constant(self, :UNQUOTED_RE)
|
234
|
-
SEP_RE = /[,)]/.freeze
|
235
|
-
Sequel::Deprecation.deprecate_constant(self, :SEP_RE)
|
236
|
-
QUOTE_RE = /"/.freeze
|
237
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTE_RE)
|
238
|
-
QUOTE_SEP_RE = /"[,)]/.freeze
|
239
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTE_SEP_RE)
|
240
|
-
QUOTED_RE = /(\\.|""|[^"])*/.freeze
|
241
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTED_RE)
|
242
|
-
REPLACE_RE = /\\(.)|"(")/.freeze
|
243
|
-
Sequel::Deprecation.deprecate_constant(self, :REPLACE_RE)
|
244
|
-
REPLACE_WITH = '\1\2'.freeze
|
245
|
-
Sequel::Deprecation.deprecate_constant(self, :REPLACE_WITH)
|
246
|
-
|
247
222
|
# Split the stored string into an array of strings, handling
|
248
223
|
# the different types of quoting.
|
249
224
|
def parse
|
@@ -387,13 +362,6 @@ module Sequel
|
|
387
362
|
end
|
388
363
|
|
389
364
|
module DatabaseMethods
|
390
|
-
ESCAPE_RE = /("|\\)/.freeze
|
391
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_RE)
|
392
|
-
ESCAPE_REPLACEMENT = '\\\\\1'.freeze
|
393
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_REPLACEMENT)
|
394
|
-
COMMA = ','.freeze
|
395
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
396
|
-
|
397
365
|
# A hash mapping row type keys (usually symbols), to option
|
398
366
|
# hashes. At the least, the values will contain the :parser
|
399
367
|
# option for the Parser instance that the type will use.
|
@@ -401,7 +369,7 @@ module Sequel
|
|
401
369
|
|
402
370
|
# Do some setup for the data structures the module uses.
|
403
371
|
def self.extended(db)
|
404
|
-
db.
|
372
|
+
db.instance_exec do
|
405
373
|
@row_types = {}
|
406
374
|
@row_schema_types = {}
|
407
375
|
extend(@row_type_method_module = Module.new)
|
@@ -433,8 +401,6 @@ module Sequel
|
|
433
401
|
super
|
434
402
|
end
|
435
403
|
|
436
|
-
STRING_TYPES = [18, 19, 25, 1042, 1043].freeze
|
437
|
-
|
438
404
|
# Register a new row type for the Database instance. db_type should be the type
|
439
405
|
# symbol. This parses the PostgreSQL system tables to get information the
|
440
406
|
# composite type, and by default has the type return instances of a subclass
|
@@ -487,23 +453,7 @@ module Sequel
|
|
487
453
|
|
488
454
|
# Using the conversion_procs, lookup converters for each member of the composite type
|
489
455
|
parser_opts[:column_converters] = parser_opts[:column_oids].map do |oid|
|
490
|
-
|
491
|
-
|
492
|
-
# SEQUEL5: Remove
|
493
|
-
if pr = procs[oid]
|
494
|
-
pr
|
495
|
-
elsif !STRING_TYPES.include?(oid)
|
496
|
-
# It's not a string type, and it's possible a conversion proc for this
|
497
|
-
# oid will be added later, so do a runtime check for it.
|
498
|
-
lambda do |s|
|
499
|
-
if (pr = procs[oid])
|
500
|
-
Sequel::Deprecation.deprecate("Calling conversion proc for subtype (oid: #{oid}) of composite type (oid: #{parser_opts[:oid]}) not added until after composite type registration", "Register subtype conversion procs before registering composite type")
|
501
|
-
pr.call(s)
|
502
|
-
else
|
503
|
-
s
|
504
|
-
end
|
505
|
-
end
|
506
|
-
end
|
456
|
+
procs[oid]
|
507
457
|
end
|
508
458
|
|
509
459
|
# Setup the converter and typecaster
|
@@ -533,21 +483,9 @@ module Sequel
|
|
533
483
|
private meth
|
534
484
|
end
|
535
485
|
|
536
|
-
conversion_procs_updated # SEQUEL5: Remove
|
537
486
|
nil
|
538
487
|
end
|
539
488
|
|
540
|
-
# SEQUEL5: Remove
|
541
|
-
def reset_conversion_procs
|
542
|
-
procs = super
|
543
|
-
|
544
|
-
row_types.values.each do |opts|
|
545
|
-
register_row_type(opts[:type], opts)
|
546
|
-
end
|
547
|
-
|
548
|
-
procs
|
549
|
-
end
|
550
|
-
|
551
489
|
# Handle typecasting of the given object to the given database type.
|
552
490
|
# In general, the given database type should already be registered,
|
553
491
|
# but if obj is an array, this will handled unregistered types.
|
@@ -602,16 +540,6 @@ module Sequel
|
|
602
540
|
end
|
603
541
|
end
|
604
542
|
end
|
605
|
-
|
606
|
-
# SEQUEL5: Remove
|
607
|
-
parser = PGRow::Parser.new(:converter=>PGRow::ArrayRow)
|
608
|
-
PG__TYPES[2249] = lambda do |s|
|
609
|
-
Sequel::Deprecation.deprecate("Conversion proc for record added globally by pg_row extension", "Load the pg_row extension into the Database instance")
|
610
|
-
parser.call(s)
|
611
|
-
end
|
612
|
-
if defined?(PGArray) && PGArray.respond_to?(:register)
|
613
|
-
PGArray.register('record', :oid=>2287, :scalar_oid=>2249, :skip_deprecation_warning=>true)
|
614
|
-
end
|
615
543
|
end
|
616
544
|
|
617
545
|
module SQL::Builders
|
@@ -76,8 +76,8 @@
|
|
76
76
|
#
|
77
77
|
# This feature is mostly useful for a different way to graph tables:
|
78
78
|
#
|
79
|
-
# DB[:a].join(:b, :
|
80
|
-
#
|
79
|
+
# DB[:a].join(:b, id: :b_id).select(Sequel.pg_row_op(:a).splat(:a),
|
80
|
+
# Sequel.pg_row_op(:b).splat(:b))
|
81
81
|
# # SELECT (a.*)::a, (b.*)::b FROM a INNER JOIN b ON (b.id = a.b_id)
|
82
82
|
# # => {:a=>{:id=>1, :b_id=>2}, :b=>{:id=>2}}
|
83
83
|
#
|
@@ -88,17 +88,6 @@ module Sequel
|
|
88
88
|
module Postgres
|
89
89
|
# This class represents a composite type expression reference.
|
90
90
|
class PGRowOp < SQL::PlaceholderLiteralString
|
91
|
-
OPEN = '('.freeze
|
92
|
-
Sequel::Deprecation.deprecate_constant(self, :OPEN)
|
93
|
-
CLOSE_DOT = ').'.freeze
|
94
|
-
Sequel::Deprecation.deprecate_constant(self, :CLOSE_DOT)
|
95
|
-
CLOSE_STAR = '.*)'.freeze
|
96
|
-
Sequel::Deprecation.deprecate_constant(self, :CLOSE_STAR)
|
97
|
-
CLOSE_STAR_CAST = '.*)::'.freeze
|
98
|
-
Sequel::Deprecation.deprecate_constant(self, :CLOSE_STAR_CAST)
|
99
|
-
EMPTY = "".freeze
|
100
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY)
|
101
|
-
|
102
91
|
ROW = ['(', '.*)'].freeze.each(&:freeze)
|
103
92
|
ROW_CAST = ['(', '.*)::'].freeze.each(&:freeze)
|
104
93
|
QUALIFY = ['(', ').'].freeze.each(&:freeze)
|
@@ -37,11 +37,9 @@ module Sequel
|
|
37
37
|
end
|
38
38
|
|
39
39
|
module DatasetQuery
|
40
|
-
Dataset.def_mutation_method(:query, :module=>self)
|
41
|
-
|
42
40
|
# Translates a query block into a dataset. Query blocks are an
|
43
41
|
# alternative to Sequel's usual method chaining, by using
|
44
|
-
#
|
42
|
+
# instance_exec with a proxy object:
|
45
43
|
#
|
46
44
|
# dataset = DB[:items].query do
|
47
45
|
# select :x, :y, :z
|
@@ -54,7 +52,7 @@ module Sequel
|
|
54
52
|
# dataset = DB[:items].select(:x, :y, :z).where{(x > 1) & (y > 2)}.reverse(:z)
|
55
53
|
def query(&block)
|
56
54
|
query = Dataset::Query.new(self)
|
57
|
-
query.
|
55
|
+
query.instance_exec(&block)
|
58
56
|
query.dataset
|
59
57
|
end
|
60
58
|
end
|
@@ -71,6 +69,7 @@ module Sequel
|
|
71
69
|
|
72
70
|
# Replace the query's dataset with dataset returned by the method call.
|
73
71
|
def method_missing(method, *args, &block)
|
72
|
+
# Allow calling private methods, so things like raise works
|
74
73
|
@dataset = @dataset.send(method, *args, &block)
|
75
74
|
raise(Sequel::Error, "method #{method.inspect} did not return a dataset") unless @dataset.is_a?(Dataset)
|
76
75
|
self
|
@@ -25,12 +25,6 @@
|
|
25
25
|
#
|
26
26
|
# Related module: Sequel::Dataset::RoundTimestamps
|
27
27
|
|
28
|
-
unless RUBY_VERSION >= '1.9'
|
29
|
-
# :nocov:
|
30
|
-
raise LoadError, 'the round_timestamps extension only works on ruby 1.9+'
|
31
|
-
# :nocov:
|
32
|
-
end
|
33
|
-
|
34
28
|
module Sequel
|
35
29
|
class Dataset
|
36
30
|
module RoundTimestamps
|
@@ -70,7 +70,7 @@ module Sequel
|
|
70
70
|
end
|
71
71
|
|
72
72
|
# Dump foreign key constraints for all tables as a migration. This complements
|
73
|
-
# the :
|
73
|
+
# the foreign_keys: false option to dump_schema_migration. This only dumps
|
74
74
|
# the constraints (not the columns) using alter_table/add_foreign_key with an
|
75
75
|
# array of columns.
|
76
76
|
#
|
@@ -81,14 +81,14 @@ module Sequel
|
|
81
81
|
<<END_MIG
|
82
82
|
Sequel.migration do
|
83
83
|
change do
|
84
|
-
#{ts.
|
84
|
+
#{ts.sort.map{|t| dump_table_foreign_keys(t)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
|
85
85
|
end
|
86
86
|
end
|
87
87
|
END_MIG
|
88
88
|
end
|
89
89
|
|
90
90
|
# Dump indexes for all tables as a migration. This complements
|
91
|
-
# the :
|
91
|
+
# the indexes: false option to dump_schema_migration. Options:
|
92
92
|
# :same_db :: Create a dump for the same database type, so
|
93
93
|
# don't ignore errors if the index statements fail.
|
94
94
|
# :index_names :: If set to false, don't record names of indexes. If
|
@@ -99,13 +99,13 @@ END_MIG
|
|
99
99
|
<<END_MIG
|
100
100
|
Sequel.migration do
|
101
101
|
change do
|
102
|
-
#{ts.
|
102
|
+
#{ts.sort.map{|t| dump_table_indexes(t, :add_index, options)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
|
103
103
|
end
|
104
104
|
end
|
105
105
|
END_MIG
|
106
106
|
end
|
107
107
|
|
108
|
-
# Return a string that contains a Sequel
|
108
|
+
# Return a string that contains a Sequel migration that when
|
109
109
|
# run would recreate the database structure. Options:
|
110
110
|
# :same_db :: Don't attempt to translate database types to ruby types.
|
111
111
|
# If this isn't set to true, all database types will be translated to
|
@@ -132,7 +132,7 @@ END_MIG
|
|
132
132
|
# Handle skipped foreign keys by adding them at the end via
|
133
133
|
# alter_table/add_foreign_key. Note that skipped foreign keys
|
134
134
|
# probably result in a broken down migration.
|
135
|
-
sfka = sfk.
|
135
|
+
sfka = sfk.sort.map{|table, fks| dump_add_fk_constraints(table, fks.values)}
|
136
136
|
sfka.join("\n\n").gsub(/^/, ' ') unless sfka.empty?
|
137
137
|
end
|
138
138
|
|
@@ -225,7 +225,7 @@ END_MIG
|
|
225
225
|
sfks = String.new
|
226
226
|
sfks << "alter_table(#{table.inspect}) do\n"
|
227
227
|
sfks << create_table_generator do
|
228
|
-
fks.sort_by{|fk| fk[:columns]
|
228
|
+
fks.sort_by{|fk| fk[:columns]}.each do |fk|
|
229
229
|
foreign_key fk[:columns], fk
|
230
230
|
end
|
231
231
|
end.dump_constraints.gsub(/^foreign_key /, ' add_foreign_key ')
|
@@ -236,7 +236,7 @@ END_MIG
|
|
236
236
|
# string that would add the foreign keys if run in a migration.
|
237
237
|
def dump_table_foreign_keys(table, options=OPTS)
|
238
238
|
if supports_foreign_key_parsing?
|
239
|
-
fks = foreign_key_list(table, options).sort_by{|fk| fk[:columns]
|
239
|
+
fks = foreign_key_list(table, options).sort_by{|fk| fk[:columns]}
|
240
240
|
end
|
241
241
|
|
242
242
|
if fks.nil? || fks.empty?
|
@@ -256,7 +256,7 @@ END_MIG
|
|
256
256
|
im = method(:index_to_generator_opts)
|
257
257
|
|
258
258
|
if options[:indexes] != false && supports_index_parsing?
|
259
|
-
indexes = indexes(table).
|
259
|
+
indexes = indexes(table).sort
|
260
260
|
end
|
261
261
|
|
262
262
|
if options[:foreign_keys] != false && supports_foreign_key_parsing?
|
@@ -296,7 +296,7 @@ END_MIG
|
|
296
296
|
# creating the index migration.
|
297
297
|
def dump_table_indexes(table, meth, options=OPTS)
|
298
298
|
if supports_index_parsing?
|
299
|
-
indexes = indexes(table).
|
299
|
+
indexes = indexes(table).sort
|
300
300
|
else
|
301
301
|
return ''
|
302
302
|
end
|
@@ -335,7 +335,7 @@ END_MIG
|
|
335
335
|
options[:skipped_foreign_keys] = skipped_foreign_keys
|
336
336
|
tables
|
337
337
|
else
|
338
|
-
tables.
|
338
|
+
tables.sort
|
339
339
|
end
|
340
340
|
end
|
341
341
|
|
@@ -360,14 +360,14 @@ END_MIG
|
|
360
360
|
# outstanding foreign keys and skipping those foreign keys.
|
361
361
|
# The skipped foreign keys will be added at the end of the
|
362
362
|
# migration.
|
363
|
-
skip_table, skip_fks = table_fks.sort_by{|table, fks| [fks.length, table
|
363
|
+
skip_table, skip_fks = table_fks.sort_by{|table, fks| [fks.length, table]}.first
|
364
364
|
skip_fks_hash = skipped_foreign_keys[skip_table] = {}
|
365
365
|
skip_fks.each{|fk| skip_fks_hash[fk[:columns]] = fk}
|
366
366
|
this_loop << skip_table
|
367
367
|
end
|
368
368
|
|
369
369
|
# Add sorted tables from this loop to the final list
|
370
|
-
sorted_tables.concat(this_loop.
|
370
|
+
sorted_tables.concat(this_loop.sort)
|
371
371
|
|
372
372
|
# Remove tables that were handled this loop
|
373
373
|
this_loop.each{|t| table_fks.delete(t)}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
#
|
3
|
-
# The select_remove extension adds
|
3
|
+
# The select_remove extension adds select_remove for removing existing selected
|
4
4
|
# columns from a dataset. It's not part of Sequel core as it is rarely needed and has
|
5
5
|
# some corner cases where it can't work correctly.
|
6
6
|
#
|
@@ -26,8 +26,8 @@ module Sequel
|
|
26
26
|
# # Assume columns a, b, and c in items table
|
27
27
|
# DB[:items] # SELECT * FROM items
|
28
28
|
# DB[:items].select_remove(:c) # SELECT a, b FROM items
|
29
|
-
# DB[:items].select(:a, :
|
30
|
-
# DB[:items].select(:a, :
|
29
|
+
# DB[:items].select(:a, Sequel[:b].as(:c), Sequel[:c].as(:b)).select_remove(:c) # SELECT a, c AS b FROM items
|
30
|
+
# DB[:items].select(:a, Sequel[:b][:c], Sequel[:c][:b]).select_remove(Sequel[:c][:b]) # SELECT a, b AS c FROM items
|
31
31
|
#
|
32
32
|
# Note that there are a few cases where this method may not work correctly:
|
33
33
|
#
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# The split_array_nil extension overrides Sequel's default handling of
|
4
4
|
# IN/NOT IN with arrays of values to do specific nil checking. For example,
|
5
5
|
#
|
6
|
-
# ds = DB[:table].where(:
|
6
|
+
# ds = DB[:table].where(column: [1, nil])
|
7
7
|
#
|
8
8
|
# By default, that produces the following SQL:
|
9
9
|
#
|
@@ -19,7 +19,7 @@
|
|
19
19
|
#
|
20
20
|
# Similarly, for NOT IN queries:
|
21
21
|
#
|
22
|
-
# ds = DB[:table].exclude(:
|
22
|
+
# ds = DB[:table].exclude(column: [1, nil])
|
23
23
|
# # Default:
|
24
24
|
# # SELECT * FROM table WHERE (column NOT IN (1, NULL))
|
25
25
|
# # with split_array_nils extension:
|
@@ -20,7 +20,7 @@
|
|
20
20
|
# work correctly when used in subqueries:
|
21
21
|
#
|
22
22
|
# ds = DB[:table].comment("Some\r\nComment Here")
|
23
|
-
# ds.where(:
|
23
|
+
# ds.where(id: ds).all
|
24
24
|
# # SELECT * FROM table WHERE (id IN (SELECT * FROM table -- Some Comment Here
|
25
25
|
# # )) -- Some Comment Here
|
26
26
|
# #
|
@@ -31,7 +31,7 @@
|
|
31
31
|
# Due to the use of single line SQL comments and converting all
|
32
32
|
# whitespace to spaces, this should correctly handle even
|
33
33
|
# malicious input. However, it would be unwise to rely on that,
|
34
|
-
# you should
|
34
|
+
# you should ensure that the argument given
|
35
35
|
# to Dataset#comment is not derived from user input.
|
36
36
|
#
|
37
37
|
# You can load this extension into specific datasets:
|
@@ -103,8 +103,7 @@ module Sequel
|
|
103
103
|
f = f.distinct
|
104
104
|
end
|
105
105
|
literal_append(sql, f)
|
106
|
-
|
107
|
-
when :mysql, :hsqldb, :cubrid, :h2
|
106
|
+
when :mysql, :hsqldb, :h2
|
108
107
|
sql << "GROUP_CONCAT("
|
109
108
|
if distinct
|
110
109
|
sql << "DISTINCT "
|
@@ -148,6 +147,8 @@ module Sequel
|
|
148
147
|
def initialize(expr, separator=nil)
|
149
148
|
@expr = expr
|
150
149
|
@separator = separator
|
150
|
+
yield self if block_given?
|
151
|
+
freeze
|
151
152
|
end
|
152
153
|
|
153
154
|
# Whether the current expression uses distinct expressions
|
@@ -157,16 +158,18 @@ module Sequel
|
|
157
158
|
|
158
159
|
# Return a modified StringAgg that uses distinct expressions
|
159
160
|
def distinct
|
160
|
-
|
161
|
-
|
162
|
-
|
161
|
+
self.class.new(@expr, @separator) do |sa|
|
162
|
+
sa.instance_variable_set(:@order_expr, @order_expr) if @order_expr
|
163
|
+
sa.instance_variable_set(:@distinct, true)
|
164
|
+
end
|
163
165
|
end
|
164
166
|
|
165
167
|
# Return a modified StringAgg with the given order
|
166
168
|
def order(*o)
|
167
|
-
|
168
|
-
|
169
|
-
|
169
|
+
self.class.new(@expr, @separator) do |sa|
|
170
|
+
sa.instance_variable_set(:@distinct, @distinct) if @distinct
|
171
|
+
sa.instance_variable_set(:@order_expr, o.empty? ? nil : o.freeze)
|
172
|
+
end
|
170
173
|
end
|
171
174
|
|
172
175
|
to_s_method :string_agg_sql
|