sequel 4.26.0 → 5.37.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 +5 -5
- data/CHANGELOG +405 -5656
- data/MIT-LICENSE +1 -1
- data/README.rdoc +232 -157
- data/bin/sequel +32 -9
- data/doc/advanced_associations.rdoc +252 -188
- data/doc/association_basics.rdoc +231 -273
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +75 -48
- data/doc/code_order.rdoc +28 -10
- data/doc/core_extensions.rdoc +104 -63
- data/doc/dataset_basics.rdoc +12 -21
- data/doc/dataset_filtering.rdoc +99 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +72 -46
- data/doc/model_dataset_method_design.rdoc +129 -0
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +12 -12
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +59 -69
- data/doc/opening_databases.rdoc +84 -94
- data/doc/postgresql.rdoc +268 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +184 -164
- 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.10.0.txt +84 -0
- data/doc/release_notes/5.11.0.txt +83 -0
- data/doc/release_notes/5.12.0.txt +141 -0
- data/doc/release_notes/5.13.0.txt +27 -0
- data/doc/release_notes/5.14.0.txt +63 -0
- data/doc/release_notes/5.15.0.txt +39 -0
- data/doc/release_notes/5.16.0.txt +110 -0
- data/doc/release_notes/5.17.0.txt +31 -0
- data/doc/release_notes/5.18.0.txt +69 -0
- data/doc/release_notes/5.19.0.txt +28 -0
- data/doc/release_notes/5.2.0.txt +33 -0
- data/doc/release_notes/5.20.0.txt +89 -0
- data/doc/release_notes/5.21.0.txt +87 -0
- data/doc/release_notes/5.22.0.txt +48 -0
- data/doc/release_notes/5.23.0.txt +56 -0
- data/doc/release_notes/5.24.0.txt +56 -0
- data/doc/release_notes/5.25.0.txt +32 -0
- data/doc/release_notes/5.26.0.txt +35 -0
- data/doc/release_notes/5.27.0.txt +21 -0
- data/doc/release_notes/5.28.0.txt +16 -0
- data/doc/release_notes/5.29.0.txt +22 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/release_notes/5.30.0.txt +20 -0
- data/doc/release_notes/5.31.0.txt +148 -0
- data/doc/release_notes/5.32.0.txt +46 -0
- data/doc/release_notes/5.33.0.txt +24 -0
- data/doc/release_notes/5.34.0.txt +40 -0
- data/doc/release_notes/5.35.0.txt +56 -0
- data/doc/release_notes/5.36.0.txt +60 -0
- data/doc/release_notes/5.37.0.txt +30 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.7.0.txt +108 -0
- data/doc/release_notes/5.8.0.txt +170 -0
- data/doc/release_notes/5.9.0.txt +99 -0
- data/doc/schema_modification.rdoc +102 -77
- data/doc/security.rdoc +160 -87
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +135 -122
- data/doc/testing.rdoc +34 -18
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +101 -19
- data/doc/validations.rdoc +64 -51
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel.rb +3 -1
- data/lib/sequel/adapters/ado.rb +154 -22
- data/lib/sequel/adapters/ado/access.rb +21 -21
- data/lib/sequel/adapters/ado/mssql.rb +8 -15
- data/lib/sequel/adapters/amalgalite.rb +17 -25
- data/lib/sequel/adapters/ibmdb.rb +52 -58
- data/lib/sequel/adapters/jdbc.rb +149 -127
- data/lib/sequel/adapters/jdbc/db2.rb +32 -40
- data/lib/sequel/adapters/jdbc/derby.rb +56 -58
- data/lib/sequel/adapters/jdbc/h2.rb +40 -30
- data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
- data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
- data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
- data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
- data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
- data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
- data/lib/sequel/adapters/mock.rb +104 -113
- data/lib/sequel/adapters/mysql.rb +42 -61
- data/lib/sequel/adapters/mysql2.rb +126 -35
- data/lib/sequel/adapters/odbc.rb +21 -28
- data/lib/sequel/adapters/odbc/db2.rb +3 -1
- data/lib/sequel/adapters/odbc/mssql.rb +11 -15
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/oracle.rb +62 -68
- data/lib/sequel/adapters/postgres.rb +257 -311
- data/lib/sequel/adapters/postgresql.rb +3 -1
- data/lib/sequel/adapters/shared/access.rb +75 -79
- data/lib/sequel/adapters/shared/db2.rb +96 -74
- data/lib/sequel/adapters/shared/mssql.rb +258 -213
- data/lib/sequel/adapters/shared/mysql.rb +284 -216
- data/lib/sequel/adapters/shared/oracle.rb +175 -60
- data/lib/sequel/adapters/shared/postgres.rb +829 -383
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
- data/lib/sequel/adapters/shared/sqlite.rb +382 -159
- data/lib/sequel/adapters/sqlanywhere.rb +53 -38
- data/lib/sequel/adapters/sqlite.rb +111 -105
- data/lib/sequel/adapters/tinytds.rb +38 -46
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
- data/lib/sequel/adapters/utils/replace.rb +3 -4
- data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +13 -89
- data/lib/sequel/connection_pool.rb +54 -26
- data/lib/sequel/connection_pool/sharded_single.rb +19 -12
- data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
- data/lib/sequel/connection_pool/single.rb +21 -12
- data/lib/sequel/connection_pool/threaded.rb +137 -119
- data/lib/sequel/core.rb +352 -320
- data/lib/sequel/database.rb +19 -2
- data/lib/sequel/database/connecting.rb +70 -55
- data/lib/sequel/database/dataset.rb +15 -5
- data/lib/sequel/database/dataset_defaults.rb +20 -102
- data/lib/sequel/database/features.rb +20 -4
- data/lib/sequel/database/logging.rb +25 -7
- data/lib/sequel/database/misc.rb +132 -118
- data/lib/sequel/database/query.rb +51 -28
- data/lib/sequel/database/schema_generator.rb +188 -75
- data/lib/sequel/database/schema_methods.rb +161 -92
- data/lib/sequel/database/transactions.rb +260 -58
- data/lib/sequel/dataset.rb +28 -12
- data/lib/sequel/dataset/actions.rb +354 -170
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +81 -34
- data/lib/sequel/dataset/graph.rb +82 -58
- data/lib/sequel/dataset/misc.rb +139 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +428 -214
- data/lib/sequel/dataset/sql.rb +446 -339
- data/lib/sequel/deprecated.rb +14 -2
- data/lib/sequel/exceptions.rb +48 -16
- data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
- data/lib/sequel/extensions/_model_pg_row.rb +43 -0
- data/lib/sequel/extensions/_pretty_table.rb +10 -9
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +2 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +9 -4
- data/lib/sequel/extensions/connection_expiration.rb +99 -0
- data/lib/sequel/extensions/connection_validator.rb +26 -13
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +93 -38
- data/lib/sequel/extensions/core_extensions.rb +45 -53
- data/lib/sequel/extensions/core_refinements.rb +44 -46
- data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
- data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
- data/lib/sequel/extensions/date_arithmetic.rb +42 -16
- data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
- data/lib/sequel/extensions/error_sql.rb +7 -3
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +14 -15
- data/lib/sequel/extensions/exclude_or_null.rb +68 -0
- data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
- data/lib/sequel/extensions/freeze_datasets.rb +3 -0
- data/lib/sequel/extensions/from_block.rb +2 -31
- data/lib/sequel/extensions/graph_each.rb +19 -6
- data/lib/sequel/extensions/identifier_mangling.rb +180 -0
- data/lib/sequel/extensions/implicit_subquery.rb +48 -0
- data/lib/sequel/extensions/index_caching.rb +109 -0
- data/lib/sequel/extensions/inflector.rb +8 -4
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/looser_typecasting.rb +19 -9
- data/lib/sequel/extensions/migration.rb +132 -80
- data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
- data/lib/sequel/extensions/null_dataset.rb +12 -8
- data/lib/sequel/extensions/pagination.rb +35 -28
- data/lib/sequel/extensions/pg_array.rb +227 -316
- data/lib/sequel/extensions/pg_array_ops.rb +19 -7
- data/lib/sequel/extensions/pg_enum.rb +69 -24
- data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
- data/lib/sequel/extensions/pg_hstore.rb +50 -59
- data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
- data/lib/sequel/extensions/pg_inet.rb +34 -15
- data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
- data/lib/sequel/extensions/pg_interval.rb +26 -26
- data/lib/sequel/extensions/pg_json.rb +422 -141
- data/lib/sequel/extensions/pg_json_ops.rb +248 -9
- data/lib/sequel/extensions/pg_loose_count.rb +5 -1
- data/lib/sequel/extensions/pg_range.rb +162 -146
- data/lib/sequel/extensions/pg_range_ops.rb +10 -5
- data/lib/sequel/extensions/pg_row.rb +53 -87
- data/lib/sequel/extensions/pg_row_ops.rb +36 -13
- data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/pretty_table.rb +4 -0
- data/lib/sequel/extensions/query.rb +12 -7
- data/lib/sequel/extensions/round_timestamps.rb +6 -9
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +59 -0
- data/lib/sequel/extensions/schema_caching.rb +14 -1
- data/lib/sequel/extensions/schema_dumper.rb +83 -55
- data/lib/sequel/extensions/select_remove.rb +8 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +50 -17
- data/lib/sequel/extensions/server_logging.rb +61 -0
- data/lib/sequel/extensions/split_array_nil.rb +8 -4
- data/lib/sequel/extensions/sql_comments.rb +96 -0
- data/lib/sequel/extensions/sql_expr.rb +4 -1
- data/lib/sequel/extensions/string_agg.rb +181 -0
- data/lib/sequel/extensions/string_date_time.rb +2 -0
- data/lib/sequel/extensions/symbol_aref.rb +53 -0
- data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
- data/lib/sequel/extensions/symbol_as.rb +23 -0
- data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
- data/lib/sequel/extensions/to_dot.rb +15 -5
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model.rb +36 -126
- data/lib/sequel/model/associations.rb +850 -257
- data/lib/sequel/model/base.rb +652 -764
- data/lib/sequel/model/dataset_module.rb +13 -10
- data/lib/sequel/model/default_inflections.rb +3 -1
- data/lib/sequel/model/errors.rb +3 -3
- data/lib/sequel/model/exceptions.rb +12 -12
- data/lib/sequel/model/inflections.rb +8 -19
- data/lib/sequel/model/plugins.rb +111 -0
- data/lib/sequel/plugins/accessed_columns.rb +2 -0
- data/lib/sequel/plugins/active_model.rb +32 -7
- data/lib/sequel/plugins/after_initialize.rb +3 -1
- data/lib/sequel/plugins/association_dependencies.rb +27 -18
- data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
- data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
- data/lib/sequel/plugins/association_pks.rb +181 -83
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/auto_validations.rb +58 -23
- data/lib/sequel/plugins/before_after_save.rb +8 -0
- data/lib/sequel/plugins/blacklist_security.rb +23 -12
- data/lib/sequel/plugins/boolean_readers.rb +9 -6
- data/lib/sequel/plugins/boolean_subsets.rb +64 -0
- data/lib/sequel/plugins/caching.rb +27 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
- data/lib/sequel/plugins/column_conflicts.rb +18 -3
- data/lib/sequel/plugins/column_select.rb +9 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +36 -24
- data/lib/sequel/plugins/constraint_validations.rb +37 -16
- data/lib/sequel/plugins/csv_serializer.rb +58 -35
- data/lib/sequel/plugins/dataset_associations.rb +60 -18
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +74 -13
- data/lib/sequel/plugins/delay_add_association.rb +4 -1
- data/lib/sequel/plugins/dirty.rb +65 -24
- data/lib/sequel/plugins/eager_each.rb +27 -3
- data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
- data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
- data/lib/sequel/plugins/error_splitter.rb +19 -12
- data/lib/sequel/plugins/finder.rb +246 -0
- data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
- data/lib/sequel/plugins/force_encoding.rb +9 -12
- data/lib/sequel/plugins/hook_class_methods.rb +39 -54
- data/lib/sequel/plugins/input_transformer.rb +20 -10
- data/lib/sequel/plugins/insert_conflict.rb +72 -0
- data/lib/sequel/plugins/insert_returning_select.rb +4 -2
- data/lib/sequel/plugins/instance_filters.rb +12 -8
- data/lib/sequel/plugins/instance_hooks.rb +36 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +24 -13
- data/lib/sequel/plugins/json_serializer.rb +123 -47
- data/lib/sequel/plugins/lazy_attributes.rb +20 -14
- data/lib/sequel/plugins/list.rb +40 -26
- data/lib/sequel/plugins/many_through_many.rb +28 -12
- data/lib/sequel/plugins/modification_detection.rb +17 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
- data/lib/sequel/plugins/nested_attributes.rb +55 -28
- data/lib/sequel/plugins/optimistic_locking.rb +5 -3
- data/lib/sequel/plugins/pg_array_associations.rb +52 -18
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
- data/lib/sequel/plugins/pg_row.rb +7 -51
- data/lib/sequel/plugins/prepared_statements.rb +53 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
- data/lib/sequel/plugins/rcte_tree.rb +43 -63
- data/lib/sequel/plugins/serialization.rb +37 -44
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
- data/lib/sequel/plugins/sharding.rb +17 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
- data/lib/sequel/plugins/singular_table_names.rb +2 -0
- data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +13 -6
- data/lib/sequel/plugins/static_cache.rb +79 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +5 -3
- data/lib/sequel/plugins/subclasses.rb +20 -2
- data/lib/sequel/plugins/subset_conditions.rb +48 -0
- data/lib/sequel/plugins/table_select.rb +4 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +22 -8
- data/lib/sequel/plugins/touch.rb +21 -8
- data/lib/sequel/plugins/tree.rb +57 -30
- data/lib/sequel/plugins/typecast_on_load.rb +14 -4
- data/lib/sequel/plugins/unlimited_update.rb +3 -7
- data/lib/sequel/plugins/update_or_create.rb +6 -4
- data/lib/sequel/plugins/update_primary_key.rb +3 -1
- data/lib/sequel/plugins/update_refresh.rb +28 -15
- data/lib/sequel/plugins/uuid.rb +70 -0
- data/lib/sequel/plugins/validate_associated.rb +20 -0
- data/lib/sequel/plugins/validation_class_methods.rb +40 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +49 -31
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +31 -30
- data/lib/sequel/sql.rb +479 -329
- data/lib/sequel/timezones.rb +62 -32
- data/lib/sequel/version.rb +10 -3
- metadata +177 -477
- data/Rakefile +0 -165
- data/doc/active_record.rdoc +0 -912
- data/doc/release_notes/1.0.txt +0 -38
- data/doc/release_notes/1.1.txt +0 -143
- data/doc/release_notes/1.3.txt +0 -101
- data/doc/release_notes/1.4.0.txt +0 -53
- data/doc/release_notes/1.5.0.txt +0 -155
- data/doc/release_notes/2.0.0.txt +0 -298
- data/doc/release_notes/2.1.0.txt +0 -271
- data/doc/release_notes/2.10.0.txt +0 -328
- data/doc/release_notes/2.11.0.txt +0 -215
- data/doc/release_notes/2.12.0.txt +0 -534
- data/doc/release_notes/2.2.0.txt +0 -253
- data/doc/release_notes/2.3.0.txt +0 -88
- data/doc/release_notes/2.4.0.txt +0 -106
- data/doc/release_notes/2.5.0.txt +0 -137
- data/doc/release_notes/2.6.0.txt +0 -157
- data/doc/release_notes/2.7.0.txt +0 -166
- data/doc/release_notes/2.8.0.txt +0 -171
- data/doc/release_notes/2.9.0.txt +0 -97
- data/doc/release_notes/3.0.0.txt +0 -221
- data/doc/release_notes/3.1.0.txt +0 -406
- data/doc/release_notes/3.10.0.txt +0 -286
- data/doc/release_notes/3.11.0.txt +0 -254
- data/doc/release_notes/3.12.0.txt +0 -304
- data/doc/release_notes/3.13.0.txt +0 -210
- data/doc/release_notes/3.14.0.txt +0 -118
- data/doc/release_notes/3.15.0.txt +0 -78
- data/doc/release_notes/3.16.0.txt +0 -45
- data/doc/release_notes/3.17.0.txt +0 -58
- data/doc/release_notes/3.18.0.txt +0 -120
- data/doc/release_notes/3.19.0.txt +0 -67
- data/doc/release_notes/3.2.0.txt +0 -268
- data/doc/release_notes/3.20.0.txt +0 -41
- data/doc/release_notes/3.21.0.txt +0 -87
- data/doc/release_notes/3.22.0.txt +0 -39
- data/doc/release_notes/3.23.0.txt +0 -172
- data/doc/release_notes/3.24.0.txt +0 -420
- data/doc/release_notes/3.25.0.txt +0 -88
- data/doc/release_notes/3.26.0.txt +0 -88
- data/doc/release_notes/3.27.0.txt +0 -82
- data/doc/release_notes/3.28.0.txt +0 -304
- data/doc/release_notes/3.29.0.txt +0 -459
- data/doc/release_notes/3.3.0.txt +0 -192
- data/doc/release_notes/3.30.0.txt +0 -135
- data/doc/release_notes/3.31.0.txt +0 -146
- data/doc/release_notes/3.32.0.txt +0 -202
- data/doc/release_notes/3.33.0.txt +0 -157
- data/doc/release_notes/3.34.0.txt +0 -671
- data/doc/release_notes/3.35.0.txt +0 -144
- data/doc/release_notes/3.36.0.txt +0 -245
- data/doc/release_notes/3.37.0.txt +0 -338
- data/doc/release_notes/3.38.0.txt +0 -234
- data/doc/release_notes/3.39.0.txt +0 -237
- data/doc/release_notes/3.4.0.txt +0 -325
- data/doc/release_notes/3.40.0.txt +0 -73
- data/doc/release_notes/3.41.0.txt +0 -155
- data/doc/release_notes/3.42.0.txt +0 -74
- data/doc/release_notes/3.43.0.txt +0 -105
- data/doc/release_notes/3.44.0.txt +0 -152
- data/doc/release_notes/3.45.0.txt +0 -179
- data/doc/release_notes/3.46.0.txt +0 -122
- data/doc/release_notes/3.47.0.txt +0 -270
- data/doc/release_notes/3.48.0.txt +0 -477
- data/doc/release_notes/3.5.0.txt +0 -510
- data/doc/release_notes/3.6.0.txt +0 -366
- data/doc/release_notes/3.7.0.txt +0 -179
- data/doc/release_notes/3.8.0.txt +0 -151
- data/doc/release_notes/3.9.0.txt +0 -233
- data/doc/release_notes/4.0.0.txt +0 -262
- data/doc/release_notes/4.1.0.txt +0 -85
- data/doc/release_notes/4.10.0.txt +0 -226
- data/doc/release_notes/4.11.0.txt +0 -147
- data/doc/release_notes/4.12.0.txt +0 -105
- data/doc/release_notes/4.13.0.txt +0 -169
- data/doc/release_notes/4.14.0.txt +0 -68
- data/doc/release_notes/4.15.0.txt +0 -56
- data/doc/release_notes/4.16.0.txt +0 -36
- data/doc/release_notes/4.17.0.txt +0 -38
- data/doc/release_notes/4.18.0.txt +0 -36
- data/doc/release_notes/4.19.0.txt +0 -45
- data/doc/release_notes/4.2.0.txt +0 -129
- data/doc/release_notes/4.20.0.txt +0 -79
- data/doc/release_notes/4.21.0.txt +0 -94
- data/doc/release_notes/4.22.0.txt +0 -72
- data/doc/release_notes/4.23.0.txt +0 -65
- data/doc/release_notes/4.24.0.txt +0 -99
- data/doc/release_notes/4.25.0.txt +0 -181
- data/doc/release_notes/4.26.0.txt +0 -44
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.4.0.txt +0 -92
- data/doc/release_notes/4.5.0.txt +0 -34
- data/doc/release_notes/4.6.0.txt +0 -30
- data/doc/release_notes/4.7.0.txt +0 -103
- data/doc/release_notes/4.8.0.txt +0 -175
- data/doc/release_notes/4.9.0.txt +0 -190
- data/lib/sequel/adapters/cubrid.rb +0 -142
- data/lib/sequel/adapters/do.rb +0 -156
- data/lib/sequel/adapters/do/mysql.rb +0 -64
- data/lib/sequel/adapters/do/postgres.rb +0 -42
- data/lib/sequel/adapters/do/sqlite3.rb +0 -40
- data/lib/sequel/adapters/jdbc/as400.rb +0 -82
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
- data/lib/sequel/adapters/odbc/progress.rb +0 -8
- data/lib/sequel/adapters/shared/cubrid.rb +0 -243
- data/lib/sequel/adapters/shared/firebird.rb +0 -245
- data/lib/sequel/adapters/shared/informix.rb +0 -52
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
- data/lib/sequel/adapters/shared/progress.rb +0 -38
- data/lib/sequel/adapters/swift.rb +0 -158
- data/lib/sequel/adapters/swift/mysql.rb +0 -47
- data/lib/sequel/adapters/swift/postgres.rb +0 -45
- data/lib/sequel/adapters/swift/sqlite.rb +0 -47
- data/lib/sequel/adapters/utils/pg_types.rb +0 -68
- data/lib/sequel/dataset/mutation.rb +0 -109
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
- data/lib/sequel/extensions/filter_having.rb +0 -59
- data/lib/sequel/extensions/hash_aliases.rb +0 -45
- data/lib/sequel/extensions/meta_def.rb +0 -31
- data/lib/sequel/extensions/query_literals.rb +0 -80
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
- data/lib/sequel/extensions/set_overrides.rb +0 -72
- data/lib/sequel/no_core_ext.rb +0 -1
- data/lib/sequel/plugins/association_autoreloading.rb +0 -7
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
- data/lib/sequel/plugins/schema.rb +0 -80
- data/lib/sequel/plugins/scissors.rb +0 -33
- data/spec/adapters/db2_spec.rb +0 -160
- data/spec/adapters/firebird_spec.rb +0 -411
- data/spec/adapters/informix_spec.rb +0 -100
- data/spec/adapters/mssql_spec.rb +0 -706
- data/spec/adapters/mysql_spec.rb +0 -1287
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3725
- data/spec/adapters/spec_helper.rb +0 -43
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -653
- data/spec/bin_spec.rb +0 -254
- data/spec/core/connection_pool_spec.rb +0 -1016
- data/spec/core/database_spec.rb +0 -2531
- data/spec/core/dataset_spec.rb +0 -5098
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1243
- data/spec/core/mock_adapter_spec.rb +0 -462
- data/spec/core/object_graph_spec.rb +0 -303
- data/spec/core/placeholder_literalizer_spec.rb +0 -163
- data/spec/core/schema_generator_spec.rb +0 -179
- data/spec/core/schema_spec.rb +0 -1659
- data/spec/core/spec_helper.rb +0 -34
- data/spec/core/version_spec.rb +0 -7
- data/spec/core_extensions_spec.rb +0 -699
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -123
- data/spec/extensions/after_initialize_spec.rb +0 -24
- data/spec/extensions/arbitrary_servers_spec.rb +0 -109
- data/spec/extensions/association_dependencies_spec.rb +0 -117
- data/spec/extensions/association_pks_spec.rb +0 -365
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/blacklist_security_spec.rb +0 -88
- data/spec/extensions/blank_spec.rb +0 -69
- data/spec/extensions/boolean_readers_spec.rb +0 -93
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -420
- data/spec/extensions/column_conflicts_spec.rb +0 -60
- data/spec/extensions/column_select_spec.rb +0 -108
- data/spec/extensions/columns_introspection_spec.rb +0 -91
- data/spec/extensions/composition_spec.rb +0 -242
- data/spec/extensions/connection_validator_spec.rb +0 -120
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
- data/spec/extensions/constraint_validations_spec.rb +0 -325
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -173
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -311
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -150
- data/spec/extensions/defaults_setter_spec.rb +0 -101
- data/spec/extensions/delay_add_association_spec.rb +0 -52
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/eager_each_spec.rb +0 -42
- data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
- data/spec/extensions/error_splitter_spec.rb +0 -18
- data/spec/extensions/error_sql_spec.rb +0 -20
- data/spec/extensions/eval_inspect_spec.rb +0 -73
- data/spec/extensions/filter_having_spec.rb +0 -40
- data/spec/extensions/force_encoding_spec.rb +0 -114
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/graph_each_spec.rb +0 -109
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/inflector_spec.rb +0 -183
- data/spec/extensions/input_transformer_spec.rb +0 -54
- data/spec/extensions/insert_returning_select_spec.rb +0 -46
- data/spec/extensions/instance_filters_spec.rb +0 -79
- data/spec/extensions/instance_hooks_spec.rb +0 -276
- data/spec/extensions/inverted_subsets_spec.rb +0 -33
- data/spec/extensions/json_serializer_spec.rb +0 -291
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -267
- data/spec/extensions/looser_typecasting_spec.rb +0 -43
- data/spec/extensions/many_through_many_spec.rb +0 -2172
- data/spec/extensions/meta_def_spec.rb +0 -21
- data/spec/extensions/migration_spec.rb +0 -712
- data/spec/extensions/modification_detection_spec.rb +0 -80
- data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
- data/spec/extensions/named_timezones_spec.rb +0 -108
- data/spec/extensions/nested_attributes_spec.rb +0 -697
- data/spec/extensions/null_dataset_spec.rb +0 -85
- data/spec/extensions/optimistic_locking_spec.rb +0 -128
- data/spec/extensions/pagination_spec.rb +0 -118
- data/spec/extensions/pg_array_associations_spec.rb +0 -736
- data/spec/extensions/pg_array_ops_spec.rb +0 -143
- data/spec/extensions/pg_array_spec.rb +0 -395
- data/spec/extensions/pg_enum_spec.rb +0 -92
- data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
- data/spec/extensions/pg_hstore_spec.rb +0 -206
- data/spec/extensions/pg_inet_ops_spec.rb +0 -101
- data/spec/extensions/pg_inet_spec.rb +0 -52
- data/spec/extensions/pg_interval_spec.rb +0 -76
- data/spec/extensions/pg_json_ops_spec.rb +0 -229
- data/spec/extensions/pg_json_spec.rb +0 -218
- data/spec/extensions/pg_loose_count_spec.rb +0 -17
- data/spec/extensions/pg_range_ops_spec.rb +0 -58
- data/spec/extensions/pg_range_spec.rb +0 -404
- data/spec/extensions/pg_row_ops_spec.rb +0 -60
- data/spec/extensions/pg_row_plugin_spec.rb +0 -62
- data/spec/extensions/pg_row_spec.rb +0 -360
- data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
- data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
- data/spec/extensions/prepared_statements_spec.rb +0 -103
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
- data/spec/extensions/pretty_table_spec.rb +0 -92
- data/spec/extensions/query_literals_spec.rb +0 -183
- data/spec/extensions/query_spec.rb +0 -102
- data/spec/extensions/rcte_tree_spec.rb +0 -392
- data/spec/extensions/round_timestamps_spec.rb +0 -43
- data/spec/extensions/schema_caching_spec.rb +0 -41
- data/spec/extensions/schema_dumper_spec.rb +0 -789
- data/spec/extensions/schema_spec.rb +0 -117
- data/spec/extensions/scissors_spec.rb +0 -26
- data/spec/extensions/select_remove_spec.rb +0 -38
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
- data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
- data/spec/extensions/serialization_spec.rb +0 -362
- data/spec/extensions/server_block_spec.rb +0 -90
- data/spec/extensions/set_overrides_spec.rb +0 -61
- data/spec/extensions/sharding_spec.rb +0 -198
- data/spec/extensions/shared_caching_spec.rb +0 -175
- data/spec/extensions/single_table_inheritance_spec.rb +0 -297
- data/spec/extensions/singular_table_names_spec.rb +0 -22
- data/spec/extensions/skip_create_refresh_spec.rb +0 -17
- data/spec/extensions/spec_helper.rb +0 -71
- data/spec/extensions/split_array_nil_spec.rb +0 -24
- data/spec/extensions/split_values_spec.rb +0 -22
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_date_time_spec.rb +0 -95
- data/spec/extensions/string_stripper_spec.rb +0 -68
- data/spec/extensions/subclasses_spec.rb +0 -66
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
- data/spec/extensions/thread_local_timezones_spec.rb +0 -67
- data/spec/extensions/timestamps_spec.rb +0 -175
- data/spec/extensions/to_dot_spec.rb +0 -154
- data/spec/extensions/touch_spec.rb +0 -203
- data/spec/extensions/tree_spec.rb +0 -274
- data/spec/extensions/typecast_on_load_spec.rb +0 -80
- data/spec/extensions/unlimited_update_spec.rb +0 -20
- data/spec/extensions/update_or_create_spec.rb +0 -87
- data/spec/extensions/update_primary_key_spec.rb +0 -100
- data/spec/extensions/update_refresh_spec.rb +0 -53
- data/spec/extensions/validate_associated_spec.rb +0 -52
- data/spec/extensions/validation_class_methods_spec.rb +0 -1027
- data/spec/extensions/validation_helpers_spec.rb +0 -541
- data/spec/extensions/xml_serializer_spec.rb +0 -207
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
- data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
- data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
- data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/reversible_migrations/001_reversible.rb +0 -5
- data/spec/files/reversible_migrations/002_reversible.rb +0 -5
- data/spec/files/reversible_migrations/003_reversible.rb +0 -5
- data/spec/files/reversible_migrations/004_reversible.rb +0 -5
- data/spec/files/reversible_migrations/005_reversible.rb +0 -10
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
- data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
- data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
- data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
- data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
- data/spec/guards_helper.rb +0 -55
- data/spec/integration/associations_test.rb +0 -2454
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1808
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -240
- data/spec/integration/model_test.rb +0 -226
- data/spec/integration/plugin_test.rb +0 -2240
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -817
- data/spec/integration/spec_helper.rb +0 -48
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -374
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -525
- data/spec/model/associations_spec.rb +0 -4426
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -146
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2137
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -982
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2147
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../utils/emulate_offset_with_reverse_and_count'
|
|
4
|
+
require_relative '../utils/unmodified_identifiers'
|
|
3
5
|
|
|
6
|
+
module Sequel
|
|
4
7
|
module Access
|
|
8
|
+
Sequel::Database.set_shared_adapter_scheme(:access, self)
|
|
9
|
+
|
|
5
10
|
module DatabaseMethods
|
|
6
|
-
|
|
11
|
+
include UnmodifiedIdentifiers::DatabaseMethods
|
|
7
12
|
|
|
8
|
-
# Access uses type :access as the database_type
|
|
9
13
|
def database_type
|
|
10
14
|
:access
|
|
11
15
|
end
|
|
12
16
|
|
|
13
17
|
# Doesn't work, due to security restrictions on MSysObjects
|
|
14
18
|
#def tables
|
|
15
|
-
# from(:MSysObjects).
|
|
19
|
+
# from(:MSysObjects).where(:Type=>1, :Flags=>0).select_map(:Name).map(&:to_sym)
|
|
16
20
|
#end
|
|
17
21
|
|
|
18
22
|
# Access doesn't support renaming tables from an SQL query,
|
|
@@ -52,22 +56,13 @@ module Sequel
|
|
|
52
56
|
DATABASE_ERROR_REGEXPS
|
|
53
57
|
end
|
|
54
58
|
|
|
55
|
-
# The SQL to drop an index for the table.
|
|
56
59
|
def drop_index_sql(table, op)
|
|
57
60
|
"DROP INDEX #{quote_identifier(op[:name] || default_index_name(table, op[:columns]))} ON #{quote_schema_table(table)}"
|
|
58
61
|
end
|
|
59
62
|
|
|
60
|
-
def identifier_input_method_default
|
|
61
|
-
nil
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def identifier_output_method_default
|
|
65
|
-
nil
|
|
66
|
-
end
|
|
67
|
-
|
|
68
63
|
# Access doesn't have a 64-bit integer type, so use integer and hope
|
|
69
64
|
# the user isn't using more than 32 bits.
|
|
70
|
-
def
|
|
65
|
+
def type_literal_generic_bignum_symbol(column)
|
|
71
66
|
:integer
|
|
72
67
|
end
|
|
73
68
|
|
|
@@ -87,33 +82,14 @@ module Sequel
|
|
|
87
82
|
Dataset.def_sql_method(self, :select, %w'select distinct limit columns into from join where group order having compounds')
|
|
88
83
|
end)
|
|
89
84
|
include EmulateOffsetWithReverseAndCount
|
|
85
|
+
include UnmodifiedIdentifiers::DatasetMethods
|
|
86
|
+
|
|
87
|
+
EXTRACT_MAP = {:year=>"'yyyy'", :month=>"'m'", :day=>"'d'", :hour=>"'h'", :minute=>"'n'", :second=>"'s'"}.freeze
|
|
88
|
+
EXTRACT_MAP.each_value(&:freeze)
|
|
89
|
+
OPS = {:'%'=>' Mod '.freeze, :'||'=>' & '.freeze}.freeze
|
|
90
|
+
CAST_TYPES = {String=>:CStr, Integer=>:CLng, Date=>:CDate, Time=>:CDate, DateTime=>:CDate, Numeric=>:CDec, BigDecimal=>:CDec, File=>:CStr, Float=>:CDbl, TrueClass=>:CBool, FalseClass=>:CBool}.freeze
|
|
90
91
|
|
|
91
|
-
|
|
92
|
-
TIMESTAMP_FORMAT = '#%Y-%m-%d %H:%M:%S#'.freeze
|
|
93
|
-
TOP = " TOP ".freeze
|
|
94
|
-
BRACKET_CLOSE = Dataset::BRACKET_CLOSE
|
|
95
|
-
BRACKET_OPEN = Dataset::BRACKET_OPEN
|
|
96
|
-
PAREN_CLOSE = Dataset::PAREN_CLOSE
|
|
97
|
-
PAREN_OPEN = Dataset::PAREN_OPEN
|
|
98
|
-
INTO = Dataset::INTO
|
|
99
|
-
FROM = Dataset::FROM
|
|
100
|
-
SPACE = Dataset::SPACE
|
|
101
|
-
NOT_EQUAL = ' <> '.freeze
|
|
102
|
-
OPS = {:'%'=>' Mod '.freeze, :'||'=>' & '.freeze}
|
|
103
|
-
BOOL_FALSE = '0'.freeze
|
|
104
|
-
BOOL_TRUE = '-1'.freeze
|
|
105
|
-
DATE_FUNCTION = 'Date()'.freeze
|
|
106
|
-
NOW_FUNCTION = 'Now()'.freeze
|
|
107
|
-
TIME_FUNCTION = 'Time()'.freeze
|
|
108
|
-
CAST_TYPES = {String=>:CStr, Integer=>:CLng, Date=>:CDate, Time=>:CDate, DateTime=>:CDate, Numeric=>:CDec, BigDecimal=>:CDec, File=>:CStr, Float=>:CDbl, TrueClass=>:CBool, FalseClass=>:CBool}
|
|
109
|
-
|
|
110
|
-
EMULATED_FUNCTION_MAP = {:char_length=>:len}
|
|
111
|
-
EXTRACT_MAP = {:year=>"'yyyy'", :month=>"'m'", :day=>"'d'", :hour=>"'h'", :minute=>"'n'", :second=>"'s'"}
|
|
112
|
-
COMMA = Dataset::COMMA
|
|
113
|
-
DATEPART_OPEN = "datepart(".freeze
|
|
114
|
-
|
|
115
|
-
# Access doesn't support CASE, but it can be emulated with nested
|
|
116
|
-
# IIF function calls.
|
|
92
|
+
# Access doesn't support CASE, so emulate it with nested IIF function calls.
|
|
117
93
|
def case_expression_sql_append(sql, ce)
|
|
118
94
|
literal_append(sql, ce.with_merged_expression.conditions.reverse.inject(ce.default){|exp,(cond,val)| Sequel::SQL::Function.new(:IIF, cond, val, exp)})
|
|
119
95
|
end
|
|
@@ -122,9 +98,9 @@ module Sequel
|
|
|
122
98
|
# type conversion
|
|
123
99
|
def cast_sql_append(sql, expr, type)
|
|
124
100
|
sql << CAST_TYPES.fetch(type, type).to_s
|
|
125
|
-
sql <<
|
|
101
|
+
sql << '('
|
|
126
102
|
literal_append(sql, expr)
|
|
127
|
-
sql <<
|
|
103
|
+
sql << ')'
|
|
128
104
|
end
|
|
129
105
|
|
|
130
106
|
def complex_expression_sql_append(sql, op, args)
|
|
@@ -133,20 +109,14 @@ module Sequel
|
|
|
133
109
|
complex_expression_sql_append(sql, :LIKE, args)
|
|
134
110
|
when :'NOT ILIKE'
|
|
135
111
|
complex_expression_sql_append(sql, :'NOT LIKE', args)
|
|
136
|
-
when :LIKE, :'NOT LIKE'
|
|
137
|
-
sql << PAREN_OPEN
|
|
138
|
-
literal_append(sql, args.at(0))
|
|
139
|
-
sql << SPACE << op.to_s << SPACE
|
|
140
|
-
literal_append(sql, args.at(1))
|
|
141
|
-
sql << PAREN_CLOSE
|
|
142
112
|
when :'!='
|
|
143
|
-
sql <<
|
|
144
|
-
literal_append(sql, args
|
|
145
|
-
sql <<
|
|
146
|
-
literal_append(sql, args
|
|
147
|
-
sql <<
|
|
113
|
+
sql << '('
|
|
114
|
+
literal_append(sql, args[0])
|
|
115
|
+
sql << ' <> '
|
|
116
|
+
literal_append(sql, args[1])
|
|
117
|
+
sql << ')'
|
|
148
118
|
when :'%', :'||'
|
|
149
|
-
sql <<
|
|
119
|
+
sql << '('
|
|
150
120
|
c = false
|
|
151
121
|
op_str = OPS[op]
|
|
152
122
|
args.each do |a|
|
|
@@ -154,27 +124,33 @@ module Sequel
|
|
|
154
124
|
literal_append(sql, a)
|
|
155
125
|
c ||= true
|
|
156
126
|
end
|
|
157
|
-
sql <<
|
|
127
|
+
sql << ')'
|
|
128
|
+
when :**
|
|
129
|
+
sql << '('
|
|
130
|
+
literal_append(sql, args[0])
|
|
131
|
+
sql << ' ^ '
|
|
132
|
+
literal_append(sql, args[1])
|
|
133
|
+
sql << ')'
|
|
158
134
|
when :extract
|
|
159
|
-
part = args
|
|
135
|
+
part = args[0]
|
|
160
136
|
raise(Sequel::Error, "unsupported extract argument: #{part.inspect}") unless format = EXTRACT_MAP[part]
|
|
161
|
-
sql <<
|
|
162
|
-
literal_append(sql, args
|
|
163
|
-
sql <<
|
|
137
|
+
sql << "datepart(" << format.to_s << ', '
|
|
138
|
+
literal_append(sql, args[1])
|
|
139
|
+
sql << ')'
|
|
164
140
|
else
|
|
165
141
|
super
|
|
166
142
|
end
|
|
167
143
|
end
|
|
168
144
|
|
|
169
|
-
# Use Date() and
|
|
145
|
+
# Use Date(), Now(), and Time() for CURRENT_DATE, CURRENT_TIMESTAMP, and CURRENT_TIME
|
|
170
146
|
def constant_sql_append(sql, constant)
|
|
171
147
|
case constant
|
|
172
148
|
when :CURRENT_DATE
|
|
173
|
-
sql <<
|
|
149
|
+
sql << 'Date()'
|
|
174
150
|
when :CURRENT_TIMESTAMP
|
|
175
|
-
sql <<
|
|
151
|
+
sql << 'Now()'
|
|
176
152
|
when :CURRENT_TIME
|
|
177
|
-
sql <<
|
|
153
|
+
sql << 'Time()'
|
|
178
154
|
else
|
|
179
155
|
super
|
|
180
156
|
end
|
|
@@ -195,6 +171,12 @@ module Sequel
|
|
|
195
171
|
clone(:into => table)
|
|
196
172
|
end
|
|
197
173
|
|
|
174
|
+
# Access uses [] for quoting identifiers, and can't handle
|
|
175
|
+
# ] inside identifiers.
|
|
176
|
+
def quoted_identifier_append(sql, v)
|
|
177
|
+
sql << '[' << v.to_s << ']'
|
|
178
|
+
end
|
|
179
|
+
|
|
198
180
|
# Access does not support derived column lists.
|
|
199
181
|
def supports_derived_column_lists?
|
|
200
182
|
false
|
|
@@ -230,31 +212,50 @@ module Sequel
|
|
|
230
212
|
|
|
231
213
|
# Access uses # to quote dates
|
|
232
214
|
def literal_date(d)
|
|
233
|
-
d.strftime(
|
|
215
|
+
d.strftime('#%Y-%m-%d#')
|
|
234
216
|
end
|
|
235
217
|
|
|
236
218
|
# Access uses # to quote datetimes
|
|
237
219
|
def literal_datetime(t)
|
|
238
|
-
t.strftime(
|
|
220
|
+
t.strftime('#%Y-%m-%d %H:%M:%S#')
|
|
239
221
|
end
|
|
240
222
|
alias literal_time literal_datetime
|
|
241
223
|
|
|
242
224
|
# Use 0 for false on MSSQL
|
|
243
225
|
def literal_false
|
|
244
|
-
|
|
226
|
+
'0'
|
|
245
227
|
end
|
|
246
228
|
|
|
247
|
-
# Use
|
|
229
|
+
# Use -1 for true on MSSQL
|
|
248
230
|
def literal_true
|
|
249
|
-
|
|
231
|
+
'-1'
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# Emulate the char_length function with len
|
|
235
|
+
def native_function_name(emulated_function)
|
|
236
|
+
if emulated_function == :char_length
|
|
237
|
+
'len'
|
|
238
|
+
else
|
|
239
|
+
super
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Access does not natively support NULLS FIRST/LAST.
|
|
244
|
+
def requires_emulating_nulls_first?
|
|
245
|
+
true
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# Access doesn't support ESCAPE for LIKE.
|
|
249
|
+
def requires_like_escape?
|
|
250
|
+
false
|
|
250
251
|
end
|
|
251
252
|
|
|
252
253
|
# Access requires parentheses when joining more than one table
|
|
253
254
|
def select_from_sql(sql)
|
|
254
255
|
if f = @opts[:from]
|
|
255
|
-
sql << FROM
|
|
256
|
+
sql << ' FROM '
|
|
256
257
|
if (j = @opts[:join]) && !j.empty?
|
|
257
|
-
sql << (
|
|
258
|
+
sql << ('(' * j.length)
|
|
258
259
|
end
|
|
259
260
|
source_list_append(sql, f)
|
|
260
261
|
end
|
|
@@ -262,7 +263,7 @@ module Sequel
|
|
|
262
263
|
|
|
263
264
|
def select_into_sql(sql)
|
|
264
265
|
if i = @opts[:into]
|
|
265
|
-
sql << INTO
|
|
266
|
+
sql << " INTO "
|
|
266
267
|
identifier_append(sql, i)
|
|
267
268
|
end
|
|
268
269
|
end
|
|
@@ -272,7 +273,7 @@ module Sequel
|
|
|
272
273
|
if js = @opts[:join]
|
|
273
274
|
js.each do |j|
|
|
274
275
|
literal_append(sql, j)
|
|
275
|
-
sql <<
|
|
276
|
+
sql << ')'
|
|
276
277
|
end
|
|
277
278
|
end
|
|
278
279
|
end
|
|
@@ -280,15 +281,10 @@ module Sequel
|
|
|
280
281
|
# Access uses TOP for limits
|
|
281
282
|
def select_limit_sql(sql)
|
|
282
283
|
if l = @opts[:limit]
|
|
283
|
-
sql << TOP
|
|
284
|
+
sql << " TOP "
|
|
284
285
|
literal_append(sql, l)
|
|
285
286
|
end
|
|
286
287
|
end
|
|
287
|
-
|
|
288
|
-
# Access uses [] for quoting identifiers
|
|
289
|
-
def quoted_identifier_append(sql, v)
|
|
290
|
-
sql << BRACKET_OPEN << v.to_s << BRACKET_CLOSE
|
|
291
|
-
end
|
|
292
288
|
end
|
|
293
289
|
end
|
|
294
290
|
end
|
|
@@ -1,22 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../utils/emulate_offset_with_row_number'
|
|
2
4
|
|
|
3
5
|
module Sequel
|
|
4
6
|
module DB2
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class << self
|
|
8
|
-
# Whether to use clob as the generic File type, true by default.
|
|
9
|
-
attr_accessor :use_clob_as_blob
|
|
10
|
-
end
|
|
7
|
+
Sequel::Database.set_shared_adapter_scheme(:db2, self)
|
|
11
8
|
|
|
12
9
|
module DatabaseMethods
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
AUTOINCREMENT = 'GENERATED ALWAYS AS IDENTITY'.freeze
|
|
16
|
-
NOT_NULL = ' NOT NULL'.freeze
|
|
17
|
-
NULL = ''.freeze
|
|
10
|
+
# Whether to use clob as the generic File type, false by default.
|
|
11
|
+
attr_accessor :use_clob_as_blob
|
|
18
12
|
|
|
19
|
-
# DB2 always uses :db2 as it's database type
|
|
20
13
|
def database_type
|
|
21
14
|
:db2
|
|
22
15
|
end
|
|
@@ -24,22 +17,31 @@ module Sequel
|
|
|
24
17
|
# Return the database version as a string. Don't rely on this,
|
|
25
18
|
# it may return an integer in the future.
|
|
26
19
|
def db2_version
|
|
27
|
-
return @db2_version if @db2_version
|
|
20
|
+
return @db2_version if defined?(@db2_version)
|
|
28
21
|
@db2_version = metadata_dataset.with_sql("select service_level from sysibmadm.env_inst_info").first[:service_level]
|
|
29
22
|
end
|
|
30
23
|
alias_method :server_version, :db2_version
|
|
31
24
|
|
|
25
|
+
def freeze
|
|
26
|
+
db2_version
|
|
27
|
+
offset_strategy
|
|
28
|
+
super
|
|
29
|
+
end
|
|
30
|
+
|
|
32
31
|
# Use SYSIBM.SYSCOLUMNS to get the information on the tables.
|
|
33
32
|
def schema_parse_table(table, opts = OPTS)
|
|
34
33
|
m = output_identifier_meth(opts[:dataset])
|
|
35
34
|
im = input_identifier_meth(opts[:dataset])
|
|
36
35
|
metadata_dataset.with_sql("SELECT * FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = #{literal(im.call(table))} ORDER BY COLNO").
|
|
37
36
|
collect do |column|
|
|
38
|
-
column[:db_type]
|
|
39
|
-
if column[:db_type]
|
|
37
|
+
column[:db_type] = column.delete(:typename)
|
|
38
|
+
if column[:db_type] =~ /\A(VAR)?CHAR\z/
|
|
39
|
+
column[:db_type] << "(#{column[:length]})"
|
|
40
|
+
end
|
|
41
|
+
if column[:db_type] == "DECIMAL"
|
|
40
42
|
column[:db_type] << "(#{column[:longlength]},#{column[:scale]})"
|
|
41
43
|
end
|
|
42
|
-
column[:allow_null]
|
|
44
|
+
column[:allow_null] = column.delete(:nulls) == 'Y'
|
|
43
45
|
identity = column.delete(:identity) == 'Y'
|
|
44
46
|
if column[:primary_key] = identity || !column[:keyseq].nil?
|
|
45
47
|
column[:auto_increment] = identity
|
|
@@ -67,9 +69,10 @@ module Sequel
|
|
|
67
69
|
# Use SYSCAT.INDEXES to get the indexes for the table
|
|
68
70
|
def indexes(table, opts = OPTS)
|
|
69
71
|
m = output_identifier_meth
|
|
72
|
+
table = table.value if table.is_a?(Sequel::SQL::Identifier)
|
|
70
73
|
indexes = {}
|
|
71
74
|
metadata_dataset.
|
|
72
|
-
from(:
|
|
75
|
+
from(Sequel[:syscat][:indexes]).
|
|
73
76
|
select(:indname, :uniquerule, :colnames).
|
|
74
77
|
where(:tabname=>input_identifier_meth.call(table), :system_required=>0).
|
|
75
78
|
each do |r|
|
|
@@ -78,6 +81,17 @@ module Sequel
|
|
|
78
81
|
indexes
|
|
79
82
|
end
|
|
80
83
|
|
|
84
|
+
def offset_strategy
|
|
85
|
+
return @offset_strategy if defined?(@offset_strategy)
|
|
86
|
+
|
|
87
|
+
@offset_strategy = case strategy = opts[:offset_strategy].to_s
|
|
88
|
+
when "limit_offset", "offset_fetch"
|
|
89
|
+
opts[:offset_strategy] = strategy.to_sym
|
|
90
|
+
else
|
|
91
|
+
opts[:offset_strategy] = :emulate
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
81
95
|
# DB2 supports transaction isolation levels.
|
|
82
96
|
def supports_transaction_isolation_levels?
|
|
83
97
|
true
|
|
@@ -104,7 +118,6 @@ module Sequel
|
|
|
104
118
|
|
|
105
119
|
private
|
|
106
120
|
|
|
107
|
-
# Handle DB2 specific alter table operations.
|
|
108
121
|
def alter_table_sql(table, op)
|
|
109
122
|
case op[:op]
|
|
110
123
|
when :add_column
|
|
@@ -112,7 +125,7 @@ module Sequel
|
|
|
112
125
|
[
|
|
113
126
|
"ALTER TABLE #{quote_schema_table(table)} ADD #{column_definition_sql(op.merge(:auto_increment=>false, :primary_key=>false, :default=>0, :null=>false))}",
|
|
114
127
|
"ALTER TABLE #{quote_schema_table(table)} ALTER COLUMN #{literal(op[:name])} DROP DEFAULT",
|
|
115
|
-
"ALTER TABLE #{quote_schema_table(table)} ALTER COLUMN #{literal(op[:name])} SET #{
|
|
128
|
+
"ALTER TABLE #{quote_schema_table(table)} ALTER COLUMN #{literal(op[:name])} SET #{auto_increment_sql}"
|
|
116
129
|
]
|
|
117
130
|
else
|
|
118
131
|
"ALTER TABLE #{quote_schema_table(table)} ADD #{column_definition_sql(op)}"
|
|
@@ -150,16 +163,12 @@ module Sequel
|
|
|
150
163
|
|
|
151
164
|
# DB2 uses an identity column for autoincrement.
|
|
152
165
|
def auto_increment_sql
|
|
153
|
-
|
|
166
|
+
'GENERATED ALWAYS AS IDENTITY'
|
|
154
167
|
end
|
|
155
168
|
|
|
156
|
-
#
|
|
157
|
-
def
|
|
158
|
-
|
|
159
|
-
null = false if column[:primary_key]
|
|
160
|
-
|
|
161
|
-
sql << NOT_NULL if null == false
|
|
162
|
-
sql << NULL if null == true
|
|
169
|
+
# DB2 does not allow adding primary key constraints to NULLable columns.
|
|
170
|
+
def can_add_primary_key_constraint_on_nullable_columns?
|
|
171
|
+
false
|
|
163
172
|
end
|
|
164
173
|
|
|
165
174
|
# Supply columns with NOT NULL if they are part of a composite
|
|
@@ -229,7 +238,7 @@ module Sequel
|
|
|
229
238
|
|
|
230
239
|
# Treat clob as blob if use_clob_as_blob is true
|
|
231
240
|
def schema_column_type(db_type)
|
|
232
|
-
(
|
|
241
|
+
(use_clob_as_blob && db_type.downcase == 'clob') ? :blob : super
|
|
233
242
|
end
|
|
234
243
|
|
|
235
244
|
# SQL to set the transaction isolation level
|
|
@@ -242,7 +251,7 @@ module Sequel
|
|
|
242
251
|
# use this for blob value:
|
|
243
252
|
# cast(X'fffefdfcfbfa' as blob(2G))
|
|
244
253
|
def type_literal_generic_file(column)
|
|
245
|
-
|
|
254
|
+
use_clob_as_blob ? :clob : :blob
|
|
246
255
|
end
|
|
247
256
|
|
|
248
257
|
# DB2 uses smallint to store booleans.
|
|
@@ -265,28 +274,14 @@ module Sequel
|
|
|
265
274
|
module DatasetMethods
|
|
266
275
|
include EmulateOffsetWithRowNumber
|
|
267
276
|
|
|
268
|
-
|
|
269
|
-
PAREN_OPEN = Dataset::PAREN_OPEN
|
|
270
|
-
BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR, :'B~'=>:BITNOT}
|
|
271
|
-
EMULATED_FUNCTION_MAP = {:char_length=>'length'.freeze}
|
|
272
|
-
BOOL_TRUE = '1'.freeze
|
|
273
|
-
BOOL_FALSE = '0'.freeze
|
|
274
|
-
CAST_STRING_OPEN = "RTRIM(CHAR(".freeze
|
|
275
|
-
CAST_STRING_CLOSE = "))".freeze
|
|
276
|
-
FETCH_FIRST_ROW_ONLY = " FETCH FIRST ROW ONLY".freeze
|
|
277
|
-
FETCH_FIRST = " FETCH FIRST ".freeze
|
|
278
|
-
ROWS_ONLY = " ROWS ONLY".freeze
|
|
279
|
-
EMPTY_FROM_TABLE = ' FROM "SYSIBM"."SYSDUMMY1"'.freeze
|
|
280
|
-
HSTAR = "H*".freeze
|
|
281
|
-
BLOB_OPEN = "BLOB(X'".freeze
|
|
282
|
-
BLOB_CLOSE = "')".freeze
|
|
277
|
+
BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR, :'B~'=>:BITNOT}.freeze
|
|
283
278
|
|
|
284
279
|
# DB2 casts strings using RTRIM and CHAR instead of VARCHAR.
|
|
285
280
|
def cast_sql_append(sql, expr, type)
|
|
286
281
|
if(type == String)
|
|
287
|
-
sql <<
|
|
282
|
+
sql << "RTRIM(CHAR("
|
|
288
283
|
literal_append(sql, expr)
|
|
289
|
-
sql <<
|
|
284
|
+
sql << "))"
|
|
290
285
|
else
|
|
291
286
|
super
|
|
292
287
|
end
|
|
@@ -299,15 +294,19 @@ module Sequel
|
|
|
299
294
|
when :'B~'
|
|
300
295
|
literal_append(sql, SQL::Function.new(:BITNOT, *args))
|
|
301
296
|
when :extract
|
|
302
|
-
sql << args
|
|
303
|
-
sql <<
|
|
304
|
-
literal_append(sql, args
|
|
305
|
-
sql <<
|
|
297
|
+
sql << args[0].to_s
|
|
298
|
+
sql << '('
|
|
299
|
+
literal_append(sql, args[1])
|
|
300
|
+
sql << ')'
|
|
306
301
|
else
|
|
307
302
|
super
|
|
308
303
|
end
|
|
309
304
|
end
|
|
310
305
|
|
|
306
|
+
def quote_identifiers?
|
|
307
|
+
@opts.fetch(:quote_identifiers, false)
|
|
308
|
+
end
|
|
309
|
+
|
|
311
310
|
def supports_cte?(type=:select)
|
|
312
311
|
type == :select
|
|
313
312
|
end
|
|
@@ -347,11 +346,6 @@ module Sequel
|
|
|
347
346
|
false
|
|
348
347
|
end
|
|
349
348
|
|
|
350
|
-
# DB2 does not support fractional seconds in timestamps.
|
|
351
|
-
def supports_timestamp_usecs?
|
|
352
|
-
false
|
|
353
|
-
end
|
|
354
|
-
|
|
355
349
|
# DB2 supports window functions
|
|
356
350
|
def supports_window_functions?
|
|
357
351
|
true
|
|
@@ -365,7 +359,14 @@ module Sequel
|
|
|
365
359
|
private
|
|
366
360
|
|
|
367
361
|
def empty_from_sql
|
|
368
|
-
|
|
362
|
+
' FROM "SYSIBM"."SYSDUMMY1"'
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
# Emulate offset with row number by default, and also when the limit_offset
|
|
366
|
+
# strategy is used without a limit, as DB2 doesn't support that syntax with
|
|
367
|
+
# no limit.
|
|
368
|
+
def emulate_offset_with_row_number?
|
|
369
|
+
super && (db.offset_strategy == :emulate || (db.offset_strategy == :limit_offset && !@opts[:limit]))
|
|
369
370
|
end
|
|
370
371
|
|
|
371
372
|
# DB2 needs the standard workaround to insert all default values into
|
|
@@ -376,20 +377,25 @@ module Sequel
|
|
|
376
377
|
|
|
377
378
|
# Use 0 for false on DB2
|
|
378
379
|
def literal_false
|
|
379
|
-
|
|
380
|
+
'0'
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
# DB2 doesn't support fractional seconds in times, only fractional seconds in timestamps.
|
|
384
|
+
def literal_sqltime(v)
|
|
385
|
+
v.strftime("'%H:%M:%S'")
|
|
380
386
|
end
|
|
381
387
|
|
|
382
388
|
# Use 1 for true on DB2
|
|
383
389
|
def literal_true
|
|
384
|
-
|
|
390
|
+
'1'
|
|
385
391
|
end
|
|
386
392
|
|
|
387
393
|
# DB2 uses a literal hexidecimal number for blob strings
|
|
388
394
|
def literal_blob_append(sql, v)
|
|
389
|
-
if
|
|
395
|
+
if db.use_clob_as_blob
|
|
390
396
|
super
|
|
391
397
|
else
|
|
392
|
-
sql <<
|
|
398
|
+
sql << "BLOB(X'" << v.unpack("H*").first << "')"
|
|
393
399
|
end
|
|
394
400
|
end
|
|
395
401
|
|
|
@@ -398,29 +404,45 @@ module Sequel
|
|
|
398
404
|
:union
|
|
399
405
|
end
|
|
400
406
|
|
|
407
|
+
# Emulate the char_length function with length
|
|
408
|
+
def native_function_name(emulated_function)
|
|
409
|
+
if emulated_function == :char_length
|
|
410
|
+
'length'
|
|
411
|
+
else
|
|
412
|
+
super
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
|
|
401
416
|
# DB2 does not require that ROW_NUMBER be ordered.
|
|
402
417
|
def require_offset_order?
|
|
403
418
|
false
|
|
404
419
|
end
|
|
405
420
|
|
|
406
|
-
#
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
#
|
|
412
|
-
#
|
|
413
|
-
#
|
|
414
|
-
#
|
|
415
|
-
# Support for this feature is not used in this adapter however.
|
|
421
|
+
# At least some versions of DB do not support NULLS FIRST/LAST.
|
|
422
|
+
def requires_emulating_nulls_first?
|
|
423
|
+
true
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
# Modify the sql to limit the number of rows returned.
|
|
427
|
+
# Uses :offset_strategy Database option to determine how to format the
|
|
428
|
+
# limit and offset.
|
|
416
429
|
def select_limit_sql(sql)
|
|
430
|
+
strategy = db.offset_strategy
|
|
431
|
+
return super if strategy == :limit_offset
|
|
432
|
+
|
|
433
|
+
if strategy == :offset_fetch && (o = @opts[:offset])
|
|
434
|
+
sql << " OFFSET "
|
|
435
|
+
literal_append(sql, o)
|
|
436
|
+
sql << " ROWS"
|
|
437
|
+
end
|
|
438
|
+
|
|
417
439
|
if l = @opts[:limit]
|
|
418
440
|
if l == 1
|
|
419
|
-
sql <<
|
|
441
|
+
sql << " FETCH FIRST ROW ONLY"
|
|
420
442
|
else
|
|
421
|
-
sql <<
|
|
443
|
+
sql << " FETCH FIRST "
|
|
422
444
|
literal_append(sql, l)
|
|
423
|
-
sql <<
|
|
445
|
+
sql << " ROWS ONLY"
|
|
424
446
|
end
|
|
425
447
|
end
|
|
426
448
|
end
|