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
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# frozen-string-literal: true
|
|
2
|
-
|
|
3
|
-
Sequel::Deprecation.deprecate("The prepared_statements_with_pk plugin", "Stop using the plugin, it is probably unneeded and making the application slower")
|
|
4
|
-
|
|
5
|
-
module Sequel
|
|
6
|
-
module Plugins
|
|
7
|
-
# The prepared_statements_with_pk plugin allows Dataset#with_pk for model datasets
|
|
8
|
-
# to use prepared statements by extract the values of previously bound variables
|
|
9
|
-
# using <tt>Dataset#unbind</tt>, and attempting to use a prepared statement if the
|
|
10
|
-
# variables can be unbound correctly. See +Unbinder+ for details about what types of
|
|
11
|
-
# dataset filters can be unbound correctly.
|
|
12
|
-
#
|
|
13
|
-
# This plugin depends on the +prepared_statements+ plugin and should be considered unsafe.
|
|
14
|
-
# Unbinding dataset values cannot be done correctly in all cases, and use of this plugin
|
|
15
|
-
# in cases where not there are variables that are not unbound can lead to an denial of
|
|
16
|
-
# service attack by allocating an arbitrary number of prepared statements. You have been
|
|
17
|
-
# warned.
|
|
18
|
-
#
|
|
19
|
-
# Note that in most cases, this plugin will probably make things slower,
|
|
20
|
-
# so you should only use it if you really want to use prepared statements
|
|
21
|
-
# for Dataset#with_pk.
|
|
22
|
-
#
|
|
23
|
-
# Usage:
|
|
24
|
-
#
|
|
25
|
-
# # Make all model subclasses use prepared statements for Dataset#with_pk (called before loading subclasses)
|
|
26
|
-
# Sequel::Model.plugin :prepared_statements_with_pk
|
|
27
|
-
#
|
|
28
|
-
# # Make the Album class use prepared statements for Dataset#with_pk
|
|
29
|
-
# Album.plugin :prepared_statements_with_pk
|
|
30
|
-
module PreparedStatementsWithPk
|
|
31
|
-
# Depend on the prepared_statements plugin
|
|
32
|
-
def self.apply(model)
|
|
33
|
-
model.plugin(:prepared_statements)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
module ClassMethods
|
|
37
|
-
private
|
|
38
|
-
|
|
39
|
-
# Return a prepared statement that can be used to lookup a row given a dataset for the row matching
|
|
40
|
-
# the primary key.
|
|
41
|
-
def prepared_lookup_dataset(ds)
|
|
42
|
-
cached_prepared_statement(:lookup_sql, ds.sql){prepare_statement(ds.where(prepared_statement_key_array(primary_key).map{|k, v| [SQL::QualifiedIdentifier.new(ds.model.table_name, k), v]}), :first)}
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
module DatasetMethods
|
|
47
|
-
# Use a prepared statement to find a row with the matching primary key
|
|
48
|
-
# inside this dataset.
|
|
49
|
-
def with_pk(pk)
|
|
50
|
-
begin
|
|
51
|
-
ds, bv = unbind
|
|
52
|
-
rescue UnbindDuplicate
|
|
53
|
-
super
|
|
54
|
-
else
|
|
55
|
-
begin
|
|
56
|
-
bv = bv.merge!(model.primary_key_hash(pk)){|k, v1, v2| ((v1 == v2) ? v1 : raise(UnbindDuplicate))}
|
|
57
|
-
rescue UnbindDuplicate
|
|
58
|
-
super
|
|
59
|
-
else
|
|
60
|
-
ps = model.send(:prepared_lookup_dataset, ds)
|
|
61
|
-
if server = @opts[:server]
|
|
62
|
-
ps = ps.server(server)
|
|
63
|
-
end
|
|
64
|
-
ps.call(bv)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# frozen-string-literal: true
|
|
2
|
-
|
|
3
|
-
Sequel::Deprecation.deprecate("The schema plugin", "Switch to defining your schema using Database schema methods before creating your model classes")
|
|
4
|
-
|
|
5
|
-
module Sequel
|
|
6
|
-
module Plugins
|
|
7
|
-
# Sequel's built in schema plugin allows you to define your schema
|
|
8
|
-
# directly in the model using Model.set_schema (which takes a block
|
|
9
|
-
# similar to Database#create_table), and use Model.create_table to
|
|
10
|
-
# create a table using the schema information.
|
|
11
|
-
#
|
|
12
|
-
# This plugin is mostly suited to test code. If there is any
|
|
13
|
-
# chance that your application's schema could change, you should
|
|
14
|
-
# be using the migration extension instead.
|
|
15
|
-
#
|
|
16
|
-
# Usage:
|
|
17
|
-
#
|
|
18
|
-
# # Add the schema methods to all model subclasses (called before loading subclasses)
|
|
19
|
-
# Sequel::Model.plugin :schema
|
|
20
|
-
#
|
|
21
|
-
# # Add the schema methods to the Album class
|
|
22
|
-
# Album.plugin :schema
|
|
23
|
-
module Schema
|
|
24
|
-
module ClassMethods
|
|
25
|
-
# Creates table, using the column information from set_schema.
|
|
26
|
-
def create_table(*args, &block)
|
|
27
|
-
set_schema(*args, &block) if block
|
|
28
|
-
db.create_table(table_name, :generator=>@schema)
|
|
29
|
-
@db_schema = get_db_schema(true)
|
|
30
|
-
columns
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# Drops the table if it exists and then runs create_table. Should probably
|
|
34
|
-
# not be used except in testing.
|
|
35
|
-
def create_table!(*args, &block)
|
|
36
|
-
drop_table?
|
|
37
|
-
create_table(*args, &block)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Creates the table unless the table already exists
|
|
41
|
-
def create_table?(*args, &block)
|
|
42
|
-
create_table(*args, &block) unless table_exists?
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Drops table. If the table doesn't exist, this will probably raise an error.
|
|
46
|
-
def drop_table
|
|
47
|
-
db.drop_table(table_name)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Drops table if it already exists, do nothing if it doesn't exist.
|
|
51
|
-
def drop_table?
|
|
52
|
-
db.drop_table?(table_name)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Returns table schema created with set_schema for direct descendant of Model.
|
|
56
|
-
# Does not retreive schema information from the database, see db_schema if you
|
|
57
|
-
# want that.
|
|
58
|
-
def schema
|
|
59
|
-
@schema || (superclass.schema unless superclass == Model)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Defines a table schema (see Schema::CreateTableGenerator for more information).
|
|
63
|
-
#
|
|
64
|
-
# This is only needed if you want to use the create_table/create_table! methods.
|
|
65
|
-
# Will also set the dataset if you provide a name, as well as setting
|
|
66
|
-
# the primary key if you defined one in the passed block.
|
|
67
|
-
#
|
|
68
|
-
# In general, it is a better idea to use migrations for production code, as
|
|
69
|
-
# migrations allow changes to existing schema. set_schema is mostly useful for
|
|
70
|
-
# test code or simple examples.
|
|
71
|
-
def set_schema(name = nil, &block)
|
|
72
|
-
set_dataset(db[name]) if name
|
|
73
|
-
@schema = db.create_table_generator(&block)
|
|
74
|
-
set_primary_key(@schema.primary_key_name) if @schema.primary_key_name
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Returns true if table exists, false otherwise.
|
|
78
|
-
def table_exists?
|
|
79
|
-
db.table_exists?(table_name)
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# frozen-string-literal: true
|
|
2
|
-
|
|
3
|
-
Sequel::Deprecation.deprecate("The scissors plugin", "Running with scissors is dangerous")
|
|
4
|
-
|
|
5
|
-
module Sequel
|
|
6
|
-
module Plugins
|
|
7
|
-
# The scissors plugin adds class methods for update, delete, and destroy.
|
|
8
|
-
# It is so named because this is considered dangerous, since it is easy
|
|
9
|
-
# to write:
|
|
10
|
-
#
|
|
11
|
-
# Album.delete
|
|
12
|
-
#
|
|
13
|
-
# and delete all rows in the table, when you meant to write:
|
|
14
|
-
#
|
|
15
|
-
# album.delete
|
|
16
|
-
#
|
|
17
|
-
# and only delete a single row.
|
|
18
|
-
#
|
|
19
|
-
# This plugin is mostly useful for backwards compatibility, and not
|
|
20
|
-
# recommended for use in production. However, it can cut down on
|
|
21
|
-
# verbosity in non-transactional test code, so it may be appropriate
|
|
22
|
-
# to use when testing.
|
|
23
|
-
#
|
|
24
|
-
# Usage:
|
|
25
|
-
#
|
|
26
|
-
# # Make all model subclass run with scissors
|
|
27
|
-
# Sequel::Model.plugin :scissors
|
|
28
|
-
#
|
|
29
|
-
# # Make the Album class run with scissors
|
|
30
|
-
# Album.plugin :scissors
|
|
31
|
-
module Scissors
|
|
32
|
-
module ClassMethods
|
|
33
|
-
Plugins.def_dataset_methods(self, [:update, :delete, :destroy])
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
|
2
|
-
|
|
3
|
-
# SEQUEL5: Remove
|
|
4
|
-
unless Sequel.mock.dataset.frozen?
|
|
5
|
-
|
|
6
|
-
describe "Dataset" do
|
|
7
|
-
before do
|
|
8
|
-
@d = Sequel.mock.dataset.from(:x)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
deprecated "should support self-changing select!" do
|
|
12
|
-
@d.select!(:y)
|
|
13
|
-
@d.sql.must_equal "SELECT y FROM x"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
deprecated "should support self-changing from!" do
|
|
17
|
-
@d.from!(:y)
|
|
18
|
-
@d.sql.must_equal "SELECT * FROM y"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
deprecated "should support self-changing order!" do
|
|
22
|
-
@d.order!(:y)
|
|
23
|
-
@d.sql.must_equal "SELECT * FROM x ORDER BY y"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
deprecated "should support self-changing filter!" do
|
|
27
|
-
@d.filter!(:y => 1)
|
|
28
|
-
@d.sql.must_equal "SELECT * FROM x WHERE (y = 1)"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
deprecated "should support self-changing filter! with block" do
|
|
32
|
-
@d.filter!{y < 2}
|
|
33
|
-
@d.sql.must_equal "SELECT * FROM x WHERE (y < 2)"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
deprecated "should raise for ! methods that don't return a dataset" do
|
|
37
|
-
proc {@d.opts!}.must_raise(NoMethodError)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
deprecated "should raise for missing methods" do
|
|
41
|
-
proc {@d.xuyz}.must_raise(NoMethodError)
|
|
42
|
-
proc {@d.xyz!}.must_raise(NoMethodError)
|
|
43
|
-
proc {@d.xyz?}.must_raise(NoMethodError)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
deprecated "should support chaining of bang methods" do
|
|
47
|
-
@d.order!(:y).filter!(:y => 1).sql.must_equal "SELECT * FROM x WHERE (y = 1) ORDER BY y"
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
describe "Frozen Datasets" do
|
|
52
|
-
before do
|
|
53
|
-
@ds = Sequel.mock[:test].freeze
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
deprecated "should have dups not be frozen" do
|
|
57
|
-
@ds.dup.wont_be :frozen?
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
deprecated "should raise an error when calling mutation methods" do
|
|
61
|
-
proc{@ds.select!(:a)}.must_raise RuntimeError
|
|
62
|
-
proc{@ds.row_proc = proc{}}.must_raise RuntimeError
|
|
63
|
-
proc{@ds.extension! :query}.must_raise RuntimeError
|
|
64
|
-
proc{@ds.naked!}.must_raise RuntimeError
|
|
65
|
-
proc{@ds.from_self!}.must_raise RuntimeError
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
describe "Dataset mutation methods" do
|
|
70
|
-
def m(&block)
|
|
71
|
-
ds = Sequel.mock[:t]
|
|
72
|
-
def ds.supports_cte?(*) true end
|
|
73
|
-
ds.instance_exec(&block)
|
|
74
|
-
ds.sql
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
deprecated "should modify the dataset in place" do
|
|
78
|
-
dsc = Sequel.mock[:u]
|
|
79
|
-
dsc.send(:columns=, [:v])
|
|
80
|
-
|
|
81
|
-
m{and!(:a=>1).or!(:b=>2)}.must_equal "SELECT * FROM t WHERE ((a = 1) OR (b = 2))"
|
|
82
|
-
m{select!(:f).graph!(dsc, :b=>:c).set_graph_aliases!(:e=>[:m, :n]).add_graph_aliases!(:d=>[:g, :c])}.must_equal "SELECT m.n AS e, g.c AS d FROM t LEFT OUTER JOIN u ON (u.b = t.c)"
|
|
83
|
-
m{cross_join!(:a)}.must_equal "SELECT * FROM t CROSS JOIN a"
|
|
84
|
-
m{distinct!}.must_equal "SELECT DISTINCT * FROM t"
|
|
85
|
-
m{except!(dsc)}.must_equal "SELECT * FROM (SELECT * FROM t EXCEPT SELECT * FROM u) AS t1"
|
|
86
|
-
m{exclude!(:a=>1)}.must_equal "SELECT * FROM t WHERE (a != 1)"
|
|
87
|
-
m{exclude_having!(:a=>1)}.must_equal "SELECT * FROM t HAVING (a != 1)"
|
|
88
|
-
m{exclude_where!(:a=>1)}.must_equal "SELECT * FROM t WHERE (a != 1)"
|
|
89
|
-
m{filter!(:a=>1)}.must_equal "SELECT * FROM t WHERE (a = 1)"
|
|
90
|
-
m{for_update!}.must_equal "SELECT * FROM t FOR UPDATE"
|
|
91
|
-
m{from!(:p)}.must_equal "SELECT * FROM p"
|
|
92
|
-
m{full_join!(:a, [:b])}.must_equal "SELECT * FROM t FULL JOIN a USING (b)"
|
|
93
|
-
m{full_outer_join!(:a, [:b])}.must_equal "SELECT * FROM t FULL OUTER JOIN a USING (b)"
|
|
94
|
-
m{grep!(:a, 'b')}.must_equal "SELECT * FROM t WHERE ((a LIKE 'b' ESCAPE '\\'))"
|
|
95
|
-
m{group!(:a)}.must_equal "SELECT * FROM t GROUP BY a"
|
|
96
|
-
m{group_and_count!(:a)}.must_equal "SELECT a, count(*) AS count FROM t GROUP BY a"
|
|
97
|
-
m{group_by!(:a)}.must_equal "SELECT * FROM t GROUP BY a"
|
|
98
|
-
m{having!(:a)}.must_equal "SELECT * FROM t HAVING a"
|
|
99
|
-
m{inner_join!(:a, [:b])}.must_equal "SELECT * FROM t INNER JOIN a USING (b)"
|
|
100
|
-
m{intersect!(dsc)}.must_equal "SELECT * FROM (SELECT * FROM t INTERSECT SELECT * FROM u) AS t1"
|
|
101
|
-
m{where!(:a).invert!}.must_equal "SELECT * FROM t WHERE NOT a"
|
|
102
|
-
m{join!(:a, [:b])}.must_equal "SELECT * FROM t INNER JOIN a USING (b)"
|
|
103
|
-
m{join_table!(:inner, :a, [:b])}.must_equal "SELECT * FROM t INNER JOIN a USING (b)"
|
|
104
|
-
m{left_join!(:a, [:b])}.must_equal "SELECT * FROM t LEFT JOIN a USING (b)"
|
|
105
|
-
m{left_outer_join!(:a, [:b])}.must_equal "SELECT * FROM t LEFT OUTER JOIN a USING (b)"
|
|
106
|
-
m{limit!(1)}.must_equal "SELECT * FROM t LIMIT 1"
|
|
107
|
-
m{lock_style!(:update)}.must_equal "SELECT * FROM t FOR UPDATE"
|
|
108
|
-
m{natural_full_join!(:a)}.must_equal "SELECT * FROM t NATURAL FULL JOIN a"
|
|
109
|
-
m{natural_join!(:a)}.must_equal "SELECT * FROM t NATURAL JOIN a"
|
|
110
|
-
m{natural_left_join!(:a)}.must_equal "SELECT * FROM t NATURAL LEFT JOIN a"
|
|
111
|
-
m{natural_right_join!(:a)}.must_equal "SELECT * FROM t NATURAL RIGHT JOIN a"
|
|
112
|
-
m{offset!(1)}.must_equal "SELECT * FROM t OFFSET 1"
|
|
113
|
-
m{order!(:a).reverse_order!}.must_equal "SELECT * FROM t ORDER BY a DESC"
|
|
114
|
-
m{order_by!(:a).order_more!(:b).order_append!(:c).order_prepend!(:d).reverse!}.must_equal "SELECT * FROM t ORDER BY d DESC, a DESC, b DESC, c DESC"
|
|
115
|
-
m{qualify!}.must_equal "SELECT t.* FROM t"
|
|
116
|
-
m{right_join!(:a, [:b])}.must_equal "SELECT * FROM t RIGHT JOIN a USING (b)"
|
|
117
|
-
m{right_outer_join!(:a, [:b])}.must_equal "SELECT * FROM t RIGHT OUTER JOIN a USING (b)"
|
|
118
|
-
m{select!(:a)}.must_equal "SELECT a FROM t"
|
|
119
|
-
m{select_all!(:t).select_more!(:b).select_append!(:c)}.must_equal "SELECT t.*, b, c FROM t"
|
|
120
|
-
m{select_group!(:a)}.must_equal "SELECT a FROM t GROUP BY a"
|
|
121
|
-
m{where!(:a).unfiltered!}.must_equal "SELECT * FROM t"
|
|
122
|
-
m{group!(:a).ungrouped!}.must_equal "SELECT * FROM t"
|
|
123
|
-
m{limit!(1).unlimited!}.must_equal "SELECT * FROM t"
|
|
124
|
-
m{order!(:a).unordered!}.must_equal "SELECT * FROM t"
|
|
125
|
-
m{union!(dsc)}.must_equal "SELECT * FROM (SELECT * FROM t UNION SELECT * FROM u) AS t1"
|
|
126
|
-
m{with!(:a, dsc)}.must_equal "WITH a AS (SELECT * FROM u) SELECT * FROM t"
|
|
127
|
-
m{with_recursive!(:a, dsc, dsc)}.must_equal "WITH a AS (SELECT * FROM u UNION ALL SELECT * FROM u) SELECT * FROM t"
|
|
128
|
-
m{with_sql!('SELECT foo')}.must_equal "SELECT foo"
|
|
129
|
-
|
|
130
|
-
dsc.server!(:a)
|
|
131
|
-
dsc.opts[:server].must_equal :a
|
|
132
|
-
dsc.graph!(dsc, {:b=>:c}, :table_alias=>:foo).ungraphed!.opts[:graph].must_be_nil
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
deprecated "should clear the cache" do
|
|
136
|
-
ds = Sequel.mock[:a]
|
|
137
|
-
ds.columns
|
|
138
|
-
ds.send(:cache_set, :columns, [:a])
|
|
139
|
-
ds.select!(:foo, :bar).send(:cache_get, :columns).must_be_nil
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
describe "Dataset#clone" do
|
|
144
|
-
before do
|
|
145
|
-
@dataset = Sequel.mock.dataset.from(:items)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
deprecated "should copy the dataset opts" do
|
|
149
|
-
clone = @dataset.clone
|
|
150
|
-
clone.opts.must_equal @dataset.opts
|
|
151
|
-
@dataset.filter!(:a => 'b')
|
|
152
|
-
clone.opts[:filter].must_be_nil
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
describe "Dataset extensions" do
|
|
157
|
-
before(:all) do
|
|
158
|
-
class << Sequel
|
|
159
|
-
alias _extension extension
|
|
160
|
-
remove_method :extension
|
|
161
|
-
def extension(*)
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
after(:all) do
|
|
166
|
-
class << Sequel
|
|
167
|
-
remove_method :extension
|
|
168
|
-
alias extension _extension
|
|
169
|
-
remove_method :_extension
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
before do
|
|
173
|
-
@ds = Sequel.mock.dataset
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
deprecated "should have #extension! modify the receiver" do
|
|
177
|
-
Sequel::Dataset.register_extension(:foo, Module.new{def a; 1; end})
|
|
178
|
-
@ds.extension!(:foo)
|
|
179
|
-
@ds.a.must_equal 1
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
deprecated "should have #extension! return the receiver" do
|
|
183
|
-
Sequel::Dataset.register_extension(:foo, Module.new{def a; 1; end})
|
|
184
|
-
@ds.extension!(:foo).must_be_same_as(@ds)
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
describe "Dataset#naked!" do
|
|
189
|
-
deprecated "should remove any existing row_proc" do
|
|
190
|
-
d = Sequel.mock.dataset.with_row_proc(Proc.new{|r| r})
|
|
191
|
-
d.naked!.row_proc.must_be_nil
|
|
192
|
-
d.row_proc.must_be_nil
|
|
193
|
-
end
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
describe "Dataset#row_proc=" do
|
|
197
|
-
deprecated "should set the row_proc" do
|
|
198
|
-
d = Sequel.mock.dataset.with_row_proc(Proc.new{|r| r})
|
|
199
|
-
d.row_proc.wont_be_nil
|
|
200
|
-
d.row_proc = nil
|
|
201
|
-
d.row_proc.must_be_nil
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
describe "Dataset#quote_identifiers=" do
|
|
206
|
-
deprecated "should change quote identifiers setting" do
|
|
207
|
-
d = Sequel.mock.dataset.with_quote_identifiers(true)
|
|
208
|
-
d.literal(:a).must_equal '"a"'
|
|
209
|
-
d.quote_identifiers = false
|
|
210
|
-
d.literal(:a).must_equal 'a'
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
describe "Dataset#from_self!" do
|
|
215
|
-
deprecated "should work" do
|
|
216
|
-
Sequel.mock.dataset.from(:test).select(:name).limit(1).from_self!.sql.must_equal 'SELECT * FROM (SELECT name FROM test LIMIT 1) AS t1'
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
describe "Sequel Mock Adapter" do
|
|
221
|
-
deprecated "should be able to set the rows returned by each on a per dataset basis using _fetch" do
|
|
222
|
-
rs = []
|
|
223
|
-
db = Sequel.mock(:fetch=>{:a=>1})
|
|
224
|
-
ds = db[:t]
|
|
225
|
-
ds.each{|r| rs << r}
|
|
226
|
-
rs.must_equal [{:a=>1}]
|
|
227
|
-
ds._fetch = {:b=>2}
|
|
228
|
-
ds.each{|r| rs << r}
|
|
229
|
-
rs.must_equal [{:a=>1}, {:b=>2}]
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
deprecated "should be able to set the number of rows modified by update and delete on a per dataset basis" do
|
|
233
|
-
db = Sequel.mock(:numrows=>2)
|
|
234
|
-
ds = db[:t]
|
|
235
|
-
ds.update(:a=>1).must_equal 2
|
|
236
|
-
ds.delete.must_equal 2
|
|
237
|
-
ds.numrows = 3
|
|
238
|
-
ds.update(:a=>1).must_equal 3
|
|
239
|
-
ds.delete.must_equal 3
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
deprecated "should be able to set the autogenerated primary key returned by insert on a per dataset basis" do
|
|
243
|
-
db = Sequel.mock(:autoid=>1)
|
|
244
|
-
ds = db[:t]
|
|
245
|
-
ds.insert(:a=>1).must_equal 1
|
|
246
|
-
ds.autoid = 5
|
|
247
|
-
ds.insert(:a=>1).must_equal 5
|
|
248
|
-
ds.insert(:a=>1).must_equal 6
|
|
249
|
-
db[:t].insert(:a=>1).must_equal 2
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
end
|