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/doc/model_plugins.rdoc
CHANGED
|
@@ -33,7 +33,7 @@ Doing this, only Node and future subclasses of Node will have the tree plugin lo
|
|
|
33
33
|
Some plugins require arguments and/or support options. For example, the single_table_inheritance plugin requires an argument containing the column that specifies the class to use, and options:
|
|
34
34
|
|
|
35
35
|
class Employee < Sequel::Model
|
|
36
|
-
plugin :single_table_inheritance, :type_id, :
|
|
36
|
+
plugin :single_table_inheritance, :type_id, model_map: {1=>:Staff, 2=>:Manager}
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
You should read the documentation for the plugin to determine if it requires arguments and what if any options are supported.
|
|
@@ -120,7 +120,7 @@ This allows a plugin user to do:
|
|
|
120
120
|
|
|
121
121
|
== Calling super to get Previous Behavior
|
|
122
122
|
|
|
123
|
-
No matter if you are dealing with class, instance, or dataset methods, you can call super inside the method to get the previous behavior. This makes it easy to hook into the method, add your own behavior, but still
|
|
123
|
+
No matter if you are dealing with class, instance, or dataset methods, you can call super inside the method to get the previous behavior. This makes it easy to hook into the method, add your own behavior, but still get the previous behavior:
|
|
124
124
|
|
|
125
125
|
module Sequel::Plugins::Foo
|
|
126
126
|
module InstanceMethods
|
|
@@ -135,14 +135,14 @@ No matter if you are dealing with class, instance, or dataset methods, you can c
|
|
|
135
135
|
private
|
|
136
136
|
|
|
137
137
|
def allow_saving?
|
|
138
|
-
|
|
138
|
+
moon =~ /Waxing/
|
|
139
139
|
end
|
|
140
140
|
end
|
|
141
141
|
end
|
|
142
142
|
|
|
143
143
|
== Running Code When the Plugin is Loaded
|
|
144
144
|
|
|
145
|
-
Some plugins require more than just adding methods. Any plugin that requires state is going to have to initialize that state and store it somewhere. If you want to run code when a plugin is loaded (usually to initialize state, but possibly for other reasons), there are two methods you can define to do so. The first method is apply, and it is called only the first time the plugin is loaded into the class, before it is loaded into the class. This is generally only used if a plugin depends on another plugin or for initializing state. You define this method as a singleton method of the plugin module:
|
|
145
|
+
Some plugins require more than just adding methods. Any plugin that requires state is going to have to initialize that state and store it somewhere (generally in the model class itself). If you want to run code when a plugin is loaded (usually to initialize state, but possibly for other reasons), there are two methods you can define to do so. The first method is apply, and it is called only the first time the plugin is loaded into the class, before it is loaded into the class. This is generally only used if a plugin depends on another plugin or for initializing state. You define this method as a singleton method of the plugin module:
|
|
146
146
|
|
|
147
147
|
module Sequel::Plugins::Foo
|
|
148
148
|
def self.apply(model)
|
|
@@ -158,7 +158,7 @@ The other method is called configure, and it is called everytime the plugin is l
|
|
|
158
158
|
module Sequel::Plugins::Foo
|
|
159
159
|
def self.configure(model)
|
|
160
160
|
model.instance_eval do
|
|
161
|
-
@
|
|
161
|
+
@foo_states[:initial] ||= :baz
|
|
162
162
|
end
|
|
163
163
|
end
|
|
164
164
|
end
|
|
@@ -177,7 +177,7 @@ If you want your plugin to take arguments and/or support options, you handle tha
|
|
|
177
177
|
|
|
178
178
|
def self.configure(model, opts={})
|
|
179
179
|
model.instance_eval do
|
|
180
|
-
@
|
|
180
|
+
@foo_states[:initial] = opts[:initial_state] || @foo_states[:initial] || :baz
|
|
181
181
|
end
|
|
182
182
|
end
|
|
183
183
|
end
|
|
@@ -185,7 +185,7 @@ If you want your plugin to take arguments and/or support options, you handle tha
|
|
|
185
185
|
This allows a user of the plugin to do either of the following
|
|
186
186
|
|
|
187
187
|
Bar.plugin :foo
|
|
188
|
-
Bar.plugin :foo, :
|
|
188
|
+
Bar.plugin :foo, initial_state: :quux
|
|
189
189
|
|
|
190
190
|
If you want to require the initial state to be provided as an argument:
|
|
191
191
|
|
|
@@ -199,7 +199,7 @@ If you want to require the initial state to be provided as an argument:
|
|
|
199
199
|
|
|
200
200
|
def self.configure(model, initial_state)
|
|
201
201
|
model.instance_eval do
|
|
202
|
-
@
|
|
202
|
+
@foo_states[:initial] = initial_state
|
|
203
203
|
end
|
|
204
204
|
end
|
|
205
205
|
end
|
|
@@ -212,11 +212,11 @@ In general you should only require plugin arguments if you absolutely must have
|
|
|
212
212
|
|
|
213
213
|
== Handling Subclasses
|
|
214
214
|
|
|
215
|
-
Sequel::Model uses a copy-on-subclassing approach to model state. So instead of model
|
|
215
|
+
Sequel::Model uses a copy-on-subclassing approach to model state. So instead of having a model subclass ask its superclass for a value if the subclass don't have the value defined, the value should be copied from the parent class to the subclass when the subclass is created. While this can be implemented by overriding the +inherited+ class method, there is an available shortcut that handles most cases:
|
|
216
216
|
|
|
217
217
|
module Sequel::Plugins::Foo
|
|
218
218
|
module ClassMethods
|
|
219
|
-
Sequel::Plugins.inherited_instance_variables(self, :@
|
|
219
|
+
Sequel::Plugins.inherited_instance_variables(self, :@foo_states => :dup)
|
|
220
220
|
end
|
|
221
221
|
end
|
|
222
222
|
|
|
@@ -238,12 +238,12 @@ In many plugins, if the model class changes the dataset, you need to change the
|
|
|
238
238
|
private
|
|
239
239
|
|
|
240
240
|
def set_foo_table
|
|
241
|
-
@
|
|
241
|
+
@foo_states[:table] = table_name
|
|
242
242
|
end
|
|
243
243
|
end
|
|
244
244
|
end
|
|
245
245
|
|
|
246
|
-
With this code, any time the model's dataset changes, the state of the plugin will be updated to set the correct table name.
|
|
246
|
+
With this code, any time the model's dataset changes, the state of the plugin will be updated to set the correct table name. This is also called when creating a new model class with a dataset.
|
|
247
247
|
|
|
248
248
|
== Making Dataset Methods Callable as Class Methods
|
|
249
249
|
|
|
@@ -17,7 +17,7 @@ The following stored procedure is used as an example:
|
|
|
17
17
|
|
|
18
18
|
Execute it as follows:
|
|
19
19
|
|
|
20
|
-
DB.call_mssql_sproc(:SequelTest, {:
|
|
20
|
+
DB.call_mssql_sproc(:SequelTest, {args: ['Input String', :output]})
|
|
21
21
|
|
|
22
22
|
Use the +:output+ symbol to denote an output variable. The result will contain a
|
|
23
23
|
hash of the output variables, as well as the result code and number of affected rows:
|
|
@@ -27,7 +27,7 @@ hash of the output variables, as well as the result code and number of affected
|
|
|
27
27
|
Output variables will be strings by default. To specify their type, include the
|
|
28
28
|
SQL type:
|
|
29
29
|
|
|
30
|
-
DB.call_mssql_sproc(:SequelTest, {:
|
|
30
|
+
DB.call_mssql_sproc(:SequelTest, {args: ['Input String', [:output, 'int']]})
|
|
31
31
|
|
|
32
32
|
Result:
|
|
33
33
|
|
|
@@ -36,7 +36,7 @@ Result:
|
|
|
36
36
|
Output variables will be named +var#{n}+ where n is their zero indexed position
|
|
37
37
|
in the parameter list. To name the output variable, include their name:
|
|
38
38
|
|
|
39
|
-
DB.call_mssql_sproc(:SequelTest, {:
|
|
39
|
+
DB.call_mssql_sproc(:SequelTest, {args: ['Input String', [:output, nil, 'Output']]})
|
|
40
40
|
|
|
41
41
|
Result:
|
|
42
42
|
|
data/doc/object_model.rdoc
CHANGED
|
@@ -6,13 +6,12 @@ Sequel objects by calling #new on the object's class (other than Sequel::Model
|
|
|
6
6
|
instances). However, just as almost everything in ruby is an object, all
|
|
7
7
|
the methods you call in Sequel deal with objects behind the scenes.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
Sequel:
|
|
9
|
+
In addition to the standard ruby types, there are four main types of
|
|
10
|
+
Sequel-specific objects that you deal when programming with Sequel:
|
|
11
11
|
|
|
12
12
|
* Sequel::Database
|
|
13
13
|
* Sequel::Dataset
|
|
14
14
|
* Sequel::Model
|
|
15
|
-
* Standard Ruby Types
|
|
16
15
|
* Sequel::SQL::Expression (and subclasses)
|
|
17
16
|
|
|
18
17
|
== Sequel::Database
|
|
@@ -47,27 +46,27 @@ and literalize the object to an SQL string fragment:
|
|
|
47
46
|
|
|
48
47
|
== Sequel::Dataset
|
|
49
48
|
|
|
50
|
-
Sequel::Dataset objects represent SQL queries
|
|
51
|
-
abstract collections of rows in the database. They are usually created from
|
|
49
|
+
Sequel::Dataset objects represent SQL queries. They are created from
|
|
52
50
|
a Sequel::Database object:
|
|
53
51
|
|
|
54
52
|
dataset = DB[:table] # SELECT * FROM "table"
|
|
55
53
|
dataset = DB.from(table) # SELECT * FROM "table"
|
|
56
54
|
dataset = DB.select(:column) # SELECT "column"
|
|
57
55
|
|
|
58
|
-
Most Sequel::Dataset methods
|
|
59
|
-
general way to build queries in Sequel is
|
|
56
|
+
Most Sequel::Dataset methods that do not execute queries return modified
|
|
57
|
+
copies of the receiver, and the general way to build queries in Sequel is
|
|
58
|
+
via a method chain:
|
|
60
59
|
|
|
61
60
|
dataset = DB[:test].
|
|
62
61
|
select(:column1, :column2).
|
|
63
|
-
where(:
|
|
62
|
+
where(column3: 4).
|
|
64
63
|
order(:column5)
|
|
65
64
|
|
|
66
65
|
Such a method chain is a more direct way of doing:
|
|
67
66
|
|
|
68
67
|
dataset = DB[:test]
|
|
69
68
|
dataset = dataset.select(:column1, :column2)
|
|
70
|
-
dataset = dataset.where(:
|
|
69
|
+
dataset = dataset.where(column3: 4)
|
|
71
70
|
dataset = dataset.order(:column5)
|
|
72
71
|
|
|
73
72
|
When you are ready to execute your query, you call one of the Sequel::Dataset
|
|
@@ -79,8 +78,8 @@ action methods. For returning rows, you can do:
|
|
|
79
78
|
|
|
80
79
|
For inserting, updating, or deleting rows, you can do:
|
|
81
80
|
|
|
82
|
-
dataset.insert(:
|
|
83
|
-
dataset.update(:
|
|
81
|
+
dataset.insert(column: value)
|
|
82
|
+
dataset.update(column: value)
|
|
84
83
|
dataset.delete
|
|
85
84
|
|
|
86
85
|
All datasets are related to their database object, which you can access via
|
|
@@ -90,7 +89,7 @@ the Sequel::Dataset#db method:
|
|
|
90
89
|
|
|
91
90
|
== Sequel::Model
|
|
92
91
|
|
|
93
|
-
Sequel::Model
|
|
92
|
+
Sequel::Model classes are wrappers around a particular Sequel::Dataset object that
|
|
94
93
|
add custom behavior, both custom behavior for the entire set of rows in the dataset
|
|
95
94
|
(the model's class methods), custom behavior for a subset of rows in the dataset
|
|
96
95
|
(the model's dataset methods), and custom behavior for single rows in the dataset
|
|
@@ -103,6 +102,13 @@ generally created by the user using standard ruby syntax:
|
|
|
103
102
|
end
|
|
104
103
|
album = Album.new
|
|
105
104
|
|
|
105
|
+
Model classes that use a non-default Database instance or table name generally
|
|
106
|
+
use the Sequel::Model method to create the superclass:
|
|
107
|
+
|
|
108
|
+
class Album < Sequel::Model(DB[:music_albums])
|
|
109
|
+
end
|
|
110
|
+
album = Album.new
|
|
111
|
+
|
|
106
112
|
All model classes are related to their Sequel::Dataset object, which you
|
|
107
113
|
can access via the Sequel::Model.dataset method:
|
|
108
114
|
|
|
@@ -121,26 +127,12 @@ if you pass the left side to Sequel::Database#literal.
|
|
|
121
127
|
|
|
122
128
|
=== Symbol
|
|
123
129
|
|
|
124
|
-
|
|
130
|
+
Ruby symbols represent SQL identifiers (tables, columns, schemas):
|
|
125
131
|
|
|
132
|
+
:schema # "schema"
|
|
126
133
|
:table # "table"
|
|
127
134
|
:column # "column"
|
|
128
135
|
|
|
129
|
-
However, they can also represent qualified identifiers by including a double
|
|
130
|
-
underscore inside a symbol:
|
|
131
|
-
|
|
132
|
-
:table__column # "table"."column"
|
|
133
|
-
|
|
134
|
-
They can also represent an aliased identifier by including a triple underscore
|
|
135
|
-
inside a symbol:
|
|
136
|
-
|
|
137
|
-
:column___alias # "column" AS "alias"
|
|
138
|
-
|
|
139
|
-
You can combine both qualification and aliasing by using a double underscore
|
|
140
|
-
and a triple underscore:
|
|
141
|
-
|
|
142
|
-
:table__column___alias # "table"."column" AS "alias"
|
|
143
|
-
|
|
144
136
|
=== Integer, Float, BigDecimal, String, Date, Time, DateTime
|
|
145
137
|
|
|
146
138
|
Ruby's Integer, Float, BigDecimal, String, Date, Time, and DateTime classes
|
|
@@ -158,31 +150,31 @@ represent similar types in SQL:
|
|
|
158
150
|
|
|
159
151
|
Sequel generally uses hash objects to represent equality:
|
|
160
152
|
|
|
161
|
-
{:
|
|
153
|
+
{column: 1} # ("column" = 1)
|
|
162
154
|
|
|
163
|
-
However, if you use
|
|
155
|
+
However, if you use an array as the hash value, it represents inclusion in the value list:
|
|
164
156
|
|
|
165
|
-
{:
|
|
157
|
+
{column: [1, 2, 3]} # ("column" IN (1, 2, 3))
|
|
166
158
|
|
|
167
159
|
You can also use a Sequel::Dataset instance as the hash value, which will be used to
|
|
168
160
|
represent inclusion in the subselect:
|
|
169
161
|
|
|
170
|
-
{:
|
|
162
|
+
{column: DB[:table].select(:column)} # ("column" IN (SELECT "column" FROM "table"))
|
|
171
163
|
|
|
172
|
-
If you pass true, false, or nil as the hash value, it
|
|
164
|
+
If you pass true, false, or nil as the hash value, it represents identity:
|
|
173
165
|
|
|
174
|
-
{:
|
|
166
|
+
{column: nil} # ("column" IS NULL)
|
|
175
167
|
|
|
176
168
|
If you pass a Range object, it will be used as the bounds for a greater than and less than
|
|
177
169
|
operation:
|
|
178
170
|
|
|
179
|
-
{:
|
|
180
|
-
{:
|
|
171
|
+
{column: 1..2} # (("column" >= 1) AND ("column" <= 2))
|
|
172
|
+
{column: 1...3} # (("column" >= 1) AND ("column" < 3))
|
|
181
173
|
|
|
182
174
|
If you pass a Regexp object as the value, it will be used as a regular expression
|
|
183
|
-
operation
|
|
175
|
+
operation if the database supports it:
|
|
184
176
|
|
|
185
|
-
{:
|
|
177
|
+
{column: /a.*b/} # ("column" ~ 'a.*b')
|
|
186
178
|
|
|
187
179
|
=== Array
|
|
188
180
|
|
|
@@ -251,9 +243,8 @@ no additional behavior, so it can be instantiated like a normal array:
|
|
|
251
243
|
|
|
252
244
|
Sequel::SQL::ValueList.new([[1, 2], [3, 4]]) # ((1, 2), (3, 4))
|
|
253
245
|
|
|
254
|
-
In
|
|
255
|
-
|
|
256
|
-
where they are required.
|
|
246
|
+
In general, you don't need to create Sequel::SQL::ValueList instances manually,
|
|
247
|
+
they will be created automatically where they are required in most cases.
|
|
257
248
|
|
|
258
249
|
The following shortcuts exist for creating Sequel::SQL::ValueList objects:
|
|
259
250
|
|
|
@@ -263,16 +254,16 @@ The following shortcuts exist for creating Sequel::SQL::ValueList objects:
|
|
|
263
254
|
=== Sequel::SQL::Identifier
|
|
264
255
|
|
|
265
256
|
Sequel::SQL::Identifier objects represent single identifiers. The main reason for
|
|
266
|
-
their
|
|
267
|
-
|
|
257
|
+
their existence is they support many additional Sequel specific methods that are
|
|
258
|
+
not supported on plain symbols:
|
|
268
259
|
|
|
269
|
-
Sequel::SQL::Identifier.new(:
|
|
260
|
+
Sequel::SQL::Identifier.new(:colum) # "col"
|
|
270
261
|
|
|
271
262
|
The following shortcuts exist for creating Sequel::SQL::Identifier objects:
|
|
272
263
|
|
|
273
|
-
Sequel
|
|
274
|
-
Sequel.identifier(:
|
|
275
|
-
:
|
|
264
|
+
Sequel[:column]
|
|
265
|
+
Sequel.identifier(:column)
|
|
266
|
+
:column.identifier # core_extensions extension
|
|
276
267
|
|
|
277
268
|
=== Sequel::SQL::QualifiedIdentifier
|
|
278
269
|
|
|
@@ -282,7 +273,7 @@ Sequel::SQL::QualifiedIdentifier objects represent qualified identifiers:
|
|
|
282
273
|
|
|
283
274
|
The following shortcuts exist for creating Sequel::SQL::QualifiedIdentifier objects:
|
|
284
275
|
|
|
285
|
-
Sequel
|
|
276
|
+
Sequel[:table][:column]
|
|
286
277
|
Sequel.qualify(:table, :column)
|
|
287
278
|
:column.qualify(:table) # core_extensions extension
|
|
288
279
|
|
|
@@ -294,15 +285,17 @@ is treated as an identifier, but the expression can be an arbitrary Sequel expre
|
|
|
294
285
|
Sequel::SQL::AliasedExpression.new(:column, :alias)
|
|
295
286
|
# "column" AS "alias"
|
|
296
287
|
|
|
288
|
+
Derived column lists are also supported:
|
|
289
|
+
|
|
297
290
|
Sequel::SQL::AliasedExpression.new(:table, :alias, [:column_alias1, :column_alias2])
|
|
298
291
|
# "table" AS "alias"("column_alias1", "column_alias2")
|
|
299
292
|
|
|
300
293
|
The following shortcuts exist for creating Sequel::SQL::AliasedExpression objects:
|
|
301
294
|
|
|
302
|
-
Sequel.
|
|
295
|
+
Sequel[:column].as(:alias)
|
|
303
296
|
Sequel.as(:column, :alias)
|
|
304
297
|
Sequel.as(:column, :alias, [:column_alias1, :column_alias2])
|
|
305
|
-
:column.as(:alias) # core_extensions extension
|
|
298
|
+
:column.as(:alias) # core_extensions or symbol_as extension
|
|
306
299
|
|
|
307
300
|
=== Sequel::SQL::ComplexExpression
|
|
308
301
|
|
|
@@ -338,7 +331,7 @@ against:
|
|
|
338
331
|
|
|
339
332
|
Or they can treat each condition separately:
|
|
340
333
|
|
|
341
|
-
Sequel::SQL::CaseExpression.new({{:
|
|
334
|
+
Sequel::SQL::CaseExpression.new({{a: 2}=>1}, 0) # CASE WHEN ("a" = 2) THEN 1 ELSE 0 END
|
|
342
335
|
|
|
343
336
|
In addition to providing a hash, you can also provide an array of two-element arrays:
|
|
344
337
|
|
|
@@ -347,10 +340,10 @@ In addition to providing a hash, you can also provide an array of two-element ar
|
|
|
347
340
|
The following shortcuts exist for creating Sequel::SQL::CaseExpression objects:
|
|
348
341
|
|
|
349
342
|
Sequel.case({2=>1}, 0, :a)
|
|
350
|
-
Sequel.case({{:
|
|
343
|
+
Sequel.case({{a: 2}=>1}, 0)
|
|
351
344
|
|
|
352
345
|
{2=>1}.case(0, :a) # core_extensions extension
|
|
353
|
-
{{:
|
|
346
|
+
{{a: 2}=>1}.case(0) # core_extensions extension
|
|
354
347
|
|
|
355
348
|
=== Sequel::SQL::Cast
|
|
356
349
|
|
|
@@ -375,21 +368,19 @@ The following shortcuts exist for creating Sequel::SQL::Cast objects:
|
|
|
375
368
|
|
|
376
369
|
=== Sequel::SQL::ColumnAll
|
|
377
370
|
|
|
378
|
-
Sequel::SQL::ColumnAll objects represent the selection of all columns from a
|
|
379
|
-
table. They are pretty much only used as arguments to one of the Dataset select
|
|
380
|
-
methods, and are not used much anymore since Dataset#select_all was expanded to
|
|
381
|
-
take arguments. Still, it's possible they are still useful in some code:
|
|
371
|
+
Sequel::SQL::ColumnAll objects represent the selection of all columns from a table:
|
|
382
372
|
|
|
383
373
|
Sequel::SQL::ColumnAll.new(:table) # "table".*
|
|
384
374
|
|
|
385
375
|
The following shortcut exists for creating Sequel::SQL::ColumnAll objects:
|
|
386
376
|
|
|
387
|
-
Sequel
|
|
377
|
+
Sequel[:table].*
|
|
378
|
+
Sequel[:schema][:table].*
|
|
388
379
|
:table.* # core_extensions extension
|
|
389
380
|
|
|
390
381
|
=== Sequel::SQL::Constant
|
|
391
382
|
|
|
392
|
-
Sequel::SQL::Constant objects represent constants or
|
|
383
|
+
Sequel::SQL::Constant objects represent constants or pseudo-constants in SQL,
|
|
393
384
|
such as TRUE, NULL, and CURRENT_TIMESTAMP. These are not designed to be created
|
|
394
385
|
or used by the end user, but some existing values are predefined under the
|
|
395
386
|
Sequel namespace:
|
|
@@ -398,7 +389,7 @@ Sequel namespace:
|
|
|
398
389
|
|
|
399
390
|
These objects are usually used as values in queries:
|
|
400
391
|
|
|
401
|
-
DB[:table].insert(:
|
|
392
|
+
DB[:table].insert(time: Sequel::CURRENT_TIMESTAMP)
|
|
402
393
|
|
|
403
394
|
=== Sequel::SQL::DelayedEvaluation
|
|
404
395
|
|
|
@@ -457,7 +448,7 @@ The first type uses question marks with multiple placeholder value objects:
|
|
|
457
448
|
The second uses named placeholders with colons and a hash of placeholder
|
|
458
449
|
value objects:
|
|
459
450
|
|
|
460
|
-
Sequel::SQL::PlaceholderLiteralString.new(':b = :v', [{:
|
|
451
|
+
Sequel::SQL::PlaceholderLiteralString.new(':b = :v', [{b: :a, v: 1}]) # "a" = 1
|
|
461
452
|
|
|
462
453
|
The third uses an array instead of a string, with multiple placeholder
|
|
463
454
|
objects, each one going in between the members of the array:
|
|
@@ -473,7 +464,7 @@ The following shortcuts exist for creating Sequel::SQL::PlaceholderLiteralString
|
|
|
473
464
|
objects:
|
|
474
465
|
|
|
475
466
|
Sequel.lit('? = ?', :a, 1)
|
|
476
|
-
Sequel.lit(':b = :v', :
|
|
467
|
+
Sequel.lit(':b = :v', b: :a, v: 1)
|
|
477
468
|
Sequel.lit(['', ' = '], :a, 1)
|
|
478
469
|
|
|
479
470
|
'? = ?'.lit(:a, 1) # core_extensions extension
|
|
@@ -543,10 +534,10 @@ Sequel::SQL::Window objects represent the windows used by Sequel::SQL::Function.
|
|
|
543
534
|
They use a hash-based API, supporting the :frame, :order, :partition, and :window
|
|
544
535
|
options:
|
|
545
536
|
|
|
546
|
-
Sequel::SQL::Window.new(:
|
|
547
|
-
Sequel::SQL::Window.new(:
|
|
537
|
+
Sequel::SQL::Window.new(order: :a) # (ORDER BY "a")
|
|
538
|
+
Sequel::SQL::Window.new(partition: :a) # (PARTITION BY "a")
|
|
548
539
|
|
|
549
|
-
Sequel::SQL::Window.new(:
|
|
540
|
+
Sequel::SQL::Window.new(partition: :a, frame: :all)
|
|
550
541
|
# (PARTITION BY "a" ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
|
|
551
542
|
|
|
552
543
|
=== Sequel::SQL::Wrapper
|
|
@@ -555,7 +546,7 @@ Sequel::SQL::Wrapper objects wrap arbitrary objects so that they can be used
|
|
|
555
546
|
in Sequel expressions:
|
|
556
547
|
|
|
557
548
|
o = Object.new
|
|
558
|
-
def o.
|
|
549
|
+
def o.sql_literal_append(ds, sql) sql << "foo" end
|
|
559
550
|
Sequel::SQL::Wrapper.new(o) # foo
|
|
560
551
|
|
|
561
552
|
The advantage of wrapping the object is that you can the call Sequel methods
|
|
@@ -563,11 +554,10 @@ on the wrapper that would not be defined on the object itself:
|
|
|
563
554
|
|
|
564
555
|
Sequel::SQL::Wrapper.new(o) + 1 # (foo + 1)
|
|
565
556
|
|
|
566
|
-
You can use the Sequel.
|
|
557
|
+
You can use the Sequel.[] method to wrap any object:
|
|
567
558
|
|
|
568
|
-
Sequel
|
|
559
|
+
Sequel[o]
|
|
569
560
|
|
|
570
561
|
However, note that that does not necessarily return a Sequel::SQL::Wrapper
|
|
571
562
|
object, it may return a different class of object, such as a
|
|
572
563
|
Sequel::SQL::ComplexExpression subclass object.
|
|
573
|
-
|
data/doc/opening_databases.rdoc
CHANGED
|
@@ -28,12 +28,12 @@ You can use URI query parameters to specify options:
|
|
|
28
28
|
|
|
29
29
|
You can also pass an additional option hash with the connection string:
|
|
30
30
|
|
|
31
|
-
DB = Sequel.connect('postgres://localhost/blog', :
|
|
31
|
+
DB = Sequel.connect('postgres://localhost/blog', user: 'user', password: 'password')
|
|
32
32
|
|
|
33
33
|
You can also just use an options hash without a connection string. If you do this, you must
|
|
34
34
|
provide the adapter to use:
|
|
35
35
|
|
|
36
|
-
DB = Sequel.connect(:
|
|
36
|
+
DB = Sequel.connect(adapter: 'postgres', host: 'localhost', database: 'blog', user: 'user', password: 'password')
|
|
37
37
|
|
|
38
38
|
All of the above statements are equivalent.
|
|
39
39
|
|
|
@@ -43,12 +43,12 @@ The specialized adapter method is similar to Sequel.connect with an options hash
|
|
|
43
43
|
automatically populates the :adapter option and assumes the first argument is the :database option,
|
|
44
44
|
unless the first argument is a hash. So the following statements are equivalent to the previous statements.
|
|
45
45
|
|
|
46
|
-
DB = Sequel.postgres('blog', :
|
|
47
|
-
DB = Sequel.postgres(:
|
|
46
|
+
DB = Sequel.postgres('blog', host: 'localhost', user: 'user', password: 'password')
|
|
47
|
+
DB = Sequel.postgres(host: 'localhost', user: 'user', password: 'password', database: 'blog')
|
|
48
48
|
|
|
49
49
|
Note that using an adapter method forces the use of the specified adapter, not a database type, even
|
|
50
50
|
though some adapters have the same name as the database type. So if you
|
|
51
|
-
want to connect to SQLite, for example, you can do so using the sqlite,
|
|
51
|
+
want to connect to SQLite, for example, you can do so using the sqlite, amalgalite, and jdbc adapters.
|
|
52
52
|
If you want to connect to SQLite on JRuby using the jdbc adapter, you should not use <tt>Sequel.sqlite</tt>
|
|
53
53
|
for example, as that uses the C-based sqlite3 gem. Instead, the <tt>Sequel.jdbc</tt> would be appropriate (though
|
|
54
54
|
as mentioned below, using <tt>Sequel.connect</tt> is recommended instead of <tt>Sequel.jdbc</tt>).
|
|
@@ -62,28 +62,49 @@ For example:
|
|
|
62
62
|
|
|
63
63
|
Sequel.connect('sqlite://blog.db'){|db| puts db[:users].count}
|
|
64
64
|
|
|
65
|
+
Note that if you do not pass a block to Sequel.connect, Sequel will automatically retain a
|
|
66
|
+
reference to the object in the <tt>Sequel::DATABASES</tt> array. So calling +Sequel.connect+
|
|
67
|
+
multiple times (say once per request), can result in a memory leak. For any application where
|
|
68
|
+
database access is needed for a long period of time, it's best to store the result of
|
|
69
|
+
Sequel.connection in a constant, as recommended above.
|
|
70
|
+
|
|
71
|
+
== Using the Sequel.connect method
|
|
65
72
|
== General connection options
|
|
66
73
|
|
|
67
74
|
These options are shared by all adapters unless otherwise noted.
|
|
68
75
|
|
|
69
76
|
:adapter :: The adapter to use
|
|
70
77
|
:database :: The name of the database to which to connect
|
|
78
|
+
:extensions :: Extensions to load into this Database instance. Can be a symbol, array of symbols,
|
|
79
|
+
or string with extensions separated by columns. These extensions are loaded after
|
|
80
|
+
connections are made by the :preconnect option.
|
|
81
|
+
:cache_schema :: Whether schema should be cached for this database (true by default)
|
|
82
|
+
:default_string_column_size :: The default size for string columns (255 by default)
|
|
71
83
|
:host :: The hostname of the database server to which to connect
|
|
84
|
+
:keep_reference :: Whether to keep a reference to the database in Sequel::DATABASES (true by default)
|
|
85
|
+
:logger :: A specific SQL logger to log to
|
|
72
86
|
:loggers :: An array of SQL loggers to log to
|
|
87
|
+
:log_connection_info :: Whether to include connection information in log messages (false by default)
|
|
88
|
+
:log_warn_duration :: The amount of seconds after which the queries are logged at :warn level
|
|
73
89
|
:password :: The password for the user account
|
|
74
|
-
:
|
|
75
|
-
|
|
76
|
-
:
|
|
90
|
+
:preconnect :: Whether to automatically make the maximum number of connections when setting up the pool.
|
|
91
|
+
Can be set to "concurrently" to connect in parallel.
|
|
92
|
+
:preconnect_extensions :: Similar to the :extensions option, but loads the extensions before the
|
|
93
|
+
connections are made by the :preconnect option.
|
|
94
|
+
:quote_identifiers :: Whether to quote identifiers.
|
|
95
|
+
:servers :: A hash with symbol keys and hash or proc values, used with primary/replica and sharded database configurations
|
|
96
|
+
:sql_log_level :: The level at which to issue queries to the loggers (:info by default)
|
|
97
|
+
:test :: Whether to test that a valid database connection can be made (true by default)
|
|
77
98
|
:user :: The user account name to use logging in
|
|
78
99
|
|
|
79
100
|
The following options can be specified and are passed to the database's internal connection pool.
|
|
80
101
|
|
|
81
102
|
:after_connect :: A callable object called after each new connection is made, with the
|
|
82
103
|
connection object (and server argument if the callable accepts 2 arguments),
|
|
83
|
-
useful for customizations that you want to apply to all connections (default
|
|
84
|
-
:max_connections :: The maximum size of the connection pool (
|
|
85
|
-
:
|
|
86
|
-
:
|
|
104
|
+
useful for customizations that you want to apply to all connections (nil by default).
|
|
105
|
+
:max_connections :: The maximum size of the connection pool (4 connections by default on most databases)
|
|
106
|
+
:pool_timeout :: The number of seconds to wait if a connection cannot be acquired before raising an error (5 seconds by default)
|
|
107
|
+
:single_threaded :: Whether to use a single-threaded (non-thread safe) connection pool
|
|
87
108
|
|
|
88
109
|
== Adapter specific connection options
|
|
89
110
|
|
|
@@ -105,7 +126,6 @@ The following options are supported:
|
|
|
105
126
|
:command_timeout :: Sets the time in seconds to wait while attempting
|
|
106
127
|
to execute a command before cancelling the attempt and generating
|
|
107
128
|
an error. Specifically, it sets the ADO CommandTimeout property.
|
|
108
|
-
If this property is not set, the default of 30 seconds is used.
|
|
109
129
|
:driver :: The driver to use in the ADO connection string. If not provided, a default
|
|
110
130
|
of "SQL Server" is used.
|
|
111
131
|
:conn_string :: The full ADO connection string. If this is provided,
|
|
@@ -116,9 +136,9 @@ The following options are supported:
|
|
|
116
136
|
for every query, which breaks things such as transactions and temporary tables.
|
|
117
137
|
|
|
118
138
|
Pay special attention to the :provider option, as without specifying a provider,
|
|
119
|
-
many things will be broken. The SQLNCLI10
|
|
120
|
-
are connecting to Microsoft SQL Server, but it is not the default as
|
|
121
|
-
|
|
139
|
+
many things will be broken. The SQLNCLI10 and SQLNCLI11 providers work well if you
|
|
140
|
+
are connecting to Microsoft SQL Server, but it is not the default as it depends on
|
|
141
|
+
those providers being installed.
|
|
122
142
|
|
|
123
143
|
Example connections:
|
|
124
144
|
|
|
@@ -126,11 +146,11 @@ Example connections:
|
|
|
126
146
|
Sequel.connect('ado:///sequel_test?host=server%5cdb_instance')
|
|
127
147
|
Sequel.connect('ado://user:password@server/database?host=server%5cdb_instance&provider=SQLNCLI10')
|
|
128
148
|
# Access 2007
|
|
129
|
-
Sequel.ado(:
|
|
149
|
+
Sequel.ado(conn_string: 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=drive:\\path\\filename.accdb')
|
|
130
150
|
# Access 2000
|
|
131
|
-
Sequel.ado(:
|
|
151
|
+
Sequel.ado(conn_string: 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.mdb')
|
|
132
152
|
# Excel 2000 (for table names, use a dollar after the sheet name, e.g. Sheet1$)
|
|
133
|
-
Sequel.ado(:
|
|
153
|
+
Sequel.ado(conn_string: 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=drive:\\path\\filename.xls;Extended Properties=Excel 8.0;')
|
|
134
154
|
|
|
135
155
|
=== amalgalite
|
|
136
156
|
|
|
@@ -148,31 +168,6 @@ Without a database argument, assumes a memory database, so you can do:
|
|
|
148
168
|
Handles paths in the connection string similar to the SQLite adapter, so see
|
|
149
169
|
the sqlite section below for details.
|
|
150
170
|
|
|
151
|
-
=== cubrid
|
|
152
|
-
|
|
153
|
-
cubrid is a ruby extension for accessing a CUBRID database. Currently,
|
|
154
|
-
the ruby cubrid gem is in fairly rough state, with broken transaction
|
|
155
|
-
support and some other issues, but most things work.
|
|
156
|
-
|
|
157
|
-
=== do
|
|
158
|
-
|
|
159
|
-
Requires: data_objects
|
|
160
|
-
|
|
161
|
-
The DataObjects adapter supports PostgreSQL, MySQL, and SQLite. One possible
|
|
162
|
-
advantage of using DataObjects is that it does the typecasting in C, which may
|
|
163
|
-
be faster than the other adapters.
|
|
164
|
-
|
|
165
|
-
Similar to the JDBC adapter, the DO adapter only cares about connection strings,
|
|
166
|
-
which can either be the String argument given to Sequel.connect directly or contained
|
|
167
|
-
in a :uri or :url option. The DO adapter passes through the connection string
|
|
168
|
-
directly to DataObjects, it does no processing of it (other than removing the do: prefix).
|
|
169
|
-
|
|
170
|
-
Connection string examples:
|
|
171
|
-
|
|
172
|
-
do:sqlite3::memory:
|
|
173
|
-
do:postgres://user:password@host/database
|
|
174
|
-
do:mysql://user:password@host/database
|
|
175
|
-
|
|
176
171
|
=== ibmdb
|
|
177
172
|
|
|
178
173
|
requires 'ibm_db'
|
|
@@ -186,20 +181,14 @@ Requires: java
|
|
|
186
181
|
|
|
187
182
|
Houses Sequel's JDBC support when running on JRuby.
|
|
188
183
|
Support for individual database types is done using subadapters.
|
|
189
|
-
There are currently subadapters for
|
|
190
|
-
|
|
191
|
-
For
|
|
192
|
-
|
|
184
|
+
There are currently subadapters for DB2, Derby, H2, HSQLDB, JTDS,
|
|
185
|
+
MySQL, Oracle, PostgreSQL, SQLAnywhere, SQLite, and SQL Server.
|
|
186
|
+
For Derby, H2, HSQLDB, JTDS, MySQL, Postgres, SQLite3
|
|
187
|
+
the adapters can use the `jdbc-*` gem, for the others you need to have the `.jar` in your CLASSPATH
|
|
193
188
|
or load the Java class manually before calling Sequel.connect.
|
|
194
189
|
|
|
195
|
-
You just use the JDBC connection string directly, which can be specified
|
|
196
|
-
via the string given to Sequel.connect or via the :uri, :url, or :database options.
|
|
197
|
-
Sequel does no preprocessing of the string, it passes it directly to JDBC.
|
|
198
|
-
So if you have problems getting a connection string to work, look up the JDBC
|
|
199
|
-
documentation.
|
|
200
|
-
|
|
201
190
|
Note that when using a JDBC adapter, the best way to use Sequel
|
|
202
|
-
is via Sequel.connect, NOT Sequel.jdbc. Use the JDBC connection
|
|
191
|
+
is via Sequel.connect using a connection string, NOT Sequel.jdbc. Use the JDBC connection
|
|
203
192
|
string when connecting, which will be in a different format than
|
|
204
193
|
the native connection string. The connection string should start
|
|
205
194
|
with 'jdbc:'. For PostgreSQL, use 'jdbc:postgresql:', and for
|
|
@@ -207,6 +196,14 @@ SQLite you do not need 2 preceding slashes for the database name
|
|
|
207
196
|
(use no preceding slashes for a relative path, and one preceding
|
|
208
197
|
slash for an absolute path).
|
|
209
198
|
|
|
199
|
+
Sequel does no preprocessing of JDBC connection strings, it passes them directly to JDBC.
|
|
200
|
+
So if you have problems getting a connection string to work, look up the
|
|
201
|
+
documentation for the JDBC driver.
|
|
202
|
+
|
|
203
|
+
The jdbc adapter does not handle common options such as +:host+,
|
|
204
|
+
+:user+, and +:port+. If you must use a hash of options when connecting,
|
|
205
|
+
provide the full JDBC connection string as the :uri option.
|
|
206
|
+
|
|
210
207
|
Example connection strings:
|
|
211
208
|
|
|
212
209
|
jdbc:sqlite::memory:
|
|
@@ -219,9 +216,6 @@ Example connection strings:
|
|
|
219
216
|
jdbc:jtds:sqlserver://localhost/sequel_test;user=sequel_test;password=sequel_test
|
|
220
217
|
jdbc:oracle:thin:user/password@localhost:1521:database
|
|
221
218
|
jdbc:db2://localhost:3700/database:user=user;password=password;
|
|
222
|
-
jdbc:firebirdsql:localhost/3050:/path/to/database.fdb
|
|
223
|
-
jdbc:jdbcprogress:T:hostname:port:database
|
|
224
|
-
jdbc:cubrid:hostname:port:database:::
|
|
225
219
|
jdbc:sqlanywhere://localhost?DBN=Test;UID=user;PWD=password
|
|
226
220
|
|
|
227
221
|
You can also use JNDI connection strings:
|
|
@@ -239,20 +233,26 @@ The following additional options are supported:
|
|
|
239
233
|
and only helps cases where <tt>java.sql.DriverManager.getConnection</tt> does not
|
|
240
234
|
return a connection.
|
|
241
235
|
:login_timeout :: Set the login timeout on the JDBC connection (in seconds).
|
|
236
|
+
:jdbc_properties :: A hash for properties to set, skips the normal connection process of using
|
|
237
|
+
java.sql.drivermanager.getconnection and tries the backup process of using
|
|
238
|
+
driver.new.connect for the appropriate driver.
|
|
239
|
+
|
|
240
|
+
There are a few issues with specific jdbc driver gems:
|
|
241
|
+
|
|
242
|
+
jdbc-h2 :: jdbc-h2 versions greater than 1.3.175 have issues with ORDER BY not working correctly in some cases.
|
|
242
243
|
|
|
243
244
|
=== mysql
|
|
244
245
|
|
|
245
|
-
Requires:
|
|
246
|
+
Requires: mysql
|
|
246
247
|
|
|
247
|
-
The MySQL adapter does not support the pure-ruby
|
|
248
|
-
ActiveRecord, it requires the native adapter.
|
|
248
|
+
The MySQL adapter does not support the pure-ruby mysql.rb driver, it requires the C-extension driver.
|
|
249
249
|
|
|
250
250
|
The following additional options are supported:
|
|
251
251
|
|
|
252
252
|
:auto_is_null :: If set to true, makes "WHERE primary_key IS NULL" select the last inserted id.
|
|
253
253
|
:charset :: Same as :encoding, :encoding takes precedence.
|
|
254
254
|
:compress :: Whether to compress data sent/received via the socket connection.
|
|
255
|
-
:config_default_group :: The default group to read from the in the MySQL config file
|
|
255
|
+
:config_default_group :: The default group to read from the in the MySQL config file, defaults to "client")
|
|
256
256
|
:config_local_infile :: If provided, sets the Mysql::OPT_LOCAL_INFILE option on the connection with the given value.
|
|
257
257
|
:encoding :: Specify the encoding/character set to use for the connection.
|
|
258
258
|
:fractional_seconds :: On MySQL 5.6.5+, this option is recognized and will include fractional seconds in
|
|
@@ -264,17 +264,17 @@ The following additional options are supported:
|
|
|
264
264
|
or an array of symbols or strings (e.g. <tt>:sql_mode=>[:no_zero_date, :pipes_as_concat]</tt>).
|
|
265
265
|
:timeout :: Sets the wait_timeout for the connection, defaults to 1 month.
|
|
266
266
|
:read_timeout :: Set the timeout in seconds for reading back results to a query.
|
|
267
|
-
:connect_timeout :: Set the timeout in seconds before a connection attempt is abandoned
|
|
267
|
+
:connect_timeout :: Set the timeout in seconds before a connection attempt is abandoned
|
|
268
|
+
(may not be supported when using MariaDB 10.2+ client libraries).
|
|
269
|
+
|
|
270
|
+
The :sslkey, :sslcert, :sslca, :sslcapath, and :sslca options (in that order) are passed to Mysql#ssl_set method
|
|
271
|
+
if either the :sslca or :sslkey option is given.
|
|
268
272
|
|
|
269
273
|
=== mysql2
|
|
270
274
|
|
|
271
275
|
This is a newer MySQL adapter that does typecasting in C, so it is often faster than the
|
|
272
|
-
mysql adapter.
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
The following additional options are supported:
|
|
276
|
-
|
|
277
|
-
:flags :: Override the flags to use for the connection (e.g. ::Mysql2::Client::MULTI_STATEMENTS)
|
|
276
|
+
mysql adapter. The options given are passed to Mysql2::Client.new, see the mysql2 documentation
|
|
277
|
+
for details on what options are supported.
|
|
278
278
|
|
|
279
279
|
=== odbc
|
|
280
280
|
|
|
@@ -303,13 +303,15 @@ The following additional options are supported:
|
|
|
303
303
|
|
|
304
304
|
=== postgres
|
|
305
305
|
|
|
306
|
-
Requires: pg (or postgres if pg is not available)
|
|
306
|
+
Requires: pg (or postgres-pr/postgres-compat if pg is not available)
|
|
307
307
|
|
|
308
|
-
The Sequel postgres adapter works with the pg
|
|
308
|
+
The Sequel postgres adapter works with the pg and postgres-pr ruby libraries.
|
|
309
309
|
The pg library is the best supported, as it supports real bound variables and prepared statements.
|
|
310
310
|
If the pg library is being used, Sequel will also attempt to load the sequel_pg library, which is
|
|
311
311
|
a C extension that optimizes performance when Sequel is used with pg. All users of Sequel who
|
|
312
|
-
use pg are encouraged to install sequel_pg.
|
|
312
|
+
use pg are encouraged to install sequel_pg. For users who want to use postgres-pr to avoid issues
|
|
313
|
+
with C extensions, it is recommended to use jeremyevans-postgres-pr, which fixes many issues in
|
|
314
|
+
the upstream postgres-pr gem, and is regularly tested with Sequel.
|
|
313
315
|
|
|
314
316
|
The following additional options are supported:
|
|
315
317
|
|
|
@@ -318,14 +320,20 @@ The following additional options are supported:
|
|
|
318
320
|
conversion is done, so an error is raised if you attempt to retrieve an infinite
|
|
319
321
|
timestamp/date. You can set this to :nil to convert to nil, :string to leave
|
|
320
322
|
as a string, or :float to convert to an infinite float.
|
|
323
|
+
:conn_str :: Use connection string (in form of `host=x port=y ...`). Ignores all other options, only supported with pg
|
|
324
|
+
library. See https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING and
|
|
325
|
+
https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS for format and list of supported
|
|
326
|
+
options.
|
|
321
327
|
:connect_timeout :: Set the number of seconds to wait for a connection (default 20, only respected
|
|
322
328
|
if using the pg library).
|
|
329
|
+
:driver_options :: A hash of options to pass to the underlying driver (only respected if using the pg library)
|
|
323
330
|
:encoding :: Set the client_encoding to the given string
|
|
324
331
|
:notice_receiver :: A proc that be called with the PGresult objects that have notice or warning messages.
|
|
325
332
|
The default notice receiver just prints the messages to stderr, but this can be used
|
|
326
333
|
to handle notice/warning messages differently. Only respected if using the pg library).
|
|
327
|
-
:sslmode :: Set to 'disable', 'allow', 'prefer', 'require' to choose how to treat SSL (only
|
|
334
|
+
:sslmode :: Set to 'disable', 'allow', 'prefer', 'require', 'verify-ca', or 'verify-full' to choose how to treat SSL (only
|
|
328
335
|
respected if using the pg library)
|
|
336
|
+
:sslrootcert :: Specify the path to the root SSL certificate to use.
|
|
329
337
|
:search_path :: Set to the schema search_path. This can either be a single string containing the schemas
|
|
330
338
|
separated by commas (for use via a URL: <tt>postgres:///?search_path=schema1,schema2</tt>), or it
|
|
331
339
|
can be an array of strings (for use via an option:
|
|
@@ -380,24 +388,6 @@ database is used. Attempts to force the use of more than 1 connection
|
|
|
380
388
|
can result in weird behavior, since the connections will be to separate
|
|
381
389
|
memory databases.
|
|
382
390
|
|
|
383
|
-
=== swift
|
|
384
|
-
|
|
385
|
-
swift is a ruby 1.9+ library, so you'll need to be running ruby 1.9+. It
|
|
386
|
-
can connect to SQLite, MySQL, and PostgreSQL, and you must specify which
|
|
387
|
-
database using the db_type option.
|
|
388
|
-
|
|
389
|
-
You need to install one of the swift db adapters
|
|
390
|
-
|
|
391
|
-
* swift-db-sqlite3
|
|
392
|
-
* swift-db-mysql
|
|
393
|
-
* swift-db-postgres
|
|
394
|
-
|
|
395
|
-
Examples:
|
|
396
|
-
|
|
397
|
-
swift:///?database=:memory:&db_type=sqlite
|
|
398
|
-
swift://root:root@localhost/test?db_type=mysql
|
|
399
|
-
swift://root:root@localhost/test?db_type=postgres
|
|
400
|
-
|
|
401
391
|
=== tinytds
|
|
402
392
|
|
|
403
393
|
Requires: tiny_tds
|
|
@@ -411,6 +401,9 @@ options that you may want to set are :login_timeout, :timeout, :tds_version, :az
|
|
|
411
401
|
|
|
412
402
|
Other Sequel specific options:
|
|
413
403
|
|
|
404
|
+
:ansi :: Set to true to enable the ANSI compatibility settings when connecting
|
|
405
|
+
(ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ANSI_NULL_DFLT_ON, QUOTED_IDENTIFIER,
|
|
406
|
+
CONCAT_NULL_YIELDS_NULL).
|
|
414
407
|
:server_version :: Override the server version to use (9000000 = SQL Server 2005).
|
|
415
408
|
This also works on any other adapter that connects to Microsoft
|
|
416
409
|
SQL Server.
|
|
@@ -419,6 +412,3 @@ Other Sequel specific options:
|
|
|
419
412
|
This should be specified as an integer. If you plan on setting large
|
|
420
413
|
text or blob values via tinytds, you should use this option or modify
|
|
421
414
|
your freetds.conf file.
|
|
422
|
-
|
|
423
|
-
The Sequel tinytds adapter requires tiny_tds >= 0.4.5, and if you are using FreeTDS
|
|
424
|
-
0.91, you must at least be using 0.91rc2 (0.91rc1 does not work).
|