sequel 4.49.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +70 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +3 -5
- data/doc/advanced_associations.rdoc +86 -163
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/schema_modification.rdoc +63 -60
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +3 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel.rb +1 -1
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc.rb +13 -73
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +4 -25
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/oracle.rb +7 -13
- data/lib/sequel/adapters/postgres.rb +13 -57
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +23 -224
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +44 -259
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +12 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool.rb +26 -28
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +23 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +89 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/dataset/actions.rb +53 -107
- data/lib/sequel/dataset/dataset_module.rb +3 -15
- data/lib/sequel/dataset/features.rb +30 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +71 -155
- data/lib/sequel/dataset/sql.rb +30 -225
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +23 -40
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +2 -15
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/model/associations.rb +128 -131
- data/lib/sequel/model/base.rb +171 -711
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -22
- data/lib/sequel/version.rb +2 -2
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +101 -480
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +312 -565
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +64 -244
- data/spec/core/dataset_spec.rb +81 -415
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +176 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +74 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +4 -59
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +1 -7
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +1 -1
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +2 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +1 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +4 -1
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +23 -32
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +1 -1
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +1 -1
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +1 -1
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +2 -14
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +3 -3
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +1 -1
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -12
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +3 -3
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +5 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +6 -22
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +6 -6
- data/spec/integration/spec_helper.rb +13 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +18 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +17 -11
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +15 -320
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +29 -121
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +8 -64
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -7,12 +7,8 @@ module Sequel
|
|
7
7
|
# This methods generally execute SQL code on the database server.
|
8
8
|
# ---------------------
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
CURRENT_TIMESTAMP_RE = /now|today|CURRENT|getdate|\ADate\(\)\z/i
|
13
|
-
Sequel::Deprecation.deprecate_constant(self, :CURRENT_TIMESTAMP_RE)
|
14
|
-
COLUMN_SCHEMA_DATETIME_TYPES = [:date, :datetime]#.freeze # SEQUEL5
|
15
|
-
COLUMN_SCHEMA_STRING_TYPES = [:string, :blob, :date, :datetime, :time, :enum, :set, :interval]#.freeze # SEQUEL5
|
10
|
+
COLUMN_SCHEMA_DATETIME_TYPES = [:date, :datetime].freeze
|
11
|
+
COLUMN_SCHEMA_STRING_TYPES = [:string, :blob, :date, :datetime, :time, :enum, :set, :interval].freeze
|
16
12
|
|
17
13
|
# The prepared statement object hash for this database, keyed by name symbol
|
18
14
|
attr_reader :prepared_statements
|
@@ -34,7 +30,7 @@ module Sequel
|
|
34
30
|
# Call the prepared statement with the given name with the given hash
|
35
31
|
# of arguments.
|
36
32
|
#
|
37
|
-
# DB[:items].where(:
|
33
|
+
# DB[:items].where(id: 1).prepare(:first, :sa)
|
38
34
|
# DB.call(:sa) # SELECT * FROM items WHERE id = 1
|
39
35
|
def call(ps_name, hash={}, &block)
|
40
36
|
prepared_statement(ps_name).call(hash, &block)
|
@@ -47,7 +43,7 @@ module Sequel
|
|
47
43
|
execute_dui(sql, opts, &block)
|
48
44
|
end
|
49
45
|
|
50
|
-
# Method that should be used when issuing a DELETE
|
46
|
+
# Method that should be used when issuing a DELETE or UPDATE
|
51
47
|
# statement. By default, calls execute.
|
52
48
|
# This method should not be called directly by user code.
|
53
49
|
def execute_dui(sql, opts=OPTS, &block)
|
@@ -61,11 +57,11 @@ module Sequel
|
|
61
57
|
execute_dui(sql, opts, &block)
|
62
58
|
end
|
63
59
|
|
64
|
-
# Returns a single value from the database,
|
60
|
+
# Returns a single value from the database, see Dataset#get.
|
65
61
|
#
|
66
62
|
# DB.get(1) # SELECT 1
|
67
63
|
# # => 1
|
68
|
-
# DB.get{server_version
|
64
|
+
# DB.get{server_version.function} # SELECT server_version()
|
69
65
|
def get(*args, &block)
|
70
66
|
@default_dataset.get(*args, &block)
|
71
67
|
end
|
@@ -310,9 +306,8 @@ module Sequel
|
|
310
306
|
|
311
307
|
# Remove the cached schema for the given schema name
|
312
308
|
def remove_cached_schema(table)
|
313
|
-
|
314
|
-
|
315
|
-
#Sequel.synchronize{cache.clear}
|
309
|
+
cache = @default_dataset.send(:cache)
|
310
|
+
Sequel.synchronize{cache.clear}
|
316
311
|
k = quote_schema_table(table)
|
317
312
|
Sequel.synchronize{@schemas.delete(k)}
|
318
313
|
end
|
@@ -20,13 +20,13 @@ module Sequel
|
|
20
20
|
# Classes specifying generic types that Sequel will convert to database-specific types.
|
21
21
|
GENERIC_TYPES=%w'String Integer Float Numeric BigDecimal Date DateTime Time File TrueClass FalseClass'.freeze
|
22
22
|
|
23
|
-
#
|
23
|
+
# Column hashes created by this generator
|
24
24
|
attr_reader :columns
|
25
25
|
|
26
|
-
#
|
26
|
+
# Constraint hashes created by this generator
|
27
27
|
attr_reader :constraints
|
28
28
|
|
29
|
-
#
|
29
|
+
# Index hashes created by this generator
|
30
30
|
attr_reader :indexes
|
31
31
|
|
32
32
|
# Set the database in which to create the table, and evaluate the block
|
@@ -37,7 +37,7 @@ module Sequel
|
|
37
37
|
@indexes = []
|
38
38
|
@constraints = []
|
39
39
|
@primary_key = nil
|
40
|
-
|
40
|
+
instance_exec(&block) if block
|
41
41
|
@columns.unshift(@primary_key) if @primary_key && !has_column?(primary_key_name)
|
42
42
|
end
|
43
43
|
|
@@ -57,30 +57,35 @@ module Sequel
|
|
57
57
|
# with that type as a constant. Types given should either already
|
58
58
|
# be constants/classes or a capitalized string/symbol with the same name
|
59
59
|
# as a constant/class.
|
60
|
-
#
|
61
|
-
# Do not call this method with untrusted input, as that can result in
|
62
|
-
# arbitrary code execution.
|
63
60
|
def self.add_type_method(*types)
|
64
61
|
types.each do |type|
|
65
|
-
|
62
|
+
case type
|
63
|
+
when Symbol, String
|
64
|
+
method = type
|
65
|
+
type = Object.const_get(type)
|
66
|
+
else
|
67
|
+
method = type.to_s
|
68
|
+
end
|
69
|
+
|
70
|
+
define_method(method){|name, opts={}| column(name, type, opts)}
|
66
71
|
end
|
72
|
+
nil
|
67
73
|
end
|
68
74
|
|
69
|
-
# Add an unnamed constraint
|
75
|
+
# Add an unnamed constraint, specified by the given block
|
70
76
|
# or args:
|
71
77
|
#
|
72
|
-
# check(:
|
73
|
-
# check{num > 5}
|
78
|
+
# check(num: 1..5) # CHECK num >= 1 AND num <= 5
|
79
|
+
# check{num > 5} # CHECK num > 5
|
74
80
|
def check(*args, &block)
|
75
81
|
constraint(nil, *args, &block)
|
76
82
|
end
|
77
83
|
|
78
|
-
# Add a column with the given name, type, and opts
|
79
|
-
#
|
84
|
+
# Add a column with the given name, type, and opts #
|
80
85
|
# column :num, :integer
|
81
86
|
# # num INTEGER
|
82
87
|
#
|
83
|
-
# column :name, String, :
|
88
|
+
# column :name, String, null: false, default: 'a'
|
84
89
|
# # name varchar(255) NOT NULL DEFAULT 'a'
|
85
90
|
#
|
86
91
|
# inet :ip
|
@@ -111,14 +116,14 @@ module Sequel
|
|
111
116
|
# references the primary key of the associated table, except if you are
|
112
117
|
# using MySQL.
|
113
118
|
# :null :: Mark the column as allowing NULL values (if true),
|
114
|
-
# or not allowing NULL values (if false).
|
115
|
-
# to whatever the database default is.
|
119
|
+
# or not allowing NULL values (if false). The default is to allow NULL values.
|
116
120
|
# :on_delete :: Specify the behavior of this column when being deleted
|
117
121
|
# (:restrict, :cascade, :set_null, :set_default, :no_action).
|
118
122
|
# :on_update :: Specify the behavior of this column when being updated
|
119
123
|
# (:restrict, :cascade, :set_null, :set_default, :no_action).
|
120
|
-
# :primary_key :: Make the column as a single primary key column. This should
|
121
|
-
# be used if you have a single, nonautoincrementing primary key column
|
124
|
+
# :primary_key :: Make the column as a single primary key column. This should not
|
125
|
+
# be used if you have a single, nonautoincrementing primary key column
|
126
|
+
# (use the primary_key method in that case).
|
122
127
|
# :primary_key_constraint_name :: The name to give the primary key constraint
|
123
128
|
# :type :: Overrides the type given as the argument. Generally not used by column
|
124
129
|
# itself, but can be passed as an option to other methods that call column.
|
@@ -130,28 +135,30 @@ module Sequel
|
|
130
135
|
if index_opts = opts[:index]
|
131
136
|
index(name, index_opts.is_a?(Hash) ? index_opts : {})
|
132
137
|
end
|
138
|
+
nil
|
133
139
|
end
|
134
140
|
|
135
|
-
# Adds a named constraint (or unnamed if name is nil)
|
141
|
+
# Adds a named constraint (or unnamed if name is nil),
|
136
142
|
# with the given block or args. To provide options for the constraint, pass
|
137
143
|
# a hash as the first argument.
|
138
144
|
#
|
139
|
-
# constraint(:blah, :
|
145
|
+
# constraint(:blah, num: 1..5)
|
140
146
|
# # CONSTRAINT blah CHECK num >= 1 AND num <= 5
|
141
|
-
# constraint({:
|
147
|
+
# constraint({name: :blah, deferrable: true}, num: 1..5)
|
142
148
|
# # CONSTRAINT blah CHECK num >= 1 AND num <= 5 DEFERRABLE INITIALLY DEFERRED
|
143
149
|
def constraint(name, *args, &block)
|
144
150
|
opts = name.is_a?(Hash) ? name : {:name=>name}
|
145
151
|
constraints << opts.merge(:type=>:check, :check=>block || args)
|
152
|
+
nil
|
146
153
|
end
|
147
154
|
|
148
|
-
# Add a foreign key in the table that references another table
|
155
|
+
# Add a foreign key in the table that references another table. See column
|
149
156
|
# for available options.
|
150
157
|
#
|
151
158
|
# foreign_key(:artist_id) # artist_id INTEGER
|
152
159
|
# foreign_key(:artist_id, :artists) # artist_id INTEGER REFERENCES artists
|
153
|
-
# foreign_key(:artist_id, :artists, :
|
154
|
-
# foreign_key(:artist_id, :artists, :
|
160
|
+
# foreign_key(:artist_id, :artists, key: :id) # artist_id INTEGER REFERENCES artists(id)
|
161
|
+
# foreign_key(:artist_id, :artists, type: String) # artist_id varchar(255) REFERENCES artists(id)
|
155
162
|
#
|
156
163
|
# Additional Options:
|
157
164
|
#
|
@@ -161,7 +168,7 @@ module Sequel
|
|
161
168
|
# composite foreign key), you can provide an array of columns as the first argument, and
|
162
169
|
# you can provide the :name option to name the constraint:
|
163
170
|
#
|
164
|
-
# foreign_key([:artist_name, :artist_location], :artists, :
|
171
|
+
# foreign_key([:artist_name, :artist_location], :artists, name: :artist_fk)
|
165
172
|
# # ADD CONSTRAINT artist_fk FOREIGN KEY (artist_name, artist_location) REFERENCES artists
|
166
173
|
def foreign_key(name, table=nil, opts = OPTS)
|
167
174
|
opts = case table
|
@@ -176,7 +183,7 @@ module Sequel
|
|
176
183
|
column(name, Integer, opts)
|
177
184
|
end
|
178
185
|
|
179
|
-
# Add a full text index on the given columns
|
186
|
+
# Add a full text index on the given columns.
|
180
187
|
#
|
181
188
|
# PostgreSQL specific options:
|
182
189
|
# :index_type :: Can be set to :gist to use a GIST index instead of the
|
@@ -189,12 +196,12 @@ module Sequel
|
|
189
196
|
index(columns, opts.merge(:type => :full_text))
|
190
197
|
end
|
191
198
|
|
192
|
-
# True if the
|
199
|
+
# True if the generator includes the creation of a column with the given name.
|
193
200
|
def has_column?(name)
|
194
201
|
columns.any?{|c| c[:name] == name}
|
195
202
|
end
|
196
203
|
|
197
|
-
# Add an index on the given column(s) with the given options
|
204
|
+
# Add an index on the given column(s) with the given options.
|
198
205
|
# General options:
|
199
206
|
#
|
200
207
|
# :name :: The name to use for the index. If not given, a default name
|
@@ -222,9 +229,10 @@ module Sequel
|
|
222
229
|
# # CREATE INDEX table_artist_id_name_index ON table (artist_id, name)
|
223
230
|
def index(columns, opts = OPTS)
|
224
231
|
indexes << {:columns => Array(columns)}.merge!(opts)
|
232
|
+
nil
|
225
233
|
end
|
226
234
|
|
227
|
-
# Add a column with the given type, name, and opts
|
235
|
+
# Add a column with the given type, name, and opts. See +column+ for available
|
228
236
|
# options.
|
229
237
|
def method_missing(type, name = nil, opts = OPTS)
|
230
238
|
name ? column(name, type, opts) : super
|
@@ -235,7 +243,7 @@ module Sequel
|
|
235
243
|
true
|
236
244
|
end
|
237
245
|
|
238
|
-
# Adds an autoincrementing primary key column or a primary key constraint
|
246
|
+
# Adds an autoincrementing primary key column or a primary key constraint.
|
239
247
|
# To just create a constraint, the first argument should be an array of column symbols
|
240
248
|
# specifying the primary key columns. To create an autoincrementing primary key
|
241
249
|
# column, a single symbol can be used. In both cases, an options hash can be used
|
@@ -243,7 +251,7 @@ module Sequel
|
|
243
251
|
#
|
244
252
|
# If you want to create a primary key column that is not autoincrementing, you
|
245
253
|
# should not use this method. Instead, you should use the regular +column+ method
|
246
|
-
# with a <tt
|
254
|
+
# with a <tt>primary_key: true</tt> option.
|
247
255
|
#
|
248
256
|
# If an array of column symbols is used, you can specify the :name option
|
249
257
|
# to name the constraint.
|
@@ -256,8 +264,8 @@ module Sequel
|
|
256
264
|
# Examples:
|
257
265
|
# primary_key(:id)
|
258
266
|
# primary_key(:id, Bigint)
|
259
|
-
# primary_key(:id, Bigint, :
|
260
|
-
# primary_key([:street_number, :house_number], :
|
267
|
+
# primary_key(:id, Bigint, keep_order: true)
|
268
|
+
# primary_key([:street_number, :house_number], name: :some constraint_name)
|
261
269
|
def primary_key(name, *args)
|
262
270
|
return composite_primary_key(name, *args) if name.is_a?(Array)
|
263
271
|
column = @db.serial_primary_key_options.merge({:name => name})
|
@@ -276,6 +284,7 @@ module Sequel
|
|
276
284
|
else
|
277
285
|
columns.unshift(column)
|
278
286
|
end
|
287
|
+
nil
|
279
288
|
end
|
280
289
|
|
281
290
|
# The name of the primary key for this generator, if it has a primary key.
|
@@ -283,12 +292,12 @@ module Sequel
|
|
283
292
|
@primary_key[:name] if @primary_key
|
284
293
|
end
|
285
294
|
|
286
|
-
# Add a spatial index on the given columns
|
295
|
+
# Add a spatial index on the given columns.
|
287
296
|
def spatial_index(columns, opts = OPTS)
|
288
297
|
index(columns, opts.merge(:type => :spatial))
|
289
298
|
end
|
290
299
|
|
291
|
-
# Add a unique constraint on the given columns
|
300
|
+
# Add a unique constraint on the given columns.
|
292
301
|
#
|
293
302
|
# unique(:name) # UNIQUE (name)
|
294
303
|
#
|
@@ -296,6 +305,7 @@ module Sequel
|
|
296
305
|
# to name the constraint.
|
297
306
|
def unique(columns, opts = OPTS)
|
298
307
|
constraints << {:type => :unique, :columns => Array(columns)}.merge!(opts)
|
308
|
+
nil
|
299
309
|
end
|
300
310
|
|
301
311
|
private
|
@@ -304,20 +314,18 @@ module Sequel
|
|
304
314
|
def composite_primary_key(columns, *args)
|
305
315
|
opts = args.pop || {}
|
306
316
|
constraints << {:type => :primary_key, :columns => columns}.merge!(opts)
|
317
|
+
nil
|
307
318
|
end
|
308
319
|
|
309
320
|
# Add a composite foreign key constraint
|
310
321
|
def composite_foreign_key(columns, opts)
|
311
322
|
constraints << {:type => :foreign_key, :columns => columns}.merge!(opts)
|
323
|
+
nil
|
312
324
|
end
|
313
325
|
|
314
326
|
add_type_method(*GENERIC_TYPES)
|
315
327
|
end
|
316
328
|
|
317
|
-
# Alias of CreateTableGenerator for backwards compatibility.
|
318
|
-
Generator = CreateTableGenerator
|
319
|
-
Sequel::Deprecation.deprecate_constant(self, :Generator)
|
320
|
-
|
321
329
|
# Schema::AlterTableGenerator is an internal class that the user is not expected
|
322
330
|
# to instantiate directly. Instances are created by Database#alter_table.
|
323
331
|
# It is used to specify table alteration parameters. It takes a Database
|
@@ -328,18 +336,18 @@ module Sequel
|
|
328
336
|
# For more information on Sequel's support for schema modification, see
|
329
337
|
# the {"Schema Modification" guide}[link:files/doc/schema_modification_rdoc.html].
|
330
338
|
class AlterTableGenerator
|
331
|
-
# An array of
|
339
|
+
# An array of operations to perform
|
332
340
|
attr_reader :operations
|
333
341
|
|
334
|
-
# Set the Database object to which to apply the
|
342
|
+
# Set the Database object to which to apply the changes, and evaluate the
|
335
343
|
# block in the context of this object.
|
336
344
|
def initialize(db, &block)
|
337
345
|
@db = db
|
338
346
|
@operations = []
|
339
|
-
|
347
|
+
instance_exec(&block) if block
|
340
348
|
end
|
341
349
|
|
342
|
-
# Add a column with the given name, type, and opts
|
350
|
+
# Add a column with the given name, type, and opts.
|
343
351
|
# See CreateTableGenerator#column for the available options.
|
344
352
|
#
|
345
353
|
# add_column(:name, String) # ADD COLUMN name varchar(255)
|
@@ -354,32 +362,35 @@ module Sequel
|
|
354
362
|
# :first :: Create this new column before all other existing columns
|
355
363
|
def add_column(name, type, opts = OPTS)
|
356
364
|
@operations << {:op => :add_column, :name => name, :type => type}.merge!(opts)
|
365
|
+
nil
|
357
366
|
end
|
358
367
|
|
359
|
-
# Add a constraint with the given name and args
|
368
|
+
# Add a constraint with the given name and args.
|
360
369
|
# See CreateTableGenerator#constraint.
|
361
370
|
#
|
362
371
|
# add_constraint(:valid_name, Sequel.like(:name, 'A%'))
|
363
372
|
# # ADD CONSTRAINT valid_name CHECK (name LIKE 'A%' ESCAPE '\')
|
364
|
-
# add_constraint({:
|
373
|
+
# add_constraint({name: :valid_name, deferrable: true}, Sequel.like(:name, 'A%'))
|
365
374
|
# # ADD CONSTRAINT valid_name CHECK (name LIKE 'A%' ESCAPE '\') DEFERRABLE INITIALLY DEFERRED
|
366
375
|
def add_constraint(name, *args, &block)
|
367
376
|
opts = name.is_a?(Hash) ? name : {:name=>name}
|
368
377
|
@operations << opts.merge(:op=>:add_constraint, :type=>:check, :check=>block || args)
|
378
|
+
nil
|
369
379
|
end
|
370
380
|
|
371
381
|
# Add a unique constraint to the given column(s)
|
372
382
|
#
|
373
383
|
# add_unique_constraint(:name) # ADD UNIQUE (name)
|
374
|
-
# add_unique_constraint(:name, :
|
384
|
+
# add_unique_constraint(:name, name: :unique_name) # ADD CONSTRAINT unique_name UNIQUE (name)
|
375
385
|
#
|
376
386
|
# Supports the same :deferrable option as CreateTableGenerator#column.
|
377
387
|
def add_unique_constraint(columns, opts = OPTS)
|
378
388
|
@operations << {:op => :add_constraint, :type => :unique, :columns => Array(columns)}.merge!(opts)
|
389
|
+
nil
|
379
390
|
end
|
380
391
|
|
381
|
-
# Add a foreign key with the given name and referencing the given table
|
382
|
-
#
|
392
|
+
# Add a foreign key with the given name and referencing the given table.
|
393
|
+
# See CreateTableGenerator#column for the available options.
|
383
394
|
#
|
384
395
|
# You can also pass an array of column names for creating composite foreign
|
385
396
|
# keys. In this case, it will assume the columns exist and will only add
|
@@ -405,13 +416,13 @@ module Sequel
|
|
405
416
|
add_column(name, Integer, {:table=>table}.merge!(opts))
|
406
417
|
end
|
407
418
|
|
408
|
-
# Add a full text index on the given columns
|
419
|
+
# Add a full text index on the given columns.
|
409
420
|
# See CreateTableGenerator#index for available options.
|
410
421
|
def add_full_text_index(columns, opts = OPTS)
|
411
422
|
add_index(columns, {:type=>:full_text}.merge!(opts))
|
412
423
|
end
|
413
424
|
|
414
|
-
# Add an index on the given columns
|
425
|
+
# Add an index on the given columns. See
|
415
426
|
# CreateTableGenerator#index for available options.
|
416
427
|
#
|
417
428
|
# add_index(:artist_id) # CREATE INDEX table_artist_id_index ON table (artist_id)
|
@@ -432,6 +443,7 @@ module Sequel
|
|
432
443
|
# :opclass :: Set an opclass to use for all columns (per-column opclasses require
|
433
444
|
# custom SQL).
|
434
445
|
# :type :: Set the index type (e.g. full_text, spatial, hash, gin, gist, btree).
|
446
|
+
# :if_not_exists :: Only create the index if an index of the same name doesn't already exists
|
435
447
|
#
|
436
448
|
# MySQL specific options:
|
437
449
|
#
|
@@ -444,9 +456,10 @@ module Sequel
|
|
444
456
|
# :type :: clustered uses a clustered index, full_text uses a full text index.
|
445
457
|
def add_index(columns, opts = OPTS)
|
446
458
|
@operations << {:op => :add_index, :columns => Array(columns)}.merge!(opts)
|
459
|
+
nil
|
447
460
|
end
|
448
461
|
|
449
|
-
# Add a primary key
|
462
|
+
# Add a primary key. See CreateTableGenerator#column
|
450
463
|
# for the available options. Like +add_foreign_key+, if you specify
|
451
464
|
# the column name as an array, it just creates a constraint:
|
452
465
|
#
|
@@ -458,16 +471,16 @@ module Sequel
|
|
458
471
|
add_column(name, opts.delete(:type), opts)
|
459
472
|
end
|
460
473
|
|
461
|
-
# Add a spatial index on the given columns
|
474
|
+
# Add a spatial index on the given columns.
|
462
475
|
# See CreateTableGenerator#index for available options.
|
463
476
|
def add_spatial_index(columns, opts = OPTS)
|
464
477
|
add_index(columns, {:type=>:spatial}.merge!(opts))
|
465
478
|
end
|
466
479
|
|
467
|
-
# Remove a column from the
|
480
|
+
# Remove a column from the table.
|
468
481
|
#
|
469
482
|
# drop_column(:artist_id) # DROP COLUMN artist_id
|
470
|
-
# drop_column(:artist_id, :
|
483
|
+
# drop_column(:artist_id, cascade: true) # DROP COLUMN artist_id CASCADE
|
471
484
|
#
|
472
485
|
# Options:
|
473
486
|
#
|
@@ -479,20 +492,24 @@ module Sequel
|
|
479
492
|
# exist.
|
480
493
|
def drop_column(name, opts=OPTS)
|
481
494
|
@operations << {:op => :drop_column, :name => name}.merge!(opts)
|
495
|
+
nil
|
482
496
|
end
|
483
497
|
|
484
|
-
# Remove a constraint from the
|
498
|
+
# Remove a constraint from the table:
|
499
|
+
#
|
500
|
+
# drop_constraint(:unique_name) # DROP CONSTRAINT unique_name
|
501
|
+
# drop_constraint(:unique_name, cascade: true) # DROP CONSTRAINT unique_name CASCADE
|
502
|
+
#
|
503
|
+
# MySQL/SQLite specific options:
|
485
504
|
#
|
486
505
|
# :type :: Set the type of constraint to drop, either :primary_key, :foreign_key,
|
487
506
|
# or :unique.
|
488
|
-
#
|
489
|
-
# drop_constraint(:unique_name) # DROP CONSTRAINT unique_name
|
490
|
-
# drop_constraint(:unique_name, :cascade=>true) # DROP CONSTRAINT unique_name CASCADE
|
491
507
|
def drop_constraint(name, opts=OPTS)
|
492
508
|
@operations << {:op => :drop_constraint, :name => name}.merge!(opts)
|
509
|
+
nil
|
493
510
|
end
|
494
511
|
|
495
|
-
# Remove a foreign key and the associated column from the
|
512
|
+
# Remove a foreign key and the associated column from the table. General options:
|
496
513
|
#
|
497
514
|
# :name :: The name of the constraint to drop. If not given, uses the same name
|
498
515
|
# that would be used by add_foreign_key with the same columns.
|
@@ -507,7 +524,7 @@ module Sequel
|
|
507
524
|
drop_column(name) unless name.is_a?(Array)
|
508
525
|
end
|
509
526
|
|
510
|
-
# Remove an index from the
|
527
|
+
# Remove an index from the table. General options:
|
511
528
|
#
|
512
529
|
# :name :: The name of the index to drop. If not given, uses the same name
|
513
530
|
# that would be used by add_index with the same columns.
|
@@ -521,19 +538,21 @@ module Sequel
|
|
521
538
|
#
|
522
539
|
# drop_index(:artist_id) # DROP INDEX table_artist_id_index
|
523
540
|
# drop_index([:a, :b]) # DROP INDEX table_a_b_index
|
524
|
-
# drop_index([:a, :b], :
|
541
|
+
# drop_index([:a, :b], name: :foo) # DROP INDEX foo
|
525
542
|
def drop_index(columns, options=OPTS)
|
526
543
|
@operations << {:op => :drop_index, :columns => Array(columns)}.merge!(options)
|
544
|
+
nil
|
527
545
|
end
|
528
546
|
|
529
|
-
#
|
547
|
+
# Rename one of the table's columns.
|
530
548
|
#
|
531
549
|
# rename_column(:name, :artist_name) # RENAME COLUMN name TO artist_name
|
532
550
|
def rename_column(name, new_name, opts = OPTS)
|
533
551
|
@operations << {:op => :rename_column, :name => name, :new_name => new_name}.merge!(opts)
|
552
|
+
nil
|
534
553
|
end
|
535
554
|
|
536
|
-
# Modify
|
555
|
+
# Modify the default value for one of the table's column.
|
537
556
|
#
|
538
557
|
# set_column_default(:artist_name, 'a') # ALTER COLUMN artist_name SET DEFAULT 'a'
|
539
558
|
#
|
@@ -545,9 +564,10 @@ module Sequel
|
|
545
564
|
# can lose the type and NULL/NOT NULL setting for the column.
|
546
565
|
def set_column_default(name, default)
|
547
566
|
@operations << {:op => :set_column_default, :name => name, :default => default}
|
567
|
+
nil
|
548
568
|
end
|
549
569
|
|
550
|
-
# Modify
|
570
|
+
# Modify the type of one of the table's column.
|
551
571
|
#
|
552
572
|
# set_column_type(:artist_name, 'char(10)') # ALTER COLUMN artist_name TYPE char(10)
|
553
573
|
#
|
@@ -559,6 +579,7 @@ module Sequel
|
|
559
579
|
# can lose the default and NULL/NOT NULL setting for the column.
|
560
580
|
def set_column_type(name, type, opts=OPTS)
|
561
581
|
@operations << {:op => :set_column_type, :name => name, :type => type}.merge!(opts)
|
582
|
+
nil
|
562
583
|
end
|
563
584
|
|
564
585
|
# Set a given column as allowing NULL values.
|
@@ -569,6 +590,7 @@ module Sequel
|
|
569
590
|
# can lose the default and type for the column.
|
570
591
|
def set_column_allow_null(name, allow_null=true)
|
571
592
|
@operations << {:op => :set_column_null, :name => name, :null => allow_null}
|
593
|
+
nil
|
572
594
|
end
|
573
595
|
|
574
596
|
# Set a given column as not allowing NULL values.
|
@@ -586,16 +608,19 @@ module Sequel
|
|
586
608
|
# Add a composite primary key constraint
|
587
609
|
def add_composite_primary_key(columns, opts)
|
588
610
|
@operations << {:op => :add_constraint, :type => :primary_key, :columns => columns}.merge!(opts)
|
611
|
+
nil
|
589
612
|
end
|
590
613
|
|
591
614
|
# Add a composite foreign key constraint
|
592
615
|
def add_composite_foreign_key(columns, table, opts)
|
593
616
|
@operations << {:op => :add_constraint, :type => :foreign_key, :columns => columns, :table => table}.merge!(opts)
|
617
|
+
nil
|
594
618
|
end
|
595
619
|
|
596
620
|
# Drop a composite foreign key constraint
|
597
621
|
def drop_composite_foreign_key(columns, opts)
|
598
622
|
@operations << {:op => :drop_constraint, :type => :foreign_key, :columns => columns}.merge!(opts)
|
623
|
+
nil
|
599
624
|
end
|
600
625
|
end
|
601
626
|
end
|