sequel 4.49.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +130 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +6 -9
- data/doc/advanced_associations.rdoc +91 -168
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/schema_modification.rdoc +78 -64
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +4 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +6 -26
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/jdbc.rb +18 -74
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/oracle.rb +8 -13
- data/lib/sequel/adapters/postgres.rb +28 -150
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +61 -227
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +58 -264
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +22 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/connection_pool.rb +38 -28
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +36 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +93 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/dataset/actions.rb +57 -107
- data/lib/sequel/dataset/dataset_module.rb +4 -16
- data/lib/sequel/dataset/features.rb +35 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +91 -161
- data/lib/sequel/dataset/sql.rb +33 -225
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +27 -43
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +3 -16
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/model/associations.rb +129 -131
- data/lib/sequel/model/base.rb +133 -731
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -23
- data/lib/sequel/version.rb +2 -2
- data/lib/sequel.rb +1 -1
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +111 -478
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +459 -664
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +96 -244
- data/spec/core/dataset_spec.rb +99 -414
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +241 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +88 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +30 -92
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +8 -30
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +5 -6
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +25 -33
- data/spec/extensions/migration_spec.rb +12 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +2 -2
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +22 -26
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +22 -31
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +40 -9
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +23 -34
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +43 -32
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +5 -17
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/synchronize_sql_spec.rb +124 -0
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +5 -7
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +12 -16
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -13
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +8 -13
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +12 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +7 -23
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +10 -10
- data/spec/integration/spec_helper.rb +17 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +43 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +48 -17
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +29 -339
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +33 -129
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +19 -65
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
|
@@ -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
|
|
@@ -41,26 +41,12 @@ else
|
|
|
41
41
|
alias_method :aref_before_sequel, :[]
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
else
|
|
51
|
-
aref_before_sequel(v)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
else
|
|
55
|
-
def [](*v)
|
|
56
|
-
arg = v.first if v.length == 1
|
|
57
|
-
|
|
58
|
-
case arg
|
|
59
|
-
when Symbol, Sequel::SQL::Identifier, Sequel::SQL::QualifiedIdentifier
|
|
60
|
-
Sequel::SQL::QualifiedIdentifier.new(self, arg)
|
|
61
|
-
else
|
|
62
|
-
respond_to?(:aref_before_sequel) ? aref_before_sequel(*v) : super(*v)
|
|
63
|
-
end
|
|
44
|
+
def [](v)
|
|
45
|
+
case v
|
|
46
|
+
when Symbol, Sequel::SQL::Identifier, Sequel::SQL::QualifiedIdentifier
|
|
47
|
+
Sequel::SQL::QualifiedIdentifier.new(self, v)
|
|
48
|
+
else
|
|
49
|
+
aref_before_sequel(v)
|
|
64
50
|
end
|
|
65
51
|
end
|
|
66
52
|
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The synchronize_sql extension checks out a connection from the pool while
|
|
4
|
+
# generating an SQL string. In cases where a connection is necessary
|
|
5
|
+
# in order to properly escape input, and multiple inputs in the query need
|
|
6
|
+
# escaping, this can result in fewer connection checkouts and better
|
|
7
|
+
# overall performance. In other cases this results in a performance decrease
|
|
8
|
+
# because a connection is checked out and either not used or kept checked out
|
|
9
|
+
# longer than necessary.
|
|
10
|
+
#
|
|
11
|
+
# The adapters where this extension may improve performance include amalgalite,
|
|
12
|
+
# mysql2, postgres, jdbc/postgresql, and tinytds. In these adapters, escaping
|
|
13
|
+
# strings requires a connection object for as proper escaping requires calling
|
|
14
|
+
# an escaping method on the connection object.
|
|
15
|
+
#
|
|
16
|
+
# This extension is most helpful when dealing with queries with lots of
|
|
17
|
+
# strings that need escaping (e.g. IN queries with long lists). By default,
|
|
18
|
+
# a connection will be checked out and back in for each string to be escaped,
|
|
19
|
+
# which under high contention can cause the query to spend longer generating
|
|
20
|
+
# the SQL string than the actual pool timeout (since every individual checkout
|
|
21
|
+
# will take less than the timeout, but the sum of all of them can be greater).
|
|
22
|
+
#
|
|
23
|
+
# This extension is unnecessary and will decrease performance if the single
|
|
24
|
+
# threaded connection pool is used.
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
module Sequel
|
|
28
|
+
class Dataset
|
|
29
|
+
module SynchronizeSQL
|
|
30
|
+
%w'insert select update delete'.each do |type|
|
|
31
|
+
define_method(:"#{type}_sql") do |*args|
|
|
32
|
+
if @opts[:sql].is_a?(String)
|
|
33
|
+
return super(*args)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
db.synchronize(@opts[:server]) do
|
|
37
|
+
super(*args)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
register_extension(:synchronize_sql, SynchronizeSQL)
|
|
44
|
+
end
|
|
45
|
+
end
|