sequel 4.49.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +130 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +6 -9
- data/doc/advanced_associations.rdoc +91 -168
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- data/doc/reflection.rdoc +5 -6
- data/doc/release_notes/5.0.0.txt +159 -0
- data/doc/release_notes/5.1.0.txt +31 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/schema_modification.rdoc +78 -64
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +4 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +6 -26
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/jdbc.rb +18 -74
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/oracle.rb +8 -13
- data/lib/sequel/adapters/postgres.rb +28 -150
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +61 -227
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +58 -264
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +22 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/connection_pool.rb +38 -28
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +36 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +93 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/dataset/actions.rb +57 -107
- data/lib/sequel/dataset/dataset_module.rb +4 -16
- data/lib/sequel/dataset/features.rb +35 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +91 -161
- data/lib/sequel/dataset/sql.rb +33 -225
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +27 -43
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +3 -16
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/model/associations.rb +129 -131
- data/lib/sequel/model/base.rb +133 -731
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -23
- data/lib/sequel/version.rb +2 -2
- data/lib/sequel.rb +1 -1
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +111 -478
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +459 -664
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +96 -244
- data/spec/core/dataset_spec.rb +99 -414
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +241 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +88 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +30 -92
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +8 -30
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +5 -6
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +25 -33
- data/spec/extensions/migration_spec.rb +12 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +2 -2
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +22 -26
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +22 -31
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +40 -9
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +23 -34
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +43 -32
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +5 -17
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/synchronize_sql_spec.rb +124 -0
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +5 -7
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +12 -16
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -13
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +8 -13
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +12 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +7 -23
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +10 -10
- data/spec/integration/spec_helper.rb +17 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +43 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +48 -17
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +29 -339
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +33 -129
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +19 -65
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen-string-literal: true
|
|
2
|
-
|
|
3
|
-
#SEQUEL5: Remove
|
|
4
|
-
|
|
5
|
-
Sequel::JDBC.load_driver('com.informix.jdbc.IfxDriver')
|
|
6
|
-
Sequel.require 'adapters/shared/informix'
|
|
7
|
-
|
|
8
|
-
module Sequel
|
|
9
|
-
module JDBC
|
|
10
|
-
Sequel.synchronize do
|
|
11
|
-
DATABASE_SETUP[:"informix-sqli"] = proc do |db|
|
|
12
|
-
db.extend(Sequel::JDBC::Informix::DatabaseMethods)
|
|
13
|
-
db.extend_datasets Sequel::Informix::DatasetMethods
|
|
14
|
-
com.informix.jdbc.IfxDriver
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Database and Dataset instance methods for Informix specific
|
|
19
|
-
# support via JDBC.
|
|
20
|
-
module Informix
|
|
21
|
-
# Database instance methods for Informix databases accessed via JDBC.
|
|
22
|
-
module DatabaseMethods
|
|
23
|
-
include Sequel::Informix::DatabaseMethods
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
# TODO: implement
|
|
28
|
-
def last_insert_id(conn, opts=OPTS)
|
|
29
|
-
nil
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen-string-literal: true
|
|
2
|
-
|
|
3
|
-
#SEQUEL5: Remove
|
|
4
|
-
|
|
5
|
-
Sequel::JDBC.load_driver('com.progress.sql.jdbc.JdbcProgressDriver')
|
|
6
|
-
Sequel.require 'adapters/shared/progress'
|
|
7
|
-
Sequel.require 'adapters/jdbc/transactions'
|
|
8
|
-
|
|
9
|
-
module Sequel
|
|
10
|
-
module JDBC
|
|
11
|
-
Sequel.synchronize do
|
|
12
|
-
DATABASE_SETUP[:jdbcprogress] = proc do |db|
|
|
13
|
-
db.extend(Sequel::JDBC::Progress::DatabaseMethods)
|
|
14
|
-
db.extend_datasets Sequel::Progress::DatasetMethods
|
|
15
|
-
com.progress.sql.jdbc.JdbcProgressDriver
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# Database and Dataset instance methods for Progress v9 specific
|
|
20
|
-
# support via JDBC.
|
|
21
|
-
module Progress
|
|
22
|
-
# Database instance methods for Progress databases accessed via JDBC.
|
|
23
|
-
module DatabaseMethods
|
|
24
|
-
include Sequel::Progress::DatabaseMethods
|
|
25
|
-
include Sequel::JDBC::Transactions
|
|
26
|
-
|
|
27
|
-
# Progress DatabaseMetaData doesn't even implement supportsSavepoints()
|
|
28
|
-
def supports_savepoints?
|
|
29
|
-
false
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# frozen-string-literal: true
|
|
2
|
-
|
|
3
|
-
#SEQUEL5: Remove
|
|
4
|
-
|
|
5
|
-
Sequel.require 'adapters/shared/progress'
|
|
6
|
-
|
|
7
|
-
Sequel.synchronize do
|
|
8
|
-
Sequel::ODBC::DATABASE_SETUP[:progress] = proc do |db|
|
|
9
|
-
db.extend Sequel::Progress::DatabaseMethods
|
|
10
|
-
db.extend_datasets(Sequel::Progress::DatasetMethods)
|
|
11
|
-
end
|
|
12
|
-
end
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
# frozen-string-literal: true
|
|
2
|
-
|
|
3
|
-
Sequel::Deprecation.deprecate("Sequel support for Cubrid", "Please consider maintaining it yourself as an external sequel adapter if you want to continue using it")
|
|
4
|
-
|
|
5
|
-
Sequel.require %w'split_alter_table unmodified_identifiers', 'adapters/utils'
|
|
6
|
-
|
|
7
|
-
module Sequel
|
|
8
|
-
module Cubrid
|
|
9
|
-
Sequel::Database.set_shared_adapter_scheme(:cubrid, self)
|
|
10
|
-
|
|
11
|
-
module DatabaseMethods
|
|
12
|
-
include Sequel::Database::SplitAlterTable
|
|
13
|
-
include UnmodifiedIdentifiers::DatabaseMethods
|
|
14
|
-
|
|
15
|
-
AUTOINCREMENT = 'AUTO_INCREMENT'.freeze
|
|
16
|
-
Sequel::Deprecation.deprecate_constant(self, :AUTOINCREMENT)
|
|
17
|
-
COLUMN_DEFINITION_ORDER = [:auto_increment, :default, :null, :unique, :primary_key, :references]#.freeze # SEQUEL5
|
|
18
|
-
|
|
19
|
-
def database_type
|
|
20
|
-
:cubrid
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def indexes(table, opts=OPTS)
|
|
24
|
-
m = output_identifier_meth
|
|
25
|
-
m2 = input_identifier_meth
|
|
26
|
-
indexes = {}
|
|
27
|
-
metadata_dataset.
|
|
28
|
-
from{db_index[:i]}.
|
|
29
|
-
join(Sequel[:db_index_key].as(:k), :index_name=>:index_name, :class_name=>:class_name).
|
|
30
|
-
where{{i[:class_name]=>m2.call(table), :is_primary_key=>'NO'}}.
|
|
31
|
-
order{k[:key_order]}.
|
|
32
|
-
select{[i[:index_name], k[:key_attr_name].as(:column), :is_unique]}.
|
|
33
|
-
each do |row|
|
|
34
|
-
index = indexes[m.call(row[:index_name])] ||= {:columns=>[], :unique=>row[:is_unique]=='YES'}
|
|
35
|
-
index[:columns] << m.call(row[:column])
|
|
36
|
-
end
|
|
37
|
-
indexes
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def supports_savepoints?
|
|
41
|
-
false
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def schema_parse_table(table_name, opts)
|
|
45
|
-
m = output_identifier_meth(opts[:dataset])
|
|
46
|
-
m2 = input_identifier_meth(opts[:dataset])
|
|
47
|
-
|
|
48
|
-
pks = metadata_dataset.
|
|
49
|
-
from{db_index[:i]}.
|
|
50
|
-
join(Sequel[:db_index_key].as(:k), :index_name=>:index_name, :class_name=>:class_name).
|
|
51
|
-
where{{i[:class_name]=>m2.call(table_name), :is_primary_key=>'YES'}}.
|
|
52
|
-
order{k[:key_order]}.
|
|
53
|
-
select_map{k[:key_attr_name]}.
|
|
54
|
-
map{|c| m.call(c)}
|
|
55
|
-
|
|
56
|
-
metadata_dataset.
|
|
57
|
-
from(:db_attribute).
|
|
58
|
-
where(:class_name=>m2.call(table_name)).
|
|
59
|
-
order(:def_order).
|
|
60
|
-
select{[:attr_name, data_type.as(:db_type), default_value.as(:default), is_nullable.as(:allow_null), :prec]}.
|
|
61
|
-
map do |row|
|
|
62
|
-
name = m.call(row.delete(:attr_name))
|
|
63
|
-
row[:allow_null] = row[:allow_null] == 'YES'
|
|
64
|
-
row[:primary_key] = pks.include?(name)
|
|
65
|
-
row[:type] = schema_column_type(row[:db_type])
|
|
66
|
-
row[:max_length] = row[:prec] if row[:type] == :string
|
|
67
|
-
[name, row]
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def tables(opts=OPTS)
|
|
72
|
-
_tables('CLASS')
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def views(opts=OPTS)
|
|
76
|
-
_tables('VCLASS')
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
private
|
|
80
|
-
|
|
81
|
-
def _tables(type)
|
|
82
|
-
m = output_identifier_meth
|
|
83
|
-
metadata_dataset.
|
|
84
|
-
from(:db_class).
|
|
85
|
-
where(:is_system_class=>'NO', :class_type=>type).
|
|
86
|
-
select_map(:class_name).
|
|
87
|
-
map{|c| m.call(c)}
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def alter_table_rename_column_sql(table, op)
|
|
91
|
-
"RENAME COLUMN #{quote_identifier(op[:name])} AS #{quote_identifier(op[:new_name])}"
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def alter_table_change_column_sql(table, op)
|
|
95
|
-
o = op[:op]
|
|
96
|
-
opts = schema(table).find{|x| x.first == op[:name]}
|
|
97
|
-
opts = opts ? opts.last.dup : {}
|
|
98
|
-
opts[:name] = o == :rename_column ? op[:new_name] : op[:name]
|
|
99
|
-
opts[:type] = o == :set_column_type ? op[:type] : opts[:db_type]
|
|
100
|
-
opts[:null] = o == :set_column_null ? op[:null] : opts[:allow_null]
|
|
101
|
-
opts[:default] = o == :set_column_default ? op[:default] : opts[:ruby_default]
|
|
102
|
-
opts.delete(:default) if opts[:default] == nil
|
|
103
|
-
"CHANGE COLUMN #{quote_identifier(op[:name])} #{column_definition_sql(op.merge(opts))}"
|
|
104
|
-
end
|
|
105
|
-
alias alter_table_set_column_type_sql alter_table_change_column_sql
|
|
106
|
-
alias alter_table_set_column_null_sql alter_table_change_column_sql
|
|
107
|
-
alias alter_table_set_column_default_sql alter_table_change_column_sql
|
|
108
|
-
|
|
109
|
-
def alter_table_sql(table, op)
|
|
110
|
-
case op[:op]
|
|
111
|
-
when :drop_index
|
|
112
|
-
"ALTER TABLE #{quote_schema_table(table)} #{drop_index_sql(table, op)}"
|
|
113
|
-
else
|
|
114
|
-
super
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
def auto_increment_sql
|
|
119
|
-
'AUTO_INCREMENT'
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
# CUBRID requires auto increment before primary key
|
|
123
|
-
def column_definition_order
|
|
124
|
-
COLUMN_DEFINITION_ORDER
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
# CUBRID requires FOREIGN KEY keywords before a column reference
|
|
128
|
-
def column_references_sql(column)
|
|
129
|
-
sql = super
|
|
130
|
-
sql = " FOREIGN KEY#{sql}" unless column[:columns]
|
|
131
|
-
sql
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
def connection_execute_method
|
|
135
|
-
:query
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
DATABASE_ERROR_REGEXPS = {
|
|
139
|
-
/Operation would have caused one or more unique constraint violations/ => UniqueConstraintViolation,
|
|
140
|
-
/The constraint of the foreign key .+ is invalid|Update\/Delete operations are restricted by the foreign key/ => ForeignKeyConstraintViolation,
|
|
141
|
-
/cannot be made NULL/ => NotNullConstraintViolation,
|
|
142
|
-
/Your transaction .+ has been unilaterally aborted by the system/ => SerializationFailure,
|
|
143
|
-
}.freeze
|
|
144
|
-
def database_error_regexps
|
|
145
|
-
DATABASE_ERROR_REGEXPS
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
# CUBRID does not support named column constraints.
|
|
149
|
-
def supports_named_column_constraints?
|
|
150
|
-
false
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
# CUBRID doesn't support booleans, it recommends using smallint.
|
|
154
|
-
def type_literal_generic_trueclass(column)
|
|
155
|
-
:smallint
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
# CUBRID uses clob for text types.
|
|
159
|
-
def uses_clob_for_text?
|
|
160
|
-
true
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
# CUBRID supports views with check option, but not local.
|
|
164
|
-
def view_with_check_option_support
|
|
165
|
-
true
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
module DatasetMethods
|
|
170
|
-
include UnmodifiedIdentifiers::DatasetMethods
|
|
171
|
-
|
|
172
|
-
COMMA = ', '.freeze
|
|
173
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
|
174
|
-
LIMIT = " LIMIT ".freeze
|
|
175
|
-
Sequel::Deprecation.deprecate_constant(self, :LIMIT)
|
|
176
|
-
BOOL_FALSE = '0'.freeze
|
|
177
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
|
178
|
-
BOOL_TRUE = '1'.freeze
|
|
179
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
|
180
|
-
ONLY_OFFSET = ",4294967295".freeze
|
|
181
|
-
Sequel::Deprecation.deprecate_constant(self, :ONLY_OFFSET)
|
|
182
|
-
|
|
183
|
-
def supports_join_using?
|
|
184
|
-
false
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def supports_multiple_column_in?
|
|
188
|
-
false
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
def supports_timestamp_usecs?
|
|
192
|
-
false
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
# CUBRID supposedly supports TRUNCATE, but it appears not to work in my testing.
|
|
196
|
-
# Fallback to using DELETE.
|
|
197
|
-
def truncate
|
|
198
|
-
delete
|
|
199
|
-
nil
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
private
|
|
203
|
-
|
|
204
|
-
def literal_false
|
|
205
|
-
'0'
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
def literal_true
|
|
209
|
-
'1'
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
# CUBRID supports multiple rows in INSERT.
|
|
213
|
-
def multi_insert_sql_strategy
|
|
214
|
-
:values
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
# CUBRID requires a limit to use an offset,
|
|
218
|
-
# and requires a FROM table if a limit is used.
|
|
219
|
-
def select_limit_sql(sql)
|
|
220
|
-
return unless @opts[:from]
|
|
221
|
-
l = @opts[:limit]
|
|
222
|
-
o = @opts[:offset]
|
|
223
|
-
if l || o
|
|
224
|
-
sql << " LIMIT "
|
|
225
|
-
if o
|
|
226
|
-
literal_append(sql, o)
|
|
227
|
-
if l
|
|
228
|
-
sql << ', '
|
|
229
|
-
literal_append(sql, l)
|
|
230
|
-
else
|
|
231
|
-
# Hope you don't have more than 2**32 + offset rows in your dataset
|
|
232
|
-
sql << ",4294967295"
|
|
233
|
-
end
|
|
234
|
-
else
|
|
235
|
-
literal_append(sql, l)
|
|
236
|
-
end
|
|
237
|
-
end
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
# CUBRID doesn't support FOR UPDATE.
|
|
241
|
-
def select_lock_sql(sql)
|
|
242
|
-
end
|
|
243
|
-
end
|
|
244
|
-
end
|
|
245
|
-
end
|
|
@@ -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
|