sequel 4.36.0 → 5.61.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 +548 -5749
- data/MIT-LICENSE +1 -1
- data/README.rdoc +265 -159
- data/bin/sequel +34 -12
- data/doc/advanced_associations.rdoc +228 -187
- data/doc/association_basics.rdoc +281 -291
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +86 -51
- data/doc/code_order.rdoc +25 -19
- 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/fork_safety.rdoc +84 -0
- data/doc/mass_assignment.rdoc +74 -31
- data/doc/migration.rdoc +59 -51
- 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 +58 -68
- data/doc/opening_databases.rdoc +85 -95
- data/doc/postgresql.rdoc +263 -38
- data/doc/prepared_statements.rdoc +29 -24
- data/doc/querying.rdoc +189 -167
- 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.38.0.txt +28 -0
- data/doc/release_notes/5.39.0.txt +19 -0
- data/doc/release_notes/5.4.0.txt +80 -0
- data/doc/release_notes/5.40.0.txt +40 -0
- data/doc/release_notes/5.41.0.txt +25 -0
- data/doc/release_notes/5.42.0.txt +136 -0
- data/doc/release_notes/5.43.0.txt +98 -0
- data/doc/release_notes/5.44.0.txt +32 -0
- data/doc/release_notes/5.45.0.txt +34 -0
- data/doc/release_notes/5.46.0.txt +87 -0
- data/doc/release_notes/5.47.0.txt +59 -0
- data/doc/release_notes/5.48.0.txt +14 -0
- data/doc/release_notes/5.49.0.txt +59 -0
- data/doc/release_notes/5.5.0.txt +61 -0
- data/doc/release_notes/5.50.0.txt +78 -0
- data/doc/release_notes/5.51.0.txt +47 -0
- data/doc/release_notes/5.52.0.txt +87 -0
- data/doc/release_notes/5.53.0.txt +23 -0
- data/doc/release_notes/5.54.0.txt +27 -0
- data/doc/release_notes/5.55.0.txt +21 -0
- data/doc/release_notes/5.56.0.txt +51 -0
- data/doc/release_notes/5.57.0.txt +23 -0
- data/doc/release_notes/5.58.0.txt +31 -0
- data/doc/release_notes/5.59.0.txt +73 -0
- data/doc/release_notes/5.6.0.txt +31 -0
- data/doc/release_notes/5.60.0.txt +22 -0
- data/doc/release_notes/5.61.0.txt +43 -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 +95 -75
- data/doc/security.rdoc +109 -80
- data/doc/sharding.rdoc +74 -47
- data/doc/sql.rdoc +147 -122
- data/doc/testing.rdoc +43 -20
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +97 -18
- data/doc/validations.rdoc +52 -50
- data/doc/virtual_rows.rdoc +90 -109
- data/lib/sequel/adapters/ado/access.rb +15 -17
- data/lib/sequel/adapters/ado/mssql.rb +6 -15
- data/lib/sequel/adapters/ado.rb +150 -20
- data/lib/sequel/adapters/amalgalite.rb +11 -23
- data/lib/sequel/adapters/ibmdb.rb +47 -55
- data/lib/sequel/adapters/jdbc/db2.rb +29 -39
- data/lib/sequel/adapters/jdbc/derby.rb +58 -54
- data/lib/sequel/adapters/jdbc/h2.rb +93 -35
- data/lib/sequel/adapters/jdbc/hsqldb.rb +24 -31
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -10
- data/lib/sequel/adapters/jdbc/mssql.rb +3 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +17 -20
- data/lib/sequel/adapters/jdbc/oracle.rb +22 -18
- data/lib/sequel/adapters/jdbc/postgresql.rb +69 -71
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +11 -23
- data/lib/sequel/adapters/jdbc/sqlite.rb +47 -11
- data/lib/sequel/adapters/jdbc/sqlserver.rb +34 -9
- data/lib/sequel/adapters/jdbc/transactions.rb +22 -38
- data/lib/sequel/adapters/jdbc.rb +145 -130
- data/lib/sequel/adapters/mock.rb +100 -111
- data/lib/sequel/adapters/mysql.rb +114 -122
- data/lib/sequel/adapters/mysql2.rb +147 -63
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +8 -14
- data/lib/sequel/adapters/odbc/oracle.rb +11 -0
- data/lib/sequel/adapters/odbc.rb +20 -25
- data/lib/sequel/adapters/oracle.rb +50 -56
- data/lib/sequel/adapters/postgres.rb +305 -327
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +74 -78
- data/lib/sequel/adapters/shared/db2.rb +118 -71
- data/lib/sequel/adapters/shared/mssql.rb +301 -220
- data/lib/sequel/adapters/shared/mysql.rb +299 -217
- data/lib/sequel/adapters/shared/oracle.rb +226 -65
- data/lib/sequel/adapters/shared/postgres.rb +935 -395
- data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -126
- data/lib/sequel/adapters/shared/sqlite.rb +447 -173
- data/lib/sequel/adapters/sqlanywhere.rb +48 -35
- data/lib/sequel/adapters/sqlite.rb +156 -111
- data/lib/sequel/adapters/tinytds.rb +30 -38
- data/lib/sequel/adapters/utils/columns_limit_1.rb +22 -0
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +3 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +2 -2
- 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 +1 -4
- data/lib/sequel/adapters/utils/stored_procedures.rb +7 -22
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
- data/lib/sequel/ast_transformer.rb +17 -89
- data/lib/sequel/connection_pool/sharded_single.rb +18 -15
- data/lib/sequel/connection_pool/sharded_threaded.rb +130 -111
- data/lib/sequel/connection_pool/single.rb +18 -13
- data/lib/sequel/connection_pool/threaded.rb +121 -120
- data/lib/sequel/connection_pool.rb +48 -29
- data/lib/sequel/core.rb +351 -301
- data/lib/sequel/database/connecting.rb +69 -57
- data/lib/sequel/database/dataset.rb +13 -5
- data/lib/sequel/database/dataset_defaults.rb +18 -102
- data/lib/sequel/database/features.rb +18 -4
- data/lib/sequel/database/logging.rb +12 -11
- data/lib/sequel/database/misc.rb +180 -122
- data/lib/sequel/database/query.rb +47 -27
- data/lib/sequel/database/schema_generator.rb +178 -84
- data/lib/sequel/database/schema_methods.rb +172 -97
- data/lib/sequel/database/transactions.rb +205 -44
- data/lib/sequel/database.rb +17 -2
- data/lib/sequel/dataset/actions.rb +339 -155
- data/lib/sequel/dataset/dataset_module.rb +46 -0
- data/lib/sequel/dataset/features.rb +90 -35
- data/lib/sequel/dataset/graph.rb +80 -58
- data/lib/sequel/dataset/misc.rb +137 -47
- data/lib/sequel/dataset/placeholder_literalizer.rb +63 -25
- data/lib/sequel/dataset/prepared_statements.rb +188 -85
- data/lib/sequel/dataset/query.rb +530 -222
- data/lib/sequel/dataset/sql.rb +590 -368
- data/lib/sequel/dataset.rb +26 -16
- data/lib/sequel/deprecated.rb +12 -2
- data/lib/sequel/exceptions.rb +46 -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 +2 -5
- data/lib/sequel/extensions/any_not_empty.rb +45 -0
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/async_thread_pool.rb +438 -0
- data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
- data/lib/sequel/extensions/blank.rb +8 -0
- data/lib/sequel/extensions/caller_logging.rb +79 -0
- data/lib/sequel/extensions/columns_introspection.rb +4 -3
- data/lib/sequel/extensions/connection_expiration.rb +20 -10
- data/lib/sequel/extensions/connection_validator.rb +11 -10
- data/lib/sequel/extensions/constant_sql_override.rb +65 -0
- data/lib/sequel/extensions/constraint_validations.rb +62 -39
- data/lib/sequel/extensions/core_extensions.rb +42 -48
- data/lib/sequel/extensions/core_refinements.rb +80 -59
- data/lib/sequel/extensions/current_datetime_timestamp.rb +1 -4
- data/lib/sequel/extensions/date_arithmetic.rb +98 -39
- data/lib/sequel/extensions/date_parse_input_handler.rb +67 -0
- data/lib/sequel/extensions/datetime_parse_to_time.rb +41 -0
- data/lib/sequel/extensions/duplicate_columns_handler.rb +21 -14
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/escaped_like.rb +100 -0
- data/lib/sequel/extensions/eval_inspect.rb +12 -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 +1 -34
- data/lib/sequel/extensions/graph_each.rb +4 -4
- 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 +13 -5
- data/lib/sequel/extensions/integer64.rb +32 -0
- data/lib/sequel/extensions/is_distinct_from.rb +141 -0
- data/lib/sequel/extensions/looser_typecasting.rb +17 -8
- data/lib/sequel/extensions/migration.rb +119 -78
- data/lib/sequel/extensions/named_timezones.rb +88 -23
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -82
- data/lib/sequel/extensions/null_dataset.rb +8 -8
- data/lib/sequel/extensions/pagination.rb +32 -29
- data/lib/sequel/extensions/pg_array.rb +221 -287
- data/lib/sequel/extensions/pg_array_ops.rb +17 -9
- data/lib/sequel/extensions/pg_enum.rb +63 -23
- data/lib/sequel/extensions/pg_extended_date_support.rb +241 -0
- data/lib/sequel/extensions/pg_hstore.rb +45 -54
- data/lib/sequel/extensions/pg_hstore_ops.rb +58 -6
- data/lib/sequel/extensions/pg_inet.rb +31 -12
- data/lib/sequel/extensions/pg_inet_ops.rb +2 -2
- data/lib/sequel/extensions/pg_interval.rb +56 -29
- data/lib/sequel/extensions/pg_json.rb +417 -140
- data/lib/sequel/extensions/pg_json_ops.rb +270 -18
- data/lib/sequel/extensions/pg_loose_count.rb +4 -2
- data/lib/sequel/extensions/pg_multirange.rb +372 -0
- data/lib/sequel/extensions/pg_range.rb +131 -191
- data/lib/sequel/extensions/pg_range_ops.rb +42 -13
- data/lib/sequel/extensions/pg_row.rb +48 -81
- data/lib/sequel/extensions/pg_row_ops.rb +33 -14
- data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -2
- data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
- data/lib/sequel/extensions/query.rb +9 -7
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
- data/lib/sequel/extensions/s.rb +60 -0
- data/lib/sequel/extensions/schema_caching.rb +10 -1
- data/lib/sequel/extensions/schema_dumper.rb +71 -48
- data/lib/sequel/extensions/select_remove.rb +4 -4
- data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
- data/lib/sequel/extensions/server_block.rb +51 -27
- data/lib/sequel/extensions/split_array_nil.rb +4 -4
- data/lib/sequel/extensions/sql_comments.rb +119 -7
- data/lib/sequel/extensions/sql_expr.rb +2 -1
- data/lib/sequel/extensions/sql_log_normalizer.rb +108 -0
- data/lib/sequel/extensions/sqlite_json_ops.rb +255 -0
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/string_date_time.rb +19 -23
- data/lib/sequel/extensions/symbol_aref.rb +55 -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/to_dot.rb +10 -4
- data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
- data/lib/sequel/model/associations.rb +1006 -284
- data/lib/sequel/model/base.rb +560 -805
- data/lib/sequel/model/dataset_module.rb +11 -10
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +10 -3
- data/lib/sequel/model/exceptions.rb +8 -10
- data/lib/sequel/model/inflections.rb +7 -20
- data/lib/sequel/model/plugins.rb +114 -0
- data/lib/sequel/model.rb +32 -82
- data/lib/sequel/plugins/active_model.rb +30 -14
- data/lib/sequel/plugins/after_initialize.rb +1 -1
- data/lib/sequel/plugins/association_dependencies.rb +25 -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 +147 -70
- data/lib/sequel/plugins/association_proxies.rb +33 -9
- data/lib/sequel/plugins/async_thread_pool.rb +39 -0
- data/lib/sequel/plugins/auto_restrict_eager_graph.rb +62 -0
- data/lib/sequel/plugins/auto_validations.rb +95 -28
- data/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +68 -0
- data/lib/sequel/plugins/before_after_save.rb +0 -42
- data/lib/sequel/plugins/blacklist_security.rb +21 -12
- data/lib/sequel/plugins/boolean_readers.rb +5 -5
- data/lib/sequel/plugins/boolean_subsets.rb +13 -8
- data/lib/sequel/plugins/caching.rb +25 -16
- data/lib/sequel/plugins/class_table_inheritance.rb +179 -100
- data/lib/sequel/plugins/column_conflicts.rb +16 -3
- data/lib/sequel/plugins/column_encryption.rb +728 -0
- data/lib/sequel/plugins/column_select.rb +7 -5
- data/lib/sequel/plugins/columns_updated.rb +42 -0
- data/lib/sequel/plugins/composition.rb +42 -26
- data/lib/sequel/plugins/concurrent_eager_loading.rb +174 -0
- data/lib/sequel/plugins/constraint_validations.rb +20 -14
- data/lib/sequel/plugins/csv_serializer.rb +56 -35
- data/lib/sequel/plugins/dataset_associations.rb +40 -17
- data/lib/sequel/plugins/def_dataset_method.rb +90 -0
- data/lib/sequel/plugins/defaults_setter.rb +65 -10
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/dirty.rb +62 -24
- data/lib/sequel/plugins/eager_each.rb +3 -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/enum.rb +124 -0
- data/lib/sequel/plugins/error_splitter.rb +17 -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 +7 -12
- data/lib/sequel/plugins/hook_class_methods.rb +37 -54
- data/lib/sequel/plugins/input_transformer.rb +18 -10
- data/lib/sequel/plugins/insert_conflict.rb +76 -0
- data/lib/sequel/plugins/insert_returning_select.rb +2 -2
- data/lib/sequel/plugins/instance_filters.rb +10 -8
- data/lib/sequel/plugins/instance_hooks.rb +34 -17
- data/lib/sequel/plugins/instance_specific_default.rb +113 -0
- data/lib/sequel/plugins/inverted_subsets.rb +22 -13
- data/lib/sequel/plugins/json_serializer.rb +124 -64
- data/lib/sequel/plugins/lazy_attributes.rb +21 -14
- data/lib/sequel/plugins/list.rb +35 -21
- data/lib/sequel/plugins/many_through_many.rb +134 -21
- data/lib/sequel/plugins/modification_detection.rb +15 -5
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +6 -5
- data/lib/sequel/plugins/nested_attributes.rb +61 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +103 -53
- data/lib/sequel/plugins/pg_auto_constraint_validations.rb +350 -0
- data/lib/sequel/plugins/pg_row.rb +5 -51
- data/lib/sequel/plugins/prepared_statements.rb +60 -72
- data/lib/sequel/plugins/prepared_statements_safe.rb +9 -4
- data/lib/sequel/plugins/rcte_tree.rb +68 -82
- data/lib/sequel/plugins/require_valid_schema.rb +67 -0
- data/lib/sequel/plugins/serialization.rb +43 -46
- data/lib/sequel/plugins/serialization_modification_detection.rb +3 -2
- data/lib/sequel/plugins/sharding.rb +15 -10
- data/lib/sequel/plugins/single_table_inheritance.rb +67 -28
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
- data/lib/sequel/plugins/split_values.rb +11 -6
- data/lib/sequel/plugins/sql_comments.rb +189 -0
- data/lib/sequel/plugins/static_cache.rb +77 -53
- data/lib/sequel/plugins/static_cache_cache.rb +53 -0
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +43 -10
- data/lib/sequel/plugins/subset_conditions.rb +15 -5
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +96 -12
- data/lib/sequel/plugins/throw_failures.rb +110 -0
- data/lib/sequel/plugins/timestamps.rb +20 -8
- data/lib/sequel/plugins/touch.rb +19 -8
- data/lib/sequel/plugins/tree.rb +62 -32
- data/lib/sequel/plugins/typecast_on_load.rb +12 -4
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/unused_associations.rb +521 -0
- data/lib/sequel/plugins/update_or_create.rb +4 -4
- data/lib/sequel/plugins/update_primary_key.rb +1 -1
- data/lib/sequel/plugins/update_refresh.rb +26 -15
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validate_associated.rb +18 -0
- data/lib/sequel/plugins/validation_class_methods.rb +38 -19
- data/lib/sequel/plugins/validation_contexts.rb +49 -0
- data/lib/sequel/plugins/validation_helpers.rb +57 -41
- data/lib/sequel/plugins/whitelist_security.rb +122 -0
- data/lib/sequel/plugins/xml_serializer.rb +30 -31
- data/lib/sequel/sql.rb +471 -331
- data/lib/sequel/timezones.rb +78 -47
- data/lib/sequel/version.rb +7 -2
- data/lib/sequel.rb +1 -1
- metadata +217 -521
- data/Rakefile +0 -164
- data/doc/active_record.rdoc +0 -928
- 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.27.0.txt +0 -78
- data/doc/release_notes/4.28.0.txt +0 -57
- data/doc/release_notes/4.29.0.txt +0 -41
- data/doc/release_notes/4.3.0.txt +0 -40
- data/doc/release_notes/4.30.0.txt +0 -37
- data/doc/release_notes/4.31.0.txt +0 -57
- data/doc/release_notes/4.32.0.txt +0 -132
- data/doc/release_notes/4.33.0.txt +0 -88
- data/doc/release_notes/4.34.0.txt +0 -86
- data/doc/release_notes/4.35.0.txt +0 -130
- data/doc/release_notes/4.36.0.txt +0 -116
- 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 -144
- data/lib/sequel/adapters/do/mysql.rb +0 -66
- data/lib/sequel/adapters/do/postgres.rb +0 -44
- data/lib/sequel/adapters/do/sqlite3.rb +0 -42
- data/lib/sequel/adapters/do.rb +0 -158
- data/lib/sequel/adapters/jdbc/as400.rb +0 -84
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -64
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -36
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -33
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -33
- data/lib/sequel/adapters/odbc/progress.rb +0 -10
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -247
- data/lib/sequel/adapters/shared/informix.rb +0 -54
- data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -152
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -49
- data/lib/sequel/adapters/swift/postgres.rb +0 -47
- data/lib/sequel/adapters/swift/sqlite.rb +0 -49
- data/lib/sequel/adapters/swift.rb +0 -160
- data/lib/sequel/adapters/utils/pg_types.rb +0 -70
- data/lib/sequel/dataset/mutation.rb +0 -111
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -5
- data/lib/sequel/extensions/filter_having.rb +0 -63
- data/lib/sequel/extensions/hash_aliases.rb +0 -49
- data/lib/sequel/extensions/meta_def.rb +0 -35
- data/lib/sequel/extensions/query_literals.rb +0 -84
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -24
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -122
- data/lib/sequel/extensions/set_overrides.rb +0 -76
- data/lib/sequel/no_core_ext.rb +0 -3
- data/lib/sequel/plugins/association_autoreloading.rb +0 -9
- data/lib/sequel/plugins/identifier_columns.rb +0 -47
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -9
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -81
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -119
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -61
- data/lib/sequel/plugins/schema.rb +0 -82
- data/lib/sequel/plugins/scissors.rb +0 -35
- data/spec/adapter_spec.rb +0 -4
- 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 -733
- data/spec/adapters/mysql_spec.rb +0 -1319
- data/spec/adapters/oracle_spec.rb +0 -313
- data/spec/adapters/postgres_spec.rb +0 -3790
- data/spec/adapters/spec_helper.rb +0 -49
- data/spec/adapters/sqlanywhere_spec.rb +0 -170
- data/spec/adapters/sqlite_spec.rb +0 -688
- data/spec/bin_spec.rb +0 -258
- data/spec/core/connection_pool_spec.rb +0 -1045
- data/spec/core/database_spec.rb +0 -2636
- data/spec/core/dataset_spec.rb +0 -5175
- data/spec/core/deprecated_spec.rb +0 -70
- data/spec/core/expression_filters_spec.rb +0 -1247
- data/spec/core/mock_adapter_spec.rb +0 -464
- 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 -203
- data/spec/core/schema_spec.rb +0 -1676
- 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/core_model_spec.rb +0 -2
- data/spec/core_spec.rb +0 -1
- data/spec/extensions/accessed_columns_spec.rb +0 -51
- data/spec/extensions/active_model_spec.rb +0 -85
- 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 -405
- data/spec/extensions/association_proxies_spec.rb +0 -86
- data/spec/extensions/auto_validations_spec.rb +0 -192
- data/spec/extensions/before_after_save_spec.rb +0 -40
- 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/boolean_subsets_spec.rb +0 -47
- data/spec/extensions/caching_spec.rb +0 -270
- data/spec/extensions/class_table_inheritance_spec.rb +0 -444
- 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_expiration_spec.rb +0 -121
- data/spec/extensions/connection_validator_spec.rb +0 -127
- data/spec/extensions/constraint_validations_plugin_spec.rb +0 -288
- data/spec/extensions/constraint_validations_spec.rb +0 -389
- data/spec/extensions/core_refinements_spec.rb +0 -519
- data/spec/extensions/csv_serializer_spec.rb +0 -180
- data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
- data/spec/extensions/dataset_associations_spec.rb +0 -343
- data/spec/extensions/dataset_source_alias_spec.rb +0 -51
- data/spec/extensions/date_arithmetic_spec.rb +0 -167
- data/spec/extensions/defaults_setter_spec.rb +0 -102
- data/spec/extensions/delay_add_association_spec.rb +0 -74
- data/spec/extensions/dirty_spec.rb +0 -180
- data/spec/extensions/duplicate_columns_handler_spec.rb +0 -110
- data/spec/extensions/eager_each_spec.rb +0 -66
- 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 -119
- data/spec/extensions/hash_aliases_spec.rb +0 -24
- data/spec/extensions/hook_class_methods_spec.rb +0 -429
- data/spec/extensions/identifier_columns_spec.rb +0 -17
- 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 -304
- data/spec/extensions/lazy_attributes_spec.rb +0 -170
- data/spec/extensions/list_spec.rb +0 -278
- 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 -728
- 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/no_auto_literal_strings_spec.rb +0 -65
- 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 -390
- 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 -275
- 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 -473
- 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 -814
- 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/server_logging_spec.rb +0 -45
- 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_comments_spec.rb +0 -27
- data/spec/extensions/sql_expr_spec.rb +0 -60
- data/spec/extensions/static_cache_spec.rb +0 -361
- data/spec/extensions/string_agg_spec.rb +0 -85
- 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/subset_conditions_spec.rb +0 -38
- data/spec/extensions/table_select_spec.rb +0 -71
- data/spec/extensions/tactical_eager_loading_spec.rb +0 -136
- 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/uuid_spec.rb +0 -106
- 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 -554
- 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/double_migration/001_create_sessions.rb +0 -9
- data/spec/files/double_migration/002_create_nodes.rb +0 -19
- data/spec/files/double_migration/003_3_create_users.rb +0 -4
- 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/empty_migration/001_create_sessions.rb +0 -9
- data/spec/files/empty_migration/002_create_nodes.rb +0 -0
- data/spec/files/empty_migration/003_3_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/reversible_migrations/006_reversible.rb +0 -10
- data/spec/files/reversible_migrations/007_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 -2506
- data/spec/integration/database_test.rb +0 -113
- data/spec/integration/dataset_test.rb +0 -1858
- data/spec/integration/eager_loader_test.rb +0 -687
- data/spec/integration/migrator_test.rb +0 -262
- data/spec/integration/model_test.rb +0 -230
- data/spec/integration/plugin_test.rb +0 -2297
- data/spec/integration/prepared_statement_test.rb +0 -467
- data/spec/integration/schema_test.rb +0 -815
- data/spec/integration/spec_helper.rb +0 -56
- data/spec/integration/timezone_test.rb +0 -86
- data/spec/integration/transaction_test.rb +0 -406
- data/spec/integration/type_test.rb +0 -133
- data/spec/model/association_reflection_spec.rb +0 -565
- data/spec/model/associations_spec.rb +0 -4589
- data/spec/model/base_spec.rb +0 -759
- data/spec/model/class_dataset_methods_spec.rb +0 -150
- data/spec/model/dataset_methods_spec.rb +0 -149
- data/spec/model/eager_loading_spec.rb +0 -2197
- data/spec/model/hooks_spec.rb +0 -604
- data/spec/model/inflector_spec.rb +0 -26
- data/spec/model/model_spec.rb +0 -1097
- data/spec/model/plugins_spec.rb +0 -299
- data/spec/model/record_spec.rb +0 -2162
- data/spec/model/spec_helper.rb +0 -46
- data/spec/model/validations_spec.rb +0 -193
- data/spec/model_no_assoc_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/plugin_spec.rb +0 -1
- data/spec/sequel_coverage.rb +0 -15
- data/spec/spec_config.rb +0 -10
data/doc/sql.rdoc
CHANGED
@@ -14,7 +14,7 @@ For SELECT queries, you should probably use <tt>Database#fetch</tt> with a strin
|
|
14
14
|
puts row[:name]
|
15
15
|
end
|
16
16
|
|
17
|
-
<tt>Database#fetch</tt> will take the query you give it, execute it on the database, and yield a hash with column symbol keys for each row returned. If you want to use some placeholder variables, you can set the placeholders with ? and add the arguments to fetch
|
17
|
+
<tt>Database#fetch</tt> will take the query you give it, execute it on the database, and yield a hash with column symbol keys for each row returned. If you want to use some placeholder variables, you can set the placeholders with ? and add the corresponding arguments to +fetch+:
|
18
18
|
|
19
19
|
DB.fetch("SELECT * FROM albums WHERE name LIKE ?", 'A%') do |row|
|
20
20
|
puts row[:name]
|
@@ -22,13 +22,13 @@ For SELECT queries, you should probably use <tt>Database#fetch</tt> with a strin
|
|
22
22
|
|
23
23
|
You can also use named placeholders by starting the placeholder with a colon, and using a hash for the argument:
|
24
24
|
|
25
|
-
DB.fetch("SELECT * FROM albums WHERE name LIKE :pattern", :
|
25
|
+
DB.fetch("SELECT * FROM albums WHERE name LIKE :pattern", pattern: 'A%') do |row|
|
26
26
|
puts row[:name]
|
27
27
|
end
|
28
28
|
|
29
|
-
This can be helpful for long queries where it is difficult to match the
|
29
|
+
This can be helpful for long queries where it is difficult to match the question marks in the query with the arguments.
|
30
30
|
|
31
|
-
What Sequel actually does internally is two separate things. It first creates a dataset representing the query, and then it executes the dataset's SQL code to retrieve the objects. Often, you want to define a dataset at some point, but not execute it
|
31
|
+
What Sequel actually does internally is two separate things. It first creates a dataset representing the query, and then it executes the dataset's SQL code to retrieve the objects. Often, you want to define a dataset at some point, but not execute it until later. You can do this by leaving off the block, and storing the dataset in a variable:
|
32
32
|
|
33
33
|
ds = DB.fetch("SELECT * FROM albums")
|
34
34
|
|
@@ -41,7 +41,7 @@ You should note that <tt>Database#[]</tt> calls <tt>Database#fetch</tt> if a str
|
|
41
41
|
ds = DB["SELECT * FROM albums"]
|
42
42
|
ds.each{|r| puts r[:name]}
|
43
43
|
|
44
|
-
However, note that <tt>Database#[]</tt> cannot take a block directly, you have to call +each+ on the returned dataset. There are plenty of other methods besides +each
|
44
|
+
However, note that <tt>Database#[]</tt> cannot take a block directly, you have to call +each+ on the returned dataset. There are plenty of other methods besides +each+. For example, the +all+ method returns all records in the dataset as an array:
|
45
45
|
|
46
46
|
DB["SELECT * FROM albums"].all # [{:id=>1, :name=>'RF', ...}, ...]
|
47
47
|
|
@@ -78,7 +78,7 @@ Almost everywhere in Sequel, you can drop down to literal SQL by providing a lit
|
|
78
78
|
DB[:albums].select('name') # SELECT 'name' FROM albums
|
79
79
|
DB[:albums].select(Sequel.lit('name')) # SELECT name FROM albums
|
80
80
|
|
81
|
-
For a simpler way of creating literal strings, you can also use the {core_extensions extension}[rdoc-ref:doc/core_extensions.rdoc], which adds the <tt>String#lit</tt> method, and other methods that integrate Sequel's DSL with the
|
81
|
+
For a simpler way of creating literal strings, you can also use the {core_extensions extension}[rdoc-ref:doc/core_extensions.rdoc], which adds the <tt>String#lit</tt> method, and other methods that integrate Sequel's DSL with the Ruby language:
|
82
82
|
|
83
83
|
DB[:albums].select('name'.lit)
|
84
84
|
|
@@ -113,7 +113,7 @@ Now that you know how to see what SQL is being used, let's jump in and see how t
|
|
113
113
|
|
114
114
|
=== Identifiers
|
115
115
|
|
116
|
-
In Sequel, SQL identifiers are usually specified as
|
116
|
+
In Sequel, SQL identifiers are usually specified as Ruby symbols:
|
117
117
|
|
118
118
|
:column # "column"
|
119
119
|
|
@@ -121,30 +121,33 @@ As you can see, Sequel quotes identifiers by default. Depending on your databas
|
|
121
121
|
|
122
122
|
:column # "COLUMN" on some databases
|
123
123
|
|
124
|
-
A plain symbol is usually treated as an unqualified identifier. However, if you are using multiple tables in a query, and you want to reference a column in one of the tables that has the same name as a column in another one of the tables, you need to qualify that reference.
|
125
|
-
|
126
|
-
:table__column # "table"."column"
|
127
|
-
|
128
|
-
Note that you can't use a period to separate them:
|
124
|
+
A plain symbol is usually treated as an unqualified identifier. However, if you are using multiple tables in a query, and you want to reference a column in one of the tables that has the same name as a column in another one of the tables, you need to qualify that reference. Note that you can't use a period to separate them:
|
129
125
|
|
130
126
|
:table.column # calls the column method on the symbol
|
131
127
|
|
132
128
|
Also note that specifying the period inside the symbol doesn't work if you are quoting identifiers:
|
133
129
|
|
134
|
-
:"table.column" # "table.column"
|
130
|
+
:"table.column" # "table.column" instead of "table"."column"
|
135
131
|
|
136
|
-
The
|
132
|
+
There are a few different Sequel methods for creating qualified identifier objects. The recommended way is to explicitly create a qualified identifier by using <tt>Sequel.[]</tt> to create an identifier and call <tt>[]</tt> or +qualify+ on that, or by using the <tt>Sequel.qualify</tt> method with the table and column symbols:
|
137
133
|
|
134
|
+
Sequel[:table][:column] # "table"."column"
|
135
|
+
Sequel[:column].qualify(:table) # "table"."column"
|
138
136
|
Sequel.qualify(:table, :column) # "table"."column"
|
139
137
|
|
140
138
|
Another way to generate identifiers is to use Sequel's {virtual row support}[rdoc-ref:doc/virtual_rows.rdoc]:
|
141
139
|
|
142
140
|
DB[:albums].select{name} # SELECT "name" FROM "albums"
|
143
|
-
DB[:albums].select{
|
141
|
+
DB[:albums].select{albums[:name]} # SELECT "albums"."name" FROM "albums"
|
142
|
+
|
143
|
+
You can also use the symbol_aref extension for creating qualified identifiers:
|
144
|
+
|
145
|
+
Sequel.extension :symbol_aref
|
146
|
+
:table[:column] # "table"."column"
|
144
147
|
|
145
148
|
=== Numbers
|
146
149
|
|
147
|
-
In general,
|
150
|
+
In general, Ruby numbers map directly to SQL numbers:
|
148
151
|
|
149
152
|
# Integers
|
150
153
|
1 # 1
|
@@ -158,25 +161,24 @@ In general, ruby numbers map directly to SQL numbers:
|
|
158
161
|
|
159
162
|
=== Strings
|
160
163
|
|
161
|
-
In general,
|
164
|
+
In general, Ruby strings map directly to SQL strings:
|
162
165
|
|
163
166
|
'name' # 'name'
|
164
167
|
"name" # 'name'
|
165
168
|
|
166
169
|
=== Aliasing
|
167
170
|
|
168
|
-
|
171
|
+
You can use the <tt>Sequel.as</tt> method to create an alias, and the +as+ method on most Sequel-specific expression objects:
|
169
172
|
|
170
|
-
:
|
173
|
+
Sequel.as(:column, :alias) # "column" AS "alias"
|
174
|
+
Sequel[:column].as(:alias) # "column" AS "alias"
|
175
|
+
Sequel[:table][:column].as(:alias) # "table"."column" AS "alias"
|
176
|
+
(Sequel[:column] + 1).as(:alias) # ("column" + 1) AS "alias"
|
171
177
|
|
172
|
-
You can
|
178
|
+
You can also use the symbol_as extension for creating aliased identifiers:
|
173
179
|
|
174
|
-
|
175
|
-
|
176
|
-
You can also use the <tt>Sequel.as</tt> method to create an alias, and the +as+ method on most Sequel-specific expression objects:
|
177
|
-
|
178
|
-
Sequel.as(:column, :alias) # "column" AS "alias"
|
179
|
-
Sequel.qualify(:table, :column).as(:alias) # "table"."column" AS "alias"
|
180
|
+
Sequel.extension :symbol_as
|
181
|
+
:column.as(:alias) # "column" AS "alias"
|
180
182
|
|
181
183
|
If you want to use a derived column list, you can provide an array of column aliases:
|
182
184
|
|
@@ -200,11 +202,11 @@ Aggregate functions work the same way as normal functions, since they share the
|
|
200
202
|
|
201
203
|
Sequel.function(:sum, :column) # sum(column)
|
202
204
|
|
203
|
-
To use the DISTINCT modifier to an aggregate function, call the distinct method on the function:
|
205
|
+
To use the DISTINCT modifier to an aggregate function, call the +distinct+ method on the function expression, which returns a new function expression:
|
204
206
|
|
205
207
|
DB[:albums].select{sum(:column).distinct} # SELECT sum(DISTINCT column) FROM albums
|
206
208
|
|
207
|
-
If you want to use the wildcard as the sole argument of the aggregate function, use the * method on the
|
209
|
+
If you want to use the wildcard as the sole argument of the aggregate function, use the * method on the function expression:
|
208
210
|
|
209
211
|
Sequel.function(:count).* # count(*)
|
210
212
|
DB[:albums].select{count.function.*} # SELECT count(*) FROM albums
|
@@ -213,10 +215,10 @@ Note that Sequel provides helper methods for aggregate functions such as +count+
|
|
213
215
|
|
214
216
|
=== Window Functions
|
215
217
|
|
216
|
-
If the database supports window functions, Sequel can handle them by calling the over method on a
|
218
|
+
If the database supports window functions, Sequel can handle them by calling the +over+ method on a function expression:
|
217
219
|
|
218
|
-
DB[:albums].select{
|
219
|
-
# SELECT
|
220
|
+
DB[:albums].select{row_number.function.over}
|
221
|
+
# SELECT row_number() OVER () FROM albums
|
220
222
|
|
221
223
|
DB[:albums].select{count.function.*.over}
|
222
224
|
# SELECT count(*) OVER () FROM albums
|
@@ -224,17 +226,29 @@ If the database supports window functions, Sequel can handle them by calling the
|
|
224
226
|
DB[:albums].select{function(:col1).over(:partition=>col2, :order=>col3)}
|
225
227
|
# SELECT function(col1) OVER (PARTITION BY col2 ORDER BY col3) FROM albums
|
226
228
|
|
227
|
-
DB[:albums].select{function(c1, c2).over(:partition=>[c3, c4], :order=>[c5, c6])}
|
228
|
-
# SELECT function(c1, c2) OVER (PARTITION BY c3, c4 ORDER BY c5, c6) FROM albums
|
229
|
+
DB[:albums].select{function(c1, c2).over(:partition=>[c3, c4], :order=>[c5, c6.desc])}
|
230
|
+
# SELECT function(c1, c2) OVER (PARTITION BY c3, c4 ORDER BY c5, c6 DESC) FROM albums
|
231
|
+
|
232
|
+
DB[:albums].select{function(c1).over(:partition=>c2, :order=>:c3, :frame=>:rows)}
|
233
|
+
# SELECT function(c1) OVER (PARTITION BY c2 ORDER BY c3 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM albums
|
234
|
+
|
235
|
+
DB[:albums].select{function(c1).over(:partition=>c2, :order=>:c3, :frame=>{:type=>:range, :start=>1, :end=>1})}
|
236
|
+
# SELECT function(c1) OVER (PARTITION BY c2 ORDER BY c3 RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM albums
|
237
|
+
|
238
|
+
DB[:albums].select{function(c1).over(:partition=>c2, :order=>:c3, :frame=>{:type=>:groups, :start=>[2, :preceding], :end=>[1, :preceding]})}
|
239
|
+
# SELECT function(c1) OVER (PARTITION BY c2 ORDER BY c3 GROUPS BETWEEN 2 PRECEDING AND 1 PRECEDING) FROM albums
|
240
|
+
|
241
|
+
DB[:albums].select{function(c1).over(:partition=>c2, :order=>:c3, :frame=>{:type=>:range, :start=>:preceding, :exclude=>:current})}
|
242
|
+
# SELECT function(c1) OVER (PARTITION BY c2 ORDER BY c3 RANGE UNBOUNDED PRECEDING EXCLUDE CURRENT ROW) FROM albums
|
229
243
|
|
230
244
|
=== Schema Qualified Functions
|
231
245
|
|
232
|
-
If the database supports schema qualified functions, Sequel can handle them by calling the function method on a
|
246
|
+
If the database supports schema qualified functions, Sequel can handle them by calling the +function+ method on a qualified identifier:
|
233
247
|
|
234
|
-
DB[:albums].select{
|
248
|
+
DB[:albums].select{schema[:function].function}
|
235
249
|
# SELECT schema.function() FROM albums
|
236
250
|
|
237
|
-
DB[:albums].select{
|
251
|
+
DB[:albums].select{schema[:function].function(:col, 2, "a")}
|
238
252
|
# SELECT schema.function(col, 2, 'a') FROM albums
|
239
253
|
|
240
254
|
=== Portable/Emulated Functions
|
@@ -250,7 +264,7 @@ Some examples are:
|
|
250
264
|
|
251
265
|
Sequel uses hashes to specify equality:
|
252
266
|
|
253
|
-
{:
|
267
|
+
{column: 1} # ("column" = 1)
|
254
268
|
|
255
269
|
You can also specify this as an array of two element arrays:
|
256
270
|
|
@@ -264,27 +278,27 @@ For expression objects, you can also use the =~ method:
|
|
264
278
|
|
265
279
|
You can specify a not equals condition by inverting the hash or array of two element arrays using <tt>Sequel.negate</tt> or <tt>Sequel.~</tt>:
|
266
280
|
|
267
|
-
Sequel.negate(:
|
281
|
+
Sequel.negate(column: 1) # ("column" != 1)
|
268
282
|
Sequel.negate([[:column, 1]]) # ("column" != 1)
|
269
|
-
Sequel.~(:
|
283
|
+
Sequel.~(column: 1) # ("column" != 1)
|
270
284
|
Sequel.~([[:column, 1]]) # ("column" != 1)
|
271
285
|
|
272
|
-
The difference between the two is that negate only works on hashes and arrays of element arrays, and it negates all entries in the hash or array, while ~ does a general inversion. This is best shown by an example with multiple entries:
|
286
|
+
The difference between the two is that +negate+ only works on hashes and arrays of element arrays, and it negates all entries in the hash or array, while ~ does a general inversion. This is best shown by an example with multiple entries:
|
273
287
|
|
274
|
-
Sequel.negate(:
|
275
|
-
Sequel.~(:
|
288
|
+
Sequel.negate(column: 1, foo: 2) # (("column" != 1) AND (foo != 2))
|
289
|
+
Sequel.~(column: 1, foo: 2) # (("column" != 1) OR (foo != 2))
|
276
290
|
|
277
291
|
You can also use the ~ method on an equality expression:
|
278
292
|
|
279
293
|
where{~(column =~ 1)} # ("column" != 1)
|
280
294
|
|
281
|
-
|
295
|
+
Or you can use the !~ method:
|
282
296
|
|
283
297
|
where{column !~ 1} # ("column" != 1)
|
284
298
|
|
285
299
|
The most common need for not equals is in filters, in which case you can use the +exclude+ method:
|
286
300
|
|
287
|
-
DB[:albums].exclude(:
|
301
|
+
DB[:albums].exclude(column: 1) # SELECT * FROM "albums" WHERE ("column" != 1)
|
288
302
|
|
289
303
|
Note that +exclude+ does a generalized inversion, similar to <tt>Sequel.~</tt>.
|
290
304
|
|
@@ -292,19 +306,19 @@ Note that +exclude+ does a generalized inversion, similar to <tt>Sequel.~</tt>.
|
|
292
306
|
|
293
307
|
Sequel also uses hashes to specify inclusion, and inversions of those hashes to specify exclusion:
|
294
308
|
|
295
|
-
{:
|
296
|
-
Sequel.~(:
|
309
|
+
{column: [1, 2, 3]} # ("column" IN (1, 2, 3))
|
310
|
+
Sequel.~(column: [1, 2, 3]) # ("column" NOT IN (1, 2, 3))
|
297
311
|
|
298
312
|
As you may have guessed, Sequel switches from an = to an IN when the hash value is an array. It also does this for datasets, which easily allows you to test for inclusion and exclusion in a subselect:
|
299
313
|
|
300
|
-
{:
|
301
|
-
Sequel.~(:
|
314
|
+
{column: DB[:albums].select(:id)} # ("column" IN (SELECT "id" FROM "albums"))
|
315
|
+
Sequel.~(column: DB[:albums].select(:id)) # ("column" NOT IN (SELECT "id" FROM "albums"))
|
302
316
|
|
303
317
|
Similar to =, you can also use =~ with expressions for inclusion:
|
304
318
|
|
305
319
|
where{column =~ [1, 2, 3]} # ("column" IN (1, 2, 3))
|
306
320
|
|
307
|
-
and
|
321
|
+
and !~ for exclusion:
|
308
322
|
|
309
323
|
where{column !~ [1, 2, 3]} # ("column" NOT IN (1, 2, 3))
|
310
324
|
|
@@ -314,19 +328,19 @@ Sequel also supports the SQL EXISTS operator using <tt>Dataset#exists</tt>:
|
|
314
328
|
|
315
329
|
=== Identity Operators (IS, IS NOT)
|
316
330
|
|
317
|
-
Hashes in Sequel use IS if the value is true
|
331
|
+
Hashes in Sequel use IS if the value is +true+, +false+, or +nil+:
|
318
332
|
|
319
|
-
{:
|
320
|
-
{:
|
321
|
-
{:
|
333
|
+
{column: nil} # ("column" IS NULL)
|
334
|
+
{column: true} # ("column" IS TRUE)
|
335
|
+
{column: false} # ("column" IS FALSE)
|
322
336
|
|
323
337
|
Negation works the same way as it does for equality and inclusion:
|
324
338
|
|
325
|
-
Sequel.~(:
|
326
|
-
Sequel.~(:
|
327
|
-
Sequel.~(:
|
339
|
+
Sequel.~(column: nil) # ("column" IS NOT NULL)
|
340
|
+
Sequel.~(column: true) # ("column" IS NOT TRUE)
|
341
|
+
Sequel.~(column: false) # ("column" IS NOT FALSE)
|
328
342
|
|
329
|
-
Likewise, =~ works for identity
|
343
|
+
Likewise, =~ works for identity and !~ for negative identity on expressions:
|
330
344
|
|
331
345
|
where{column =~ nil} # ("column" IS NULL)
|
332
346
|
where{column !~ nil} # ("column" IS NOT NULL)
|
@@ -339,7 +353,7 @@ Sequel's general inversion operator is ~, which works on symbols and most Sequel
|
|
339
353
|
|
340
354
|
Note that ~ will actually apply the inversion operation to the underlying object, which is why
|
341
355
|
|
342
|
-
Sequel.~(:
|
356
|
+
Sequel.~(column: 1)
|
343
357
|
|
344
358
|
produces <tt>(column != 1)</tt> instead of <tt>NOT (column = 1)</tt>.
|
345
359
|
|
@@ -347,14 +361,14 @@ produces <tt>(column != 1)</tt> instead of <tt>NOT (column = 1)</tt>.
|
|
347
361
|
|
348
362
|
Sequel defines the inequality operators directly on most Sequel-specific expression objects:
|
349
363
|
|
350
|
-
Sequel
|
351
|
-
Sequel
|
364
|
+
Sequel[:table][:column] > 1 # ("table"."column" > 1)
|
365
|
+
Sequel[:table][:column] < 1 # ("table"."column" < 1)
|
352
366
|
Sequel.function(:func) >= 1 # (func() >= 1)
|
353
367
|
Sequel.function(:func, :column) <= 1 # (func("column") <= 1)
|
354
368
|
|
355
|
-
If you want to use them on a symbol, you should call <tt>Sequel.
|
369
|
+
If you want to use them on a symbol, you should call <tt>Sequel.[]</tt> with the symbol to get an expression object:
|
356
370
|
|
357
|
-
Sequel
|
371
|
+
Sequel[:column] > 1 # ("column" > 1)
|
358
372
|
|
359
373
|
A common use of virtual rows is to handle inequality operators:
|
360
374
|
|
@@ -364,33 +378,31 @@ A common use of virtual rows is to handle inequality operators:
|
|
364
378
|
|
365
379
|
The standard mathematical operates are defined on most Sequel-specific expression objects:
|
366
380
|
|
367
|
-
Sequel
|
368
|
-
Sequel
|
369
|
-
Sequel
|
370
|
-
Sequel
|
381
|
+
Sequel[:column] + 1 # "column" + 1
|
382
|
+
Sequel[:table][:column] - 1 # "table"."column" - 1
|
383
|
+
Sequel[:table][:column] * 1 # "table"."column" * 1
|
384
|
+
Sequel[:column] / 1 # "column" / 1
|
385
|
+
Sequel[:column] ** 1 # power("column", 1)
|
371
386
|
|
372
387
|
You can also call the operator methods directly on the Sequel module:
|
373
388
|
|
374
389
|
Sequel.+(:column, 1) # "column" + 1
|
375
|
-
Sequel.-(:
|
376
|
-
Sequel.*(Sequel
|
390
|
+
Sequel.-(Sequel[:table][:column], 1) # "table"."column" - 1
|
391
|
+
Sequel.*(Sequel[:table][:column], 1) # "table"."column" * 1
|
377
392
|
Sequel./(:column, 1) # "column" / 1
|
393
|
+
Sequel.**(:column, 1) # power("column", 1)
|
378
394
|
|
379
|
-
Note that the following
|
380
|
-
|
381
|
-
1 + Sequel.expr(:column) # raises TypeError
|
382
|
-
|
383
|
-
For commutative operates such as + and *, this isn't a problem as you can just reorder, but non-commutative operators such as - and / cannot be expressed directly. The solution is to use one of the methods on the Sequel module:
|
395
|
+
Note that since Sequel implements support for Ruby's coercion protocol, the following also works:
|
384
396
|
|
385
|
-
|
386
|
-
|
397
|
+
1 + Sequel[:column]
|
398
|
+
1 - Sequel[:table][:column]
|
387
399
|
|
388
400
|
=== Boolean Operators (AND OR)
|
389
401
|
|
390
402
|
Sequel defines the & and | methods on most Sequel-specific expression objects to handle AND and OR:
|
391
403
|
|
392
|
-
Sequel
|
393
|
-
Sequel
|
404
|
+
Sequel[:column1] & :column2 # ("column1" AND "column2")
|
405
|
+
Sequel[{column1: 1}] | {column2: 2} # (("column1" = 1) OR ("column2" = 2))
|
394
406
|
(Sequel.function(:func) > 1) & :column3 # ((func() > 1) AND "column3")
|
395
407
|
|
396
408
|
Note the use of parentheses in the last statement. If you omit them, you won't get what you expect.
|
@@ -402,39 +414,51 @@ is parsed as:
|
|
402
414
|
|
403
415
|
Sequel.function(:func) > (1 & :column3)
|
404
416
|
|
405
|
-
You
|
417
|
+
You can also use the <tt>Sequel.&</tt> and <tt>Sequel.|</tt> methods:
|
406
418
|
|
407
419
|
Sequel.&(:column1, :column2) # ("column1" AND "column2")
|
408
|
-
Sequel.|({:
|
420
|
+
Sequel.|({column1: 1}, {column2: 2}) # (("column1" = 1) OR ("column2" = 2))
|
409
421
|
|
410
422
|
You can use hashes and arrays of two element arrays to specify AND and OR with equality conditions:
|
411
423
|
|
412
|
-
{:
|
424
|
+
{column1: 1, column2: 2} # (("column1" = 1) AND ("column2" = 2))
|
413
425
|
[[:column1, 1], [:column2, 2]] # (("column1" = 1) AND ("column2" = 2))
|
414
426
|
|
415
427
|
As you can see, these literalize with ANDs by default. You can use the <tt>Sequel.or</tt> method to use OR instead:
|
416
428
|
|
417
|
-
Sequel.or(:
|
429
|
+
Sequel.or(column1: 1, column2: 2) # (("column1" = 1) OR ("column2" = 2))
|
430
|
+
|
431
|
+
As you can see in the above examples, <tt>Sequel.|</tt> and <tt>Sequel.or</tt> work differently.
|
432
|
+
<tt>Sequel.|</tt> is for combining an arbitrary number of expressions using OR. If you pass a single
|
433
|
+
argument, <tt>Sequel.|</tt> will just convert it to a Sequel expression, similar to <tt>Sequel.expr</tt>.
|
434
|
+
<tt>Sequel.or</tt> is for taking a single hash or array of two element arrays and combining the
|
435
|
+
elements of that single argument using OR instead of AND:
|
436
|
+
|
437
|
+
Sequel.|(column1: 1, column2: 2) # (("column1" = 1) AND ("column2" = 2))
|
438
|
+
Sequel.or(column1: 1, column2: 2) # (("column1" = 1) OR ("column2" = 2))
|
439
|
+
|
440
|
+
Sequel.|({column1: 1}, {column2: 2}) # (("column1" = 1) OR ("column2" = 2))
|
441
|
+
Sequel.or({column1: 1}, {column2: 2}) # ArgumentError
|
418
442
|
|
419
443
|
You've already seen the <tt>Sequel.negate</tt> method, which will use ANDs if multiple entries are used:
|
420
444
|
|
421
|
-
Sequel.negate(:
|
445
|
+
Sequel.negate(column1: 1, column2: 2) # (("column1" != 1) AND ("column2" != 2))
|
422
446
|
|
423
447
|
To negate while using ORs, the <tt>Sequel.~</tt> operator can be used:
|
424
448
|
|
425
|
-
Sequel.~(:
|
449
|
+
Sequel.~(column1: 1, column2: 2) # (("column1" != 1) OR ("column2" != 2))
|
426
450
|
|
427
451
|
Note again that <tt>Dataset#exclude</tt> uses ~, not +negate+:
|
428
452
|
|
429
|
-
DB[:albums].exclude(:
|
453
|
+
DB[:albums].exclude(column1: 1, column2: 2) # SELECT * FROM "albums" WHERE (("column" != 1) OR ("column2" != 2))
|
430
454
|
|
431
455
|
=== Casts
|
432
456
|
|
433
457
|
Casting in Sequel is done with the +cast+ method, which is available on most of the Sequel-specific expression objects:
|
434
458
|
|
435
|
-
Sequel
|
436
|
-
Sequel
|
437
|
-
Sequel
|
459
|
+
Sequel[:name].cast(:text) # CAST("name" AS text)
|
460
|
+
Sequel['1'].cast(:integer) # CAST('1' AS integer)
|
461
|
+
Sequel[:table][:column].cast(:date) # CAST("table"."column" AS date)
|
438
462
|
|
439
463
|
You can also use the <tt>Sequel.cast</tt> method:
|
440
464
|
|
@@ -444,72 +468,72 @@ You can also use the <tt>Sequel.cast</tt> method:
|
|
444
468
|
|
445
469
|
Sequel allows the use of bitwise mathematical operators on Sequel::SQL::NumericExpression objects:
|
446
470
|
|
447
|
-
Sequel
|
448
|
-
(Sequel
|
471
|
+
Sequel[:number] + 1 # => #<Sequel::SQL::NumericExpression ...>
|
472
|
+
(Sequel[:number] + 1) & 5 # (("number" + 1) & 5)
|
449
473
|
|
450
474
|
As you can see, when you use the + operator on a symbol, you get a NumericExpression. You can turn an expression a NumericExpression using +sql_number+:
|
451
475
|
|
452
|
-
Sequel
|
476
|
+
Sequel[:number].sql_number | 5 # ("number" | 5)
|
453
477
|
Sequel.function(:func).sql_number << 7 # (func() << 7)
|
454
478
|
Sequel.cast(:name, :integer).sql_number >> 8 # (CAST("name" AS integer) >> 8)
|
455
479
|
|
456
480
|
Sequel allows you to do the cast and conversion at the same time via +cast_numeric+:
|
457
481
|
|
458
|
-
Sequel
|
482
|
+
Sequel[:name].cast_numeric ^ 9 # (CAST("name" AS integer) ^ 9)
|
459
483
|
|
460
484
|
Note that &, |, and ~ are already defined to do AND, OR, and NOT on most expressions, so if you want to use the bitwise operators, you need to make sure that they are converted first:
|
461
485
|
|
462
|
-
~Sequel
|
463
|
-
~Sequel
|
486
|
+
~Sequel[:name] # NOT "name"
|
487
|
+
~Sequel[:name].sql_number # ~"name"
|
464
488
|
|
465
489
|
=== String Operators (||, LIKE, Regexp)
|
466
490
|
|
467
491
|
Sequel allows the use of the string concatenation operator on Sequel::SQL::StringExpression objects, which can be created using the +sql_string+ method on an expression:
|
468
492
|
|
469
|
-
Sequel
|
493
|
+
Sequel[:name].sql_string + ' - Name' # ("name" || ' - Name')
|
470
494
|
|
471
|
-
Just like for the bitwise operators, Sequel allows you
|
495
|
+
Just like for the bitwise operators, Sequel allows you to do the cast and conversion at the same time via +cast_string+:
|
472
496
|
|
473
|
-
Sequel
|
497
|
+
Sequel[:number].cast_string + ' - Number' # (CAST(number AS varchar(255)) || ' - Number')
|
474
498
|
|
475
499
|
Note that similar to the mathematical operators, you cannot switch the order the expression and have it work:
|
476
500
|
|
477
|
-
'Name - ' + Sequel
|
501
|
+
'Name - ' + Sequel[:name].sql_string # raises TypeError
|
478
502
|
|
479
|
-
Just like for the mathematical operators, you can use <tt>Sequel.
|
503
|
+
Just like for the mathematical operators, you can use <tt>Sequel.[]</tt> to wrap the object:
|
480
504
|
|
481
|
-
Sequel
|
505
|
+
Sequel['Name - '] + :name # ('Name - ' || "name")
|
482
506
|
|
483
507
|
The <tt>Sequel.join</tt> method concatenates all of the elements in the array:
|
484
508
|
|
485
509
|
Sequel.join(['Name', :name]) # ('Name' || "name")
|
486
510
|
|
487
|
-
Just like
|
511
|
+
Just like Ruby's <tt>String#join</tt>, you can provide an argument for a string used to join each element:
|
488
512
|
|
489
513
|
Sequel.join(['Name', :name], ' - ') # ('Name' || ' - ' || "name")
|
490
514
|
|
491
515
|
For the LIKE operator, Sequel defines the +like+ and +ilike+ methods on most Sequel-specific expression objects:
|
492
516
|
|
493
|
-
Sequel
|
494
|
-
Sequel
|
517
|
+
Sequel[:name].like('A%') # ("name" LIKE 'A%' ESCAPE '\')
|
518
|
+
Sequel[:name].ilike('A%') # ("name" ILIKE 'A%' ESCAPE '\')
|
495
519
|
|
496
520
|
You can also use the <tt>Sequel.like</tt> and <tt>Sequel.ilike</tt> methods:
|
497
521
|
|
498
522
|
Sequel.like(:name, 'A%') # ("name" LIKE 'A%' ESCAPE '\')
|
499
523
|
Sequel.ilike(:name, 'A%') # ("name" ILIKE 'A%' ESCAPE '\')
|
500
524
|
|
501
|
-
Note the above syntax for ilike
|
525
|
+
Note the above syntax for +ilike+, while Sequel's default, is specific to PostgreSQL. However, most other adapters override the behavior. For example, on MySQL, Sequel uses LIKE BINARY for +like+, and LIKE for +ilike+. If the database supports both case sensitive and case insensitive LIKE, then +like+ will use a case sensitive LIKE, and +ilike+ will use a case insensitive LIKE.
|
502
526
|
|
503
527
|
Inverting the LIKE operator works like other inversions:
|
504
528
|
|
505
529
|
~Sequel.like(:name, 'A%') # ("name" NOT LIKE 'A%' ESCAPE '\')
|
506
530
|
|
507
|
-
Sequel also supports SQL regular expressions on MySQL and PostgreSQL. You can use these by passing a
|
531
|
+
Sequel also supports SQL regular expressions on MySQL and PostgreSQL (and SQLite when using the sqlite adapter with the :setup_regexp_function Database option). You can use these by passing a Ruby regular expression to +like+ or +ilike+, or by making the regular expression a hash value:
|
508
532
|
|
509
533
|
Sequel.like(:name, /^A/) # ("name" ~ '^A')
|
510
534
|
~Sequel.ilike(:name, /^A/) # ("name" !~* '^A')
|
511
|
-
{:
|
512
|
-
Sequel.~(:
|
535
|
+
{name: /^A/i} # ("name" ~* '^A')
|
536
|
+
Sequel.~(name: /^A/) # ("name" !~ '^A')
|
513
537
|
|
514
538
|
Note that using +ilike+ with a regular expression will always make the regexp case insensitive. If you use +like+ or the hash with regexp value, it will only be case insensitive if the Regexp itself is case insensitive.
|
515
539
|
|
@@ -517,36 +541,37 @@ Note that using +ilike+ with a regular expression will always make the regexp ca
|
|
517
541
|
|
518
542
|
Sequel supports specifying ascending or descending order using the +asc+ and +desc+ method on most Sequel-specific expression objects:
|
519
543
|
|
520
|
-
Sequel
|
521
|
-
Sequel
|
544
|
+
Sequel[:column].asc # "column" ASC
|
545
|
+
Sequel[:table][:column].desc # "table"."column" DESC
|
522
546
|
|
523
547
|
You can also use the <tt>Sequel.asc</tt> and <tt>Sequel.desc</tt> methods:
|
524
548
|
|
525
549
|
Sequel.asc(:column) # "column" ASC
|
526
|
-
Sequel.desc(Sequel
|
550
|
+
Sequel.desc(Sequel[:table][:column]) # "table"."column" DESC
|
527
551
|
|
528
552
|
On some databases, you can specify null ordering:
|
529
553
|
|
530
554
|
Sequel.asc(:column, :nulls=>:first) # "column" ASC NULLS FIRST
|
531
|
-
Sequel.desc(Sequel
|
555
|
+
Sequel.desc(Sequel[:table][:column], :nulls=>:last) # "table"."column" DESC NULLS LAST
|
532
556
|
|
533
557
|
=== All Columns (.*)
|
534
558
|
|
535
|
-
To select all columns in a table, Sequel supports the * method on identifiers without an argument:
|
559
|
+
To select all columns in a table, Sequel supports the * method on identifiers and qualified identifiers without an argument:
|
536
560
|
|
537
|
-
Sequel
|
561
|
+
Sequel[:table].* # "table".*
|
562
|
+
Sequel[:schema][:table].* # "schema"."table".*
|
538
563
|
|
539
564
|
=== CASE statements
|
540
565
|
|
541
|
-
Sequel
|
566
|
+
Sequel supports SQL CASE statements using the <tt>Sequel.case</tt> method. The first argument is a hash or array of two element arrays representing the conditions, the second argument is the default value (ELSE). The keys of the hash (or first element in each array) is the WHEN condition, and the values of the hash (or second element in each array) is the THEN result. Here are some examples:
|
542
567
|
|
543
|
-
Sequel.case({:
|
544
|
-
Sequel.case([[column, 1]], 0) # (CASE WHEN "column" THEN 1 ELSE 0 END)
|
545
|
-
Sequel.case({{:
|
568
|
+
Sequel.case({column: 1}, 0) # (CASE WHEN "column" THEN 1 ELSE 0 END)
|
569
|
+
Sequel.case([[:column, 1]], 0) # (CASE WHEN "column" THEN 1 ELSE 0 END)
|
570
|
+
Sequel.case({{column: nil}=>1}, 0) # (CASE WHEN (column IS NULL) THEN 1 ELSE 0 END)
|
546
571
|
|
547
572
|
If the hash or array has multiple arguments, multiple WHEN clauses are used:
|
548
573
|
|
549
|
-
Sequel.case({:
|
574
|
+
Sequel.case({c: 1, d: 2}, 0) # (CASE WHEN "c" THEN 1 WHEN "d" THEN 2 ELSE 0 END)
|
550
575
|
Sequel.case([[:c, 1], [:d, 2]], 0) # (CASE WHEN "c" THEN 1 WHEN "d" THEN 2 ELSE 0 END)
|
551
576
|
|
552
577
|
If you provide a 3rd argument to <tt>Sequel.case</tt>, it goes between CASE and WHEN:
|
@@ -557,8 +582,8 @@ If you provide a 3rd argument to <tt>Sequel.case</tt>, it goes between CASE and
|
|
557
582
|
|
558
583
|
Sequel supports SQL subscripts using the +sql_subscript+ method on most Sequel-specific expression objects:
|
559
584
|
|
560
|
-
Sequel
|
561
|
-
Sequel
|
585
|
+
Sequel[:column].sql_subscript(3) # column[3]
|
586
|
+
Sequel[:table][:column].sql_subscript(3) # table.column[3]
|
562
587
|
|
563
588
|
You can also use the <tt>Sequel.subscript</tt> method:
|
564
589
|
|
@@ -574,7 +599,7 @@ In Sequel, the SQL queries are build with method chaining.
|
|
574
599
|
|
575
600
|
=== Creating Datasets
|
576
601
|
|
577
|
-
You generally start
|
602
|
+
You generally start creating a dataset by calling <tt>Dataset#[]</tt> with a symbol specifying the table name:
|
578
603
|
|
579
604
|
DB[:albums] # SELECT * FROM albums
|
580
605
|
|
@@ -582,7 +607,7 @@ If you want to select from multiple FROM tables, use multiple arguments:
|
|
582
607
|
|
583
608
|
DB[:albums, :artists] # SELECT * FROM albums, artists
|
584
609
|
|
585
|
-
If you don't want to select from any FROM tables, just call dataset
|
610
|
+
If you don't want to select from any FROM tables, just call +dataset+:
|
586
611
|
|
587
612
|
DB.dataset # SELECT *
|
588
613
|
|
@@ -616,7 +641,7 @@ In general, the +insert+, +update+, and +delete+ methods use the appropriate cla
|
|
616
641
|
ds.update(:name=>'RF') # UPDATE albums SET name = 'RF' WHERE (id = 1)
|
617
642
|
ds.delete # DELETE FROM albums WHERE (id = 1)
|
618
643
|
|
619
|
-
Note how +update+ and +delete+ used the +where+ argument, but
|
644
|
+
Note how +update+ and +delete+ used the +where+ argument, but +insert+ did not, because INSERT doesn't use a WHERE clause.
|
620
645
|
|
621
646
|
=== Methods Used for Each SQL Clause
|
622
647
|
|