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/bin_sequel.rdoc
CHANGED
|
@@ -10,9 +10,7 @@ This is very useful for quick testing of ideas, and does not affect the environm
|
|
|
10
10
|
|
|
11
11
|
If you've installed the sequel gem, then just running "sequel" should load the program, since rubygems should place the sequel binary in your load path. However, if you want to run bin/sequel from the root of a repository checkout, you should probably do:
|
|
12
12
|
|
|
13
|
-
ruby
|
|
14
|
-
|
|
15
|
-
The -I lib makes sure that you are using the repository checkout's code.
|
|
13
|
+
ruby bin/sequel
|
|
16
14
|
|
|
17
15
|
== Choosing the Database to Connect to
|
|
18
16
|
|
|
@@ -91,6 +89,8 @@ To save this information to a file, use a standard shell redirection:
|
|
|
91
89
|
|
|
92
90
|
The -d option dumps the migration in database-independent format, the -D option dumps it in database-specific format.
|
|
93
91
|
|
|
92
|
+
Note that the support for dumping schema is fairly limited. It doesn't handle database views, functions, triggers, schemas, partial indexes, functional indexes, and many other things. You should probably use the database specific tools to handle those.
|
|
93
|
+
|
|
94
94
|
The -S option dumps the schema cache for all tables in the database, which can speed up the usage of Sequel with models when using the schema_caching extension. You should provide this option with the path to which to dump the schema:
|
|
95
95
|
|
|
96
96
|
sequel -S /path/to/schema_cache.db postgres://host/database
|
|
@@ -103,6 +103,8 @@ Using the -C option, Sequel can copy the contents of one database to another, ev
|
|
|
103
103
|
|
|
104
104
|
This copies the table structure, table data, indexes, and foreign keys from the MySQL database to the PostgreSQL database.
|
|
105
105
|
|
|
106
|
+
Note that the support for copying is fairly limited. It doesn't handle database views, functions, triggers, schemas, partial indexes, functional indexes, and many other things. Also, the data type conversion may not be exactly what you want. It is best designed for quick conversions and testing. For serious production use, use the database's tools to copy databases for the same database type, and for different database types, use the Sequel API.
|
|
107
|
+
|
|
106
108
|
== Other Options
|
|
107
109
|
|
|
108
110
|
Other options not mentioned above are explained briefly here.
|
data/doc/cheat_sheet.rdoc
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
DB = Sequel.sqlite('my_blog.db')
|
|
8
8
|
DB = Sequel.connect('postgres://user:password@localhost/my_db')
|
|
9
|
-
DB = Sequel.postgres('my_db', :
|
|
9
|
+
DB = Sequel.postgres('my_db', user: 'user', password: 'password', host: 'localhost')
|
|
10
10
|
DB = Sequel.ado('mydb')
|
|
11
11
|
|
|
12
12
|
== Open an SQLite memory database
|
|
@@ -18,7 +18,7 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
|
|
|
18
18
|
== Logging SQL statements
|
|
19
19
|
|
|
20
20
|
require 'logger'
|
|
21
|
-
DB = Sequel.sqlite
|
|
21
|
+
DB = Sequel.sqlite(loggers: [Logger.new($stdout)])
|
|
22
22
|
# or
|
|
23
23
|
DB.loggers << Logger.new($stdout)
|
|
24
24
|
|
|
@@ -38,22 +38,24 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
|
|
|
38
38
|
|
|
39
39
|
== Most dataset methods are chainable
|
|
40
40
|
|
|
41
|
-
dataset = DB[:managers].where(:
|
|
41
|
+
dataset = DB[:managers].where(salary: 5000..10000).order(:name, :department)
|
|
42
42
|
|
|
43
43
|
== Insert rows
|
|
44
44
|
|
|
45
|
-
dataset.insert(:
|
|
45
|
+
dataset.insert(name: 'Sharon', grade: 50)
|
|
46
46
|
|
|
47
47
|
== Retrieve rows
|
|
48
48
|
|
|
49
49
|
dataset.each{|r| p r}
|
|
50
50
|
dataset.all # => [{...}, {...}, ...]
|
|
51
51
|
dataset.first # => {...}
|
|
52
|
+
dataset.last # => {...}
|
|
52
53
|
|
|
53
54
|
== Update/Delete rows
|
|
54
55
|
|
|
55
56
|
dataset.exclude(:active).delete
|
|
56
|
-
dataset.where
|
|
57
|
+
dataset.where{price < 100}.update(:active => true)
|
|
58
|
+
dataset.where(:active).update(:price => Sequel[:price] * 0.90)
|
|
57
59
|
|
|
58
60
|
== Datasets are Enumerable
|
|
59
61
|
|
|
@@ -67,8 +69,7 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
|
|
|
67
69
|
|
|
68
70
|
=== Equality
|
|
69
71
|
|
|
70
|
-
dataset.where(:
|
|
71
|
-
dataset.where('name = ?', 'abc')
|
|
72
|
+
dataset.where(name: 'abc')
|
|
72
73
|
|
|
73
74
|
=== Inequality
|
|
74
75
|
|
|
@@ -77,30 +78,27 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
|
|
|
77
78
|
|
|
78
79
|
=== Inclusion
|
|
79
80
|
|
|
80
|
-
dataset.where(:
|
|
81
|
+
dataset.where(value: 50..100)
|
|
81
82
|
dataset.where{(value >= 50) & (value <= 100)}
|
|
82
83
|
|
|
83
|
-
dataset.where(
|
|
84
|
-
dataset.where(:
|
|
85
|
-
|
|
86
|
-
dataset.where(:id=>other_dataset.select(:other_id))
|
|
84
|
+
dataset.where(value: [50,75,100])
|
|
85
|
+
dataset.where(id: other_dataset.select(:other_id))
|
|
87
86
|
|
|
88
87
|
=== Subselects as scalar values
|
|
89
88
|
|
|
90
|
-
dataset.where('price > (SELECT avg(price) + 100 FROM table)')
|
|
91
89
|
dataset.where{price > dataset.select(avg(price) + 100)}
|
|
92
90
|
|
|
93
91
|
=== LIKE/Regexp
|
|
94
92
|
|
|
95
93
|
DB[:items].where(Sequel.like(:name, 'AL%'))
|
|
96
|
-
DB[:items].where(:
|
|
94
|
+
DB[:items].where(name: /^AL/)
|
|
97
95
|
|
|
98
96
|
=== AND/OR/NOT
|
|
99
97
|
|
|
100
98
|
DB[:items].where{(x > 5) & (y > 10)}.sql
|
|
101
99
|
# SELECT * FROM items WHERE ((x > 5) AND (y > 10))
|
|
102
100
|
|
|
103
|
-
DB[:items].where(Sequel.or(:
|
|
101
|
+
DB[:items].where(Sequel.or(x: 1, y: 2) & Sequel.~(z: 3)).sql
|
|
104
102
|
# SELECT * FROM items WHERE (((x = 1) OR (y = 2)) AND (z != 3))
|
|
105
103
|
|
|
106
104
|
=== Mathematical operators
|
|
@@ -111,11 +109,18 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
|
|
|
111
109
|
DB[:items].where{price - 100 < avg(price)}.sql
|
|
112
110
|
# SELECT * FROM items WHERE ((price - 100) < avg(price))
|
|
113
111
|
|
|
112
|
+
=== Raw SQL Fragments
|
|
113
|
+
|
|
114
|
+
dataset.where(Sequel.lit('id= 1'))
|
|
115
|
+
dataset.where(Sequel.lit('name = ?', 'abc'))
|
|
116
|
+
dataset.where(Sequel.lit('value IN ?', [50,75,100]))
|
|
117
|
+
dataset.where(Sequel.lit('price > (SELECT avg(price) + 100 FROM table)'))
|
|
118
|
+
|
|
114
119
|
== Ordering
|
|
115
120
|
|
|
116
|
-
dataset.order(:kind)
|
|
117
|
-
dataset.
|
|
118
|
-
dataset.order(Sequel.desc(:kind), :name)
|
|
121
|
+
dataset.order(:kind) # kind
|
|
122
|
+
dataset.reverse(:kind) # kind DESC
|
|
123
|
+
dataset.order(Sequel.desc(:kind), :name) # kind DESC, name
|
|
119
124
|
|
|
120
125
|
== Limit/Offset
|
|
121
126
|
|
|
@@ -125,11 +130,12 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
|
|
|
125
130
|
|
|
126
131
|
== Joins
|
|
127
132
|
|
|
128
|
-
DB[:items].left_outer_join(:categories, :
|
|
133
|
+
DB[:items].left_outer_join(:categories, id: :category_id).sql
|
|
129
134
|
# SELECT * FROM items
|
|
130
135
|
# LEFT OUTER JOIN categories ON categories.id = items.category_id
|
|
131
136
|
|
|
132
|
-
DB[:items].join(:categories, :
|
|
137
|
+
DB[:items].join(:categories, id: :category_id).
|
|
138
|
+
join(:groups, id: Sequel[:items][:group_id])
|
|
133
139
|
# SELECT * FROM items
|
|
134
140
|
# INNER JOIN categories ON categories.id = items.category_id
|
|
135
141
|
# INNER JOIN groups ON groups.id = items.group_id
|
|
@@ -142,79 +148,100 @@ Without a filename argument, the sqlite adapter will setup a new sqlite database
|
|
|
142
148
|
dataset.avg(:price)
|
|
143
149
|
dataset.sum(:stock)
|
|
144
150
|
|
|
145
|
-
dataset.group_and_count(:category)
|
|
151
|
+
dataset.group_and_count(:category).all
|
|
146
152
|
dataset.select_group(:category).select_append{avg(:price)}
|
|
147
153
|
|
|
148
154
|
== SQL Functions / Literals
|
|
149
155
|
|
|
150
|
-
dataset.update(:
|
|
151
|
-
dataset.update(:
|
|
156
|
+
dataset.update(updated_at: Sequel.function(:NOW))
|
|
157
|
+
dataset.update(updated_at: Sequel.lit('NOW()'))
|
|
152
158
|
|
|
153
|
-
dataset.update(:
|
|
154
|
-
dataset.update(:
|
|
159
|
+
dataset.update(updated_at: Sequel.lit("DateValue('1/1/2001')"))
|
|
160
|
+
dataset.update(updated_at: Sequel.function(:DateValue, '1/1/2001'))
|
|
155
161
|
|
|
156
162
|
== Schema Manipulation
|
|
157
163
|
|
|
158
164
|
DB.create_table :items do
|
|
159
165
|
primary_key :id
|
|
160
|
-
String :name, :
|
|
161
|
-
TrueClass :active, :
|
|
166
|
+
String :name, unique: true, null: false
|
|
167
|
+
TrueClass :active, default: true
|
|
162
168
|
foreign_key :category_id, :categories
|
|
163
|
-
DateTime :created_at
|
|
169
|
+
DateTime :created_at, default: Sequel::CURRENT_TIMESTAMP, :index=>true
|
|
164
170
|
|
|
165
|
-
index :
|
|
171
|
+
index [:category_id, :active]
|
|
166
172
|
end
|
|
167
173
|
|
|
168
174
|
DB.drop_table :items
|
|
169
175
|
|
|
170
176
|
== Aliasing
|
|
171
177
|
|
|
178
|
+
DB[:items].select(Sequel[:name].as(:item_name))
|
|
172
179
|
DB[:items].select(Sequel.as(:name, :item_name))
|
|
173
|
-
DB[:items].select(:
|
|
174
|
-
|
|
180
|
+
DB[:items].select{name.as(:item_name)}
|
|
181
|
+
# SELECT name AS item_name FROM items
|
|
182
|
+
|
|
183
|
+
DB[Sequel[:items].as(:items_table)].select{items_table[:name].as(:item_name)}
|
|
175
184
|
# SELECT items_table.name AS item_name FROM items AS items_table
|
|
176
185
|
|
|
177
186
|
== Transactions
|
|
178
187
|
|
|
179
188
|
DB.transaction do
|
|
180
|
-
|
|
181
|
-
dataset.insert(:
|
|
182
|
-
|
|
189
|
+
# BEGIN
|
|
190
|
+
dataset.insert(first_name: 'Inigo', last_name: 'Montoya')
|
|
191
|
+
dataset.insert(first_name: 'Farm', last_name: 'Boy')
|
|
192
|
+
end
|
|
193
|
+
# COMMIT
|
|
194
|
+
|
|
183
195
|
|
|
184
|
-
|
|
196
|
+
Transactions are reentrant:
|
|
185
197
|
|
|
186
|
-
DB.transaction do
|
|
198
|
+
DB.transaction do
|
|
199
|
+
# BEGIN
|
|
187
200
|
DB.transaction do
|
|
188
|
-
dataset
|
|
201
|
+
dataset.insert(first_name: 'Inigo', last_name: 'Montoya')
|
|
189
202
|
end
|
|
190
|
-
end
|
|
203
|
+
end
|
|
204
|
+
# COMMIT
|
|
191
205
|
|
|
192
206
|
Transactions are aborted if an error is raised:
|
|
193
207
|
|
|
194
208
|
DB.transaction do
|
|
209
|
+
# BEGIN
|
|
195
210
|
raise "some error occurred"
|
|
196
|
-
end
|
|
211
|
+
end
|
|
212
|
+
# ROLLBACK issued and the error is re-raised
|
|
197
213
|
|
|
198
214
|
Transactions can also be aborted by raising Sequel::Rollback:
|
|
199
215
|
|
|
200
216
|
DB.transaction do
|
|
201
|
-
|
|
202
|
-
|
|
217
|
+
# BEGIN
|
|
218
|
+
raise(Sequel::Rollback)
|
|
219
|
+
end
|
|
220
|
+
# ROLLBACK issued and no error raised
|
|
203
221
|
|
|
204
222
|
Savepoints can be used if the database supports it:
|
|
205
223
|
|
|
206
224
|
DB.transaction do
|
|
207
|
-
dataset
|
|
208
|
-
DB.transaction(:
|
|
209
|
-
dataset
|
|
210
|
-
raise(Sequel::Rollback)
|
|
225
|
+
dataset.insert(first_name: 'Farm', last_name: 'Boy') # Inserted
|
|
226
|
+
DB.transaction(savepoint: true) do # This savepoint is rolled back
|
|
227
|
+
dataset.insert(first_name: 'Inigo', last_name: 'Montoya') # Not inserted
|
|
228
|
+
raise(Sequel::Rollback)
|
|
211
229
|
end
|
|
212
|
-
dataset
|
|
230
|
+
dataset.insert(first_name: 'Prince', last_name: 'Humperdink') # Inserted
|
|
213
231
|
end
|
|
214
232
|
|
|
215
|
-
==
|
|
233
|
+
== Retrieving SQL
|
|
216
234
|
|
|
217
235
|
dataset.sql # "SELECT * FROM items"
|
|
236
|
+
dataset.insert_sql(a: 1) # "INSERT INTO items (a) VALUES (1)"
|
|
237
|
+
dataset.update_sql(a: 1) # "UPDATE items SET a = 1"
|
|
218
238
|
dataset.delete_sql # "DELETE FROM items"
|
|
219
|
-
|
|
239
|
+
|
|
240
|
+
== Basic introspection
|
|
241
|
+
|
|
242
|
+
dataset.columns # => [:id, :name, ...]
|
|
243
|
+
DB.tables # => [:items, ...]
|
|
244
|
+
DB.views # => [:new_items, ...]
|
|
220
245
|
DB.schema(:items) # => [[:id, {:type=>:integer, ...}], [:name, {:type=>:string, ...}], ...]
|
|
246
|
+
DB.indexes(:items) # => {:index_name => {:columns=>[:a], :unique=>false}, ...}
|
|
247
|
+
DB.foreign_key_list(:items) # => [{:name=>:items_a_fk, :columns=>[:a], :key=>[:id], :table=>:other_table}, ...]
|
data/doc/code_order.rdoc
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
= Code Order
|
|
2
2
|
|
|
3
|
-
In Sequel, the order in which code is executed is important. This
|
|
3
|
+
In Sequel, the order in which code is executed during initialization is important. This
|
|
4
4
|
guide provides the recommended way to order your Sequel code. Some
|
|
5
5
|
of these guidelines are not strictly necessary, but others are, and
|
|
6
6
|
this guide will be specific about which are strictly necessary.
|
|
7
7
|
|
|
8
8
|
== Require Sequel
|
|
9
9
|
|
|
10
|
-
This is sort of a no
|
|
10
|
+
This is sort of a no-brainer, but you need to require the library
|
|
11
11
|
first. This is a strict requirement, none of the other code can
|
|
12
12
|
be executed unless the library has been required first. Example:
|
|
13
13
|
|
|
@@ -18,13 +18,6 @@ be executed unless the library has been required first. Example:
|
|
|
18
18
|
Global extensions are loaded with Sequel.extension, and affect
|
|
19
19
|
other parts of Sequel or the general ruby environment. It's not
|
|
20
20
|
necessary to load them first, but it is a recommended practice.
|
|
21
|
-
|
|
22
|
-
The exception to this is global extensions that integrate with
|
|
23
|
-
Database-specific extensions, where the Database-specific
|
|
24
|
-
extension should be loaded first (such as some of the pg_*
|
|
25
|
-
extensions). In those cases, the global extensions should be
|
|
26
|
-
loaded after the Database-specific extensions.
|
|
27
|
-
|
|
28
21
|
Example:
|
|
29
22
|
|
|
30
23
|
Sequel.extension :blank
|
|
@@ -77,12 +70,37 @@ copied into the subclass when model subclasses are created. Example:
|
|
|
77
70
|
== Load Model Classes
|
|
78
71
|
|
|
79
72
|
After you have established a database connection, and configured your
|
|
80
|
-
global model
|
|
73
|
+
global model configuration and global plugins, you can load your model
|
|
81
74
|
classes. It's recommended to have a separate file for each model class,
|
|
82
75
|
unless the model classes are very simple. Example:
|
|
83
76
|
|
|
84
77
|
Dir['./models/*.rb'].each{|f| require f}
|
|
85
78
|
|
|
79
|
+
== Finalize Associations and Freeze Model Classes and Database
|
|
80
|
+
|
|
81
|
+
After all the models have been setup, you can finalize the associations.
|
|
82
|
+
This can speed up association reflection methods by doing a lookup in
|
|
83
|
+
advance to find the associated class, and cache related association
|
|
84
|
+
information in the association itself.
|
|
85
|
+
|
|
86
|
+
Additionally, in production and testing, you should freeze the
|
|
87
|
+
model classes and Database instance, so that you can detect
|
|
88
|
+
unsafe runtime modification of the configuration:
|
|
89
|
+
|
|
90
|
+
model_classes.each(&:finalize_associations)
|
|
91
|
+
model_classes.each(&:freeze)
|
|
92
|
+
DB.freeze
|
|
93
|
+
|
|
94
|
+
The `subclasses` plugin can be used to keep track of all model classes
|
|
95
|
+
that have been setup in your application. Finalizing their associations
|
|
96
|
+
and freezing them can easily be achieved through the plugin:
|
|
97
|
+
|
|
98
|
+
# Register the plugin before setting up the models
|
|
99
|
+
Sequel::Model.plugin :subclasses
|
|
100
|
+
# ... setup models
|
|
101
|
+
# Now finalize associations & freeze models by calling the plugin:
|
|
102
|
+
Sequel::Model.freeze_descendents
|
|
103
|
+
|
|
86
104
|
== Disconnect If Using Forking Webserver with Code Preloading
|
|
87
105
|
|
|
88
106
|
If you are using a forking webserver such as unicorn or passenger, with
|
data/doc/core_extensions.rdoc
CHANGED
|
@@ -10,12 +10,18 @@ Historically, Sequel added methods to many of the core classes, and usage of tho
|
|
|
10
10
|
|
|
11
11
|
While Sequel never overrode any methods defined by ruby, it is possible that other libraries could define the same methods that Sequel defines, which could cause problems. Also, some rubyists do not like using libraries that add methods to the core classes.
|
|
12
12
|
|
|
13
|
-
Alternatives for the core extension methods
|
|
13
|
+
Alternatives for the core extension methods were added to Sequel, so the query above could be written as:
|
|
14
14
|
|
|
15
15
|
DB[:table].select(Sequel.cast(:column, Integer)).
|
|
16
16
|
where(Sequel.like(:column, 'A%')).
|
|
17
17
|
order(Sequel.case({1=>2}, 0, :a))
|
|
18
18
|
|
|
19
|
+
or with virtual rows:
|
|
20
|
+
|
|
21
|
+
DB[:table].select{column.as(Integer)}.
|
|
22
|
+
where{column.like('A%')}.
|
|
23
|
+
order(Sequel.case({1=>2}, 0, :a))
|
|
24
|
+
|
|
19
25
|
Almost all of the core extension methods have a replacement on the Sequel module. So it is now up to the user which style to use. Using the methods on the Sequel module results in slightly more verbose code, but allows the code to work without modifications to the core classes.
|
|
20
26
|
|
|
21
27
|
== Issues
|
|
@@ -40,6 +46,16 @@ All of Sequel's extensions to the core classes are stored in Sequel's core_exten
|
|
|
40
46
|
|
|
41
47
|
Sequel has no internal dependency on the core extensions. This includes Sequel's core, Sequel::Model, and all plugins and extensions that ship with Sequel. However, it is possible that external plugins and extensions will depend on the core extensions. Such plugins and extensions should be updated so that they no longer depend on the core extensions.
|
|
42
48
|
|
|
49
|
+
== Refinements
|
|
50
|
+
|
|
51
|
+
Most of the these extensions can be added on a per-file basis using refinements (if you are using Ruby 2.0+). To use refinements, first load them:
|
|
52
|
+
|
|
53
|
+
Sequel.extension :core_refinements
|
|
54
|
+
|
|
55
|
+
Then for each file where you want to use the refinements:
|
|
56
|
+
|
|
57
|
+
using Sequel::CoreRefinements
|
|
58
|
+
|
|
43
59
|
== Core Extension Methods
|
|
44
60
|
|
|
45
61
|
This section will briefly describe all of the methods added to the core classes, and what the alternative method is that doesn't require the core extensions.
|
|
@@ -53,8 +69,9 @@ Symbol#as and String#as return Sequel aliased expressions using the provided ali
|
|
|
53
69
|
:a.as(:b) # SQL: a AS b
|
|
54
70
|
'a'.as(:b) # SQL: 'a' AS b
|
|
55
71
|
|
|
56
|
-
|
|
72
|
+
Alternatives:
|
|
57
73
|
|
|
74
|
+
Sequel[:a].as(:b)
|
|
58
75
|
Sequel.as(:a, :b)
|
|
59
76
|
|
|
60
77
|
==== cast
|
|
@@ -64,8 +81,9 @@ Symbol#cast and String#cast return Sequel cast expressions for typecasting in th
|
|
|
64
81
|
:a.cast(Integer) # SQL: CAST(a AS integer)
|
|
65
82
|
'a'.cast(Integer) # SQL: CAST('a' AS integer)
|
|
66
83
|
|
|
67
|
-
|
|
84
|
+
Alternatives:
|
|
68
85
|
|
|
86
|
+
Sequel[:a].cast(Integer)
|
|
69
87
|
Sequel.cast(:a, Integer)
|
|
70
88
|
|
|
71
89
|
==== cast_numeric
|
|
@@ -75,8 +93,9 @@ Symbol#cast_numeric and String#cast_numeric return Sequel cast expressions for t
|
|
|
75
93
|
:a.cast_numeric # SQL: CAST(a AS integer)
|
|
76
94
|
'a'.cast_numeric(Float) # SQL: CAST('a' AS double precision)
|
|
77
95
|
|
|
78
|
-
Alternative:
|
|
96
|
+
Alternative:
|
|
79
97
|
|
|
98
|
+
Sequel[:a].cast_numeric
|
|
80
99
|
Sequel.cast_numeric(:a)
|
|
81
100
|
|
|
82
101
|
==== cast_string
|
|
@@ -86,21 +105,23 @@ Symbol#cast_string and String#cast_string return Sequel cast expressions for typ
|
|
|
86
105
|
:a.cast_string # SQL: CAST(a AS varchar(255))
|
|
87
106
|
'a'.cast_string(:text) # SQL: CAST('a' AS text)
|
|
88
107
|
|
|
89
|
-
|
|
108
|
+
Alternatives:
|
|
90
109
|
|
|
110
|
+
Sequel[:a].cast_string
|
|
91
111
|
Sequel.cast_string(:a)
|
|
92
112
|
|
|
93
113
|
=== Symbol
|
|
94
114
|
|
|
95
115
|
==== identifier
|
|
96
116
|
|
|
97
|
-
Symbol#identifier wraps the symbol in
|
|
117
|
+
Symbol#identifier wraps the symbol in an Sequel identifier object. If symbol splitting is enabled (no longer the default), it also makes sure the symbol will not be split. If symbol splitting is disabled (the default), there is little reason to use this).
|
|
98
118
|
|
|
99
|
-
:
|
|
119
|
+
:column.identifier # SQL: column
|
|
100
120
|
|
|
101
|
-
|
|
121
|
+
Alternatives:
|
|
102
122
|
|
|
103
|
-
Sequel
|
|
123
|
+
Sequel[:column]
|
|
124
|
+
Sequel.identifier(:column)
|
|
104
125
|
|
|
105
126
|
==== asc
|
|
106
127
|
|
|
@@ -108,8 +129,9 @@ Symbol#asc is used to define an ascending order on a column. It exists mostly f
|
|
|
108
129
|
|
|
109
130
|
:a.asc # SQL: a ASC
|
|
110
131
|
|
|
111
|
-
|
|
132
|
+
Alternatives:
|
|
112
133
|
|
|
134
|
+
Sequel[:a].asc
|
|
113
135
|
Sequel.asc(:a)
|
|
114
136
|
|
|
115
137
|
==== desc
|
|
@@ -118,8 +140,9 @@ Symbol#desc is used to defined a descending order on a column. The returned val
|
|
|
118
140
|
|
|
119
141
|
:a.desc # SQL: a DESC
|
|
120
142
|
|
|
121
|
-
|
|
143
|
+
Alternatives:
|
|
122
144
|
|
|
145
|
+
Sequel[:a].desc
|
|
123
146
|
Sequel.desc(:a)
|
|
124
147
|
|
|
125
148
|
==== +, -, *, /
|
|
@@ -130,13 +153,25 @@ The standard mathematical operators are defined on Symbol, and return a Sequel n
|
|
|
130
153
|
:a - :b # SQL: a - b
|
|
131
154
|
:a * :b # SQL: a * b
|
|
132
155
|
:a / :b # SQL: a / b
|
|
156
|
+
:a ** :b # SQL: power(a, b)
|
|
157
|
+
|
|
158
|
+
Sequel also supports ruby's coercion protocols on symbols (note that this does not work when using refinements):
|
|
159
|
+
|
|
160
|
+
1 + :b # SQL: 1 + b
|
|
133
161
|
|
|
134
162
|
Alternatives:
|
|
135
163
|
|
|
164
|
+
Sequel[:a] + :b
|
|
165
|
+
Sequel[:a] - :b
|
|
166
|
+
Sequel[:a] * :b
|
|
167
|
+
Sequel[:a] / :b
|
|
168
|
+
Sequel[:a] ** :b
|
|
169
|
+
|
|
136
170
|
Sequel.+(:a, :b)
|
|
137
171
|
Sequel.-(:a, :b)
|
|
138
172
|
Sequel.*(:a, :b)
|
|
139
173
|
Sequel./(:a, :b)
|
|
174
|
+
Sequel.**(:a, :b)
|
|
140
175
|
|
|
141
176
|
==== *
|
|
142
177
|
|
|
@@ -144,9 +179,9 @@ The * operator is overloaded on Symbol such that if it is called with no argumen
|
|
|
144
179
|
|
|
145
180
|
:a.* # SQL: a.*
|
|
146
181
|
|
|
147
|
-
Alternative:
|
|
182
|
+
Alternative:
|
|
148
183
|
|
|
149
|
-
Sequel
|
|
184
|
+
Sequel[:a].*
|
|
150
185
|
|
|
151
186
|
==== qualify
|
|
152
187
|
|
|
@@ -154,11 +189,11 @@ Symbol#qualify qualifies the identifier (e.g. a column) with a another identifie
|
|
|
154
189
|
|
|
155
190
|
:column.qualify(:table) # SQL: table.column
|
|
156
191
|
|
|
157
|
-
Alternative:
|
|
192
|
+
Alternative:
|
|
158
193
|
|
|
159
|
-
Sequel
|
|
194
|
+
Sequel[:table][:column]
|
|
160
195
|
|
|
161
|
-
Note the reversed order of the arguments. For the Symbol#qualify method, the argument is the qualifier, while for Sequel
|
|
196
|
+
Note the reversed order of the arguments. For the Symbol#qualify method, the argument is the qualifier, while for Sequel[][], the first [] is the qualifier, and the second [] is the identifier.
|
|
162
197
|
|
|
163
198
|
==== like
|
|
164
199
|
|
|
@@ -166,8 +201,9 @@ Symbol#like returns a case sensitive LIKE expression between the identifier and
|
|
|
166
201
|
|
|
167
202
|
:a.like('b%') # SQL: a LIKE 'b%' ESCAPE '\'
|
|
168
203
|
|
|
169
|
-
|
|
204
|
+
Alternatives:
|
|
170
205
|
|
|
206
|
+
Sequel[:a].like('b%')
|
|
171
207
|
Sequel.like(:a, 'b%')
|
|
172
208
|
|
|
173
209
|
==== ilike
|
|
@@ -176,8 +212,9 @@ Symbol#ilike returns a case insensitive LIKE expression between the identifier a
|
|
|
176
212
|
|
|
177
213
|
:a.ilike('b%') # SQL: a ILIKE 'b%' ESCAPE '\'
|
|
178
214
|
|
|
179
|
-
|
|
215
|
+
Alternatives:
|
|
180
216
|
|
|
217
|
+
Sequel[:a].ilike('b%')
|
|
181
218
|
Sequel.ilike(:a, 'b%')
|
|
182
219
|
|
|
183
220
|
==== sql_subscript
|
|
@@ -186,8 +223,9 @@ Symbol#sql_subscript returns a Sequel expression representing an SQL array acces
|
|
|
186
223
|
|
|
187
224
|
:a.sql_subscript(1) # SQL: a[1]
|
|
188
225
|
|
|
189
|
-
|
|
226
|
+
Alternatives:
|
|
190
227
|
|
|
228
|
+
Sequel[:a].sql_subscript(1)
|
|
191
229
|
Sequel.subscript(:a, 1)
|
|
192
230
|
|
|
193
231
|
==== extract
|
|
@@ -196,12 +234,11 @@ Symbol#extract does a datetime part extraction from the receiver:
|
|
|
196
234
|
|
|
197
235
|
:a.extract(:year) # SQL: extract(year FROM a)
|
|
198
236
|
|
|
199
|
-
|
|
237
|
+
Alternatives:
|
|
200
238
|
|
|
239
|
+
Sequel[:a].extract(:year)
|
|
201
240
|
Sequel.extract(:year, :a)
|
|
202
241
|
|
|
203
|
-
Note the reversed order of the arguments. In Symbol#extract, the datetime part is the argument, while in Sequel.extract, the datetime part is the first argument.
|
|
204
|
-
|
|
205
242
|
==== sql_boolean, sql_number, sql_string
|
|
206
243
|
|
|
207
244
|
These Symbol methods are used to force the treating of the object as a specific SQL type, instead of as a general SQL type. For example:
|
|
@@ -210,11 +247,11 @@ These Symbol methods are used to force the treating of the object as a specific
|
|
|
210
247
|
:a.sql_number << 1 # SQL: a << 1
|
|
211
248
|
:a.sql_string + 'a' # SQL: a || 'a'
|
|
212
249
|
|
|
213
|
-
|
|
250
|
+
Alternatives:
|
|
214
251
|
|
|
215
|
-
Sequel
|
|
216
|
-
Sequel
|
|
217
|
-
Sequel
|
|
252
|
+
Sequel[:a].sql_boolean
|
|
253
|
+
Sequel[:a].sql_number
|
|
254
|
+
Sequel[:a].sql_string
|
|
218
255
|
|
|
219
256
|
==== sql_function
|
|
220
257
|
|
|
@@ -224,8 +261,9 @@ Symbol#sql_function returns an SQL function call expression object:
|
|
|
224
261
|
:sum.sql_function(:a) # SQL: sum(a)
|
|
225
262
|
:concat.sql_function(:a, :b) # SQL: concat(a, b)
|
|
226
263
|
|
|
227
|
-
|
|
264
|
+
Alternatives:
|
|
228
265
|
|
|
266
|
+
Sequel[:sum].function(:a)
|
|
229
267
|
Sequel.function(:sum, :a)
|
|
230
268
|
|
|
231
269
|
=== String
|
|
@@ -237,9 +275,10 @@ String#lit creates a literal string, using placeholders if any arguments are giv
|
|
|
237
275
|
'a'.lit # SQL: a
|
|
238
276
|
'"a" = ?'.lit(1) # SQL: "a" = 1
|
|
239
277
|
|
|
240
|
-
|
|
278
|
+
Alternatives:
|
|
241
279
|
|
|
242
280
|
Sequel.lit('a')
|
|
281
|
+
Sequel.lit('a = ?', 1)
|
|
243
282
|
|
|
244
283
|
==== to_sequel_blob
|
|
245
284
|
|
|
@@ -247,7 +286,7 @@ String#to_sequel_blob returns the string wrapper in Sequel blob object. Often b
|
|
|
247
286
|
|
|
248
287
|
"a\0".to_sequel_blob # SQL: X'6100'
|
|
249
288
|
|
|
250
|
-
Alternative:
|
|
289
|
+
Alternative:
|
|
251
290
|
|
|
252
291
|
Sequel.blob("a\0")
|
|
253
292
|
|
|
@@ -257,12 +296,13 @@ Alternative: Sequel.blob:
|
|
|
257
296
|
|
|
258
297
|
Array#~, Hash#~, and Symbol#~ treat the receiver as a conditions specifier, not matching all of the conditions:
|
|
259
298
|
|
|
260
|
-
~{:
|
|
299
|
+
~{a: 1, b: [2, 3]} # SQL: a != 1 OR b NOT IN (2, 3)
|
|
261
300
|
~[[:a, 1], [:b, [1, 2]]] # SQL: a != 1 OR b NOT IN (1, 2)
|
|
262
301
|
|
|
263
|
-
|
|
302
|
+
Alternatives:
|
|
264
303
|
|
|
265
|
-
Sequel
|
|
304
|
+
~Sequel[a: 1, b: [2, 3]]
|
|
305
|
+
Sequel.~(a: 1, b: [2, 3])
|
|
266
306
|
|
|
267
307
|
=== Hash & Array
|
|
268
308
|
|
|
@@ -270,45 +310,45 @@ Alternative: Sequel.~:
|
|
|
270
310
|
|
|
271
311
|
Array#case and Hash#case return an SQL CASE expression, where the keys are conditions and the values are results:
|
|
272
312
|
|
|
273
|
-
{{:
|
|
274
|
-
[[{:
|
|
313
|
+
{{a: [2,3]} => 1}.case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
|
|
314
|
+
[[{a: [2,3]}, 1]].case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
|
|
275
315
|
|
|
276
|
-
Alternative:
|
|
316
|
+
Alternative:
|
|
277
317
|
|
|
278
|
-
Sequel.case({{:
|
|
318
|
+
Sequel.case({{a: [2,3]}=>1}, 0)
|
|
279
319
|
|
|
280
320
|
==== sql_expr
|
|
281
321
|
|
|
282
322
|
Array#sql_expr and Hash#sql_expr treat the receiver as a conditions specifier, matching all of the conditions in the array.
|
|
283
323
|
|
|
284
|
-
{:
|
|
324
|
+
{a: 1, b: [2, 3]}.sql_expr # SQL: a = 1 AND b IN (2, 3)
|
|
285
325
|
[[:a, 1], [:b, [2, 3]]].sql_expr # SQL: a = 1 AND b IN (2, 3)
|
|
286
326
|
|
|
287
|
-
Alternative:
|
|
327
|
+
Alternative:
|
|
288
328
|
|
|
289
|
-
Sequel
|
|
329
|
+
Sequel[a: 1, b: [2, 3]]
|
|
290
330
|
|
|
291
331
|
==== sql_negate
|
|
292
332
|
|
|
293
333
|
Array#sql_negate and Hash#sql_negate treat the receiver as a conditions specifier, matching none of the conditions in the array:
|
|
294
334
|
|
|
295
|
-
{:
|
|
335
|
+
{a: 1, b: [2, 3]}.sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
|
|
296
336
|
[[:a, 1], [:b, [2, 3]]].sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
|
|
297
337
|
|
|
298
|
-
Alternative:
|
|
338
|
+
Alternative:
|
|
299
339
|
|
|
300
|
-
Sequel.negate(:
|
|
340
|
+
Sequel.negate(a: 1, b: [2, 3])
|
|
301
341
|
|
|
302
342
|
==== sql_or
|
|
303
343
|
|
|
304
344
|
Array#sql_or nd Hash#sql_or treat the receiver as a conditions specifier, matching any of the conditions in the array:
|
|
305
345
|
|
|
306
|
-
{:
|
|
346
|
+
{a: 1, b: [2, 3]}.sql_or # SQL: a = 1 OR b IN (2, 3)
|
|
307
347
|
[[:a, 1], [:b, [2, 3]]].sql_or # SQL: a = 1 OR b IN (2, 3)
|
|
308
348
|
|
|
309
|
-
Alternative:
|
|
349
|
+
Alternative:
|
|
310
350
|
|
|
311
|
-
Sequel.or(:
|
|
351
|
+
Sequel.or(a: 1, b: [2, 3])
|
|
312
352
|
|
|
313
353
|
=== Array
|
|
314
354
|
|
|
@@ -316,10 +356,10 @@ Alternative: Sequel.or:
|
|
|
316
356
|
|
|
317
357
|
Array#sql_value_list wraps the array in an array subclass, which Sequel will always treat as a value list and not a conditions specifier. By default, Sequel treats arrays of two element arrays as a conditions specifier.
|
|
318
358
|
|
|
319
|
-
DB[:a].
|
|
320
|
-
DB[:a].
|
|
359
|
+
DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]]) # SQL: (a, b) IN ((1 = 2) AND (3 = 4))
|
|
360
|
+
DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]].sql_value_list) # SQL: (a, b) IN ((1, 2), (3, 4))
|
|
321
361
|
|
|
322
|
-
Alternative:
|
|
362
|
+
Alternative:
|
|
323
363
|
|
|
324
364
|
Sequel.value_list([[1, 2], [3, 4]])
|
|
325
365
|
|
|
@@ -327,12 +367,12 @@ Alternative: Sequel.value_list:
|
|
|
327
367
|
|
|
328
368
|
Array#sql_string_join joins all of the elements in the array in an SQL string concatentation expression:
|
|
329
369
|
|
|
330
|
-
[:a].sql_string_join
|
|
331
|
-
[:a, :b].sql_string_join
|
|
332
|
-
[:a, 'b'].sql_string_join
|
|
370
|
+
[:a].sql_string_join # SQL: a
|
|
371
|
+
[:a, :b].sql_string_join # SQL: a || b
|
|
372
|
+
[:a, 'b'].sql_string_join # SQL: a || 'b'
|
|
333
373
|
['a', :b].sql_string_join(' ') # SQL: 'a' || ' ' || b
|
|
334
374
|
|
|
335
|
-
Alternative:
|
|
375
|
+
Alternative:
|
|
336
376
|
|
|
337
377
|
Sequel.join(['a', :b], ' ')
|
|
338
378
|
|
|
@@ -342,23 +382,24 @@ Alternative: Sequel.join:
|
|
|
342
382
|
|
|
343
383
|
Hash#& and Symbol#& return a Sequel boolean expression, matching the condition specified by the receiver and the condition specified by the given argument:
|
|
344
384
|
|
|
345
|
-
:a & :b
|
|
346
|
-
{:
|
|
347
|
-
{:
|
|
385
|
+
:a & :b # SQL: a AND b
|
|
386
|
+
{a: 1} & :b # SQL: a = 1 AND b
|
|
387
|
+
{a: true} & :b # SQL: a IS TRUE AND b
|
|
348
388
|
|
|
349
|
-
|
|
389
|
+
Alternatives:
|
|
350
390
|
|
|
351
|
-
Sequel
|
|
391
|
+
Sequel[a: 1] & :b
|
|
392
|
+
Sequel.&({a: 1}, :b)
|
|
352
393
|
|
|
353
394
|
==== |
|
|
354
395
|
|
|
355
396
|
Hash#| returns a Sequel boolean expression, matching the condition specified by the receiver or the condition specified by the given argument:
|
|
356
397
|
|
|
357
|
-
:a | :b
|
|
358
|
-
{:
|
|
359
|
-
{:
|
|
360
|
-
|
|
361
|
-
Alternative: Sequel.|:
|
|
398
|
+
:a | :b # SQL: a OR b
|
|
399
|
+
{a: 1} | :b # SQL: a = 1 OR b
|
|
400
|
+
{a: true} | :b # SQL: a IS TRUE OR b
|
|
362
401
|
|
|
363
|
-
|
|
402
|
+
Alternative:
|
|
364
403
|
|
|
404
|
+
Sequel[a: 1] | :b
|
|
405
|
+
Sequel.|({a: 1}, :b)
|