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,24 +1,11 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
3
|
require 'ibm_db'
|
|
4
|
-
|
|
4
|
+
require_relative 'shared/db2'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
7
7
|
|
|
8
8
|
module IBMDB
|
|
9
|
-
# SEQUEL5: Remove
|
|
10
|
-
@convert_smallint_to_bool = true
|
|
11
|
-
class << self
|
|
12
|
-
def convert_smallint_to_bool
|
|
13
|
-
Sequel::Deprecation.deprecate("Sequel::IBMDB.convert_smallint_to_bool", "Call this method on the Database instance")
|
|
14
|
-
@convert_smallint_to_bool
|
|
15
|
-
end
|
|
16
|
-
def convert_smallint_to_bool=(v)
|
|
17
|
-
Sequel::Deprecation.deprecate("Sequel::IBMDB.convert_smallint_to_bool=", "Call this method on the Database instance")
|
|
18
|
-
@convert_smallint_to_bool = v
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
9
|
tt = Class.new do
|
|
23
10
|
def boolean(s) !s.to_i.zero? end
|
|
24
11
|
def int(s) s.to_i end
|
|
@@ -31,19 +18,15 @@ module Sequel
|
|
|
31
18
|
:blob => ::Sequel::SQL::Blob.method(:new),
|
|
32
19
|
:time => ::Sequel.method(:string_to_time),
|
|
33
20
|
:date => ::Sequel.method(:string_to_date)
|
|
34
|
-
}
|
|
21
|
+
}.freeze
|
|
35
22
|
|
|
36
|
-
# Wraps an underlying connection to DB2 using IBM_DB
|
|
23
|
+
# Wraps an underlying connection to DB2 using IBM_DB, to provide a more
|
|
24
|
+
# rubyish API.
|
|
37
25
|
class Connection
|
|
38
26
|
# A hash with prepared statement name symbol keys, where each value is
|
|
39
27
|
# a two element array with an sql string and cached Statement value.
|
|
40
28
|
attr_reader :prepared_statements
|
|
41
29
|
|
|
42
|
-
def prepared_statements=(v)
|
|
43
|
-
Sequel::Deprecation.deprecate("Sequel::IBMDB::Connection#prepared_statements=", "Use replace on the hash instead of reassigning it")
|
|
44
|
-
@prepared_statements = v
|
|
45
|
-
end
|
|
46
|
-
|
|
47
30
|
# Error class for exceptions raised by the connection.
|
|
48
31
|
class Error < StandardError
|
|
49
32
|
attr_reader :sqlstate
|
|
@@ -199,14 +182,7 @@ module Sequel
|
|
|
199
182
|
attr_reader :conversion_procs
|
|
200
183
|
|
|
201
184
|
# Whether to convert smallint values to bool for this Database instance
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
# SEQUEL5: Remove
|
|
205
|
-
attr_writer :convert_smallint_to_bool
|
|
206
|
-
def convert_smallint_to_bool
|
|
207
|
-
v = @convert_smallint_to_bool
|
|
208
|
-
v.nil? ? Sequel::IBMDB.instance_variable_get(:@convert_smallint_to_bool) : v
|
|
209
|
-
end
|
|
185
|
+
attr_accessor :convert_smallint_to_bool
|
|
210
186
|
|
|
211
187
|
# Create a new connection object for the given server.
|
|
212
188
|
def connect(server)
|
|
@@ -229,7 +205,6 @@ module Sequel
|
|
|
229
205
|
Connection.new(connection_params)
|
|
230
206
|
end
|
|
231
207
|
|
|
232
|
-
# Execute the given SQL on the database.
|
|
233
208
|
def execute(sql, opts=OPTS, &block)
|
|
234
209
|
if sql.is_a?(Symbol)
|
|
235
210
|
execute_prepared_statement(sql, opts, &block)
|
|
@@ -240,8 +215,6 @@ module Sequel
|
|
|
240
215
|
raise_error(e)
|
|
241
216
|
end
|
|
242
217
|
|
|
243
|
-
# Execute the given SQL on the database, returning the last inserted
|
|
244
|
-
# identity value.
|
|
245
218
|
def execute_insert(sql, opts=OPTS)
|
|
246
219
|
synchronize(opts[:server]) do |c|
|
|
247
220
|
if sql.is_a?(Symbol)
|
|
@@ -291,7 +264,8 @@ module Sequel
|
|
|
291
264
|
|
|
292
265
|
private
|
|
293
266
|
|
|
294
|
-
# Execute the given SQL on the database
|
|
267
|
+
# Execute the given SQL on the database, yielding the related statement if a block
|
|
268
|
+
# is given or returning the number of affected rows if not, and ensuring the statement is freed.
|
|
295
269
|
def _execute(conn, sql, opts)
|
|
296
270
|
stmt = log_connection_yield(sql, conn){conn.execute(sql)}
|
|
297
271
|
if block_given?
|
|
@@ -304,7 +278,7 @@ module Sequel
|
|
|
304
278
|
end
|
|
305
279
|
|
|
306
280
|
def adapter_initialize
|
|
307
|
-
|
|
281
|
+
@convert_smallint_to_bool = typecast_value_boolean(opts.fetch(:convert_smallint_to_bool, true))
|
|
308
282
|
@conversion_procs = DB2_TYPES.dup
|
|
309
283
|
@conversion_procs[:timestamp] = method(:to_application_timestamp)
|
|
310
284
|
end
|
|
@@ -381,9 +355,6 @@ module Sequel
|
|
|
381
355
|
class Dataset < Sequel::Dataset
|
|
382
356
|
include Sequel::DB2::DatasetMethods
|
|
383
357
|
|
|
384
|
-
Database::DatasetClass = self
|
|
385
|
-
Sequel::Deprecation.deprecate_constant(Database, :DatasetClass)
|
|
386
|
-
|
|
387
358
|
module CallableStatementMethods
|
|
388
359
|
# Extend given dataset with this module so subselects inside subselects in
|
|
389
360
|
# prepared statements work.
|
|
@@ -398,14 +369,8 @@ module Sequel
|
|
|
398
369
|
|
|
399
370
|
PreparedStatementMethods = prepared_statements_module(:prepare_bind, Sequel::Dataset::UnnumberedArgumentMapper)
|
|
400
371
|
|
|
401
|
-
# Override the default IBMDB.convert_smallint_to_bool setting for this dataset.
|
|
402
|
-
def convert_smallint_to_bool=(v)
|
|
403
|
-
Sequel::Deprecation.deprecate("Sequel::IBMDB::Dataset#convert_smallint_to_bool=", "Call with_convert_smallint_to_bool instead, which returns a modified copy instead of modifying the object")
|
|
404
|
-
@opts[:convert_smallint_to_bool] = v
|
|
405
|
-
end
|
|
406
|
-
|
|
407
372
|
# Whether to convert smallint to boolean arguments for this dataset.
|
|
408
|
-
# Defaults to the
|
|
373
|
+
# Defaults to the Database setting.
|
|
409
374
|
def convert_smallint_to_bool
|
|
410
375
|
opts.has_key?(:convert_smallint_to_bool) ? opts[:convert_smallint_to_bool] : db.convert_smallint_to_bool
|
|
411
376
|
end
|
|
@@ -415,7 +380,6 @@ module Sequel
|
|
|
415
380
|
clone(:convert_smallint_to_bool=>v)
|
|
416
381
|
end
|
|
417
382
|
|
|
418
|
-
# Fetch the rows from the database and yield plain hashes.
|
|
419
383
|
def fetch_rows(sql)
|
|
420
384
|
execute(sql) do |stmt|
|
|
421
385
|
columns = []
|
|
@@ -1,64 +1,39 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
3
|
Sequel::JDBC.load_driver('com.ibm.db2.jcc.DB2Driver')
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
require_relative '../shared/db2'
|
|
5
|
+
require_relative 'transactions'
|
|
6
6
|
|
|
7
7
|
module Sequel
|
|
8
8
|
module JDBC
|
|
9
9
|
Sequel.synchronize do
|
|
10
10
|
DATABASE_SETUP[:db2] = proc do |db|
|
|
11
|
-
|
|
11
|
+
db.singleton_class.class_eval do
|
|
12
12
|
alias jdbc_schema_parse_table schema_parse_table
|
|
13
13
|
alias jdbc_tables tables
|
|
14
14
|
alias jdbc_views views
|
|
15
15
|
alias jdbc_indexes indexes
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
|
|
17
|
+
include Sequel::JDBC::DB2::DatabaseMethods
|
|
18
|
+
|
|
19
19
|
alias schema_parse_table jdbc_schema_parse_table
|
|
20
20
|
alias tables jdbc_tables
|
|
21
21
|
alias views jdbc_views
|
|
22
22
|
alias indexes jdbc_indexes
|
|
23
23
|
%w'schema_parse_table tables views indexes'.each do |s|
|
|
24
|
-
|
|
25
|
-
def jdbc_#{s}(*a)
|
|
26
|
-
Sequel::Deprecation.deprecate("Database#jdbc_#{s} in the jdbc/db2 adapter", "Use Database\##{s} instead")
|
|
27
|
-
#{s}(*a)
|
|
28
|
-
end
|
|
29
|
-
END
|
|
30
|
-
# remove_method(:"jdbc_#{s}") # SEQUEL5
|
|
24
|
+
remove_method(:"jdbc_#{s}")
|
|
31
25
|
end
|
|
32
26
|
end
|
|
33
|
-
db.
|
|
27
|
+
db.extend_datasets Sequel::DB2::DatasetMethods
|
|
34
28
|
com.ibm.db2.jcc.DB2Driver
|
|
35
29
|
end
|
|
36
30
|
end
|
|
37
31
|
|
|
38
|
-
# SEQUEL5: Remove
|
|
39
|
-
class Type_Convertor
|
|
40
|
-
def DB2Clob(r, i)
|
|
41
|
-
if v = r.getClob(i)
|
|
42
|
-
v = v.getSubString(1, v.length)
|
|
43
|
-
v = Sequel::SQL::Blob.new(v) if ::Sequel::DB2::use_clob_as_blob
|
|
44
|
-
v
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Database and Dataset instance methods for DB2 specific
|
|
50
|
-
# support via JDBC.
|
|
51
32
|
module DB2
|
|
52
|
-
# Database instance methods for DB2 databases accessed via JDBC.
|
|
53
33
|
module DatabaseMethods
|
|
54
34
|
include Sequel::DB2::DatabaseMethods
|
|
55
35
|
include Sequel::JDBC::Transactions
|
|
56
36
|
|
|
57
|
-
PRIMARY_KEY_INDEX_RE = /\Asql\d+\z/i.freeze
|
|
58
|
-
Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
|
|
59
|
-
IDENTITY_VAL_LOCAL = "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1".freeze
|
|
60
|
-
Sequel::Deprecation.deprecate_constant(self, :IDENTITY_VAL_LOCAL)
|
|
61
|
-
|
|
62
37
|
private
|
|
63
38
|
|
|
64
39
|
def set_ps_arg(cps, arg, i)
|
|
@@ -103,10 +78,6 @@ module Sequel
|
|
|
103
78
|
end
|
|
104
79
|
end
|
|
105
80
|
end
|
|
106
|
-
|
|
107
|
-
class Dataset < JDBC::Dataset
|
|
108
|
-
include Sequel::DB2::DatasetMethods
|
|
109
|
-
end
|
|
110
81
|
end
|
|
111
82
|
end
|
|
112
83
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
3
|
Sequel::JDBC.load_driver('org.apache.derby.jdbc.EmbeddedDriver', :Derby)
|
|
4
|
-
|
|
4
|
+
require_relative 'transactions'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
7
7
|
module JDBC
|
|
@@ -13,13 +13,8 @@ module Sequel
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
# Database and Dataset support for Derby databases accessed via JDBC.
|
|
17
16
|
module Derby
|
|
18
|
-
# Instance methods for Derby Database objects accessed via JDBC.
|
|
19
17
|
module DatabaseMethods
|
|
20
|
-
PRIMARY_KEY_INDEX_RE = /\Asql\d+\z/i.freeze
|
|
21
|
-
Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
|
|
22
|
-
|
|
23
18
|
include ::Sequel::JDBC::Transactions
|
|
24
19
|
|
|
25
20
|
# Derby doesn't support casting integer to varchar, only integer to char,
|
|
@@ -30,7 +25,6 @@ module Sequel
|
|
|
30
25
|
(type == String) ? 'CHAR(254)' : super
|
|
31
26
|
end
|
|
32
27
|
|
|
33
|
-
# Derby uses the :derby database type.
|
|
34
28
|
def database_type
|
|
35
29
|
:derby
|
|
36
30
|
end
|
|
@@ -67,7 +61,6 @@ module Sequel
|
|
|
67
61
|
ds.first
|
|
68
62
|
end
|
|
69
63
|
|
|
70
|
-
# Derby-specific syntax for renaming columns and changing a columns type/nullity.
|
|
71
64
|
def alter_table_sql(table, op)
|
|
72
65
|
case op[:op]
|
|
73
66
|
when :rename_column
|
|
@@ -183,49 +176,12 @@ module Sequel
|
|
|
183
176
|
true
|
|
184
177
|
end
|
|
185
178
|
|
|
186
|
-
# The SQL query to issue to check if a connection is valid.
|
|
187
179
|
def valid_connection_sql
|
|
188
180
|
@valid_connection_sql ||= select(1).sql
|
|
189
181
|
end
|
|
190
182
|
end
|
|
191
183
|
|
|
192
|
-
# Dataset class for Derby datasets accessed via JDBC.
|
|
193
184
|
class Dataset < JDBC::Dataset
|
|
194
|
-
PAREN_CLOSE = ')'.freeze
|
|
195
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
|
|
196
|
-
PAREN_OPEN = '('.freeze
|
|
197
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
|
|
198
|
-
OFFSET = " OFFSET ".freeze
|
|
199
|
-
Sequel::Deprecation.deprecate_constant(self, :OFFSET)
|
|
200
|
-
CAST_STRING_OPEN = "RTRIM(".freeze
|
|
201
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST_STRING_OPEN)
|
|
202
|
-
BLOB_OPEN = "CAST(X'".freeze
|
|
203
|
-
Sequel::Deprecation.deprecate_constant(self, :BLOB_OPEN)
|
|
204
|
-
BLOB_CLOSE = "' AS BLOB)".freeze
|
|
205
|
-
Sequel::Deprecation.deprecate_constant(self, :BLOB_CLOSE)
|
|
206
|
-
HSTAR = "H*".freeze
|
|
207
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTAR)
|
|
208
|
-
TIME_FORMAT = "'%H:%M:%S'".freeze
|
|
209
|
-
Sequel::Deprecation.deprecate_constant(self, :TIME_FORMAT)
|
|
210
|
-
DEFAULT_FROM = " FROM sysibm.sysdummy1".freeze
|
|
211
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_FROM)
|
|
212
|
-
ROWS = " ROWS".freeze
|
|
213
|
-
Sequel::Deprecation.deprecate_constant(self, :ROWS)
|
|
214
|
-
FETCH_FIRST = " FETCH FIRST ".freeze
|
|
215
|
-
Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST)
|
|
216
|
-
ROWS_ONLY = " ROWS ONLY".freeze
|
|
217
|
-
Sequel::Deprecation.deprecate_constant(self, :ROWS_ONLY)
|
|
218
|
-
BOOL_TRUE_OLD = '(1 = 1)'.freeze
|
|
219
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE_OLD)
|
|
220
|
-
BOOL_FALSE_OLD = '(1 = 0)'.freeze
|
|
221
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE_OLD)
|
|
222
|
-
BOOL_TRUE = 'TRUE'.freeze
|
|
223
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
|
224
|
-
BOOL_FALSE = 'FALSE'.freeze
|
|
225
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
|
226
|
-
EMULATED_FUNCTION_MAP = {:char_length=>'length'.freeze}
|
|
227
|
-
Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
|
|
228
|
-
|
|
229
185
|
# Derby doesn't support an expression between CASE and WHEN,
|
|
230
186
|
# so remove conditions.
|
|
231
187
|
def case_expression_sql_append(sql, ce)
|
|
@@ -298,8 +254,7 @@ module Sequel
|
|
|
298
254
|
false
|
|
299
255
|
end
|
|
300
256
|
|
|
301
|
-
# Derby
|
|
302
|
-
# Newer versions can use the FALSE literal, but older versions cannot.
|
|
257
|
+
# Newer Derby versions can use the FALSE literal, but older versions need an always false expression.
|
|
303
258
|
def literal_false
|
|
304
259
|
if db.svn_version >= 1040133
|
|
305
260
|
'FALSE'
|
|
@@ -313,8 +268,7 @@ module Sequel
|
|
|
313
268
|
v.strftime("'%H:%M:%S'")
|
|
314
269
|
end
|
|
315
270
|
|
|
316
|
-
# Derby
|
|
317
|
-
# Newer versions can use the TRUE literal, but older versions cannot.
|
|
271
|
+
# Newer Derby versions can use the TRUE literal, but older versions need an always false expression.
|
|
318
272
|
def literal_true
|
|
319
273
|
if db.svn_version >= 1040133
|
|
320
274
|
'TRUE'
|
|
@@ -323,7 +277,7 @@ module Sequel
|
|
|
323
277
|
end
|
|
324
278
|
end
|
|
325
279
|
|
|
326
|
-
# Derby supports multiple rows in INSERT.
|
|
280
|
+
# Derby supports multiple rows for VALUES in INSERT.
|
|
327
281
|
def multi_insert_sql_strategy
|
|
328
282
|
:values
|
|
329
283
|
end
|
|
@@ -12,20 +12,12 @@ module Sequel
|
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
# Database and Dataset support for H2 databases accessed via JDBC.
|
|
16
15
|
module H2
|
|
17
|
-
# Instance methods for H2 Database objects accessed via JDBC.
|
|
18
16
|
module DatabaseMethods
|
|
19
|
-
PRIMARY_KEY_INDEX_RE = /\Aprimary_key/i.freeze
|
|
20
|
-
Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
|
|
21
|
-
|
|
22
|
-
# Commit an existing prepared transaction with the given transaction
|
|
23
|
-
# identifier string.
|
|
24
17
|
def commit_prepared_transaction(transaction_id, opts=OPTS)
|
|
25
18
|
run("COMMIT TRANSACTION #{transaction_id}", opts)
|
|
26
19
|
end
|
|
27
20
|
|
|
28
|
-
# H2 uses the :h2 database type.
|
|
29
21
|
def database_type
|
|
30
22
|
:h2
|
|
31
23
|
end
|
|
@@ -39,18 +31,16 @@ module Sequel
|
|
|
39
31
|
@h2_version ||= get(Sequel.function(:H2VERSION))
|
|
40
32
|
end
|
|
41
33
|
|
|
42
|
-
# Rollback an existing prepared transaction with the given transaction
|
|
43
|
-
# identifier string.
|
|
44
34
|
def rollback_prepared_transaction(transaction_id, opts=OPTS)
|
|
45
35
|
run("ROLLBACK TRANSACTION #{transaction_id}", opts)
|
|
46
36
|
end
|
|
47
37
|
|
|
48
|
-
# H2 uses an IDENTITY type
|
|
38
|
+
# H2 uses an IDENTITY type for primary keys
|
|
49
39
|
def serial_primary_key_options
|
|
50
40
|
{:primary_key => true, :type => :identity, :identity=>true}
|
|
51
41
|
end
|
|
52
42
|
|
|
53
|
-
# H2 supports CREATE TABLE IF NOT EXISTS syntax
|
|
43
|
+
# H2 supports CREATE TABLE IF NOT EXISTS syntax
|
|
54
44
|
def supports_create_table_if_not_exists?
|
|
55
45
|
true
|
|
56
46
|
end
|
|
@@ -82,7 +72,6 @@ module Sequel
|
|
|
82
72
|
end
|
|
83
73
|
end
|
|
84
74
|
|
|
85
|
-
# H2 needs to add a primary key column as a constraint
|
|
86
75
|
def alter_table_sql(table, op)
|
|
87
76
|
case op[:op]
|
|
88
77
|
when :add_column
|
|
@@ -94,12 +83,14 @@ module Sequel
|
|
|
94
83
|
sqls = [super(table, op)]
|
|
95
84
|
|
|
96
85
|
if pk && (h2_version >= '1.4' || op[:type] != :identity)
|
|
86
|
+
# H2 needs to add a primary key column as a constraint in this case
|
|
97
87
|
sqls << "ALTER TABLE #{quote_schema_table(table)} ADD PRIMARY KEY (#{quote_identifier(op[:name])})"
|
|
98
88
|
end
|
|
99
89
|
|
|
100
90
|
if ref
|
|
101
91
|
op[:table] = ref
|
|
102
|
-
|
|
92
|
+
constraint_name = op[:foreign_key_constraint_name]
|
|
93
|
+
sqls << "ALTER TABLE #{quote_schema_table(table)} ADD#{" CONSTRAINT #{quote_identifier(constraint_name)}" if constraint_name} FOREIGN KEY (#{quote_identifier(op[:name])}) #{column_references_sql(op)}"
|
|
103
94
|
end
|
|
104
95
|
|
|
105
96
|
sqls
|
|
@@ -168,26 +159,15 @@ module Sequel
|
|
|
168
159
|
false
|
|
169
160
|
end
|
|
170
161
|
|
|
171
|
-
# Use BIGINT IDENTITY for identity columns that use
|
|
172
|
-
# the case where primary_key :column, :type=>:Bignum is used.
|
|
162
|
+
# Use BIGINT IDENTITY for identity columns that use :Bignum type
|
|
173
163
|
def type_literal_generic_bignum_symbol(column)
|
|
174
164
|
column[:identity] ? 'BIGINT IDENTITY' : super
|
|
175
165
|
end
|
|
176
166
|
end
|
|
177
167
|
|
|
178
|
-
# Dataset class for H2 datasets accessed via JDBC.
|
|
179
168
|
class Dataset < JDBC::Dataset
|
|
180
169
|
ILIKE_PLACEHOLDER = ["CAST(".freeze, " AS VARCHAR_IGNORECASE)".freeze].freeze
|
|
181
170
|
|
|
182
|
-
APOS = "'".freeze
|
|
183
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
|
184
|
-
HSTAR = "H*".freeze
|
|
185
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTAR)
|
|
186
|
-
TIME_FORMAT = "'%H:%M:%S'".freeze
|
|
187
|
-
Sequel::Deprecation.deprecate_constant(self, :TIME_FORMAT)
|
|
188
|
-
ONLY_OFFSET = " LIMIT -1 OFFSET ".freeze
|
|
189
|
-
Sequel::Deprecation.deprecate_constant(self, :ONLY_OFFSET)
|
|
190
|
-
|
|
191
171
|
# Emulate the case insensitive LIKE operator and the bitwise operators.
|
|
192
172
|
def complex_expression_sql_append(sql, op, args)
|
|
193
173
|
case op
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
3
|
Sequel::JDBC.load_driver('org.hsqldb.jdbcDriver', :HSQLDB)
|
|
4
|
-
|
|
4
|
+
require_relative 'transactions'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
7
7
|
module JDBC
|
|
@@ -13,16 +13,10 @@ module Sequel
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
# Database and Dataset support for HSQLDB databases accessed via JDBC.
|
|
17
16
|
module HSQLDB
|
|
18
|
-
# Instance methods for HSQLDB Database objects accessed via JDBC.
|
|
19
17
|
module DatabaseMethods
|
|
20
|
-
PRIMARY_KEY_INDEX_RE = /\Asys_idx_sys_pk_/i.freeze
|
|
21
|
-
Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
|
|
22
|
-
|
|
23
18
|
include ::Sequel::JDBC::Transactions
|
|
24
19
|
|
|
25
|
-
# HSQLDB uses the :hsqldb database type.
|
|
26
20
|
def database_type
|
|
27
21
|
:hsqldb
|
|
28
22
|
end
|
|
@@ -54,13 +48,12 @@ module Sequel
|
|
|
54
48
|
|
|
55
49
|
private
|
|
56
50
|
|
|
57
|
-
# HSQLDB specific SQL for renaming columns, and changing column types and/or nullity.
|
|
58
51
|
def alter_table_sql(table, op)
|
|
59
52
|
case op[:op]
|
|
60
53
|
when :add_column
|
|
61
54
|
if op[:table]
|
|
62
55
|
[super(table, op.merge(:table=>nil)),
|
|
63
|
-
alter_table_sql(table, op.merge(:op=>:add_constraint, :type=>:foreign_key, :name=>op[:
|
|
56
|
+
alter_table_sql(table, op.merge(:op=>:add_constraint, :type=>:foreign_key, :name=>op[:foreign_key_constraint_name], :columns=>[op[:name]], :table=>op[:table]))]
|
|
64
57
|
else
|
|
65
58
|
super
|
|
66
59
|
end
|
|
@@ -144,25 +137,7 @@ module Sequel
|
|
|
144
137
|
end
|
|
145
138
|
end
|
|
146
139
|
|
|
147
|
-
# Dataset class for HSQLDB datasets accessed via JDBC.
|
|
148
140
|
class Dataset < JDBC::Dataset
|
|
149
|
-
BOOL_TRUE = 'TRUE'.freeze
|
|
150
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
|
151
|
-
BOOL_FALSE = 'FALSE'.freeze
|
|
152
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
|
153
|
-
SQL_WITH_RECURSIVE = "WITH RECURSIVE ".freeze
|
|
154
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_WITH_RECURSIVE)
|
|
155
|
-
APOS = "'".freeze
|
|
156
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
|
157
|
-
HSTAR = "H*".freeze
|
|
158
|
-
Sequel::Deprecation.deprecate_constant(self, :HSTAR)
|
|
159
|
-
BLOB_OPEN = "X'".freeze
|
|
160
|
-
Sequel::Deprecation.deprecate_constant(self, :BLOB_OPEN)
|
|
161
|
-
DEFAULT_FROM = " FROM (VALUES (0))".freeze
|
|
162
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_FROM)
|
|
163
|
-
TIME_FORMAT = "'%H:%M:%S'".freeze
|
|
164
|
-
Sequel::Deprecation.deprecate_constant(self, :TIME_FORMAT)
|
|
165
|
-
|
|
166
141
|
# Handle HSQLDB specific case insensitive LIKE and bitwise operator support.
|
|
167
142
|
def complex_expression_sql_append(sql, op, args)
|
|
168
143
|
case op
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
3
|
Sequel::JDBC.load_driver('Java::net.sourceforge.jtds.jdbc.Driver', :JTDS)
|
|
4
|
-
|
|
4
|
+
require_relative 'mssql'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
7
7
|
module JDBC
|
|
8
8
|
Sequel.synchronize do
|
|
9
9
|
DATABASE_SETUP[:jtds] = proc do |db|
|
|
10
10
|
db.extend(Sequel::JDBC::JTDS::DatabaseMethods)
|
|
11
|
-
db.
|
|
11
|
+
db.extend_datasets Sequel::MSSQL::DatasetMethods
|
|
12
12
|
db.send(:set_mssql_unicode_strings)
|
|
13
13
|
Java::net.sourceforge.jtds.jdbc.Driver
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
# Database and Dataset instance methods for JTDS specific
|
|
18
|
-
# support via JDBC.
|
|
19
17
|
module JTDS
|
|
20
18
|
module DatabaseMethods
|
|
21
19
|
include Sequel::JDBC::MSSQL::DatabaseMethods
|
|
@@ -36,11 +34,6 @@ module Sequel
|
|
|
36
34
|
cps.setNull(i, cps.getParameterMetaData.getParameterType(i))
|
|
37
35
|
end
|
|
38
36
|
end
|
|
39
|
-
|
|
40
|
-
# Dataset class for JTDS datasets accessed via JDBC.
|
|
41
|
-
class Dataset < JDBC::Dataset
|
|
42
|
-
include Sequel::MSSQL::DatasetMethods
|
|
43
|
-
end
|
|
44
37
|
end
|
|
45
38
|
end
|
|
46
39
|
end
|
|
@@ -1,21 +1,11 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative '../shared/mssql'
|
|
4
4
|
|
|
5
5
|
module Sequel
|
|
6
6
|
module JDBC
|
|
7
|
-
# Database and Dataset instance methods for MSSQL specific
|
|
8
|
-
# support via JDBC.
|
|
9
7
|
module MSSQL
|
|
10
|
-
# Database instance methods for MSSQL databases accessed via JDBC.
|
|
11
8
|
module DatabaseMethods
|
|
12
|
-
PRIMARY_KEY_INDEX_RE = /\Apk__/i.freeze
|
|
13
|
-
Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
|
|
14
|
-
ATAT_IDENTITY = 'SELECT @@IDENTITY'.freeze
|
|
15
|
-
Sequel::Deprecation.deprecate_constant(self, :ATAT_IDENTITY)
|
|
16
|
-
SCOPE_IDENTITY = 'SELECT SCOPE_IDENTITY()'.freeze
|
|
17
|
-
Sequel::Deprecation.deprecate_constant(self, :SCOPE_IDENTITY)
|
|
18
|
-
|
|
19
9
|
include Sequel::MSSQL::DatabaseMethods
|
|
20
10
|
|
|
21
11
|
private
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
3
|
Sequel::JDBC.load_driver('com.mysql.jdbc.Driver', :MySQL)
|
|
4
|
-
|
|
4
|
+
require_relative '../shared/mysql'
|
|
5
5
|
|
|
6
6
|
module Sequel
|
|
7
7
|
module JDBC
|
|
@@ -13,26 +13,12 @@ module Sequel
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
# Database and Dataset instance methods for MySQL specific
|
|
17
|
-
# support via JDBC.
|
|
18
16
|
module MySQL
|
|
19
|
-
# Database instance methods for MySQL databases accessed via JDBC.
|
|
20
17
|
module DatabaseMethods
|
|
21
18
|
include Sequel::MySQL::DatabaseMethods
|
|
22
|
-
LAST_INSERT_ID = 'SELECT LAST_INSERT_ID()'.freeze
|
|
23
|
-
Sequel::Deprecation.deprecate_constant(self, :LAST_INSERT_ID)
|
|
24
19
|
|
|
25
20
|
private
|
|
26
21
|
|
|
27
|
-
# The database name for the given database. Need to parse it out
|
|
28
|
-
# of the connection string, since the JDBC does no parsing on the
|
|
29
|
-
# given connection string by default.
|
|
30
|
-
def database_name
|
|
31
|
-
Sequel::Deprecation.deprecate("Database#database_name", "Instead, use .get(Sequel.function(:DATABASE))")
|
|
32
|
-
u = URI.parse(uri.sub(/\Ajdbc:/, ''))
|
|
33
|
-
(m = /\/(.*)/.match(u.path)) && m[1]
|
|
34
|
-
end
|
|
35
|
-
|
|
36
22
|
# MySQL exception handling with SQLState is less accurate than with regexps.
|
|
37
23
|
def database_exception_use_sqlstates?
|
|
38
24
|
false
|
|
@@ -87,6 +73,16 @@ module Sequel
|
|
|
87
73
|
mysql_connection_setting_sqls.each{|sql| statement(conn){|s| log_connection_yield(sql, conn){s.execute(sql)}}}
|
|
88
74
|
super
|
|
89
75
|
end
|
|
76
|
+
|
|
77
|
+
# Handle unsigned integer values
|
|
78
|
+
def setup_type_convertor_map
|
|
79
|
+
super
|
|
80
|
+
TypeConvertor::BASIC_MAP.dup
|
|
81
|
+
@type_convertor_map[Java::JavaSQL::Types::SMALLINT] = @type_convertor_map[Java::JavaSQL::Types::INTEGER]
|
|
82
|
+
@type_convertor_map[Java::JavaSQL::Types::INTEGER] = @type_convertor_map[Java::JavaSQL::Types::BIGINT]
|
|
83
|
+
@basic_type_convertor_map[Java::JavaSQL::Types::SMALLINT] = @basic_type_convertor_map[Java::JavaSQL::Types::INTEGER]
|
|
84
|
+
@basic_type_convertor_map[Java::JavaSQL::Types::INTEGER] = @basic_type_convertor_map[Java::JavaSQL::Types::BIGINT]
|
|
85
|
+
end
|
|
90
86
|
end
|
|
91
87
|
end
|
|
92
88
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
3
|
Sequel::JDBC.load_driver('Java::oracle.jdbc.driver.OracleDriver')
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
require_relative '../shared/oracle'
|
|
5
|
+
require_relative 'transactions'
|
|
6
6
|
|
|
7
7
|
module Sequel
|
|
8
8
|
module JDBC
|
|
@@ -14,23 +14,6 @@ module Sequel
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
# SEQUEL5: Remove
|
|
18
|
-
class Type_Convertor
|
|
19
|
-
JAVA_BIG_DECIMAL_CONSTRUCTOR = java.math.BigDecimal.java_class.constructor(Java::long).method(:new_instance)
|
|
20
|
-
|
|
21
|
-
def OracleDecimal(r, i)
|
|
22
|
-
if v = r.getBigDecimal(i)
|
|
23
|
-
i = v.long_value
|
|
24
|
-
if v == JAVA_BIG_DECIMAL_CONSTRUCTOR.call(i)
|
|
25
|
-
i
|
|
26
|
-
else
|
|
27
|
-
BigDecimal.new(v.to_string)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# Database and Dataset support for Oracle databases accessed via JDBC.
|
|
34
17
|
module Oracle
|
|
35
18
|
JAVA_BIG_DECIMAL_CONSTRUCTOR = java.math.BigDecimal.java_class.constructor(Java::long).method(:new_instance)
|
|
36
19
|
|
|
@@ -45,16 +28,12 @@ module Sequel
|
|
|
45
28
|
end
|
|
46
29
|
end
|
|
47
30
|
|
|
48
|
-
# Instance methods for Oracle Database objects accessed via JDBC.
|
|
49
31
|
module DatabaseMethods
|
|
50
|
-
PRIMARY_KEY_INDEX_RE = /\Asys_/i.freeze
|
|
51
|
-
Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
|
|
52
|
-
|
|
53
32
|
include Sequel::Oracle::DatabaseMethods
|
|
54
33
|
include Sequel::JDBC::Transactions
|
|
55
34
|
|
|
56
35
|
def self.extended(db)
|
|
57
|
-
db.
|
|
36
|
+
db.instance_exec do
|
|
58
37
|
@autosequence = opts[:autosequence]
|
|
59
38
|
@primary_key_sequences = {}
|
|
60
39
|
end
|
|
@@ -128,13 +107,12 @@ module Sequel
|
|
|
128
107
|
end
|
|
129
108
|
end
|
|
130
109
|
|
|
131
|
-
# Dataset class for Oracle datasets accessed via JDBC.
|
|
132
110
|
class Dataset < JDBC::Dataset
|
|
133
111
|
include Sequel::Oracle::DatasetMethods
|
|
134
112
|
|
|
135
113
|
NUMERIC_TYPE = Java::JavaSQL::Types::NUMERIC
|
|
136
114
|
TIMESTAMP_TYPE = Java::JavaSQL::Types::TIMESTAMP
|
|
137
|
-
TIMESTAMPTZ_TYPES = [Java::oracle.jdbc.OracleTypes::TIMESTAMPTZ, Java::oracle.jdbc.OracleTypes::TIMESTAMPLTZ]
|
|
115
|
+
TIMESTAMPTZ_TYPES = [Java::oracle.jdbc.OracleTypes::TIMESTAMPTZ, Java::oracle.jdbc.OracleTypes::TIMESTAMPLTZ].freeze
|
|
138
116
|
|
|
139
117
|
def type_convertor(map, meta, type, i)
|
|
140
118
|
case type
|