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
data/spec/core/schema_spec.rb
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "DB#create_table" do
|
|
4
4
|
before do
|
|
5
5
|
@db = Sequel.mock
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
deprecated "should support an CreateTableGenerator as second argument" do
|
|
9
|
-
@db.create_table(:cats, Sequel::Schema::CreateTableGenerator.new(@db){})
|
|
10
|
-
@db.sqls.must_equal ['CREATE TABLE cats ()']
|
|
11
|
-
end
|
|
12
|
-
|
|
13
8
|
it "should accept the table name" do
|
|
14
|
-
@db.create_table(:cats)
|
|
9
|
+
@db.create_table(:cats){}.must_be_nil
|
|
15
10
|
@db.sqls.must_equal ['CREATE TABLE cats ()']
|
|
16
11
|
end
|
|
17
12
|
|
|
@@ -514,15 +509,22 @@ describe "DB#create_table" do
|
|
|
514
509
|
end
|
|
515
510
|
|
|
516
511
|
it "should ignore errors if the database raises an error on an index creation statement and the :ignore_index_errors option is used" do
|
|
517
|
-
|
|
512
|
+
@db.define_singleton_method(:execute_ddl){|*a| raise Sequel::DatabaseError if /blah/.match(a.first); super(*a)}
|
|
518
513
|
lambda{@db.create_table(:cats){Integer :id; index :blah; index :id}}.must_raise(Sequel::DatabaseError)
|
|
519
514
|
@db.sqls.must_equal ['CREATE TABLE cats (id integer)']
|
|
520
515
|
@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}
|
|
521
516
|
@db.sqls.must_equal ['CREATE TABLE cats (id integer)', 'CREATE INDEX cats_id_index ON cats (id)']
|
|
522
517
|
end
|
|
523
518
|
|
|
524
|
-
it "should use savepoints around index creation if running inside a transaction if :ignore_index_errors option is used" do
|
|
525
|
-
|
|
519
|
+
it "should not use savepoints around index creation if running inside a transaction if :ignore_index_errors option is used" do
|
|
520
|
+
@db.define_singleton_method(:execute_ddl){|*a| super(*a); raise Sequel::DatabaseError if /blah/.match(a.first)}
|
|
521
|
+
@db.transaction{@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}}
|
|
522
|
+
@db.sqls.must_equal ["BEGIN", "CREATE TABLE cats (id integer)", "CREATE INDEX cats_blah_index ON cats (blah)", "CREATE INDEX cats_id_index ON cats (id)", "COMMIT"]
|
|
523
|
+
end
|
|
524
|
+
|
|
525
|
+
it "should use savepoints around index creation if running inside a transaction if :ignore_index_errors option is used and transactional schema modifications are supported" do
|
|
526
|
+
@db.define_singleton_method(:supports_transactional_ddl?){true}
|
|
527
|
+
@db.define_singleton_method(:execute_ddl){|*a| super(*a); raise Sequel::DatabaseError if /blah/.match(a.first)}
|
|
526
528
|
@db.transaction{@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}}
|
|
527
529
|
@db.sqls.must_equal ["BEGIN", "CREATE TABLE cats (id integer)", "SAVEPOINT autopoint_1", "CREATE INDEX cats_blah_index ON cats (blah)", "ROLLBACK TO SAVEPOINT autopoint_1", "SAVEPOINT autopoint_1", "CREATE INDEX cats_id_index ON cats (id)", "RELEASE SAVEPOINT autopoint_1", "COMMIT"]
|
|
528
530
|
end
|
|
@@ -613,7 +615,7 @@ describe "DB#create_table" do
|
|
|
613
615
|
@db.sqls.must_equal ["CREATE TABLE cats (CHECK (price = 100))"]
|
|
614
616
|
end
|
|
615
617
|
|
|
616
|
-
|
|
618
|
+
it "should accept array constraints" do
|
|
617
619
|
@db.create_table(:cats) do
|
|
618
620
|
check [Sequel.expr(:x) > 0, Sequel.expr(:y) < 1]
|
|
619
621
|
end
|
|
@@ -757,19 +759,19 @@ describe "DB#create_table!" do
|
|
|
757
759
|
end
|
|
758
760
|
|
|
759
761
|
it "should create the table if it does not exist" do
|
|
760
|
-
|
|
761
|
-
@db.create_table!(:cats){|*a|}
|
|
762
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
|
763
|
+
@db.create_table!(:cats){|*a|}.must_be_nil
|
|
762
764
|
@db.sqls.must_equal ['CREATE TABLE cats ()']
|
|
763
765
|
end
|
|
764
766
|
|
|
765
767
|
it "should drop the table before creating it if it already exists" do
|
|
766
|
-
|
|
768
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
|
767
769
|
@db.create_table!(:cats){|*a|}
|
|
768
770
|
@db.sqls.must_equal ['DROP TABLE cats', 'CREATE TABLE cats ()']
|
|
769
771
|
end
|
|
770
772
|
|
|
771
773
|
it "should use IF EXISTS if the database supports it" do
|
|
772
|
-
|
|
774
|
+
@db.define_singleton_method(:supports_drop_table_if_exists?){true}
|
|
773
775
|
@db.create_table!(:cats){|*a|}
|
|
774
776
|
@db.sqls.must_equal ['DROP TABLE IF EXISTS cats', 'CREATE TABLE cats ()']
|
|
775
777
|
end
|
|
@@ -781,30 +783,30 @@ describe "DB#create_table?" do
|
|
|
781
783
|
end
|
|
782
784
|
|
|
783
785
|
it "should not create the table if the table already exists" do
|
|
784
|
-
|
|
785
|
-
@db.create_table?(:cats){|*a|}
|
|
786
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
|
787
|
+
@db.create_table?(:cats){|*a|}.must_be_nil
|
|
786
788
|
@db.sqls.must_equal []
|
|
787
789
|
end
|
|
788
790
|
|
|
789
791
|
it "should create the table if the table doesn't already exist" do
|
|
790
|
-
|
|
792
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
|
791
793
|
@db.create_table?(:cats){|*a|}
|
|
792
794
|
@db.sqls.must_equal ['CREATE TABLE cats ()']
|
|
793
795
|
end
|
|
794
796
|
|
|
795
797
|
it "should use IF NOT EXISTS if the database supports that" do
|
|
796
|
-
|
|
798
|
+
@db.define_singleton_method(:supports_create_table_if_not_exists?){true}
|
|
797
799
|
@db.create_table?(:cats){|*a|}
|
|
798
800
|
@db.sqls.must_equal ['CREATE TABLE IF NOT EXISTS cats ()']
|
|
799
801
|
end
|
|
800
802
|
|
|
801
803
|
it "should not use IF NOT EXISTS if the indexes are created" do
|
|
802
|
-
|
|
803
|
-
|
|
804
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
|
805
|
+
@db.define_singleton_method(:supports_create_table_if_not_exists?){true}
|
|
804
806
|
@db.create_table?(:cats){|*a| Integer :a, :index=>true}
|
|
805
807
|
@db.sqls.must_equal ['CREATE TABLE cats (a integer)', 'CREATE INDEX cats_a_index ON cats (a)']
|
|
806
808
|
|
|
807
|
-
|
|
809
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
|
808
810
|
@db.create_table?(:cats){|*a| Integer :a, :index=>true}
|
|
809
811
|
@db.sqls.must_equal []
|
|
810
812
|
end
|
|
@@ -816,7 +818,7 @@ describe "DB#create_join_table" do
|
|
|
816
818
|
end
|
|
817
819
|
|
|
818
820
|
it "should take a hash with foreign keys and table name values" do
|
|
819
|
-
@db.create_join_table(:cat_id=>:cats, :dog_id=>:dogs)
|
|
821
|
+
@db.create_join_table(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
|
|
820
822
|
@db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
|
821
823
|
end
|
|
822
824
|
|
|
@@ -864,30 +866,30 @@ describe "DB#create_join_table?" do
|
|
|
864
866
|
end
|
|
865
867
|
|
|
866
868
|
it "should create the table if it does not already exist" do
|
|
867
|
-
|
|
868
|
-
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
|
|
869
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
|
870
|
+
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
|
|
869
871
|
@db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
|
870
872
|
end
|
|
871
873
|
|
|
872
874
|
it "should not create the table if it already exists" do
|
|
873
|
-
|
|
875
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
|
874
876
|
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
|
|
875
877
|
@db.sqls.must_equal []
|
|
876
878
|
end
|
|
877
879
|
|
|
878
880
|
it "should not use IF NOT EXISTS" do
|
|
879
|
-
|
|
880
|
-
|
|
881
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
|
882
|
+
@db.define_singleton_method(:supports_create_table_if_not_exists?){true}
|
|
881
883
|
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
|
|
882
884
|
@db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
|
883
885
|
|
|
884
|
-
|
|
886
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
|
885
887
|
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
|
|
886
888
|
@db.sqls.must_equal []
|
|
887
889
|
end
|
|
888
890
|
|
|
889
891
|
it "should not use IF NOT EXISTS if no_index is used" do
|
|
890
|
-
|
|
892
|
+
@db.define_singleton_method(:supports_create_table_if_not_exists?){true}
|
|
891
893
|
@db.create_join_table?({:cat_id=>:cats, :dog_id=>:dogs}, :no_index=>true)
|
|
892
894
|
@db.sqls.must_equal ['CREATE TABLE IF NOT EXISTS cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))']
|
|
893
895
|
end
|
|
@@ -899,19 +901,19 @@ describe "DB#create_join_table!" do
|
|
|
899
901
|
end
|
|
900
902
|
|
|
901
903
|
it "should drop the table first if it already exists" do
|
|
902
|
-
|
|
903
|
-
@db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs)
|
|
904
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
|
905
|
+
@db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
|
|
904
906
|
@db.sqls.must_equal ['DROP TABLE cats_dogs', 'CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
|
905
907
|
end
|
|
906
908
|
|
|
907
909
|
it "should not drop the table if it doesn't exists" do
|
|
908
|
-
|
|
910
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
|
909
911
|
@db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs)
|
|
910
912
|
@db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
|
911
913
|
end
|
|
912
914
|
|
|
913
915
|
it "should use IF EXISTS if the database supports it" do
|
|
914
|
-
|
|
916
|
+
@db.define_singleton_method(:supports_drop_table_if_exists?){true}
|
|
915
917
|
@db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs)
|
|
916
918
|
@db.sqls.must_equal ['DROP TABLE IF EXISTS cats_dogs', 'CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
|
917
919
|
end
|
|
@@ -923,7 +925,7 @@ describe "DB#drop_join_table" do
|
|
|
923
925
|
end
|
|
924
926
|
|
|
925
927
|
it "should take a hash with foreign keys and table name values and drop the table" do
|
|
926
|
-
@db.drop_join_table(:cat_id=>:cats, :dog_id=>:dogs)
|
|
928
|
+
@db.drop_join_table(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
|
|
927
929
|
@db.sqls.must_equal ['DROP TABLE cats_dogs']
|
|
928
930
|
end
|
|
929
931
|
|
|
@@ -956,7 +958,7 @@ describe "DB#drop_table" do
|
|
|
956
958
|
end
|
|
957
959
|
|
|
958
960
|
it "should generate a DROP TABLE statement" do
|
|
959
|
-
@db.drop_table
|
|
961
|
+
@db.drop_table(:cats).must_be_nil
|
|
960
962
|
@db.sqls.must_equal ['DROP TABLE cats']
|
|
961
963
|
end
|
|
962
964
|
|
|
@@ -977,37 +979,37 @@ describe "DB#drop_table?" do
|
|
|
977
979
|
end
|
|
978
980
|
|
|
979
981
|
it "should drop the table if it exists" do
|
|
980
|
-
|
|
981
|
-
@db.drop_table?(:cats)
|
|
982
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
|
983
|
+
@db.drop_table?(:cats).must_be_nil
|
|
982
984
|
@db.sqls.must_equal ["DROP TABLE cats"]
|
|
983
985
|
end
|
|
984
986
|
|
|
985
987
|
it "should do nothing if the table does not exist" do
|
|
986
|
-
|
|
988
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
|
987
989
|
@db.drop_table?(:cats)
|
|
988
990
|
@db.sqls.must_equal []
|
|
989
991
|
end
|
|
990
992
|
|
|
991
993
|
it "should operate on multiple tables at once" do
|
|
992
|
-
|
|
994
|
+
@db.define_singleton_method(:table_exists?){|a| a == :cats}
|
|
993
995
|
@db.drop_table? :cats, :dogs
|
|
994
996
|
@db.sqls.must_equal ['DROP TABLE cats']
|
|
995
997
|
end
|
|
996
998
|
|
|
997
999
|
it "should take an options hash and support the :cascade option" do
|
|
998
|
-
|
|
1000
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
|
999
1001
|
@db.drop_table? :cats, :dogs, :cascade=>true
|
|
1000
1002
|
@db.sqls.must_equal ['DROP TABLE cats CASCADE', 'DROP TABLE dogs CASCADE']
|
|
1001
1003
|
end
|
|
1002
1004
|
|
|
1003
1005
|
it "should use IF NOT EXISTS if the database supports that" do
|
|
1004
|
-
|
|
1006
|
+
@db.define_singleton_method(:supports_drop_table_if_exists?){true}
|
|
1005
1007
|
@db.drop_table? :cats, :dogs
|
|
1006
1008
|
@db.sqls.must_equal ['DROP TABLE IF EXISTS cats', 'DROP TABLE IF EXISTS dogs']
|
|
1007
1009
|
end
|
|
1008
1010
|
|
|
1009
1011
|
it "should use IF NOT EXISTS with CASCADE if the database supports that" do
|
|
1010
|
-
|
|
1012
|
+
@db.define_singleton_method(:supports_drop_table_if_exists?){true}
|
|
1011
1013
|
@db.drop_table? :cats, :dogs, :cascade=>true
|
|
1012
1014
|
@db.sqls.must_equal ['DROP TABLE IF EXISTS cats CASCADE', 'DROP TABLE IF EXISTS dogs CASCADE']
|
|
1013
1015
|
end
|
|
@@ -1018,15 +1020,10 @@ describe "DB#alter_table" do
|
|
|
1018
1020
|
@db = Sequel.mock
|
|
1019
1021
|
end
|
|
1020
1022
|
|
|
1021
|
-
deprecated "should support an AlterTableGenerator as second argument" do
|
|
1022
|
-
@db.alter_table(:cats, Sequel::Schema::AlterTableGenerator.new(@db){set_column_allow_null :score, false})
|
|
1023
|
-
@db.sqls.must_equal ["ALTER TABLE cats ALTER COLUMN score SET NOT NULL"]
|
|
1024
|
-
end
|
|
1025
|
-
|
|
1026
1023
|
it "should allow adding not null constraint via set_column_allow_null with false argument" do
|
|
1027
1024
|
@db.alter_table(:cats) do
|
|
1028
1025
|
set_column_allow_null :score, false
|
|
1029
|
-
end
|
|
1026
|
+
end.must_be_nil
|
|
1030
1027
|
@db.sqls.must_equal ["ALTER TABLE cats ALTER COLUMN score SET NOT NULL"]
|
|
1031
1028
|
end
|
|
1032
1029
|
|
|
@@ -1128,7 +1125,7 @@ describe "DB#alter_table" do
|
|
|
1128
1125
|
end
|
|
1129
1126
|
|
|
1130
1127
|
it "should ignore errors if the database raises an error on an add_index call and the :ignore_errors option is used" do
|
|
1131
|
-
|
|
1128
|
+
@db.define_singleton_method(:execute_ddl){|*a| raise Sequel::DatabaseError}
|
|
1132
1129
|
lambda{@db.add_index(:cats, :id)}.must_raise(Sequel::DatabaseError)
|
|
1133
1130
|
@db.add_index(:cats, :id, :ignore_errors=>true)
|
|
1134
1131
|
@db.sqls.must_equal []
|
|
@@ -1207,6 +1204,20 @@ describe "DB#alter_table" do
|
|
|
1207
1204
|
@db.sqls.must_equal ["ALTER TABLE cats DROP CONSTRAINT cats_node_id_fkey", "ALTER TABLE cats DROP COLUMN node_id"]
|
|
1208
1205
|
end
|
|
1209
1206
|
|
|
1207
|
+
it "should support drop_foreign_key with :foreign_key_constraint_name option" do
|
|
1208
|
+
@db.alter_table(:cats) do
|
|
1209
|
+
drop_foreign_key :node_id, :foreign_key_constraint_name=>:foo
|
|
1210
|
+
end
|
|
1211
|
+
@db.sqls.must_equal ["ALTER TABLE cats DROP CONSTRAINT foo", "ALTER TABLE cats DROP COLUMN node_id"]
|
|
1212
|
+
end
|
|
1213
|
+
|
|
1214
|
+
it "should support drop_foreign_key with :name option" do
|
|
1215
|
+
@db.alter_table(:cats) do
|
|
1216
|
+
drop_foreign_key :node_id, :name=>:foo
|
|
1217
|
+
end
|
|
1218
|
+
@db.sqls.must_equal ["ALTER TABLE cats DROP CONSTRAINT foo", "ALTER TABLE cats DROP COLUMN node_id"]
|
|
1219
|
+
end
|
|
1220
|
+
|
|
1210
1221
|
it "should support drop_foreign_key with composite foreign keys" do
|
|
1211
1222
|
def @db.foreign_key_list(table_name)
|
|
1212
1223
|
[{:name=>:cats_node_id_prop_id_fkey, :columns=>[:node_id, :prop_id]}]
|
|
@@ -1283,7 +1294,7 @@ describe "DB#alter_table" do
|
|
|
1283
1294
|
end
|
|
1284
1295
|
|
|
1285
1296
|
it "should combine operations into a single query if the database supports it" do
|
|
1286
|
-
|
|
1297
|
+
@db.define_singleton_method(:supports_combining_alter_table_ops?){true}
|
|
1287
1298
|
@db.alter_table(:cats) do
|
|
1288
1299
|
add_column :a, Integer
|
|
1289
1300
|
drop_column :b
|
|
@@ -1298,7 +1309,7 @@ describe "DB#alter_table" do
|
|
|
1298
1309
|
end
|
|
1299
1310
|
|
|
1300
1311
|
it "should combine operations into consecutive groups of combinable operations if the database supports combining operations" do
|
|
1301
|
-
|
|
1312
|
+
@db.define_singleton_method(:supports_combining_alter_table_ops?){true}
|
|
1302
1313
|
@db.alter_table(:cats) do
|
|
1303
1314
|
add_column :a, Integer
|
|
1304
1315
|
drop_column :b
|
|
@@ -1373,7 +1384,7 @@ end
|
|
|
1373
1384
|
describe "Database#add_column" do
|
|
1374
1385
|
it "should construct proper SQL" do
|
|
1375
1386
|
db = Sequel.mock
|
|
1376
|
-
db.add_column
|
|
1387
|
+
db.add_column(:test, :name, :text, :unique => true).must_be_nil
|
|
1377
1388
|
db.sqls.must_equal ['ALTER TABLE test ADD COLUMN name text UNIQUE']
|
|
1378
1389
|
end
|
|
1379
1390
|
end
|
|
@@ -1384,7 +1395,7 @@ describe "Database#drop_column" do
|
|
|
1384
1395
|
end
|
|
1385
1396
|
|
|
1386
1397
|
it "should construct proper SQL" do
|
|
1387
|
-
@db.drop_column
|
|
1398
|
+
@db.drop_column(:test, :name).must_be_nil
|
|
1388
1399
|
@db.sqls.must_equal ['ALTER TABLE test DROP COLUMN name']
|
|
1389
1400
|
end
|
|
1390
1401
|
|
|
@@ -1400,7 +1411,7 @@ describe "Database#rename_column" do
|
|
|
1400
1411
|
end
|
|
1401
1412
|
|
|
1402
1413
|
it "should construct proper SQL" do
|
|
1403
|
-
@db.rename_column
|
|
1414
|
+
@db.rename_column(:test, :abc, :def).must_be_nil
|
|
1404
1415
|
@db.sqls.must_equal ['ALTER TABLE test RENAME COLUMN abc TO def']
|
|
1405
1416
|
end
|
|
1406
1417
|
end
|
|
@@ -1411,7 +1422,7 @@ describe "Database#set_column_type" do
|
|
|
1411
1422
|
end
|
|
1412
1423
|
|
|
1413
1424
|
it "should construct proper SQL" do
|
|
1414
|
-
@db.set_column_type
|
|
1425
|
+
@db.set_column_type(:test, :name, :integer).must_be_nil
|
|
1415
1426
|
@db.sqls.must_equal ['ALTER TABLE test ALTER COLUMN name TYPE integer']
|
|
1416
1427
|
end
|
|
1417
1428
|
end
|
|
@@ -1422,7 +1433,7 @@ describe "Database#set_column_default" do
|
|
|
1422
1433
|
end
|
|
1423
1434
|
|
|
1424
1435
|
it "should construct proper SQL" do
|
|
1425
|
-
@db.set_column_default
|
|
1436
|
+
@db.set_column_default(:test, :name, 'zyx').must_be_nil
|
|
1426
1437
|
@db.sqls.must_equal ["ALTER TABLE test ALTER COLUMN name SET DEFAULT 'zyx'"]
|
|
1427
1438
|
end
|
|
1428
1439
|
end
|
|
@@ -1433,7 +1444,7 @@ describe "Database#add_index" do
|
|
|
1433
1444
|
end
|
|
1434
1445
|
|
|
1435
1446
|
it "should construct proper SQL" do
|
|
1436
|
-
@db.add_index
|
|
1447
|
+
@db.add_index(:test, :name, :unique => true).must_be_nil
|
|
1437
1448
|
@db.sqls.must_equal ['CREATE UNIQUE INDEX test_name_index ON test (name)']
|
|
1438
1449
|
end
|
|
1439
1450
|
|
|
@@ -1449,7 +1460,7 @@ describe "Database#drop_index" do
|
|
|
1449
1460
|
end
|
|
1450
1461
|
|
|
1451
1462
|
it "should construct proper SQL" do
|
|
1452
|
-
@db.drop_index
|
|
1463
|
+
@db.drop_index(:test, :name).must_be_nil
|
|
1453
1464
|
@db.sqls.must_equal ['DROP INDEX test_name_index']
|
|
1454
1465
|
end
|
|
1455
1466
|
|
|
@@ -1461,7 +1472,7 @@ describe "Database#drop_table" do
|
|
|
1461
1472
|
end
|
|
1462
1473
|
|
|
1463
1474
|
it "should construct proper SQL" do
|
|
1464
|
-
@db.drop_table
|
|
1475
|
+
@db.drop_table(:test).must_be_nil
|
|
1465
1476
|
@db.sqls.must_equal ['DROP TABLE test']
|
|
1466
1477
|
end
|
|
1467
1478
|
|
|
@@ -1477,7 +1488,7 @@ describe "Database#rename_table" do
|
|
|
1477
1488
|
end
|
|
1478
1489
|
|
|
1479
1490
|
it "should construct proper SQL" do
|
|
1480
|
-
@db.rename_table
|
|
1491
|
+
@db.rename_table(:abc, :xyz).must_be_nil
|
|
1481
1492
|
@db.sqls.must_equal ['ALTER TABLE abc RENAME TO xyz']
|
|
1482
1493
|
end
|
|
1483
1494
|
end
|
|
@@ -1488,7 +1499,7 @@ describe "Database#create_view" do
|
|
|
1488
1499
|
end
|
|
1489
1500
|
|
|
1490
1501
|
it "should construct proper SQL with raw SQL" do
|
|
1491
|
-
@db.create_view
|
|
1502
|
+
@db.create_view(:test, "SELECT * FROM xyz").must_be_nil
|
|
1492
1503
|
@db.sqls.must_equal ['CREATE VIEW test AS SELECT * FROM xyz']
|
|
1493
1504
|
@db.create_view Sequel.identifier(:test), "SELECT * FROM xyz"
|
|
1494
1505
|
@db.sqls.must_equal ['CREATE VIEW test AS SELECT * FROM xyz']
|
|
@@ -1540,7 +1551,7 @@ describe "Database#drop_view" do
|
|
|
1540
1551
|
end
|
|
1541
1552
|
|
|
1542
1553
|
with_symbol_splitting "should construct proper SQL for splittable symbols" do
|
|
1543
|
-
@db.drop_view
|
|
1554
|
+
@db.drop_view(:sch__test).must_be_nil
|
|
1544
1555
|
@db.sqls.must_equal ['DROP VIEW sch.test']
|
|
1545
1556
|
end
|
|
1546
1557
|
|
|
@@ -1580,21 +1591,21 @@ describe "Schema Parser" do
|
|
|
1580
1591
|
end
|
|
1581
1592
|
|
|
1582
1593
|
it "should raise an error if there are no columns" do
|
|
1583
|
-
|
|
1594
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
|
1584
1595
|
[]
|
|
1585
1596
|
end
|
|
1586
1597
|
proc{@db.schema(:x)}.must_raise(Sequel::Error)
|
|
1587
1598
|
end
|
|
1588
1599
|
|
|
1589
1600
|
it "should cache data by default" do
|
|
1590
|
-
|
|
1601
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
|
1591
1602
|
[[:a, {}]]
|
|
1592
1603
|
end
|
|
1593
1604
|
@db.schema(:x).must_be_same_as(@db.schema(:x))
|
|
1594
1605
|
end
|
|
1595
1606
|
|
|
1596
1607
|
it "should not cache data if :reload=>true is given" do
|
|
1597
|
-
|
|
1608
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
|
1598
1609
|
[[:a, {}]]
|
|
1599
1610
|
end
|
|
1600
1611
|
@db.schema(:x).wont_be_same_as(@db.schema(:x, :reload=>true))
|
|
@@ -1602,7 +1613,7 @@ describe "Schema Parser" do
|
|
|
1602
1613
|
|
|
1603
1614
|
it "should not cache schema metadata if cache_schema is false" do
|
|
1604
1615
|
@db.cache_schema = false
|
|
1605
|
-
|
|
1616
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
|
1606
1617
|
[[:a, {}]]
|
|
1607
1618
|
end
|
|
1608
1619
|
@db.schema(:x).wont_be_same_as(@db.schema(:x))
|
|
@@ -1610,7 +1621,7 @@ describe "Schema Parser" do
|
|
|
1610
1621
|
|
|
1611
1622
|
it "should provide options if given a table name" do
|
|
1612
1623
|
c = nil
|
|
1613
|
-
|
|
1624
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
|
1614
1625
|
c = [t, opts]
|
|
1615
1626
|
[[:a, {:db_type=>t.to_s}]]
|
|
1616
1627
|
end
|
|
@@ -1625,7 +1636,7 @@ describe "Schema Parser" do
|
|
|
1625
1636
|
|
|
1626
1637
|
with_symbol_splitting "should provide options if given a table name with splittable symbols" do
|
|
1627
1638
|
c = nil
|
|
1628
|
-
|
|
1639
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
|
1629
1640
|
c = [t, opts]
|
|
1630
1641
|
[[:a, {:db_type=>t.to_s}]]
|
|
1631
1642
|
end
|
|
@@ -1639,7 +1650,7 @@ describe "Schema Parser" do
|
|
|
1639
1650
|
it "should parse the schema correctly for a single table" do
|
|
1640
1651
|
sqls = @sqls
|
|
1641
1652
|
proc{@db.schema(:x)}.must_raise(Sequel::Error)
|
|
1642
|
-
|
|
1653
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
|
1643
1654
|
sqls << t
|
|
1644
1655
|
[[:a, {:db_type=>t.to_s}]]
|
|
1645
1656
|
end
|
|
@@ -1652,33 +1663,33 @@ describe "Schema Parser" do
|
|
|
1652
1663
|
end
|
|
1653
1664
|
|
|
1654
1665
|
it "should set :auto_increment to true by default if unset and a single integer primary key is used" do
|
|
1655
|
-
|
|
1666
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer'}]]}
|
|
1656
1667
|
@db.schema(:x).first.last[:auto_increment].must_equal true
|
|
1657
1668
|
end
|
|
1658
1669
|
|
|
1659
1670
|
it "should not set :auto_increment if already set" do
|
|
1660
|
-
|
|
1671
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer', :auto_increment=>false}]]}
|
|
1661
1672
|
@db.schema(:x).first.last[:auto_increment].must_equal false
|
|
1662
1673
|
end
|
|
1663
1674
|
|
|
1664
1675
|
it "should set :auto_increment to false by default if unset and a single nonintegery primary key is used" do
|
|
1665
|
-
|
|
1676
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'varchar'}]]}
|
|
1666
1677
|
@db.schema(:x).first.last[:auto_increment].must_equal false
|
|
1667
1678
|
end
|
|
1668
1679
|
|
|
1669
1680
|
it "should set :auto_increment to false by default if unset and a composite primary key" do
|
|
1670
|
-
|
|
1681
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer'}], [:b, {:primary_key=>true, :db_type=>'integer'}]]}
|
|
1671
1682
|
@db.schema(:x).first.last[:auto_increment].must_equal false
|
|
1672
1683
|
@db.schema(:x).last.last[:auto_increment].must_equal false
|
|
1673
1684
|
end
|
|
1674
1685
|
|
|
1675
1686
|
it "should set :auto_increment to true by default if set and not the first column" do
|
|
1676
|
-
|
|
1687
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:b, {}], [:a, {:primary_key=>true, :db_type=>'integer'}]]}
|
|
1677
1688
|
@db.schema(:x).last.last[:auto_increment].must_equal true
|
|
1678
1689
|
end
|
|
1679
1690
|
|
|
1680
1691
|
it "should convert various types of table name arguments" do
|
|
1681
|
-
|
|
1692
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
|
1682
1693
|
[[t, opts]]
|
|
1683
1694
|
end
|
|
1684
1695
|
s1 = @db.schema(:x)
|
|
@@ -1703,7 +1714,7 @@ describe "Schema Parser" do
|
|
|
1703
1714
|
end
|
|
1704
1715
|
|
|
1705
1716
|
with_symbol_splitting "should convert splittable symbol arguments" do
|
|
1706
|
-
|
|
1717
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
|
1707
1718
|
[[t, opts]]
|
|
1708
1719
|
end
|
|
1709
1720
|
s1 = @db.schema(:x)
|
data/spec/core/spec_helper.rb
CHANGED
|
@@ -1,41 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
require "#{File.dirname(File.dirname(__FILE__))}/sequel_warning.rb"
|
|
1
|
+
require_relative "../sequel_warning"
|
|
3
2
|
|
|
4
3
|
if ENV['COVERAGE']
|
|
5
|
-
|
|
4
|
+
require_relative "../sequel_coverage"
|
|
6
5
|
SimpleCov.sequel_coverage(:filter=>%r{lib/sequel/(\w+\.rb|(dataset|database|model|connection_pool)/\w+\.rb|adapters/mock\.rb)\z})
|
|
7
6
|
end
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
require 'sequel/core'
|
|
12
|
-
end
|
|
8
|
+
$:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
|
|
9
|
+
require_relative "../../lib/sequel/core"
|
|
13
10
|
|
|
14
11
|
gem 'minitest'
|
|
15
12
|
require 'minitest/autorun'
|
|
16
13
|
require 'minitest/hooks/default'
|
|
17
14
|
require 'minitest/shared_description'
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class Minitest::HooksSpec
|
|
22
|
-
# SEQUEL5: Replace with define_singleton_method
|
|
23
|
-
def meta_def(obj, name, &block)
|
|
24
|
-
(class << obj; self end).send(:define_method, name, &block)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
16
|
+
require_relative '../deprecation_helper'
|
|
27
17
|
|
|
28
18
|
if ENV['SEQUEL_COLUMNS_INTROSPECTION']
|
|
29
19
|
Sequel.extension :columns_introspection
|
|
30
20
|
Sequel::Database.extension :columns_introspection
|
|
31
|
-
|
|
21
|
+
require_relative '../../lib/sequel/adapters/mock'
|
|
32
22
|
Sequel::Mock::Dataset.send(:include, Sequel::ColumnsIntrospection)
|
|
33
23
|
end
|
|
34
|
-
|
|
35
|
-
# SEQUEL5: Remove
|
|
36
|
-
output = Sequel::Deprecation.output
|
|
37
|
-
Sequel::Deprecation.output = nil
|
|
38
|
-
Sequel.quote_identifiers = false
|
|
39
|
-
Sequel.identifier_input_method = nil
|
|
40
|
-
Sequel.identifier_output_method = nil
|
|
41
|
-
Sequel::Deprecation.output = output
|
data/spec/core/version_spec.rb
CHANGED