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
data/lib/sequel/adapters/jdbc.rb
CHANGED
|
@@ -1,36 +1,35 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
1
3
|
require 'java'
|
|
2
|
-
|
|
4
|
+
require_relative 'utils/stored_procedures'
|
|
3
5
|
|
|
4
6
|
module Sequel
|
|
5
|
-
# Houses Sequel's JDBC support when running on JRuby.
|
|
6
7
|
module JDBC
|
|
7
|
-
# Make it accesing the java.lang hierarchy more ruby friendly.
|
|
8
|
-
module JavaLang
|
|
9
|
-
include_package 'java.lang'
|
|
10
|
-
end
|
|
11
|
-
|
|
12
8
|
# Make it accesing the java.sql hierarchy more ruby friendly.
|
|
13
9
|
module JavaSQL
|
|
14
10
|
include_package 'java.sql'
|
|
15
11
|
end
|
|
16
12
|
|
|
17
|
-
# Make it accesing the javax.naming hierarchy more ruby friendly.
|
|
18
|
-
module JavaxNaming
|
|
19
|
-
include_package 'javax.naming'
|
|
20
|
-
end
|
|
21
|
-
|
|
22
13
|
# Used to identify a jndi connection and to extract the jndi
|
|
23
14
|
# resource name.
|
|
24
15
|
JNDI_URI_REGEXP = /\Ajdbc:jndi:(.+)/
|
|
25
16
|
|
|
26
|
-
# The types to check for 0 scale to transform :decimal types
|
|
27
|
-
# to :integer.
|
|
28
|
-
DECIMAL_TYPE_RE = /number|numeric|decimal/io
|
|
29
|
-
|
|
30
17
|
# Contains procs keyed on subadapter type that extend the
|
|
31
18
|
# given database object so it supports the correct database type.
|
|
32
19
|
DATABASE_SETUP = {}
|
|
20
|
+
|
|
21
|
+
# Create custom NativeException alias for nicer access, and also so that
|
|
22
|
+
# JRuby 9.2+ so it doesn't use the deprecated ::NativeException
|
|
23
|
+
NativeException = java.lang.Exception
|
|
33
24
|
|
|
25
|
+
# Default database error classes
|
|
26
|
+
DATABASE_ERROR_CLASSES = [NativeException]
|
|
27
|
+
if JRUBY_VERSION < '9.2'
|
|
28
|
+
# On JRuby <9.2, still include ::NativeException, as it is still needed in some cases
|
|
29
|
+
DATABASE_ERROR_CLASSES << ::NativeException
|
|
30
|
+
end
|
|
31
|
+
DATABASE_ERROR_CLASSES.freeze
|
|
32
|
+
|
|
34
33
|
# Allow loading the necessary JDBC support via a gem.
|
|
35
34
|
def self.load_gem(name)
|
|
36
35
|
begin
|
|
@@ -58,50 +57,62 @@ module Sequel
|
|
|
58
57
|
end
|
|
59
58
|
|
|
60
59
|
class TypeConvertor
|
|
60
|
+
CONVERTORS = convertors = {}
|
|
61
61
|
%w'Boolean Float Double Int Long Short'.each do |meth|
|
|
62
|
-
|
|
62
|
+
x = convertors[meth.to_sym] = Object.new
|
|
63
|
+
class_eval("def x.call(r, i) v = r.get#{meth}(i); v unless r.wasNull end", __FILE__, __LINE__)
|
|
63
64
|
end
|
|
64
65
|
%w'Object Array String Time Date Timestamp BigDecimal Blob Bytes Clob'.each do |meth|
|
|
65
|
-
|
|
66
|
+
x = convertors[meth.to_sym] = Object.new
|
|
67
|
+
class_eval("def x.call(r, i) r.get#{meth}(i) end", __FILE__, __LINE__)
|
|
66
68
|
end
|
|
67
|
-
|
|
69
|
+
x = convertors[:RubyTime] = Object.new
|
|
70
|
+
def x.call(r, i)
|
|
68
71
|
if v = r.getTime(i)
|
|
69
72
|
Sequel.string_to_time("#{v.to_string}.#{sprintf('%03i', v.getTime.divmod(1000).last)}")
|
|
70
73
|
end
|
|
71
74
|
end
|
|
72
|
-
|
|
75
|
+
x = convertors[:RubyDate] = Object.new
|
|
76
|
+
def x.call(r, i)
|
|
73
77
|
if v = r.getDate(i)
|
|
74
78
|
Date.civil(v.getYear + 1900, v.getMonth + 1, v.getDate)
|
|
75
79
|
end
|
|
76
80
|
end
|
|
77
|
-
|
|
81
|
+
x = convertors[:RubyTimestamp] = Object.new
|
|
82
|
+
def x.call(r, i)
|
|
78
83
|
if v = r.getTimestamp(i)
|
|
79
84
|
Sequel.database_to_application_timestamp([v.getYear + 1900, v.getMonth + 1, v.getDate, v.getHours, v.getMinutes, v.getSeconds, v.getNanos])
|
|
80
85
|
end
|
|
81
86
|
end
|
|
82
|
-
|
|
87
|
+
x = convertors[:RubyBigDecimal] = Object.new
|
|
88
|
+
def x.call(r, i)
|
|
83
89
|
if v = r.getBigDecimal(i)
|
|
84
|
-
BigDecimal
|
|
90
|
+
::Kernel::BigDecimal(v.to_string)
|
|
85
91
|
end
|
|
86
92
|
end
|
|
87
|
-
|
|
93
|
+
x = convertors[:RubyBlob] = Object.new
|
|
94
|
+
def x.call(r, i)
|
|
88
95
|
if v = r.getBytes(i)
|
|
89
96
|
Sequel::SQL::Blob.new(String.from_java_bytes(v))
|
|
90
97
|
end
|
|
91
98
|
end
|
|
92
|
-
|
|
99
|
+
x = convertors[:RubyClob] = Object.new
|
|
100
|
+
def x.call(r, i)
|
|
93
101
|
if v = r.getClob(i)
|
|
94
102
|
v.getSubString(1, v.length)
|
|
95
103
|
end
|
|
96
104
|
end
|
|
105
|
+
x = convertors[:RubyArray] = Object.new
|
|
106
|
+
def x.call(r, i)
|
|
107
|
+
if v = r.getArray(i)
|
|
108
|
+
v.array.to_ary
|
|
109
|
+
end
|
|
110
|
+
end
|
|
97
111
|
|
|
98
|
-
|
|
99
|
-
o = INSTANCE
|
|
100
|
-
MAP = Hash.new(o.method(:Object))
|
|
112
|
+
MAP = Hash.new(convertors[:Object])
|
|
101
113
|
types = Java::JavaSQL::Types
|
|
102
114
|
|
|
103
115
|
{
|
|
104
|
-
:ARRAY => :Array,
|
|
105
116
|
:BOOLEAN => :Boolean,
|
|
106
117
|
:CHAR => :String,
|
|
107
118
|
:DOUBLE => :Double,
|
|
@@ -115,11 +126,12 @@ module Sequel
|
|
|
115
126
|
:TINYINT => :Short,
|
|
116
127
|
:VARCHAR => :String,
|
|
117
128
|
}.each do |type, meth|
|
|
118
|
-
MAP[types.const_get(type)] =
|
|
129
|
+
MAP[types.const_get(type)] = convertors[meth]
|
|
119
130
|
end
|
|
120
131
|
BASIC_MAP = MAP.dup
|
|
121
132
|
|
|
122
133
|
{
|
|
134
|
+
:ARRAY => :Array,
|
|
123
135
|
:BINARY => :Blob,
|
|
124
136
|
:BLOB => :Blob,
|
|
125
137
|
:CLOB => :Clob,
|
|
@@ -132,19 +144,16 @@ module Sequel
|
|
|
132
144
|
:TIMESTAMP => :Timestamp,
|
|
133
145
|
:VARBINARY => :Blob,
|
|
134
146
|
}.each do |type, meth|
|
|
135
|
-
BASIC_MAP[types.const_get(type)] =
|
|
136
|
-
MAP[types.const_get(type)] =
|
|
147
|
+
BASIC_MAP[types.const_get(type)] = convertors[meth]
|
|
148
|
+
MAP[types.const_get(type)] = convertors[:"Ruby#{meth}"]
|
|
137
149
|
end
|
|
150
|
+
MAP.freeze
|
|
151
|
+
BASIC_MAP.freeze
|
|
138
152
|
end
|
|
139
153
|
|
|
140
|
-
# JDBC Databases offer a fairly uniform interface that does not change
|
|
141
|
-
# much based on the sub adapter.
|
|
142
154
|
class Database < Sequel::Database
|
|
143
155
|
set_adapter_scheme :jdbc
|
|
144
156
|
|
|
145
|
-
# The type of database we are connecting to
|
|
146
|
-
attr_reader :database_type
|
|
147
|
-
|
|
148
157
|
# The Java database driver we are using (should be a Java class)
|
|
149
158
|
attr_reader :driver
|
|
150
159
|
|
|
@@ -176,17 +185,14 @@ module Sequel
|
|
|
176
185
|
|
|
177
186
|
begin
|
|
178
187
|
if block_given?
|
|
179
|
-
yield
|
|
188
|
+
yield log_connection_yield(sql, conn){cps.executeQuery}
|
|
180
189
|
else
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
log_yield(sql){cps.executeUpdate}
|
|
190
|
+
log_connection_yield(sql, conn){cps.executeUpdate}
|
|
191
|
+
if opts[:type] == :insert
|
|
184
192
|
last_insert_id(conn, opts)
|
|
185
|
-
else
|
|
186
|
-
log_yield(sql){cps.executeUpdate}
|
|
187
193
|
end
|
|
188
194
|
end
|
|
189
|
-
rescue
|
|
195
|
+
rescue *DATABASE_ERROR_CLASSES => e
|
|
190
196
|
raise_error(e)
|
|
191
197
|
ensure
|
|
192
198
|
cps.close
|
|
@@ -194,7 +200,8 @@ module Sequel
|
|
|
194
200
|
end
|
|
195
201
|
end
|
|
196
202
|
|
|
197
|
-
# Connect to the database using JavaSQL::DriverManager.getConnection
|
|
203
|
+
# Connect to the database using JavaSQL::DriverManager.getConnection, and falling back
|
|
204
|
+
# to driver.new.connect if the driver is known.
|
|
198
205
|
def connect(server)
|
|
199
206
|
opts = server_opts(server)
|
|
200
207
|
conn = if jndi?
|
|
@@ -206,7 +213,7 @@ module Sequel
|
|
|
206
213
|
JavaSQL::DriverManager.setLoginTimeout(opts[:login_timeout]) if opts[:login_timeout]
|
|
207
214
|
raise StandardError, "skipping regular connection" if opts[:jdbc_properties]
|
|
208
215
|
JavaSQL::DriverManager.getConnection(*args)
|
|
209
|
-
rescue
|
|
216
|
+
rescue StandardError, *DATABASE_ERROR_CLASSES => e
|
|
210
217
|
raise e unless driver
|
|
211
218
|
# If the DriverManager can't get the connection - use the connect
|
|
212
219
|
# method of the driver. (This happens under Tomcat for instance)
|
|
@@ -220,15 +227,15 @@ module Sequel
|
|
|
220
227
|
c = driver.new.connect(args[0], props)
|
|
221
228
|
raise(Sequel::DatabaseError, 'driver.new.connect returned nil: probably bad JDBC connection string') unless c
|
|
222
229
|
c
|
|
223
|
-
rescue
|
|
224
|
-
|
|
225
|
-
e2.message
|
|
230
|
+
rescue StandardError, *DATABASE_ERROR_CLASSES => e2
|
|
231
|
+
if e2.respond_to?(:message=) && e2.message != e.message
|
|
232
|
+
e2.message = "#{e2.message}\n#{e.class.name}: #{e.message}"
|
|
226
233
|
end
|
|
227
234
|
raise e2
|
|
228
235
|
end
|
|
229
236
|
end
|
|
230
237
|
end
|
|
231
|
-
|
|
238
|
+
setup_connection_with_opts(conn, opts)
|
|
232
239
|
end
|
|
233
240
|
|
|
234
241
|
# Close given adapter connections, and delete any related prepared statements.
|
|
@@ -237,8 +244,6 @@ module Sequel
|
|
|
237
244
|
c.close
|
|
238
245
|
end
|
|
239
246
|
|
|
240
|
-
# Execute the given SQL. If a block is given, if should be a SELECT
|
|
241
|
-
# statement or something else that returns rows.
|
|
242
247
|
def execute(sql, opts=OPTS, &block)
|
|
243
248
|
return call_sproc(sql, opts, &block) if opts[:sproc]
|
|
244
249
|
return execute_prepared_statement(sql, opts, &block) if [Symbol, Dataset].any?{|c| sql.is_a?(c)}
|
|
@@ -248,16 +253,18 @@ module Sequel
|
|
|
248
253
|
if size = fetch_size
|
|
249
254
|
stmt.setFetchSize(size)
|
|
250
255
|
end
|
|
251
|
-
yield
|
|
256
|
+
yield log_connection_yield(sql, conn){stmt.executeQuery(sql)}
|
|
252
257
|
else
|
|
253
258
|
case opts[:type]
|
|
254
259
|
when :ddl
|
|
255
|
-
|
|
260
|
+
log_connection_yield(sql, conn){stmt.execute(sql)}
|
|
256
261
|
when :insert
|
|
257
|
-
|
|
258
|
-
|
|
262
|
+
log_connection_yield(sql, conn){execute_statement_insert(stmt, sql)}
|
|
263
|
+
opts = Hash[opts]
|
|
264
|
+
opts[:stmt] = stmt
|
|
265
|
+
last_insert_id(conn, opts)
|
|
259
266
|
else
|
|
260
|
-
|
|
267
|
+
log_connection_yield(sql, conn){stmt.executeUpdate(sql)}
|
|
261
268
|
end
|
|
262
269
|
end
|
|
263
270
|
end
|
|
@@ -265,22 +272,24 @@ module Sequel
|
|
|
265
272
|
end
|
|
266
273
|
alias execute_dui execute
|
|
267
274
|
|
|
268
|
-
# Execute the given DDL SQL, which should not return any
|
|
269
|
-
# values or rows.
|
|
270
275
|
def execute_ddl(sql, opts=OPTS)
|
|
271
276
|
opts = Hash[opts]
|
|
272
277
|
opts[:type] = :ddl
|
|
273
278
|
execute(sql, opts)
|
|
274
279
|
end
|
|
275
280
|
|
|
276
|
-
# Execute the given INSERT SQL, returning the last inserted
|
|
277
|
-
# row id.
|
|
278
281
|
def execute_insert(sql, opts=OPTS)
|
|
279
282
|
opts = Hash[opts]
|
|
280
283
|
opts[:type] = :insert
|
|
281
284
|
execute(sql, opts)
|
|
282
285
|
end
|
|
283
286
|
|
|
287
|
+
def freeze
|
|
288
|
+
@type_convertor_map.freeze
|
|
289
|
+
@basic_type_convertor_map.freeze
|
|
290
|
+
super
|
|
291
|
+
end
|
|
292
|
+
|
|
284
293
|
# Use the JDBC metadata to get a list of foreign keys for the table.
|
|
285
294
|
def foreign_key_list(table, opts=OPTS)
|
|
286
295
|
m = output_identifier_meth
|
|
@@ -372,7 +381,7 @@ module Sequel
|
|
|
372
381
|
end
|
|
373
382
|
|
|
374
383
|
def database_error_classes
|
|
375
|
-
|
|
384
|
+
DATABASE_ERROR_CLASSES
|
|
376
385
|
end
|
|
377
386
|
|
|
378
387
|
def database_exception_sqlstate(exception, opts)
|
|
@@ -390,6 +399,10 @@ module Sequel
|
|
|
390
399
|
true
|
|
391
400
|
end
|
|
392
401
|
|
|
402
|
+
def dataset_class_default
|
|
403
|
+
Dataset
|
|
404
|
+
end
|
|
405
|
+
|
|
393
406
|
# Raise a disconnect error if the SQL state of the cause of the exception indicates so.
|
|
394
407
|
def disconnect_error?(exception, opts)
|
|
395
408
|
cause = exception.respond_to?(:cause) ? exception.cause : exception
|
|
@@ -416,8 +429,12 @@ module Sequel
|
|
|
416
429
|
if name and cps = cps_sync(conn){|cpsh| cpsh[name]} and cps[0] == sql
|
|
417
430
|
cps = cps[1]
|
|
418
431
|
else
|
|
419
|
-
|
|
420
|
-
|
|
432
|
+
log_connection_yield("CLOSE #{name}", conn){cps[1].close} if cps
|
|
433
|
+
if name
|
|
434
|
+
opts = Hash[opts]
|
|
435
|
+
opts[:name] = name
|
|
436
|
+
end
|
|
437
|
+
cps = log_connection_yield("PREPARE#{" #{name}:" if name} #{sql}", conn){prepare_jdbc_statement(conn, sql, opts)}
|
|
421
438
|
if size = fetch_size
|
|
422
439
|
cps.setFetchSize(size)
|
|
423
440
|
end
|
|
@@ -427,25 +444,28 @@ module Sequel
|
|
|
427
444
|
args.each{|arg| set_ps_arg(cps, arg, i+=1)}
|
|
428
445
|
msg = "EXECUTE#{" #{name}" if name}"
|
|
429
446
|
if ps.log_sql
|
|
430
|
-
msg
|
|
447
|
+
msg += " ("
|
|
431
448
|
msg << sql
|
|
432
449
|
msg << ")"
|
|
433
450
|
end
|
|
434
451
|
begin
|
|
435
452
|
if block_given?
|
|
436
|
-
yield
|
|
453
|
+
yield log_connection_yield(msg, conn, args){cps.executeQuery}
|
|
437
454
|
else
|
|
438
455
|
case opts[:type]
|
|
439
456
|
when :ddl
|
|
440
|
-
|
|
457
|
+
log_connection_yield(msg, conn, args){cps.execute}
|
|
441
458
|
when :insert
|
|
442
|
-
|
|
443
|
-
|
|
459
|
+
log_connection_yield(msg, conn, args){execute_prepared_statement_insert(cps)}
|
|
460
|
+
opts = Hash[opts]
|
|
461
|
+
opts[:prepared] = true
|
|
462
|
+
opts[:stmt] = cps
|
|
463
|
+
last_insert_id(conn, opts)
|
|
444
464
|
else
|
|
445
|
-
|
|
465
|
+
log_connection_yield(msg, conn, args){cps.executeUpdate}
|
|
446
466
|
end
|
|
447
467
|
end
|
|
448
|
-
rescue
|
|
468
|
+
rescue *DATABASE_ERROR_CLASSES => e
|
|
449
469
|
raise_error(e)
|
|
450
470
|
ensure
|
|
451
471
|
cps.close unless name
|
|
@@ -472,7 +492,7 @@ module Sequel
|
|
|
472
492
|
# Gets the connection from JNDI.
|
|
473
493
|
def get_connection_from_jndi
|
|
474
494
|
jndi_name = JNDI_URI_REGEXP.match(uri)[1]
|
|
475
|
-
|
|
495
|
+
javax.naming.InitialContext.new.lookup(jndi_name).connection
|
|
476
496
|
end
|
|
477
497
|
|
|
478
498
|
# Gets the JDBC connection uri from the JNDI resource.
|
|
@@ -502,27 +522,24 @@ module Sequel
|
|
|
502
522
|
# Support DateTime objects used in bound variables
|
|
503
523
|
def java_sql_datetime(datetime)
|
|
504
524
|
ts = java.sql.Timestamp.new(Time.local(datetime.year, datetime.month, datetime.day, datetime.hour, datetime.min, datetime.sec).to_i * 1000)
|
|
505
|
-
ts.setNanos((datetime.sec_fraction *
|
|
525
|
+
ts.setNanos((datetime.sec_fraction * 1000000000).to_i)
|
|
506
526
|
ts
|
|
507
527
|
end
|
|
508
528
|
|
|
509
529
|
# Support fractional seconds for Time objects used in bound variables
|
|
510
530
|
def java_sql_timestamp(time)
|
|
511
531
|
ts = java.sql.Timestamp.new(time.to_i * 1000)
|
|
512
|
-
|
|
513
|
-
ts.setNanos((RUBY_VERSION >= '1.9.0' && time.nsec != 0) ? time.nsec : time.usec * 1000)
|
|
532
|
+
ts.setNanos(time.nsec)
|
|
514
533
|
ts
|
|
515
534
|
end
|
|
516
535
|
|
|
517
|
-
# Log the given SQL and then execute it on the connection, used by
|
|
518
|
-
# the transaction code.
|
|
519
536
|
def log_connection_execute(conn, sql)
|
|
520
|
-
statement(conn){|s|
|
|
537
|
+
statement(conn){|s| log_connection_yield(sql, conn){s.execute(sql)}}
|
|
521
538
|
end
|
|
522
539
|
|
|
523
540
|
# By default, there is no support for determining the last inserted
|
|
524
541
|
# id, so return nil. This method should be overridden in
|
|
525
|
-
#
|
|
542
|
+
# subadapters.
|
|
526
543
|
def last_insert_id(conn, opts)
|
|
527
544
|
nil
|
|
528
545
|
end
|
|
@@ -530,7 +547,7 @@ module Sequel
|
|
|
530
547
|
# Yield the metadata for this database
|
|
531
548
|
def metadata(*args, &block)
|
|
532
549
|
synchronize do |c|
|
|
533
|
-
result = c.getMetaData.
|
|
550
|
+
result = c.getMetaData.public_send(*args)
|
|
534
551
|
begin
|
|
535
552
|
metadata_dataset.send(:process_result_set, result, &block)
|
|
536
553
|
ensure
|
|
@@ -592,13 +609,29 @@ module Sequel
|
|
|
592
609
|
cps.setString(i, nil)
|
|
593
610
|
end
|
|
594
611
|
|
|
595
|
-
# Return the connection.
|
|
596
|
-
# connection object before adding it to the connection pool.
|
|
612
|
+
# Return the connection. Can be overridden in subadapters for database specific setup.
|
|
597
613
|
def setup_connection(conn)
|
|
598
614
|
conn
|
|
599
615
|
end
|
|
616
|
+
|
|
617
|
+
# Setup the connection using the given connection options. Return the connection. Can be overridden in subadapters for database specific setup.
|
|
618
|
+
def setup_connection_with_opts(conn, opts)
|
|
619
|
+
setup_connection(conn)
|
|
620
|
+
end
|
|
621
|
+
|
|
622
|
+
def schema_column_set_db_type(schema)
|
|
623
|
+
case schema[:type]
|
|
624
|
+
when :string
|
|
625
|
+
if schema[:db_type] =~ /\A(character( varying)?|n?(var)?char2?)\z/io && schema[:column_size] > 0
|
|
626
|
+
schema[:db_type] += "(#{schema[:column_size]})"
|
|
627
|
+
end
|
|
628
|
+
when :decimal
|
|
629
|
+
if schema[:db_type] =~ /\A(decimal|numeric)\z/io && schema[:column_size] > 0 && schema[:scale] >= 0
|
|
630
|
+
schema[:db_type] += "(#{schema[:column_size]}, #{schema[:scale]})"
|
|
631
|
+
end
|
|
632
|
+
end
|
|
633
|
+
end
|
|
600
634
|
|
|
601
|
-
# Parse the table schema for the given table.
|
|
602
635
|
def schema_parse_table(table, opts=OPTS)
|
|
603
636
|
m = output_identifier_meth(opts[:dataset])
|
|
604
637
|
schema, table = metadata_schema_and_table(table, opts)
|
|
@@ -617,15 +650,17 @@ module Sequel
|
|
|
617
650
|
:allow_null=>(h[:nullable] != 0),
|
|
618
651
|
:primary_key=>pks.include?(h[:column_name]),
|
|
619
652
|
:column_size=>h[:column_size],
|
|
620
|
-
:scale=>h[:decimal_digits]
|
|
653
|
+
:scale=>h[:decimal_digits],
|
|
654
|
+
:remarks=>h[:remarks]
|
|
621
655
|
}
|
|
622
656
|
if s[:primary_key]
|
|
623
657
|
s[:auto_increment] = h[:is_autoincrement] == "YES"
|
|
624
658
|
end
|
|
625
659
|
s[:max_length] = s[:column_size] if s[:type] == :string
|
|
626
|
-
if s[:db_type] =~
|
|
660
|
+
if s[:db_type] =~ /number|numeric|decimal/i && s[:scale] == 0
|
|
627
661
|
s[:type] = :integer
|
|
628
662
|
end
|
|
663
|
+
schema_column_set_db_type(s)
|
|
629
664
|
schemas << h[:table_schem] unless schemas.include?(h[:table_schem])
|
|
630
665
|
ts << [m.call(h[:column_name]), s]
|
|
631
666
|
end
|
|
@@ -635,8 +670,7 @@ module Sequel
|
|
|
635
670
|
ts
|
|
636
671
|
end
|
|
637
672
|
|
|
638
|
-
#
|
|
639
|
-
# parsing the schema.
|
|
673
|
+
# Skip tables in the INFORMATION_SCHEMA when parsing columns.
|
|
640
674
|
def schema_parse_table_skip?(h, schema)
|
|
641
675
|
h[:table_schem] == 'INFORMATION_SCHEMA'
|
|
642
676
|
end
|
|
@@ -646,29 +680,27 @@ module Sequel
|
|
|
646
680
|
end
|
|
647
681
|
|
|
648
682
|
# Called before loading subadapter-specific code, necessary so that subadapter initialization code
|
|
649
|
-
# that runs queries works correctly. This cannot be
|
|
683
|
+
# that runs queries works correctly. This cannot be overridden in subadapters.
|
|
650
684
|
def setup_type_convertor_map_early
|
|
651
|
-
@type_convertor_map = TypeConvertor::MAP.merge(Java::JavaSQL::Types::TIMESTAMP=>
|
|
652
|
-
@basic_type_convertor_map = TypeConvertor::BASIC_MAP
|
|
685
|
+
@type_convertor_map = TypeConvertor::MAP.merge(Java::JavaSQL::Types::TIMESTAMP=>method(:timestamp_convert))
|
|
686
|
+
@basic_type_convertor_map = TypeConvertor::BASIC_MAP.dup
|
|
653
687
|
end
|
|
654
688
|
|
|
655
689
|
# Yield a new statement object, and ensure that it is closed before returning.
|
|
656
690
|
def statement(conn)
|
|
657
691
|
stmt = conn.createStatement
|
|
658
692
|
yield stmt
|
|
659
|
-
rescue
|
|
693
|
+
rescue *DATABASE_ERROR_CLASSES => e
|
|
660
694
|
raise_error(e)
|
|
661
695
|
ensure
|
|
662
696
|
stmt.close if stmt
|
|
663
697
|
end
|
|
664
698
|
|
|
665
|
-
# A conversion
|
|
699
|
+
# A conversion method for timestamp columns. This is used to make sure timestamps are converted using the
|
|
666
700
|
# correct timezone.
|
|
667
|
-
def
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
to_application_timestamp([v.getYear + 1900, v.getMonth + 1, v.getDate, v.getHours, v.getMinutes, v.getSeconds, v.getNanos])
|
|
671
|
-
end
|
|
701
|
+
def timestamp_convert(r, i)
|
|
702
|
+
if v = r.getTimestamp(i)
|
|
703
|
+
to_application_timestamp([v.getYear + 1900, v.getMonth + 1, v.getDate, v.getHours, v.getMinutes, v.getSeconds, v.getNanos])
|
|
672
704
|
end
|
|
673
705
|
end
|
|
674
706
|
end
|
|
@@ -676,15 +708,12 @@ module Sequel
|
|
|
676
708
|
class Dataset < Sequel::Dataset
|
|
677
709
|
include StoredProcedures
|
|
678
710
|
|
|
679
|
-
Database::DatasetClass = self
|
|
680
|
-
|
|
681
711
|
PreparedStatementMethods = prepared_statements_module(
|
|
682
712
|
"sql = self; opts = Hash[opts]; opts[:arguments] = bind_arguments",
|
|
683
713
|
Sequel::Dataset::UnnumberedArgumentMapper,
|
|
684
714
|
%w"execute execute_dui") do
|
|
685
715
|
private
|
|
686
716
|
|
|
687
|
-
# Same as execute, explicit due to intricacies of alias and super.
|
|
688
717
|
def execute_insert(sql, opts=OPTS)
|
|
689
718
|
sql = self
|
|
690
719
|
opts = Hash[opts]
|
|
@@ -695,61 +724,47 @@ module Sequel
|
|
|
695
724
|
end
|
|
696
725
|
|
|
697
726
|
StoredProcedureMethods = prepared_statements_module(
|
|
698
|
-
"sql = @sproc_name; opts = Hash[opts]; opts[:args] = @sproc_args; opts[:sproc] = true",
|
|
727
|
+
"sql = @opts[:sproc_name]; opts = Hash[opts]; opts[:args] = @opts[:sproc_args]; opts[:sproc] = true",
|
|
699
728
|
Sequel::Dataset::StoredProcedureMethods,
|
|
700
729
|
%w"execute execute_dui") do
|
|
701
730
|
private
|
|
702
731
|
|
|
703
|
-
# Same as execute, explicit due to intricacies of alias and super.
|
|
704
732
|
def execute_insert(sql, opts=OPTS)
|
|
705
|
-
sql = @sproc_name
|
|
733
|
+
sql = @opts[:sproc_name]
|
|
706
734
|
opts = Hash[opts]
|
|
707
|
-
opts[:args] = @sproc_args
|
|
735
|
+
opts[:args] = @opts[:sproc_args]
|
|
708
736
|
opts[:sproc] = true
|
|
709
737
|
opts[:type] = :insert
|
|
710
738
|
super
|
|
711
739
|
end
|
|
712
740
|
end
|
|
713
741
|
|
|
714
|
-
# Whether to convert some Java types to ruby types when retrieving rows.
|
|
715
|
-
# Uses the database's setting by default, can be set to false to roughly
|
|
716
|
-
# double performance when fetching rows.
|
|
717
|
-
attr_accessor :convert_types
|
|
718
|
-
|
|
719
|
-
# Correctly return rows from the database and return them as hashes.
|
|
720
742
|
def fetch_rows(sql, &block)
|
|
721
743
|
execute(sql){|result| process_result_set(result, &block)}
|
|
722
744
|
self
|
|
723
745
|
end
|
|
724
746
|
|
|
725
|
-
#
|
|
726
|
-
# database (and connection) for reuse.
|
|
727
|
-
def prepare(type, name=nil, *values)
|
|
728
|
-
ps = to_prepared_statement(type, values)
|
|
729
|
-
ps.extend(PreparedStatementMethods)
|
|
730
|
-
if name
|
|
731
|
-
ps.prepared_statement_name = name
|
|
732
|
-
db.set_prepared_statement(name, ps)
|
|
733
|
-
end
|
|
734
|
-
ps
|
|
735
|
-
end
|
|
736
|
-
|
|
737
|
-
# Set the fetch size on JDBC ResultSets created from this dataset.
|
|
747
|
+
# Set the fetch size on JDBC ResultSets created from the returned dataset.
|
|
738
748
|
def with_fetch_size(size)
|
|
739
749
|
clone(:fetch_size=>size)
|
|
740
750
|
end
|
|
751
|
+
|
|
752
|
+
# Set whether to convert Java types to ruby types in the returned dataset.
|
|
753
|
+
def with_convert_types(v)
|
|
754
|
+
clone(:convert_types=>v)
|
|
755
|
+
end
|
|
741
756
|
|
|
742
757
|
private
|
|
743
758
|
|
|
744
759
|
# Whether we should convert Java types to ruby types for this dataset.
|
|
745
760
|
def convert_types?
|
|
746
|
-
ct = @convert_types
|
|
761
|
+
ct = @opts[:convert_types]
|
|
747
762
|
ct.nil? ? db.convert_types : ct
|
|
748
763
|
end
|
|
749
764
|
|
|
750
765
|
# Extend the dataset with the JDBC stored procedure methods.
|
|
751
766
|
def prepare_extend_sproc(ds)
|
|
752
|
-
ds.
|
|
767
|
+
ds.with_extend(StoredProcedureMethods)
|
|
753
768
|
end
|
|
754
769
|
|
|
755
770
|
# The type conversion proc to use for the given column number i,
|
|
@@ -767,6 +782,10 @@ module Sequel
|
|
|
767
782
|
map[type]
|
|
768
783
|
end
|
|
769
784
|
|
|
785
|
+
def prepared_statement_modules
|
|
786
|
+
[PreparedStatementMethods]
|
|
787
|
+
end
|
|
788
|
+
|
|
770
789
|
# Split out from fetch rows to allow processing of JDBC result sets
|
|
771
790
|
# that don't come from issuing an SQL string.
|
|
772
791
|
def process_result_set(result)
|
|
@@ -783,11 +802,14 @@ module Sequel
|
|
|
783
802
|
i += 1
|
|
784
803
|
cols << [output_identifier(meta.getColumnLabel(i)), i, convert ? type_convertor(map, meta, meta.getColumnType(i), i) : basic_type_convertor(map, meta, meta.getColumnType(i), i)]
|
|
785
804
|
end
|
|
786
|
-
|
|
805
|
+
max = i
|
|
806
|
+
self.columns = cols.map{|c| c[0]}
|
|
787
807
|
|
|
788
808
|
while result.next
|
|
789
809
|
row = {}
|
|
790
|
-
|
|
810
|
+
i = -1
|
|
811
|
+
while (i += 1) < max
|
|
812
|
+
n, j, pr = cols[i]
|
|
791
813
|
row[n] = pr.call(result, j)
|
|
792
814
|
end
|
|
793
815
|
yield row
|