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,40 +7,19 @@ module Sequel
|
|
7
7
|
# These methods execute code on the database that modifies the database's schema.
|
8
8
|
# ---------------------
|
9
9
|
|
10
|
-
AUTOINCREMENT = 'AUTOINCREMENT'.freeze
|
11
|
-
Sequel::Deprecation.deprecate_constant(self, :AUTOINCREMENT)
|
12
|
-
COMMA_SEPARATOR = ', '.freeze
|
13
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
|
14
|
-
NOT_NULL = ' NOT NULL'.freeze
|
15
|
-
Sequel::Deprecation.deprecate_constant(self, :NOT_NULL)
|
16
|
-
NULL = ' NULL'.freeze
|
17
|
-
Sequel::Deprecation.deprecate_constant(self, :NULL)
|
18
|
-
PRIMARY_KEY = ' PRIMARY KEY'.freeze
|
19
|
-
Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY)
|
20
|
-
TEMPORARY = 'TEMPORARY '.freeze
|
21
|
-
Sequel::Deprecation.deprecate_constant(self, :TEMPORARY)
|
22
|
-
UNDERSCORE = '_'.freeze
|
23
|
-
Sequel::Deprecation.deprecate_constant(self, :UNDERSCORE)
|
24
|
-
UNIQUE = ' UNIQUE'.freeze
|
25
|
-
Sequel::Deprecation.deprecate_constant(self, :UNIQUE)
|
26
|
-
UNSIGNED = ' UNSIGNED'.freeze
|
27
|
-
Sequel::Deprecation.deprecate_constant(self, :UNSIGNED)
|
28
|
-
DEFAULT_JOIN_TABLE_COLUMN_OPTIONS = {:null=>false}
|
29
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_JOIN_TABLE_COLUMN_OPTIONS)
|
30
|
-
|
31
10
|
# The order of column modifiers to use when defining a column.
|
32
|
-
COLUMN_DEFINITION_ORDER = [:collate, :default, :null, :unique, :primary_key, :auto_increment, :references]
|
11
|
+
COLUMN_DEFINITION_ORDER = [:collate, :default, :null, :unique, :primary_key, :auto_increment, :references].freeze
|
33
12
|
|
34
13
|
# The alter table operations that are combinable.
|
35
14
|
COMBINABLE_ALTER_TABLE_OPS = [:add_column, :drop_column, :rename_column,
|
36
15
|
:set_column_type, :set_column_default, :set_column_null,
|
37
|
-
:add_constraint, :drop_constraint]
|
16
|
+
:add_constraint, :drop_constraint].freeze
|
38
17
|
|
39
18
|
# Adds a column to the specified table. This method expects a column name,
|
40
19
|
# a datatype and optionally a hash with additional constraints and options:
|
41
20
|
#
|
42
|
-
# DB.add_column :items, :name,
|
43
|
-
# DB.add_column :items, :category,
|
21
|
+
# DB.add_column :items, :name, String, unique: true, null: false
|
22
|
+
# DB.add_column :items, :category, String, default: 'ruby'
|
44
23
|
#
|
45
24
|
# See <tt>alter_table</tt>.
|
46
25
|
def add_column(table, *args)
|
@@ -50,9 +29,10 @@ module Sequel
|
|
50
29
|
# Adds an index to a table for the given columns:
|
51
30
|
#
|
52
31
|
# DB.add_index :posts, :title
|
53
|
-
# DB.add_index :posts, [:author, :title], :
|
32
|
+
# DB.add_index :posts, [:author, :title], unique: true
|
54
33
|
#
|
55
34
|
# Options:
|
35
|
+
#
|
56
36
|
# :ignore_errors :: Ignore any DatabaseErrors that are raised
|
57
37
|
# :name :: Name to use for index instead of default
|
58
38
|
#
|
@@ -64,16 +44,17 @@ module Sequel
|
|
64
44
|
rescue DatabaseError
|
65
45
|
raise unless e
|
66
46
|
end
|
47
|
+
nil
|
67
48
|
end
|
68
49
|
|
69
50
|
# Alters the given table with the specified block. Example:
|
70
51
|
#
|
71
52
|
# DB.alter_table :items do
|
72
|
-
# add_column :category,
|
53
|
+
# add_column :category, String, default: 'ruby'
|
73
54
|
# drop_column :category
|
74
55
|
# rename_column :cntr, :counter
|
75
|
-
# set_column_type :value,
|
76
|
-
# set_column_default :value,
|
56
|
+
# set_column_type :value, Float
|
57
|
+
# set_column_default :value, 4.2
|
77
58
|
# add_index [:group, :category]
|
78
59
|
# drop_index [:group, :category]
|
79
60
|
# end
|
@@ -83,13 +64,8 @@ module Sequel
|
|
83
64
|
# available for index definition.
|
84
65
|
#
|
85
66
|
# See <tt>Schema::AlterTableGenerator</tt> and the {"Migrations and Schema Modification" guide}[rdoc-ref:doc/migration.rdoc].
|
86
|
-
def alter_table(name,
|
87
|
-
|
88
|
-
Sequel::Deprecation.deprecate("Passing a Sequel::Schema::AlterTableGenerator instance as the second argument to Sequel::Database#alter_table ", "Pass a block to Sequel::Database#alter_table instead")
|
89
|
-
else
|
90
|
-
Sequel::Deprecation.deprecate("Passing a second argument to Sequel::Database#alter_table :generator option", "Pass only a single argument to the method") unless arg_not_given
|
91
|
-
generator = alter_table_generator(&block)
|
92
|
-
end
|
67
|
+
def alter_table(name, &block)
|
68
|
+
generator = alter_table_generator(&block)
|
93
69
|
remove_cached_schema(name)
|
94
70
|
apply_alter_table_generator(name, generator)
|
95
71
|
nil
|
@@ -104,7 +80,7 @@ module Sequel
|
|
104
80
|
# Create a join table using a hash of foreign keys to referenced
|
105
81
|
# table names. Example:
|
106
82
|
#
|
107
|
-
# create_join_table
|
83
|
+
# create_join_table:cat_id: :cats, dog_id: :dogs)
|
108
84
|
# # CREATE TABLE cats_dogs (
|
109
85
|
# # cat_id integer NOT NULL REFERENCES cats,
|
110
86
|
# # dog_id integer NOT NULL REFERENCES dogs,
|
@@ -121,11 +97,11 @@ module Sequel
|
|
121
97
|
# be option hashes, so long as the option hashes have a :table
|
122
98
|
# entry giving the table referenced:
|
123
99
|
#
|
124
|
-
# create_join_table(:
|
100
|
+
# create_join_table(cat_id: {table: :cats, type: :Bignum}, dog_id: :dogs)
|
125
101
|
#
|
126
102
|
# You can provide a second argument which is a table options hash:
|
127
103
|
#
|
128
|
-
# create_join_table({:
|
104
|
+
# create_join_table({cat_id: :cats, dog_id: :dogs}, temp: true)
|
129
105
|
#
|
130
106
|
# Some table options are handled specially:
|
131
107
|
#
|
@@ -134,7 +110,7 @@ module Sequel
|
|
134
110
|
# :no_index :: Set to true not to create the second index.
|
135
111
|
# :no_primary_key :: Set to true to not create the primary key.
|
136
112
|
def create_join_table(hash, options=OPTS)
|
137
|
-
keys = hash.keys.
|
113
|
+
keys = hash.keys.sort
|
138
114
|
create_table(join_table_name(hash, options), options) do
|
139
115
|
keys.each do |key|
|
140
116
|
v = hash[key]
|
@@ -147,6 +123,7 @@ module Sequel
|
|
147
123
|
primary_key(keys) unless options[:no_primary_key]
|
148
124
|
index(keys.reverse, options[:index_options] || {}) unless options[:no_index]
|
149
125
|
end
|
126
|
+
nil
|
150
127
|
end
|
151
128
|
|
152
129
|
# Forcibly create a join table, attempting to drop it if it already exists, then creating it.
|
@@ -168,7 +145,7 @@ module Sequel
|
|
168
145
|
#
|
169
146
|
# DB.create_table :posts do
|
170
147
|
# primary_key :id
|
171
|
-
# column :title,
|
148
|
+
# column :title, String
|
172
149
|
# String :content
|
173
150
|
# index :title
|
174
151
|
# end
|
@@ -201,10 +178,6 @@ module Sequel
|
|
201
178
|
# See <tt>Schema::CreateTableGenerator</tt> and the {"Schema Modification" guide}[rdoc-ref:doc/schema_modification.rdoc].
|
202
179
|
def create_table(name, options=OPTS, &block)
|
203
180
|
remove_cached_schema(name)
|
204
|
-
if options.is_a?(Schema::CreateTableGenerator)
|
205
|
-
Sequel::Deprecation.deprecate("Passing a Sequel::Schema::CreateTableGenerator instance as the second argument to Sequel::Database#create_table", "Use the Sequel::Database#create_table :generator option instead")
|
206
|
-
options = {:generator=>options}
|
207
|
-
end
|
208
181
|
if sql = options[:as]
|
209
182
|
raise(Error, "can't provide both :as option and block to create_table") if block
|
210
183
|
create_table_as(name, sql, options)
|
@@ -212,8 +185,8 @@ module Sequel
|
|
212
185
|
generator = options[:generator] || create_table_generator(&block)
|
213
186
|
create_table_from_generator(name, generator, options)
|
214
187
|
create_table_indexes_from_generator(name, generator, options)
|
215
|
-
nil
|
216
188
|
end
|
189
|
+
nil
|
217
190
|
end
|
218
191
|
|
219
192
|
# Forcibly create a table, attempting to drop it if it already exists, then creating it.
|
@@ -251,7 +224,7 @@ module Sequel
|
|
251
224
|
# Creates a view, replacing a view with the same name if one already exists.
|
252
225
|
#
|
253
226
|
# DB.create_or_replace_view(:some_items, "SELECT * FROM items WHERE price < 100")
|
254
|
-
# DB.create_or_replace_view(:some_items, DB[:items].where(:
|
227
|
+
# DB.create_or_replace_view(:some_items, DB[:items].where(category: 'ruby'))
|
255
228
|
#
|
256
229
|
# For databases where replacing a view is not natively supported, support
|
257
230
|
# is emulated by dropping a view with the same name before creating the view.
|
@@ -263,6 +236,7 @@ module Sequel
|
|
263
236
|
end
|
264
237
|
|
265
238
|
create_view(name, source, options)
|
239
|
+
nil
|
266
240
|
end
|
267
241
|
|
268
242
|
# Creates a view based on a dataset or an SQL string:
|
@@ -271,11 +245,11 @@ module Sequel
|
|
271
245
|
# # CREATE VIEW cheap_items AS
|
272
246
|
# # SELECT * FROM items WHERE price < 100
|
273
247
|
#
|
274
|
-
# DB.create_view(:ruby_items, DB[:items].where(:
|
248
|
+
# DB.create_view(:ruby_items, DB[:items].where(category: 'ruby'))
|
275
249
|
# # CREATE VIEW ruby_items AS
|
276
250
|
# # SELECT * FROM items WHERE (category = 'ruby')
|
277
251
|
#
|
278
|
-
# DB.create_view(:checked_items, DB[:items].where(:foo), :
|
252
|
+
# DB.create_view(:checked_items, DB[:items].where(:foo), check: true)
|
279
253
|
# # CREATE VIEW checked_items AS
|
280
254
|
# # SELECT * FROM items WHERE foo
|
281
255
|
# # WITH CHECK OPTION
|
@@ -299,7 +273,7 @@ module Sequel
|
|
299
273
|
# option. Since a recursive view requires a union that isn't
|
300
274
|
# in a subquery, if you are providing a Dataset as the source
|
301
275
|
# argument, if should probably call the union method with the
|
302
|
-
# :
|
276
|
+
# all: true and from_self: false options.
|
303
277
|
def create_view(name, source, options = OPTS)
|
304
278
|
execute_ddl(create_view_sql(name, source, options))
|
305
279
|
remove_cached_schema(name)
|
@@ -315,7 +289,7 @@ module Sequel
|
|
315
289
|
alter_table(table) {drop_column(*args)}
|
316
290
|
end
|
317
291
|
|
318
|
-
# Removes an index for the given table and column
|
292
|
+
# Removes an index for the given table and column(s):
|
319
293
|
#
|
320
294
|
# DB.drop_index :posts, :title
|
321
295
|
# DB.drop_index :posts, [:author, :title]
|
@@ -328,7 +302,7 @@ module Sequel
|
|
328
302
|
# Drop the join table that would have been created with the
|
329
303
|
# same arguments to create_join_table:
|
330
304
|
#
|
331
|
-
# drop_join_table(:
|
305
|
+
# drop_join_table(cat_id: :cats, dog_id: :dogs)
|
332
306
|
# # DROP TABLE cats_dogs
|
333
307
|
def drop_join_table(hash, options=OPTS)
|
334
308
|
drop_table(join_table_name(hash, options), options)
|
@@ -338,7 +312,7 @@ module Sequel
|
|
338
312
|
#
|
339
313
|
# DB.drop_table(:posts) # DROP TABLE posts
|
340
314
|
# DB.drop_table(:posts, :comments)
|
341
|
-
# DB.drop_table(:posts, :comments, :
|
315
|
+
# DB.drop_table(:posts, :comments, cascade: true)
|
342
316
|
def drop_table(*names)
|
343
317
|
options = names.last.is_a?(Hash) ? names.pop : {}
|
344
318
|
names.each do |n|
|
@@ -366,14 +340,15 @@ module Sequel
|
|
366
340
|
drop_table(name, options) if table_exists?(name)
|
367
341
|
end
|
368
342
|
end
|
343
|
+
nil
|
369
344
|
end
|
370
345
|
|
371
346
|
# Drops one or more views corresponding to the given names:
|
372
347
|
#
|
373
348
|
# DB.drop_view(:cheap_items)
|
374
349
|
# DB.drop_view(:cheap_items, :pricey_items)
|
375
|
-
# DB.drop_view(:cheap_items, :pricey_items, :
|
376
|
-
# DB.drop_view(:cheap_items, :pricey_items, :
|
350
|
+
# DB.drop_view(:cheap_items, :pricey_items, cascade: true)
|
351
|
+
# DB.drop_view(:cheap_items, :pricey_items, if_exists: true)
|
377
352
|
#
|
378
353
|
# Options:
|
379
354
|
# :cascade :: Also drop objects depending on this view.
|
@@ -458,6 +433,7 @@ module Sequel
|
|
458
433
|
def alter_table_op_sql(table, op)
|
459
434
|
meth = "alter_table_#{op[:op]}_sql"
|
460
435
|
if respond_to?(meth, true)
|
436
|
+
# Allow calling private methods as alter table op sql methods are private
|
461
437
|
send(meth, table, op)
|
462
438
|
else
|
463
439
|
raise Error, "Unsupported ALTER TABLE operation: #{op[:op]}"
|
@@ -500,7 +476,7 @@ module Sequel
|
|
500
476
|
"DROP CONSTRAINT #{quoted_name}#{' CASCADE' if op[:cascade]}"
|
501
477
|
end
|
502
478
|
|
503
|
-
# The SQL to execute to modify the
|
479
|
+
# The SQL to execute to modify the table. op
|
504
480
|
# should be one of the operations returned by the AlterTableGenerator.
|
505
481
|
def alter_table_sql(table, op)
|
506
482
|
case op[:op]
|
@@ -513,8 +489,8 @@ module Sequel
|
|
513
489
|
end
|
514
490
|
end
|
515
491
|
|
516
|
-
# Array of SQL
|
517
|
-
# corresponding to
|
492
|
+
# Array of SQL statements used to modify the table,
|
493
|
+
# corresponding to changes specified by the operations.
|
518
494
|
def alter_table_sql_list(table, operations)
|
519
495
|
if supports_combining_alter_table_ops?
|
520
496
|
grouped_ops = []
|
@@ -554,7 +530,7 @@ module Sequel
|
|
554
530
|
COLUMN_DEFINITION_ORDER
|
555
531
|
end
|
556
532
|
|
557
|
-
# SQL
|
533
|
+
# SQL fragment containing the column creation SQL for the given column.
|
558
534
|
def column_definition_sql(column)
|
559
535
|
sql = String.new
|
560
536
|
sql << "#{quote_identifier(column[:name])} #{type_literal(column)}"
|
@@ -629,12 +605,12 @@ module Sequel
|
|
629
605
|
(generator.columns.map{|c| column_definition_sql(c)} + generator.constraints.map{|c| constraint_definition_sql(c)}).join(', ')
|
630
606
|
end
|
631
607
|
|
632
|
-
# SQL
|
608
|
+
# SQL fragment for column foreign key references (column constraints)
|
633
609
|
def column_references_column_constraint_sql(column)
|
634
610
|
column_references_sql(column)
|
635
611
|
end
|
636
612
|
|
637
|
-
# SQL
|
613
|
+
# SQL fragment for column foreign key references
|
638
614
|
def column_references_sql(column)
|
639
615
|
sql = String.new
|
640
616
|
sql << " REFERENCES #{quote_schema_table(column[:table])}"
|
@@ -645,7 +621,7 @@ module Sequel
|
|
645
621
|
sql
|
646
622
|
end
|
647
623
|
|
648
|
-
# SQL
|
624
|
+
# SQL fragment for table foreign key references (table constraints)
|
649
625
|
def column_references_table_constraint_sql(constraint)
|
650
626
|
"FOREIGN KEY #{literal(constraint[:columns])}#{column_references_sql(constraint)}"
|
651
627
|
end
|
@@ -655,7 +631,7 @@ module Sequel
|
|
655
631
|
COMBINABLE_ALTER_TABLE_OPS.include?(op[:op])
|
656
632
|
end
|
657
633
|
|
658
|
-
# SQL
|
634
|
+
# SQL fragment specifying a constraint on a table.
|
659
635
|
def constraint_definition_sql(constraint)
|
660
636
|
sql = String.new
|
661
637
|
sql << "CONSTRAINT #{quote_identifier(constraint[:name])} " if constraint[:name]
|
@@ -679,7 +655,7 @@ module Sequel
|
|
679
655
|
sql
|
680
656
|
end
|
681
657
|
|
682
|
-
# SQL
|
658
|
+
# SQL fragment specifying the deferrable constraint attributes.
|
683
659
|
def constraint_deferrable_sql_append(sql, defer)
|
684
660
|
case defer
|
685
661
|
when nil
|
@@ -707,14 +683,15 @@ module Sequel
|
|
707
683
|
e = options[:ignore_index_errors] || options[:if_not_exists]
|
708
684
|
generator.indexes.each do |index|
|
709
685
|
begin
|
710
|
-
|
686
|
+
pr = proc{index_sql_list(name, [index]).each{|sql| execute_ddl(sql)}}
|
687
|
+
supports_transactional_ddl? ? transaction(:savepoint=>:only, &pr) : pr.call
|
711
688
|
rescue Error
|
712
689
|
raise unless e
|
713
690
|
end
|
714
691
|
end
|
715
692
|
end
|
716
693
|
|
717
|
-
#
|
694
|
+
# SQL statement for creating a table with the given name, columns, and options
|
718
695
|
def create_table_sql(name, generator, options)
|
719
696
|
unless supports_named_column_constraints?
|
720
697
|
# Split column constraints into table constraints if they have a name
|
@@ -747,30 +724,30 @@ module Sequel
|
|
747
724
|
"#{create_table_prefix_sql(name, options)} (#{column_list_sql(generator)})"
|
748
725
|
end
|
749
726
|
|
750
|
-
# Run
|
727
|
+
# Run SQL statement to create the table with the given name from the given
|
751
728
|
# SELECT sql statement.
|
752
729
|
def create_table_as(name, sql, options)
|
753
730
|
sql = sql.sql if sql.is_a?(Sequel::Dataset)
|
754
731
|
run(create_table_as_sql(name, sql, options))
|
755
732
|
end
|
756
733
|
|
757
|
-
#
|
734
|
+
# SQL statement for creating a table from the result of a SELECT statement.
|
758
735
|
# +sql+ should be a string representing a SELECT query.
|
759
736
|
def create_table_as_sql(name, sql, options)
|
760
737
|
"#{create_table_prefix_sql(name, options)} AS #{sql}"
|
761
738
|
end
|
762
739
|
|
763
|
-
#
|
740
|
+
# SQL fragment for initial part of CREATE TABLE statement
|
764
741
|
def create_table_prefix_sql(name, options)
|
765
742
|
"CREATE #{temporary_table_sql if options[:temp]}TABLE#{' IF NOT EXISTS' if options[:if_not_exists]} #{options[:temp] ? quote_identifier(name) : quote_schema_table(name)}"
|
766
743
|
end
|
767
744
|
|
768
|
-
#
|
745
|
+
# SQL fragment for initial part of CREATE VIEW statement
|
769
746
|
def create_view_prefix_sql(name, options)
|
770
747
|
create_view_sql_append_columns("CREATE #{'OR REPLACE 'if options[:replace]}VIEW #{quote_schema_table(name)}", options[:columns])
|
771
748
|
end
|
772
749
|
|
773
|
-
#
|
750
|
+
# SQL statement for creating a view.
|
774
751
|
def create_view_sql(name, source, options)
|
775
752
|
source = source.sql if source.is_a?(Dataset)
|
776
753
|
sql = String.new
|
@@ -831,14 +808,18 @@ module Sequel
|
|
831
808
|
args = nil
|
832
809
|
elsif arg.is_a?(String)
|
833
810
|
args = [Sequel.lit(*args)]
|
834
|
-
elsif arg.is_a?(Array)
|
835
|
-
|
811
|
+
elsif arg.is_a?(Array)
|
812
|
+
if arg.first.is_a?(String)
|
813
|
+
args = [Sequel.lit(*arg)]
|
814
|
+
elsif arg.length > 1
|
815
|
+
args = [Sequel.&(*arg)]
|
816
|
+
end
|
836
817
|
end
|
837
818
|
end
|
838
819
|
schema_utility_dataset.literal(schema_utility_dataset.send(:filter_expr, *args, &block))
|
839
820
|
end
|
840
821
|
|
841
|
-
# SQL
|
822
|
+
# SQL statement for creating an index for the table with the given name
|
842
823
|
# and index specifications.
|
843
824
|
def index_definition_sql(table_name, index)
|
844
825
|
index_name = index[:name] || default_index_name(table_name, index[:columns])
|
@@ -847,7 +828,7 @@ module Sequel
|
|
847
828
|
"CREATE #{'UNIQUE ' if index[:unique]}INDEX #{quote_identifier(index_name)} ON #{quote_schema_table(table_name)} #{literal(index[:columns])}#{" WHERE #{filter_expr(index[:where])}" if index[:where]}"
|
848
829
|
end
|
849
830
|
|
850
|
-
# Array of SQL
|
831
|
+
# Array of SQL statements, one for each index specification,
|
851
832
|
# for the given table.
|
852
833
|
def index_sql_list(table_name, indexes)
|
853
834
|
indexes.map{|i| index_definition_sql(table_name, i)}
|
@@ -879,7 +860,7 @@ module Sequel
|
|
879
860
|
end
|
880
861
|
end
|
881
862
|
|
882
|
-
# SQL
|
863
|
+
# SQL fragment to use for ON DELETE, based on the given action.
|
883
864
|
# The following actions are recognized:
|
884
865
|
#
|
885
866
|
# :cascade :: Delete rows referencing this row.
|
@@ -906,7 +887,7 @@ module Sequel
|
|
906
887
|
schema_utility_dataset.quote_schema_table(table)
|
907
888
|
end
|
908
889
|
|
909
|
-
# SQL
|
890
|
+
# SQL statement for renaming a table.
|
910
891
|
def rename_table_sql(name, new_name)
|
911
892
|
"ALTER TABLE #{quote_schema_table(name)} RENAME TO #{quote_schema_table(new_name)}"
|
912
893
|
end
|
@@ -931,7 +912,7 @@ module Sequel
|
|
931
912
|
schema_utility_dataset.split_qualifiers(table_name)
|
932
913
|
end
|
933
914
|
|
934
|
-
# SQL
|
915
|
+
# SQL fragment for temporary table
|
935
916
|
def temporary_table_sql
|
936
917
|
'TEMPORARY '
|
937
918
|
end
|
@@ -953,6 +934,7 @@ module Sequel
|
|
953
934
|
def type_literal_generic(column)
|
954
935
|
meth = "type_literal_generic_#{column[:type].name.to_s.downcase}"
|
955
936
|
if respond_to?(meth, true)
|
937
|
+
# Allow calling private methods as per type literal generic methods are private
|
956
938
|
send(meth, column)
|
957
939
|
else
|
958
940
|
raise Error, "Unsupported ruby class used as database type: #{column[:type]}"
|
@@ -1046,7 +1028,7 @@ module Sequel
|
|
1046
1028
|
"#{type}#{literal(Array(elements)) if elements}#{' UNSIGNED' if column[:unsigned]}"
|
1047
1029
|
end
|
1048
1030
|
|
1049
|
-
# Whether clob should be used for String :
|
1031
|
+
# Whether clob should be used for String text: true columns.
|
1050
1032
|
def uses_clob_for_text?
|
1051
1033
|
false
|
1052
1034
|
end
|
@@ -9,30 +9,10 @@ module Sequel
|
|
9
9
|
# them do.
|
10
10
|
# ---------------------
|
11
11
|
|
12
|
-
SQL_BEGIN = 'BEGIN'.freeze
|
13
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_BEGIN)
|
14
|
-
SQL_COMMIT = 'COMMIT'.freeze
|
15
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_COMMIT)
|
16
|
-
SQL_RELEASE_SAVEPOINT = 'RELEASE SAVEPOINT autopoint_%d'.freeze
|
17
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_RELEASE_SAVEPOINT)
|
18
|
-
SQL_ROLLBACK = 'ROLLBACK'.freeze
|
19
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_ROLLBACK)
|
20
|
-
SQL_ROLLBACK_TO_SAVEPOINT = 'ROLLBACK TO SAVEPOINT autopoint_%d'.freeze
|
21
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_ROLLBACK_TO_SAVEPOINT)
|
22
|
-
SQL_SAVEPOINT = 'SAVEPOINT autopoint_%d'.freeze
|
23
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_SAVEPOINT)
|
24
|
-
|
25
|
-
TRANSACTION_BEGIN = 'Transaction.begin'.freeze
|
26
|
-
Sequel::Deprecation.deprecate_constant(self, :TRANSACTION_BEGIN)
|
27
|
-
TRANSACTION_COMMIT = 'Transaction.commit'.freeze
|
28
|
-
Sequel::Deprecation.deprecate_constant(self, :TRANSACTION_COMMIT)
|
29
|
-
TRANSACTION_ROLLBACK = 'Transaction.rollback'.freeze
|
30
|
-
Sequel::Deprecation.deprecate_constant(self, :TRANSACTION_ROLLBACK)
|
31
|
-
|
32
12
|
TRANSACTION_ISOLATION_LEVELS = {:uncommitted=>'READ UNCOMMITTED'.freeze,
|
33
13
|
:committed=>'READ COMMITTED'.freeze,
|
34
14
|
:repeatable=>'REPEATABLE READ'.freeze,
|
35
|
-
:serializable=>'SERIALIZABLE'.freeze}
|
15
|
+
:serializable=>'SERIALIZABLE'.freeze}.freeze
|
36
16
|
|
37
17
|
# The default transaction isolation level for this database,
|
38
18
|
# used for all future transactions. For MSSQL, this should be set
|
@@ -284,7 +264,7 @@ module Sequel
|
|
284
264
|
hooks << block
|
285
265
|
end
|
286
266
|
|
287
|
-
# Whether the
|
267
|
+
# Whether the given connection is already inside a transaction
|
288
268
|
def already_in_transaction?(conn, opts)
|
289
269
|
_trans(conn) && (!supports_savepoints? || !opts[:savepoint])
|
290
270
|
end
|
@@ -305,7 +285,7 @@ module Sequel
|
|
305
285
|
"SAVEPOINT autopoint_#{depth}"
|
306
286
|
end
|
307
287
|
|
308
|
-
# Start a new database
|
288
|
+
# Start a new database transaction on the given connection
|
309
289
|
def begin_new_transaction(conn, opts)
|
310
290
|
log_connection_execute(conn, begin_transaction_sql)
|
311
291
|
set_transaction_isolation(conn, opts)
|
@@ -332,7 +312,7 @@ module Sequel
|
|
332
312
|
# Whether to commit the current transaction. Thread.current.status is
|
333
313
|
# checked because Thread#kill skips rescue blocks (so exception would be
|
334
314
|
# nil), but the transaction should still be rolled back. On Ruby 1.9 (but
|
335
|
-
# not
|
315
|
+
# not 2.0+), the thread status will still be "run", so Thread#kill
|
336
316
|
# will erroneously commit the transaction, and there isn't a workaround.
|
337
317
|
def commit_or_rollback_transaction(exception, conn, opts)
|
338
318
|
if exception
|