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
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The index_caching extension adds a few methods to Sequel::Database
|
|
4
|
+
# that make it easy to dump information about database indexes to a file,
|
|
5
|
+
# and load it from that file. Loading index information from a
|
|
6
|
+
# dumped file is faster than parsing it from the database, so this
|
|
7
|
+
# can save bootup time for applications with large numbers of index.
|
|
8
|
+
#
|
|
9
|
+
# Basic usage in application code:
|
|
10
|
+
#
|
|
11
|
+
# DB = Sequel.connect('...')
|
|
12
|
+
# DB.extension :index_caching
|
|
13
|
+
# DB.load_index_cache('/path/to/index_cache.dump')
|
|
14
|
+
#
|
|
15
|
+
# # load model files
|
|
16
|
+
#
|
|
17
|
+
# Then, whenever database indicies are modified, write a new cached
|
|
18
|
+
# file. You can do that with <tt>bin/sequel</tt>'s -X option:
|
|
19
|
+
#
|
|
20
|
+
# bin/sequel -X /path/to/index_cache.dump postgres://...
|
|
21
|
+
#
|
|
22
|
+
# Alternatively, if you don't want to dump the index information for
|
|
23
|
+
# all tables, and you don't worry about race conditions, you can
|
|
24
|
+
# choose to use the following in your application code:
|
|
25
|
+
#
|
|
26
|
+
# DB = Sequel.connect('...')
|
|
27
|
+
# DB.extension :index_caching
|
|
28
|
+
# DB.load_index_cache?('/path/to/index_cache.dump')
|
|
29
|
+
#
|
|
30
|
+
# # load model files
|
|
31
|
+
#
|
|
32
|
+
# DB.dump_index_cache?('/path/to/index_cache.dump')
|
|
33
|
+
#
|
|
34
|
+
# With this method, you just have to delete the index dump file if
|
|
35
|
+
# the schema is modified, and the application will recreate it for you
|
|
36
|
+
# using just the tables that your models use.
|
|
37
|
+
#
|
|
38
|
+
# Note that it is up to the application to ensure that the dumped
|
|
39
|
+
# index cache reflects the current state of the database. Sequel
|
|
40
|
+
# does no checking to ensure this, as checking would take time and the
|
|
41
|
+
# purpose of this code is to take a shortcut.
|
|
42
|
+
#
|
|
43
|
+
# The index cache is dumped in Marshal format, since it is the fastest
|
|
44
|
+
# and it handles all ruby objects used in the indexes hash. Because of this,
|
|
45
|
+
# you should not attempt to load from an untrusted file.
|
|
46
|
+
#
|
|
47
|
+
# Related module: Sequel::IndexCaching
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
module Sequel
|
|
51
|
+
module IndexCaching
|
|
52
|
+
# Set index cache to the empty hash.
|
|
53
|
+
def self.extended(db)
|
|
54
|
+
db.instance_variable_set(:@indexes, {})
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Dump the index cache to the filename given in Marshal format.
|
|
58
|
+
def dump_index_cache(file)
|
|
59
|
+
File.open(file, 'wb'){|f| f.write(Marshal.dump(@indexes))}
|
|
60
|
+
nil
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Dump the index cache to the filename given unless the file
|
|
64
|
+
# already exists.
|
|
65
|
+
def dump_index_cache?(file)
|
|
66
|
+
dump_index_cache(file) unless File.exist?(file)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Replace the index cache with the data from the given file, which
|
|
70
|
+
# should be in Marshal format.
|
|
71
|
+
def load_index_cache(file)
|
|
72
|
+
@indexes = Marshal.load(File.read(file))
|
|
73
|
+
nil
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Replace the index cache with the data from the given file if the
|
|
77
|
+
# file exists.
|
|
78
|
+
def load_index_cache?(file)
|
|
79
|
+
load_index_cache(file) if File.exist?(file)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# If no options are provided and there is cached index information for
|
|
83
|
+
# the table, return the cached information instead of querying the
|
|
84
|
+
# database.
|
|
85
|
+
def indexes(table, opts=OPTS)
|
|
86
|
+
return super unless opts.empty?
|
|
87
|
+
|
|
88
|
+
quoted_name = literal(table)
|
|
89
|
+
if v = Sequel.synchronize{@indexes[quoted_name]}
|
|
90
|
+
return v
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
result = super
|
|
94
|
+
Sequel.synchronize{@indexes[quoted_name] = result}
|
|
95
|
+
result
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
private
|
|
99
|
+
|
|
100
|
+
# Remove the index cache for the given schema name
|
|
101
|
+
def remove_cached_schema(table)
|
|
102
|
+
k = quote_schema_table(table)
|
|
103
|
+
Sequel.synchronize{@indexes.delete(k)}
|
|
104
|
+
super
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
Database.register_extension(:index_caching, IndexCaching)
|
|
109
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The inflector extension adds inflection instance methods to String, which allows the easy transformation of
|
|
2
4
|
# words from singular to plural, class names to table names, modularized class
|
|
3
5
|
# names to ones without, and class names to foreign keys. It exists for
|
|
@@ -6,6 +8,8 @@
|
|
|
6
8
|
# To load the extension:
|
|
7
9
|
#
|
|
8
10
|
# Sequel.extension :inflector
|
|
11
|
+
#
|
|
12
|
+
# Related module: String::Inflections
|
|
9
13
|
|
|
10
14
|
class String
|
|
11
15
|
# This module acts as a singleton returned/yielded by String.inflections,
|
|
@@ -91,8 +95,8 @@ class String
|
|
|
91
95
|
(@uncountables << words).flatten!
|
|
92
96
|
end
|
|
93
97
|
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
require_relative '../model/default_inflections'
|
|
99
|
+
instance_exec(&Sequel::DEFAULT_INFLECTIONS_PROC)
|
|
96
100
|
end
|
|
97
101
|
|
|
98
102
|
# Yield the Inflections module if a block is given, and return
|
|
@@ -147,7 +151,7 @@ class String
|
|
|
147
151
|
# Example
|
|
148
152
|
# "puni_puni".dasherize #=> "puni-puni"
|
|
149
153
|
def dasherize
|
|
150
|
-
gsub(
|
|
154
|
+
gsub('_', '-')
|
|
151
155
|
end
|
|
152
156
|
|
|
153
157
|
# Removes the module part from the expression in the string
|
|
@@ -177,7 +181,7 @@ class String
|
|
|
177
181
|
# "employee_salary" #=> "Employee salary"
|
|
178
182
|
# "author_id" #=> "Author"
|
|
179
183
|
def humanize
|
|
180
|
-
gsub(/_id$/, "").gsub(
|
|
184
|
+
gsub(/_id$/, "").gsub('_', " ").capitalize
|
|
181
185
|
end
|
|
182
186
|
|
|
183
187
|
# Returns the plural form of the word in the string.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The integer64 extension changes the default type used for Integer
|
|
4
|
+
# to be the same type as used for :Bignum. In general, this means that
|
|
5
|
+
# instead of Integer resulting in a 32-bit database integer type, it will
|
|
6
|
+
# result in a 64-bit database integer type. This affects the default
|
|
7
|
+
# type used for primary_key and foreign_key when using the schema
|
|
8
|
+
# modification methods.
|
|
9
|
+
#
|
|
10
|
+
# Note that it doesn't make sense to use this extension on SQLite, since
|
|
11
|
+
# the integer type will automatically handle 64-bit integers, and it treats
|
|
12
|
+
# the integer type specially when the column is also the primary key.
|
|
13
|
+
#
|
|
14
|
+
# To load the extension into the database:
|
|
15
|
+
#
|
|
16
|
+
# DB.extension :integer64
|
|
17
|
+
#
|
|
18
|
+
# Related module: Sequel::Integer64
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
module Sequel
|
|
22
|
+
module Integer64
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
# Use same type as used for :Bignum by default for generic integer value.
|
|
26
|
+
def type_literal_generic_integer(column)
|
|
27
|
+
type_literal_generic_bignum_symbol(column)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
Database.register_extension(:integer64, Integer64)
|
|
32
|
+
end
|
|
@@ -1,18 +1,24 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The LooserTypecasting extension loosens the default database typecasting
|
|
2
4
|
# for the following types:
|
|
3
5
|
#
|
|
4
6
|
# :float :: use to_f instead of Float()
|
|
5
7
|
# :integer :: use to_i instead of Integer()
|
|
6
|
-
# :decimal ::
|
|
8
|
+
# :decimal :: use 0.0 for unsupported strings
|
|
7
9
|
# :string :: silently allow hash and array conversion to string
|
|
8
10
|
#
|
|
9
11
|
# To load the extension into the database:
|
|
10
12
|
#
|
|
11
13
|
# DB.extension :looser_typecasting
|
|
14
|
+
#
|
|
15
|
+
# Related module: Sequel::LooserTypecasting
|
|
12
16
|
|
|
13
17
|
#
|
|
14
18
|
module Sequel
|
|
15
19
|
module LooserTypecasting
|
|
20
|
+
private
|
|
21
|
+
|
|
16
22
|
# Typecast the value to a Float using to_f instead of Kernel.Float
|
|
17
23
|
def typecast_value_float(value)
|
|
18
24
|
value.to_f
|
|
@@ -23,19 +29,23 @@ module Sequel
|
|
|
23
29
|
value.to_i
|
|
24
30
|
end
|
|
25
31
|
|
|
26
|
-
# Typecast the value to an
|
|
32
|
+
# Typecast the value to an String using to_s instead of Kernel.String
|
|
27
33
|
def typecast_value_string(value)
|
|
28
34
|
value.to_s
|
|
29
35
|
end
|
|
30
36
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
BigDecimal.
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
if RUBY_VERSION >= '2.4'
|
|
38
|
+
def _typecast_value_string_to_decimal(value)
|
|
39
|
+
BigDecimal(value)
|
|
40
|
+
rescue
|
|
41
|
+
BigDecimal('0.0')
|
|
42
|
+
end
|
|
43
|
+
else
|
|
44
|
+
# :nocov:
|
|
45
|
+
def _typecast_value_string_to_decimal(value)
|
|
46
|
+
BigDecimal(value)
|
|
38
47
|
end
|
|
48
|
+
# :nocov:
|
|
39
49
|
end
|
|
40
50
|
end
|
|
41
51
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# Adds the Sequel::Migration and Sequel::Migrator classes, which allow
|
|
2
4
|
# the user to easily group schema changes and migrate the database
|
|
3
5
|
# to a newer version or revert to a previous version.
|
|
@@ -5,6 +7,10 @@
|
|
|
5
7
|
# To load the extension:
|
|
6
8
|
#
|
|
7
9
|
# Sequel.extension :migration
|
|
10
|
+
#
|
|
11
|
+
# Related modules: Sequel::Migration, Sequel::SimpleMigration,
|
|
12
|
+
# Sequel::MigrationDSL, Sequel::MigrationReverser, Sequel::MigrationAlterTableReverser,
|
|
13
|
+
# Sequel::Migrator, Sequel::IntegerMigrator, Sequel::TimestampMigrator
|
|
8
14
|
|
|
9
15
|
#
|
|
10
16
|
module Sequel
|
|
@@ -35,7 +41,7 @@ module Sequel
|
|
|
35
41
|
# direction.
|
|
36
42
|
def self.apply(db, direction)
|
|
37
43
|
raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
|
|
38
|
-
new(db).
|
|
44
|
+
new(db).public_send(direction)
|
|
39
45
|
end
|
|
40
46
|
|
|
41
47
|
# Returns the list of Migration descendants.
|
|
@@ -59,8 +65,10 @@ module Sequel
|
|
|
59
65
|
|
|
60
66
|
# Intercepts method calls intended for the database and sends them along.
|
|
61
67
|
def method_missing(method_sym, *args, &block)
|
|
68
|
+
# Allow calling private methods for backwards compatibility
|
|
62
69
|
@db.send(method_sym, *args, &block)
|
|
63
70
|
end
|
|
71
|
+
ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
|
|
64
72
|
|
|
65
73
|
# This object responds to all methods the database responds to.
|
|
66
74
|
def respond_to_missing?(meth, include_private)
|
|
@@ -93,29 +101,29 @@ module Sequel
|
|
|
93
101
|
end
|
|
94
102
|
|
|
95
103
|
# Apply the appropriate block on the +Database+
|
|
96
|
-
# instance using
|
|
104
|
+
# instance using instance_exec.
|
|
97
105
|
def apply(db, direction)
|
|
98
106
|
raise(ArgumentError, "Invalid migration direction specified (#{direction.inspect})") unless [:up, :down].include?(direction)
|
|
99
|
-
if prok =
|
|
100
|
-
db.
|
|
107
|
+
if prok = public_send(direction)
|
|
108
|
+
db.instance_exec(&prok)
|
|
101
109
|
end
|
|
102
110
|
end
|
|
103
111
|
end
|
|
104
112
|
|
|
105
113
|
# Internal class used by the Sequel.migration DSL, part of the +migration+ extension.
|
|
106
114
|
class MigrationDSL < BasicObject
|
|
107
|
-
# The underlying
|
|
115
|
+
# The underlying SimpleMigration instance
|
|
108
116
|
attr_reader :migration
|
|
109
117
|
|
|
110
118
|
def self.create(&block)
|
|
111
119
|
new(&block).migration
|
|
112
120
|
end
|
|
113
121
|
|
|
114
|
-
# Create a new migration class, and
|
|
122
|
+
# Create a new migration class, and instance_exec the block.
|
|
115
123
|
def initialize(&block)
|
|
116
124
|
@migration = SimpleMigration.new
|
|
117
125
|
Migration.descendants << migration
|
|
118
|
-
|
|
126
|
+
instance_exec(&block)
|
|
119
127
|
end
|
|
120
128
|
|
|
121
129
|
# Defines the migration's down action.
|
|
@@ -144,7 +152,7 @@ module Sequel
|
|
|
144
152
|
# the block.
|
|
145
153
|
#
|
|
146
154
|
# There are no guarantees that this will work perfectly
|
|
147
|
-
# in all cases, but it
|
|
155
|
+
# in all cases, but it works for some simple cases.
|
|
148
156
|
def change(&block)
|
|
149
157
|
migration.up = block
|
|
150
158
|
migration.down = MigrationReverser.new.reverse(&block)
|
|
@@ -164,22 +172,19 @@ module Sequel
|
|
|
164
172
|
# the given block.
|
|
165
173
|
def reverse(&block)
|
|
166
174
|
begin
|
|
167
|
-
|
|
175
|
+
instance_exec(&block)
|
|
168
176
|
rescue
|
|
169
177
|
just_raise = true
|
|
170
178
|
end
|
|
171
179
|
if just_raise
|
|
172
|
-
Proc.new{raise Sequel::Error,
|
|
180
|
+
Proc.new{raise Sequel::Error, "irreversible migration method used in #{block.source_location.first}, you may need to write your own down method"}
|
|
173
181
|
else
|
|
174
182
|
actions = @actions.reverse
|
|
175
183
|
Proc.new do
|
|
176
184
|
actions.each do |a|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
else
|
|
181
|
-
send(*a)
|
|
182
|
-
end
|
|
185
|
+
pr = a.last.is_a?(Proc) ? a.pop : nil
|
|
186
|
+
# Allow calling private methods as the reversing methods are private
|
|
187
|
+
send(*a, &pr)
|
|
183
188
|
end
|
|
184
189
|
end
|
|
185
190
|
end
|
|
@@ -227,8 +232,9 @@ module Sequel
|
|
|
227
232
|
end
|
|
228
233
|
|
|
229
234
|
def reverse(&block)
|
|
230
|
-
|
|
235
|
+
instance_exec(&block)
|
|
231
236
|
actions = @actions.reverse
|
|
237
|
+
# Allow calling private methods as the reversing methods are private
|
|
232
238
|
Proc.new{actions.each{|a| send(*a)}}
|
|
233
239
|
end
|
|
234
240
|
|
|
@@ -239,7 +245,9 @@ module Sequel
|
|
|
239
245
|
end
|
|
240
246
|
|
|
241
247
|
def add_constraint(*args)
|
|
242
|
-
|
|
248
|
+
name = args.first
|
|
249
|
+
name = name.is_a?(Hash) ? name[:name] : name
|
|
250
|
+
@actions << [:drop_constraint, name]
|
|
243
251
|
end
|
|
244
252
|
|
|
245
253
|
def add_foreign_key(key, table, *args)
|
|
@@ -322,30 +330,32 @@ module Sequel
|
|
|
322
330
|
# schema_migrations for timestamped migrations). in the database to keep track
|
|
323
331
|
# of the current migration version. If no migration version is stored in the
|
|
324
332
|
# database, the version is considered to be 0. If no target version is
|
|
325
|
-
# specified, the
|
|
333
|
+
# specified, or the target version specified is greater than the latest
|
|
334
|
+
# version available, the database is migrated to the latest version available in the
|
|
326
335
|
# migration directory.
|
|
327
336
|
#
|
|
328
337
|
# For example, to migrate the database to the latest version:
|
|
329
338
|
#
|
|
330
|
-
# Sequel::Migrator.
|
|
339
|
+
# Sequel::Migrator.run(DB, '.')
|
|
331
340
|
#
|
|
332
341
|
# For example, to migrate the database all the way down:
|
|
333
342
|
#
|
|
334
|
-
# Sequel::Migrator.
|
|
343
|
+
# Sequel::Migrator.run(DB, '.', target: 0)
|
|
335
344
|
#
|
|
336
345
|
# For example, to migrate the database to version 4:
|
|
337
346
|
#
|
|
338
|
-
# Sequel::Migrator.
|
|
347
|
+
# Sequel::Migrator.run(DB, '.', target: 4)
|
|
339
348
|
#
|
|
340
349
|
# To migrate the database from version 1 to version 5:
|
|
341
350
|
#
|
|
342
|
-
# Sequel::Migrator.
|
|
351
|
+
# Sequel::Migrator.run(DB, '.', target: 5, current: 1)
|
|
343
352
|
#
|
|
344
353
|
# Part of the +migration+ extension.
|
|
345
354
|
class Migrator
|
|
346
355
|
MIGRATION_FILE_PATTERN = /\A(\d+)_.+\.rb\z/i.freeze
|
|
347
|
-
|
|
348
|
-
|
|
356
|
+
|
|
357
|
+
# Mutex used around migration file loading
|
|
358
|
+
MUTEX = Mutex.new
|
|
349
359
|
|
|
350
360
|
# Exception class raised when there is an error with the migrator's
|
|
351
361
|
# file structure, database, or arguments.
|
|
@@ -379,26 +389,29 @@ module Sequel
|
|
|
379
389
|
# :column :: The column in the :table argument storing the migration version (default: :version).
|
|
380
390
|
# :current :: The current version of the database. If not given, it is retrieved from the database
|
|
381
391
|
# using the :table and :column options.
|
|
382
|
-
# :
|
|
392
|
+
# :relative :: Run the given number of migrations, with a positive number being migrations to migrate
|
|
393
|
+
# up, and a negative number being migrations to migrate down (IntegerMigrator only).
|
|
394
|
+
# :table :: The table containing the schema version (default: :schema_info for integer migrations and
|
|
395
|
+
# :schema_migrations for timestamped migrations).
|
|
383
396
|
# :target :: The target version to which to migrate. If not given, migrates to the maximum version.
|
|
384
397
|
#
|
|
385
398
|
# Examples:
|
|
386
399
|
# Sequel::Migrator.run(DB, "migrations")
|
|
387
|
-
# Sequel::Migrator.run(DB, "migrations", :
|
|
388
|
-
# Sequel::Migrator.run(DB, "app1/migrations", :
|
|
389
|
-
# Sequel::Migrator.run(DB, "app2/migrations", :
|
|
400
|
+
# Sequel::Migrator.run(DB, "migrations", target: 15, current: 10)
|
|
401
|
+
# Sequel::Migrator.run(DB, "app1/migrations", column: :app2_version)
|
|
402
|
+
# Sequel::Migrator.run(DB, "app2/migrations", column: :app2_version, table: :schema_info2)
|
|
390
403
|
def self.run(db, directory, opts=OPTS)
|
|
391
404
|
migrator_class(directory).new(db, directory, opts).run
|
|
392
405
|
end
|
|
393
406
|
|
|
394
407
|
# Choose the Migrator subclass to use. Uses the TimestampMigrator
|
|
395
|
-
# if the version number
|
|
396
|
-
# after 2005, otherwise uses the IntegerMigrator.
|
|
408
|
+
# if the version number is greater than 20000101, otherwise uses the IntegerMigrator.
|
|
397
409
|
def self.migrator_class(directory)
|
|
398
410
|
if self.equal?(Migrator)
|
|
411
|
+
raise(Error, "Must supply a valid migration path") unless File.directory?(directory)
|
|
399
412
|
Dir.new(directory).each do |file|
|
|
400
413
|
next unless MIGRATION_FILE_PATTERN.match(file)
|
|
401
|
-
return TimestampMigrator if file.split(
|
|
414
|
+
return TimestampMigrator if file.split('_', 2).first.to_i > 20000101
|
|
402
415
|
end
|
|
403
416
|
IntegerMigrator
|
|
404
417
|
else
|
|
@@ -438,9 +451,9 @@ module Sequel
|
|
|
438
451
|
@directory = directory
|
|
439
452
|
@allow_missing_migration_files = opts[:allow_missing_migration_files]
|
|
440
453
|
@files = get_migration_files
|
|
441
|
-
schema, table = @db.send(:schema_and_table, opts[:table]
|
|
454
|
+
schema, table = @db.send(:schema_and_table, opts[:table] || default_schema_table)
|
|
442
455
|
@table = schema ? Sequel::SQL::QualifiedIdentifier.new(schema, table) : table
|
|
443
|
-
@column = opts[:column] ||
|
|
456
|
+
@column = opts[:column] || default_schema_column
|
|
444
457
|
@ds = schema_dataset
|
|
445
458
|
@use_transactions = opts[:use_transactions]
|
|
446
459
|
end
|
|
@@ -467,19 +480,24 @@ module Sequel
|
|
|
467
480
|
end
|
|
468
481
|
end
|
|
469
482
|
|
|
470
|
-
#
|
|
471
|
-
#
|
|
472
|
-
def
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
483
|
+
# Load the migration file, raising an exception if the file does not define
|
|
484
|
+
# a single migration.
|
|
485
|
+
def load_migration_file(file)
|
|
486
|
+
MUTEX.synchronize do
|
|
487
|
+
n = Migration.descendants.length
|
|
488
|
+
load(file)
|
|
489
|
+
raise Error, "Migration file #{file.inspect} not containing a single migration detected" unless n + 1 == Migration.descendants.length
|
|
490
|
+
c = Migration.descendants.pop
|
|
491
|
+
if c.is_a?(Class) && !c.name.to_s.empty? && Object.const_defined?(c.name)
|
|
492
|
+
Object.send(:remove_const, c.name)
|
|
493
|
+
end
|
|
494
|
+
c
|
|
476
495
|
end
|
|
477
|
-
Migration.descendants.clear # remove any defined migration classes
|
|
478
496
|
end
|
|
479
497
|
|
|
480
498
|
# Return the integer migration version based on the filename.
|
|
481
499
|
def migration_version_from_file(filename)
|
|
482
|
-
filename.split(
|
|
500
|
+
filename.split('_', 2).first.to_i
|
|
483
501
|
end
|
|
484
502
|
end
|
|
485
503
|
|
|
@@ -487,9 +505,6 @@ module Sequel
|
|
|
487
505
|
# version number starting with 1, where missing or duplicate migration file
|
|
488
506
|
# versions are not allowed. Part of the +migration+ extension.
|
|
489
507
|
class IntegerMigrator < Migrator
|
|
490
|
-
DEFAULT_SCHEMA_COLUMN = :version
|
|
491
|
-
DEFAULT_SCHEMA_TABLE = :schema_info
|
|
492
|
-
|
|
493
508
|
Error = Migrator::Error
|
|
494
509
|
|
|
495
510
|
# The current version for this migrator
|
|
@@ -504,13 +519,31 @@ module Sequel
|
|
|
504
519
|
# Set up all state for the migrator instance
|
|
505
520
|
def initialize(db, directory, opts=OPTS)
|
|
506
521
|
super
|
|
507
|
-
@target = opts[:target] || latest_migration_version
|
|
508
522
|
@current = opts[:current] || current_migration_version
|
|
509
523
|
|
|
510
|
-
|
|
511
|
-
|
|
524
|
+
latest_version = latest_migration_version
|
|
525
|
+
@target = if opts[:target]
|
|
526
|
+
opts[:target]
|
|
527
|
+
elsif opts[:relative]
|
|
528
|
+
@current + opts[:relative]
|
|
529
|
+
else
|
|
530
|
+
latest_version
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
raise(Error, "No target and/or latest version available, probably because no migration files found or filenames don't follow the migration filename convention") unless target && latest_version
|
|
534
|
+
|
|
535
|
+
if @target > latest_version
|
|
536
|
+
@target = latest_version
|
|
537
|
+
elsif @target < 0
|
|
538
|
+
@target = 0
|
|
539
|
+
end
|
|
512
540
|
|
|
513
541
|
@direction = current < target ? :up : :down
|
|
542
|
+
|
|
543
|
+
if @direction == :down && @current >= @files.length
|
|
544
|
+
raise Migrator::Error, "Missing migration version(s) needed to migrate down to target version (current: #{current}, target: #{target})"
|
|
545
|
+
end
|
|
546
|
+
|
|
514
547
|
@migrations = get_migrations
|
|
515
548
|
end
|
|
516
549
|
|
|
@@ -522,13 +555,13 @@ module Sequel
|
|
|
522
555
|
# Apply all migrations on the database
|
|
523
556
|
def run
|
|
524
557
|
migrations.zip(version_numbers).each do |m, v|
|
|
525
|
-
|
|
558
|
+
timer = Sequel.start_timer
|
|
526
559
|
db.log_info("Begin applying migration version #{v}, direction: #{direction}")
|
|
527
560
|
checked_transaction(m) do
|
|
528
561
|
m.apply(db, direction)
|
|
529
562
|
set_migration_version(up? ? v : v-1)
|
|
530
563
|
end
|
|
531
|
-
db.log_info("Finished applying migration version #{v}, direction: #{direction}, took #{sprintf('%0.6f',
|
|
564
|
+
db.log_info("Finished applying migration version #{v}, direction: #{direction}, took #{sprintf('%0.6f', Sequel.elapsed_seconds_since(timer))} seconds")
|
|
532
565
|
end
|
|
533
566
|
|
|
534
567
|
target
|
|
@@ -542,6 +575,16 @@ module Sequel
|
|
|
542
575
|
ds.get(column) || 0
|
|
543
576
|
end
|
|
544
577
|
|
|
578
|
+
# The default column storing schema version.
|
|
579
|
+
def default_schema_column
|
|
580
|
+
:version
|
|
581
|
+
end
|
|
582
|
+
|
|
583
|
+
# The default table storing schema version.
|
|
584
|
+
def default_schema_table
|
|
585
|
+
:schema_info
|
|
586
|
+
end
|
|
587
|
+
|
|
545
588
|
# Returns any found migration files in the supplied directory.
|
|
546
589
|
def get_migration_files
|
|
547
590
|
files = []
|
|
@@ -561,13 +604,7 @@ module Sequel
|
|
|
561
604
|
# Returns a list of migration classes filtered for the migration range and
|
|
562
605
|
# ordered according to the migration direction.
|
|
563
606
|
def get_migrations
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
# load migration files
|
|
567
|
-
version_numbers.each{|n| load(files[n])}
|
|
568
|
-
|
|
569
|
-
# get migration classes
|
|
570
|
-
Migration.descendants
|
|
607
|
+
version_numbers.map{|n| load_migration_file(files[n])}
|
|
571
608
|
end
|
|
572
609
|
|
|
573
610
|
# Returns the latest version available in the specified directory.
|
|
@@ -590,7 +627,7 @@ module Sequel
|
|
|
590
627
|
ds
|
|
591
628
|
end
|
|
592
629
|
|
|
593
|
-
# Sets the current migration
|
|
630
|
+
# Sets the current migration version stored in the database.
|
|
594
631
|
def set_migration_version(version)
|
|
595
632
|
ds.update(column=>version)
|
|
596
633
|
end
|
|
@@ -604,25 +641,24 @@ module Sequel
|
|
|
604
641
|
# so that each number in the array is the migration version
|
|
605
642
|
# that will be in affect after the migration is run.
|
|
606
643
|
def version_numbers
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
644
|
+
@version_numbers ||= begin
|
|
645
|
+
versions = files.
|
|
646
|
+
compact.
|
|
647
|
+
map{|f| migration_version_from_file(File.basename(f))}.
|
|
648
|
+
select{|v| up? ? (v > current && v <= target) : (v <= current && v > target)}.
|
|
649
|
+
sort
|
|
650
|
+
versions.reverse! unless up?
|
|
651
|
+
versions
|
|
652
|
+
end
|
|
614
653
|
end
|
|
615
654
|
end
|
|
616
655
|
|
|
617
|
-
# The migrator used if any migration file version
|
|
656
|
+
# The migrator used if any migration file version is greater than 20000101.
|
|
618
657
|
# Stores filenames of migration files, and can figure out which migrations
|
|
619
658
|
# have not been applied and apply them, even if earlier migrations are added
|
|
620
659
|
# after later migrations. If you plan to do that, the responsibility is on
|
|
621
660
|
# you to make sure the migrations don't conflict. Part of the +migration+ extension.
|
|
622
661
|
class TimestampMigrator < Migrator
|
|
623
|
-
DEFAULT_SCHEMA_COLUMN = :filename
|
|
624
|
-
DEFAULT_SCHEMA_TABLE = :schema_migrations
|
|
625
|
-
|
|
626
662
|
Error = Migrator::Error
|
|
627
663
|
|
|
628
664
|
# Array of strings of applied migration filenames
|
|
@@ -653,7 +689,7 @@ module Sequel
|
|
|
653
689
|
checked_transaction(m) do
|
|
654
690
|
m.apply(db, direction)
|
|
655
691
|
fi = f.downcase
|
|
656
|
-
direction == :up ? ds.insert(column=>fi) : ds.
|
|
692
|
+
direction == :up ? ds.insert(column=>fi) : ds.where(column=>fi).delete
|
|
657
693
|
end
|
|
658
694
|
db.log_info("Finished applying migration #{f}, direction: #{direction}, took #{sprintf('%0.6f', Time.now - t)} seconds")
|
|
659
695
|
end
|
|
@@ -665,7 +701,7 @@ module Sequel
|
|
|
665
701
|
# Convert the schema_info table to the new schema_migrations table format,
|
|
666
702
|
# using the version of the schema_info table and the current migration files.
|
|
667
703
|
def convert_from_schema_info
|
|
668
|
-
v = db[
|
|
704
|
+
v = db[:schema_info].get(:version)
|
|
669
705
|
ds = db.from(table)
|
|
670
706
|
files.each do |path|
|
|
671
707
|
f = File.basename(path)
|
|
@@ -675,6 +711,16 @@ module Sequel
|
|
|
675
711
|
end
|
|
676
712
|
end
|
|
677
713
|
|
|
714
|
+
# The default column storing migration filenames.
|
|
715
|
+
def default_schema_column
|
|
716
|
+
:filename
|
|
717
|
+
end
|
|
718
|
+
|
|
719
|
+
# The default table storing migration filenames.
|
|
720
|
+
def default_schema_table
|
|
721
|
+
:schema_migrations
|
|
722
|
+
end
|
|
723
|
+
|
|
678
724
|
# Returns filenames of all applied migrations
|
|
679
725
|
def get_applied_migrations
|
|
680
726
|
am = ds.select_order_map(column)
|
|
@@ -695,26 +741,21 @@ module Sequel
|
|
|
695
741
|
|
|
696
742
|
# Returns tuples of migration, filename, and direction
|
|
697
743
|
def get_migration_tuples
|
|
698
|
-
remove_migration_classes
|
|
699
744
|
up_mts = []
|
|
700
745
|
down_mts = []
|
|
701
|
-
ms = Migration.descendants
|
|
702
746
|
files.each do |path|
|
|
703
747
|
f = File.basename(path)
|
|
704
748
|
fi = f.downcase
|
|
705
749
|
if target
|
|
706
750
|
if migration_version_from_file(f) > target
|
|
707
751
|
if applied_migrations.include?(fi)
|
|
708
|
-
|
|
709
|
-
down_mts << [ms.last, f, :down]
|
|
752
|
+
down_mts << [load_migration_file(path), f, :down]
|
|
710
753
|
end
|
|
711
754
|
elsif !applied_migrations.include?(fi)
|
|
712
|
-
|
|
713
|
-
up_mts << [ms.last, f, :up]
|
|
755
|
+
up_mts << [load_migration_file(path), f, :up]
|
|
714
756
|
end
|
|
715
757
|
elsif !applied_migrations.include?(fi)
|
|
716
|
-
|
|
717
|
-
up_mts << [ms.last, f, :up]
|
|
758
|
+
up_mts << [load_migration_file(path), f, :up]
|
|
718
759
|
end
|
|
719
760
|
end
|
|
720
761
|
up_mts + down_mts.reverse
|
|
@@ -726,7 +767,18 @@ module Sequel
|
|
|
726
767
|
c = column
|
|
727
768
|
ds = db.from(table)
|
|
728
769
|
if !db.table_exists?(table)
|
|
729
|
-
|
|
770
|
+
begin
|
|
771
|
+
db.create_table(table){String c, :primary_key=>true}
|
|
772
|
+
rescue Sequel::DatabaseError => e
|
|
773
|
+
if db.database_type == :mysql && e.message =~ /max key length/
|
|
774
|
+
# Handle case where MySQL is used with utf8mb4 charset default, which
|
|
775
|
+
# only allows a maximum length of about 190 characters for string
|
|
776
|
+
# primary keys due to InnoDB limitations.
|
|
777
|
+
db.create_table(table){String c, :primary_key=>true, :size=>190}
|
|
778
|
+
else
|
|
779
|
+
raise e
|
|
780
|
+
end
|
|
781
|
+
end
|
|
730
782
|
if db.table_exists?(:schema_info) and vha = db[:schema_info].all and vha.length == 1 and
|
|
731
783
|
vha.first.keys == [:version] and vha.first.values.first.is_a?(Integer)
|
|
732
784
|
convert_from_schema_info
|