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
@@ -1,261 +0,0 @@
|
|
1
|
-
# frozen-string-literal: true
|
2
|
-
|
3
|
-
Sequel::Deprecation.deprecate("Sequel support for Firebird", "Please consider maintaining it yourself as an external sequel adapter if you want to continue using it")
|
4
|
-
|
5
|
-
module Sequel
|
6
|
-
module Firebird
|
7
|
-
Sequel::Database.set_shared_adapter_scheme(:firebird, self)
|
8
|
-
|
9
|
-
module DatabaseMethods
|
10
|
-
AUTO_INCREMENT = ''.freeze
|
11
|
-
Sequel::Deprecation.deprecate_constant(self, :AUTO_INCREMENT)
|
12
|
-
TEMPORARY = 'GLOBAL TEMPORARY '.freeze
|
13
|
-
Sequel::Deprecation.deprecate_constant(self, :TEMPORARY)
|
14
|
-
|
15
|
-
def clear_primary_key(*tables)
|
16
|
-
tables.each{|t| @primary_keys.delete(dataset.send(:input_identifier, t))}
|
17
|
-
end
|
18
|
-
|
19
|
-
def create_trigger(*args)
|
20
|
-
self << create_trigger_sql(*args)
|
21
|
-
end
|
22
|
-
|
23
|
-
def database_type
|
24
|
-
:firebird
|
25
|
-
end
|
26
|
-
|
27
|
-
def drop_sequence(name)
|
28
|
-
self << drop_sequence_sql(name)
|
29
|
-
end
|
30
|
-
|
31
|
-
# Return primary key for the given table.
|
32
|
-
def primary_key(table)
|
33
|
-
t = dataset.send(:input_identifier, table)
|
34
|
-
@primary_keys.fetch(t) do
|
35
|
-
pk = fetch("SELECT RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS NATURAL JOIN RDB$RELATION_CONSTRAINTS WHERE RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND RDB$RELATION_NAME = ?", t).single_value
|
36
|
-
@primary_keys[t] = dataset.send(:output_identifier, pk.rstrip) if pk
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def restart_sequence(*args)
|
41
|
-
self << restart_sequence_sql(*args)
|
42
|
-
end
|
43
|
-
|
44
|
-
def sequences(opts=OPTS)
|
45
|
-
ds = self[:"rdb$generators"].server(opts[:server]).where(:"rdb$system_flag" => 0).select(:"rdb$generator_name")
|
46
|
-
block_given? ? yield(ds) : ds.map{|r| ds.send(:output_identifier, r[:"rdb$generator_name"])}
|
47
|
-
end
|
48
|
-
|
49
|
-
def tables(opts=OPTS)
|
50
|
-
tables_or_views(0, opts)
|
51
|
-
end
|
52
|
-
|
53
|
-
def views(opts=OPTS)
|
54
|
-
tables_or_views(1, opts)
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
def temporary_table_sql
|
60
|
-
'GLOBAL TEMPORARY '
|
61
|
-
end
|
62
|
-
|
63
|
-
# Use Firebird specific syntax for add column
|
64
|
-
def alter_table_sql(table, op)
|
65
|
-
case op[:op]
|
66
|
-
when :add_column
|
67
|
-
"ALTER TABLE #{quote_schema_table(table)} ADD #{column_definition_sql(op)}"
|
68
|
-
when :drop_column
|
69
|
-
"ALTER TABLE #{quote_schema_table(table)} DROP #{column_definition_sql(op)}"
|
70
|
-
when :rename_column
|
71
|
-
"ALTER TABLE #{quote_schema_table(table)} ALTER #{quote_identifier(op[:name])} TO #{quote_identifier(op[:new_name])}"
|
72
|
-
when :set_column_type
|
73
|
-
"ALTER TABLE #{quote_schema_table(table)} ALTER #{quote_identifier(op[:name])} TYPE #{type_literal(op)}"
|
74
|
-
else
|
75
|
-
super(table, op)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def auto_increment_sql
|
80
|
-
''
|
81
|
-
end
|
82
|
-
|
83
|
-
def create_sequence_sql(name, opts=OPTS)
|
84
|
-
"CREATE SEQUENCE #{quote_identifier(name)}"
|
85
|
-
end
|
86
|
-
|
87
|
-
# Firebird gets an override because of the mess of creating a
|
88
|
-
# sequence and trigger for auto-incrementing primary keys.
|
89
|
-
def create_table_from_generator(name, generator, options)
|
90
|
-
drop_statement, create_statements = create_table_sql_list(name, generator, options)
|
91
|
-
(execute_ddl(drop_statement) rescue nil) if drop_statement
|
92
|
-
create_statements.each{|sql| execute_ddl(sql)}
|
93
|
-
end
|
94
|
-
|
95
|
-
def create_table_sql_list(name, generator, options=OPTS)
|
96
|
-
statements = [create_table_sql(name, generator, options)]
|
97
|
-
drop_seq_statement = nil
|
98
|
-
generator.columns.each do |c|
|
99
|
-
if c[:auto_increment]
|
100
|
-
c[:sequence_name] ||= "seq_#{name}_#{c[:name]}"
|
101
|
-
unless c[:create_sequence] == false
|
102
|
-
drop_seq_statement = drop_sequence_sql(c[:sequence_name])
|
103
|
-
statements << create_sequence_sql(c[:sequence_name])
|
104
|
-
statements << restart_sequence_sql(c[:sequence_name], {:restart_position => c[:sequence_start_position]}) if c[:sequence_start_position]
|
105
|
-
end
|
106
|
-
unless c[:create_trigger] == false
|
107
|
-
c[:trigger_name] ||= "BI_#{name}_#{c[:name]}"
|
108
|
-
c[:quoted_name] = quote_identifier(c[:name])
|
109
|
-
trigger_definition = <<-END
|
110
|
-
begin
|
111
|
-
if ((new.#{c[:quoted_name]} is null) or (new.#{c[:quoted_name]} = 0)) then
|
112
|
-
begin
|
113
|
-
new.#{c[:quoted_name]} = next value for #{c[:sequence_name]};
|
114
|
-
end
|
115
|
-
end
|
116
|
-
END
|
117
|
-
statements << create_trigger_sql(name, c[:trigger_name], trigger_definition, {:events => [:insert]})
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
[drop_seq_statement, statements]
|
122
|
-
end
|
123
|
-
|
124
|
-
def create_trigger_sql(table, name, definition, opts=OPTS)
|
125
|
-
events = opts[:events] ? Array(opts[:events]) : [:insert, :update, :delete]
|
126
|
-
whence = opts[:after] ? 'AFTER' : 'BEFORE'
|
127
|
-
inactive = opts[:inactive] ? 'INACTIVE' : 'ACTIVE'
|
128
|
-
position = opts.fetch(:position, 0)
|
129
|
-
sql = <<-end_sql
|
130
|
-
CREATE TRIGGER #{quote_identifier(name)} for #{quote_identifier(table)}
|
131
|
-
#{inactive} #{whence} #{events.map{|e| e.to_s.upcase}.join(' OR ')} position #{position}
|
132
|
-
as #{definition}
|
133
|
-
end_sql
|
134
|
-
sql
|
135
|
-
end
|
136
|
-
|
137
|
-
def drop_sequence_sql(name)
|
138
|
-
"DROP SEQUENCE #{quote_identifier(name)}"
|
139
|
-
end
|
140
|
-
|
141
|
-
def remove_cached_schema(table)
|
142
|
-
clear_primary_key(table)
|
143
|
-
super
|
144
|
-
end
|
145
|
-
|
146
|
-
def restart_sequence_sql(name, opts=OPTS)
|
147
|
-
seq_name = quote_identifier(name)
|
148
|
-
"ALTER SEQUENCE #{seq_name} RESTART WITH #{opts[:restart_position]}"
|
149
|
-
end
|
150
|
-
|
151
|
-
def tables_or_views(type, opts)
|
152
|
-
ds = self[:"rdb$relations"].server(opts[:server]).where(:"rdb$relation_type" => type, Sequel::SQL::Function.new(:COALESCE, :"rdb$system_flag", 0) => 0).select(:"rdb$relation_name")
|
153
|
-
ds.map{|r| ds.send(:output_identifier, r[:"rdb$relation_name"].rstrip)}
|
154
|
-
end
|
155
|
-
|
156
|
-
def type_literal_generic_string(column)
|
157
|
-
column[:text] ? :"BLOB SUB_TYPE TEXT" : super
|
158
|
-
end
|
159
|
-
|
160
|
-
# Firebird supports views with check option, but not local.
|
161
|
-
def view_with_check_option_support
|
162
|
-
true
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
module DatasetMethods
|
167
|
-
NULL = LiteralString.new('NULL').freeze
|
168
|
-
|
169
|
-
BOOL_TRUE = '1'.freeze
|
170
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
171
|
-
BOOL_FALSE = '0'.freeze
|
172
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
173
|
-
FIRST = " FIRST ".freeze
|
174
|
-
Sequel::Deprecation.deprecate_constant(self, :FIRST)
|
175
|
-
SKIP = " SKIP ".freeze
|
176
|
-
Sequel::Deprecation.deprecate_constant(self, :SKIP)
|
177
|
-
DEFAULT_FROM = " FROM RDB$DATABASE"
|
178
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_FROM)
|
179
|
-
|
180
|
-
Dataset.def_sql_method(self, :select, %w'with select distinct limit columns from join where group having compounds order')
|
181
|
-
Dataset.def_sql_method(self, :insert, %w'insert into columns values returning')
|
182
|
-
|
183
|
-
# Insert given values into the database.
|
184
|
-
def insert(*values)
|
185
|
-
if @opts[:sql] || @opts[:returning]
|
186
|
-
super
|
187
|
-
else
|
188
|
-
returning(insert_pk).insert(*values){|r| return r.values.first}
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
# Insert a record returning the record inserted
|
193
|
-
def insert_select(*values)
|
194
|
-
with_sql_first(insert_select_sql(*values))
|
195
|
-
end
|
196
|
-
|
197
|
-
# The SQL to use for an insert_select, adds a RETURNING clause to the insert
|
198
|
-
# unless the RETURNING clause is already present.
|
199
|
-
def insert_select_sql(*values)
|
200
|
-
ds = opts[:returning] ? self : returning
|
201
|
-
ds.insert_sql(*values)
|
202
|
-
end
|
203
|
-
|
204
|
-
def requires_sql_standard_datetimes?
|
205
|
-
true
|
206
|
-
end
|
207
|
-
|
208
|
-
def supports_cte?(type=:select)
|
209
|
-
type == :select
|
210
|
-
end
|
211
|
-
|
212
|
-
def supports_insert_select?
|
213
|
-
true
|
214
|
-
end
|
215
|
-
|
216
|
-
# Firebird does not support INTERSECT or EXCEPT
|
217
|
-
def supports_intersect_except?
|
218
|
-
false
|
219
|
-
end
|
220
|
-
|
221
|
-
def supports_returning?(type)
|
222
|
-
type == :insert
|
223
|
-
end
|
224
|
-
|
225
|
-
private
|
226
|
-
|
227
|
-
def empty_from_sql
|
228
|
-
" FROM RDB$DATABASE"
|
229
|
-
end
|
230
|
-
|
231
|
-
def insert_pk(*values)
|
232
|
-
pk = db.primary_key(opts[:from].first)
|
233
|
-
pk ? Sequel::SQL::Identifier.new(pk) : NULL
|
234
|
-
end
|
235
|
-
|
236
|
-
def literal_false
|
237
|
-
'0'
|
238
|
-
end
|
239
|
-
|
240
|
-
def literal_true
|
241
|
-
'1'
|
242
|
-
end
|
243
|
-
|
244
|
-
# Firebird can insert multiple rows using a UNION
|
245
|
-
def multi_insert_sql_strategy
|
246
|
-
:union
|
247
|
-
end
|
248
|
-
|
249
|
-
def select_limit_sql(sql)
|
250
|
-
if l = @opts[:limit]
|
251
|
-
sql << " FIRST "
|
252
|
-
literal_append(sql, l)
|
253
|
-
end
|
254
|
-
if o = @opts[:offset]
|
255
|
-
sql << " SKIP "
|
256
|
-
literal_append(sql, o)
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
261
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
# frozen-string-literal: true
|
2
|
-
|
3
|
-
Sequel::Deprecation.deprecate("Sequel support for Informix", "Please consider maintaining it yourself as an external sequel adapter if you want to continue using it")
|
4
|
-
|
5
|
-
module Sequel
|
6
|
-
module Informix
|
7
|
-
Sequel::Database.set_shared_adapter_scheme(:informix, self)
|
8
|
-
|
9
|
-
module DatabaseMethods
|
10
|
-
TEMPORARY = 'TEMP '.freeze
|
11
|
-
Sequel::Deprecation.deprecate_constant(self, :TEMPORARY)
|
12
|
-
|
13
|
-
# Informix uses the :informix database type
|
14
|
-
def database_type
|
15
|
-
:informix
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
# Informix has issues with quoted identifiers, so
|
21
|
-
# turn off database quoting by default.
|
22
|
-
def quote_identifiers_default
|
23
|
-
false
|
24
|
-
end
|
25
|
-
|
26
|
-
# SQL fragment for showing a table is temporary
|
27
|
-
def temporary_table_sql
|
28
|
-
'TEMP '
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
module DatasetMethods
|
33
|
-
FIRST = " FIRST ".freeze
|
34
|
-
Sequel::Deprecation.deprecate_constant(self, :FIRST)
|
35
|
-
SKIP = " SKIP ".freeze
|
36
|
-
Sequel::Deprecation.deprecate_constant(self, :SKIP)
|
37
|
-
|
38
|
-
Dataset.def_sql_method(self, :select, %w'select limit distinct columns from join where having group compounds order')
|
39
|
-
|
40
|
-
def quote_identifiers?
|
41
|
-
@opts.fetch(:quote_identifiers, false)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Informix does not support INTERSECT or EXCEPT
|
45
|
-
def supports_intersect_except?
|
46
|
-
false
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def select_limit_sql(sql)
|
52
|
-
if o = @opts[:offset]
|
53
|
-
sql << " SKIP "
|
54
|
-
literal_append(sql, o)
|
55
|
-
end
|
56
|
-
if l = @opts[:limit]
|
57
|
-
sql << " FIRST "
|
58
|
-
literal_append(sql, l)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen-string-literal: true
|
2
|
-
|
3
|
-
Sequel::Deprecation.deprecate("Sequel support for Progress", "Please consider maintaining it yourself as an external sequel adapter if you want to continue using it")
|
4
|
-
|
5
|
-
module Sequel
|
6
|
-
module Progress
|
7
|
-
module DatabaseMethods
|
8
|
-
# Progress uses the :progress database type.
|
9
|
-
def database_type
|
10
|
-
:progress
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
module DatasetMethods
|
15
|
-
Dataset.def_sql_method(self, :select, %w'select limit distinct columns from join where group order having compounds')
|
16
|
-
|
17
|
-
# Progress requires SQL standard datetimes
|
18
|
-
def requires_sql_standard_datetimes?
|
19
|
-
true
|
20
|
-
end
|
21
|
-
|
22
|
-
# Progress does not support INTERSECT or EXCEPT
|
23
|
-
def supports_intersect_except?
|
24
|
-
false
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
# Progress uses TOP for limit, but it is only supported in Progress 10.
|
30
|
-
# The Progress adapter targets Progress 9, so it silently ignores the option.
|
31
|
-
def select_limit_sql(sql)
|
32
|
-
raise(Error, "OFFSET not supported") if @opts[:offset]
|
33
|
-
# if l = @opts[:limit]
|
34
|
-
# sql << " TOP "
|
35
|
-
# literal_append(sql, l)
|
36
|
-
# end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,169 +0,0 @@
|
|
1
|
-
# frozen-string-literal: true
|
2
|
-
|
3
|
-
Sequel::Deprecation.deprecate("The swift adapter", "Please consider maintaining it yourself as an external gem if you want to continue using it")
|
4
|
-
|
5
|
-
module Sequel
|
6
|
-
# Module holding the Swift DB support for Sequel. Swift DB is a
|
7
|
-
# collection of drivers used in Swift ORM.
|
8
|
-
#
|
9
|
-
# The Swift adapter currently supports PostgreSQL, MySQL and SQLite3
|
10
|
-
#
|
11
|
-
# Sequel.connect('swift://user:password@host/database?db_type=postgres')
|
12
|
-
# Sequel.connect('swift://user:password@host/database?db_type=mysql')
|
13
|
-
module Swift
|
14
|
-
# Contains procs keyed on sub adapter type that extend the
|
15
|
-
# given database object so it supports the correct database type.
|
16
|
-
DATABASE_SETUP = {:postgres=>proc do |db|
|
17
|
-
db.extend(Sequel::Swift::Postgres::DatabaseMethods)
|
18
|
-
db.extend_datasets Sequel::Postgres::DatasetMethods
|
19
|
-
db.swift_class = ::Swift::DB::Postgres
|
20
|
-
end,
|
21
|
-
:mysql=>proc do |db|
|
22
|
-
db.extend(Sequel::Swift::MySQL::DatabaseMethods)
|
23
|
-
db.dataset_class = Sequel::Swift::MySQL::Dataset
|
24
|
-
db.swift_class = ::Swift::DB::Mysql
|
25
|
-
end,
|
26
|
-
:sqlite=>proc do |db|
|
27
|
-
db.extend(Sequel::Swift::SQLite::DatabaseMethods)
|
28
|
-
db.dataset_class = Sequel::Swift::SQLite::Dataset
|
29
|
-
db.swift_class = ::Swift::DB::Sqlite3
|
30
|
-
db.set_integer_booleans
|
31
|
-
end,
|
32
|
-
}
|
33
|
-
|
34
|
-
class Database < Sequel::Database
|
35
|
-
set_adapter_scheme :swift
|
36
|
-
|
37
|
-
# The Swift adapter class being used by this database. Connections
|
38
|
-
# in this database's connection pool will be instances of this class.
|
39
|
-
attr_accessor :swift_class
|
40
|
-
|
41
|
-
def initialize(opts=OPTS)
|
42
|
-
Sequel.require "adapters/swift/#{opts[:db_type]}" if %w'postgres mysql sqlite'.include?(opts[:db_type].to_s)
|
43
|
-
super
|
44
|
-
end
|
45
|
-
|
46
|
-
# Create an instance of swift_class for the given options.
|
47
|
-
def connect(server)
|
48
|
-
opts = server_opts(server)
|
49
|
-
opts[:pass] = opts[:password]
|
50
|
-
setup_connection(swift_class.new(opts))
|
51
|
-
end
|
52
|
-
|
53
|
-
# Execute the given SQL, yielding a Swift::Result if a block is given.
|
54
|
-
def execute(sql, opts=OPTS)
|
55
|
-
synchronize(opts[:server]) do |conn|
|
56
|
-
begin
|
57
|
-
res = log_connection_yield(sql, conn){conn.execute(sql)}
|
58
|
-
yield res if block_given?
|
59
|
-
nil
|
60
|
-
rescue ::Swift::Error => e
|
61
|
-
raise_error(e)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Execute the SQL on the this database, returning the number of affected
|
67
|
-
# rows.
|
68
|
-
def execute_dui(sql, opts=OPTS)
|
69
|
-
synchronize(opts[:server]) do |conn|
|
70
|
-
begin
|
71
|
-
log_connection_yield(sql, conn){conn.execute(sql).affected_rows}
|
72
|
-
rescue ::Swift::Error => e
|
73
|
-
raise_error(e)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# Execute the SQL on this database, returning the primary key of the
|
79
|
-
# table being inserted to.
|
80
|
-
def execute_insert(sql, opts=OPTS)
|
81
|
-
synchronize(opts[:server]) do |conn|
|
82
|
-
begin
|
83
|
-
log_connection_yield(sql, conn){conn.execute(sql).insert_id}
|
84
|
-
rescue ::Swift::Error => e
|
85
|
-
raise_error(e)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
private
|
91
|
-
|
92
|
-
# Call the DATABASE_SETUP proc directly after initialization,
|
93
|
-
# so the object always uses sub adapter specific code. Also,
|
94
|
-
# raise an error immediately if the connection doesn't have a
|
95
|
-
# db_type specified, since one is required to include the correct
|
96
|
-
# subadapter.
|
97
|
-
def adapter_initialize
|
98
|
-
if db_type = @opts[:db_type] and !db_type.to_s.empty?
|
99
|
-
if prok = DATABASE_SETUP[db_type.to_s.to_sym]
|
100
|
-
prok.call(self)
|
101
|
-
else
|
102
|
-
raise(Error, "No :db_type option specified")
|
103
|
-
end
|
104
|
-
else
|
105
|
-
raise(Error, ":db_type option not valid, should be postgres, mysql, or sqlite")
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
# Method to call on a statement object to execute SQL that does
|
110
|
-
# not return any rows.
|
111
|
-
def connection_execute_method
|
112
|
-
:execute
|
113
|
-
end
|
114
|
-
|
115
|
-
def database_error_classes
|
116
|
-
[::Swift::Error]
|
117
|
-
end
|
118
|
-
|
119
|
-
def dataset_class_default
|
120
|
-
Dataset
|
121
|
-
end
|
122
|
-
|
123
|
-
# Set the :db entry to the same as the :database entry, since
|
124
|
-
# Swift uses :db.
|
125
|
-
def server_opts(o)
|
126
|
-
o = super
|
127
|
-
o[:db] ||= o[:database]
|
128
|
-
o
|
129
|
-
end
|
130
|
-
|
131
|
-
# Allow extending the given connection when it is first created.
|
132
|
-
# By default, just returns the connection.
|
133
|
-
def setup_connection(conn)
|
134
|
-
conn
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
class Dataset < Sequel::Dataset
|
139
|
-
Database::DatasetClass = self
|
140
|
-
Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
|
141
|
-
|
142
|
-
# Set the columns and yield the hashes to the block.
|
143
|
-
def fetch_rows(sql)
|
144
|
-
execute(sql) do |res|
|
145
|
-
col_map = {}
|
146
|
-
self.columns = res.fields.map do |c|
|
147
|
-
col_map[c] = output_identifier(c)
|
148
|
-
end
|
149
|
-
tz = db.timezone if Sequel.application_timezone
|
150
|
-
res.each do |r|
|
151
|
-
h = {}
|
152
|
-
r.each do |k, v|
|
153
|
-
h[col_map[k]] = case v
|
154
|
-
when StringIO
|
155
|
-
SQL::Blob.new(v.read)
|
156
|
-
when DateTime
|
157
|
-
tz ? Sequel.database_to_application_timestamp(Sequel.send(:convert_input_datetime_no_offset, v, tz)) : v
|
158
|
-
else
|
159
|
-
v
|
160
|
-
end
|
161
|
-
end
|
162
|
-
yield h
|
163
|
-
end
|
164
|
-
end
|
165
|
-
self
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|