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,28 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The pg_timestamptz extension changes the default timestamp
|
|
4
|
+
# type for the database to be +timestamptz+ (+timestamp with time zone+)
|
|
5
|
+
# instead of +timestamp+ (+timestamp without time zone+). This is
|
|
6
|
+
# recommended if you are dealing with multiple timezones in your application.
|
|
7
|
+
#
|
|
8
|
+
# To load the extension into the database:
|
|
9
|
+
#
|
|
10
|
+
# DB.extension :pg_timestamptz
|
|
11
|
+
#
|
|
12
|
+
# Related module: Sequel::Postgres::Timestamptz
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
module Sequel
|
|
16
|
+
module Postgres
|
|
17
|
+
module Timestamptz
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
# Use timestamptz by default for generic timestamp value.
|
|
21
|
+
def type_literal_generic_datetime(column)
|
|
22
|
+
:timestamptz
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Database.register_extension(:pg_timestamptz, Postgres::Timestamptz)
|
|
28
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The pretty_table extension adds Sequel::Dataset#print and the
|
|
2
4
|
# Sequel::PrettyTable class for creating nice-looking plain-text
|
|
3
5
|
# tables. Example:
|
|
@@ -18,6 +20,8 @@
|
|
|
18
20
|
# is probably the desired behavior if you are using this extension:
|
|
19
21
|
#
|
|
20
22
|
# DB.extension(:pretty_table)
|
|
23
|
+
#
|
|
24
|
+
# Related module: Sequel::DatasetPrinter
|
|
21
25
|
|
|
22
26
|
#
|
|
23
27
|
module Sequel
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The query extension adds a query method which allows
|
|
2
4
|
# a different way to construct queries instead of the usual
|
|
3
5
|
# method chaining:
|
|
4
6
|
#
|
|
5
7
|
# dataset = DB[:items].query do
|
|
6
8
|
# select :x, :y, :z
|
|
7
|
-
#
|
|
9
|
+
# where{(x > 1) & (y > 2)}
|
|
8
10
|
# reverse :z
|
|
9
11
|
# end
|
|
10
12
|
#
|
|
@@ -17,6 +19,9 @@
|
|
|
17
19
|
# is probably the desired behavior if you are using this extension:
|
|
18
20
|
#
|
|
19
21
|
# DB.extension(:query)
|
|
22
|
+
#
|
|
23
|
+
# Related modules: Sequel::DatabaseQuery, Sequel::DatasetQuery,
|
|
24
|
+
# Sequel::Dataset::Query
|
|
20
25
|
|
|
21
26
|
#
|
|
22
27
|
module Sequel
|
|
@@ -32,24 +37,22 @@ module Sequel
|
|
|
32
37
|
end
|
|
33
38
|
|
|
34
39
|
module DatasetQuery
|
|
35
|
-
Dataset.def_mutation_method(:query, :module=>self)
|
|
36
|
-
|
|
37
40
|
# Translates a query block into a dataset. Query blocks are an
|
|
38
41
|
# alternative to Sequel's usual method chaining, by using
|
|
39
|
-
#
|
|
42
|
+
# instance_exec with a proxy object:
|
|
40
43
|
#
|
|
41
44
|
# dataset = DB[:items].query do
|
|
42
45
|
# select :x, :y, :z
|
|
43
|
-
#
|
|
46
|
+
# where{(x > 1) & (y > 2)}
|
|
44
47
|
# reverse :z
|
|
45
48
|
# end
|
|
46
49
|
#
|
|
47
50
|
# Which is the same as:
|
|
48
51
|
#
|
|
49
|
-
# dataset = DB[:items].select(:x, :y, :z).
|
|
52
|
+
# dataset = DB[:items].select(:x, :y, :z).where{(x > 1) & (y > 2)}.reverse(:z)
|
|
50
53
|
def query(&block)
|
|
51
54
|
query = Dataset::Query.new(self)
|
|
52
|
-
query.
|
|
55
|
+
query.instance_exec(&block)
|
|
53
56
|
query.dataset
|
|
54
57
|
end
|
|
55
58
|
end
|
|
@@ -66,10 +69,12 @@ module Sequel
|
|
|
66
69
|
|
|
67
70
|
# Replace the query's dataset with dataset returned by the method call.
|
|
68
71
|
def method_missing(method, *args, &block)
|
|
72
|
+
# Allow calling private methods, so things like raise works
|
|
69
73
|
@dataset = @dataset.send(method, *args, &block)
|
|
70
74
|
raise(Sequel::Error, "method #{method.inspect} did not return a dataset") unless @dataset.is_a?(Dataset)
|
|
71
75
|
self
|
|
72
76
|
end
|
|
77
|
+
ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
|
|
73
78
|
end
|
|
74
79
|
end
|
|
75
80
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The round_timestamps extension will automatically round timestamp
|
|
2
4
|
# values to the database's supported level of precision before literalizing
|
|
3
5
|
# them.
|
|
4
6
|
#
|
|
5
|
-
# For example, if the database supports
|
|
6
|
-
# it a Time value with
|
|
7
|
-
# appropriately:
|
|
7
|
+
# For example, if the database supports millisecond precision, and you give
|
|
8
|
+
# it a Time value with microsecond precision, it will round it appropriately:
|
|
8
9
|
#
|
|
9
10
|
# Time.at(1405341161.917999982833862)
|
|
10
11
|
# # default: 2014-07-14 14:32:41.917999
|
|
@@ -21,12 +22,8 @@
|
|
|
21
22
|
# To round timestamps for all datasets on a single database:
|
|
22
23
|
#
|
|
23
24
|
# DB.extension(:round_timestamps)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# :nocov:
|
|
27
|
-
raise LoadError, 'the round_timestamps extension only works on ruby 1.9+'
|
|
28
|
-
# :nocov:
|
|
29
|
-
end
|
|
25
|
+
#
|
|
26
|
+
# Related module: Sequel::Dataset::RoundTimestamps
|
|
30
27
|
|
|
31
28
|
module Sequel
|
|
32
29
|
class Dataset
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The run_transaction_hooks extension allows for running after_commit or
|
|
4
|
+
# after_rollback extensions before commit or rollback. It then removes
|
|
5
|
+
# the hook after running it, so it will not be run twice.
|
|
6
|
+
#
|
|
7
|
+
# This extension should only be used in transactional tests where the
|
|
8
|
+
# transaction always rolls back, to test the behavior of the after_commit
|
|
9
|
+
# and after_rollback hooks. Any other usage is probably a bad idea.
|
|
10
|
+
#
|
|
11
|
+
# Example:
|
|
12
|
+
#
|
|
13
|
+
# DB.extension :run_transaction_hooks
|
|
14
|
+
# x = 1
|
|
15
|
+
# DB.transaction(rollback: :always) do
|
|
16
|
+
# DB.after_rollback{x = 3}
|
|
17
|
+
# DB.after_commit{x = 2}
|
|
18
|
+
#
|
|
19
|
+
# x # => 1
|
|
20
|
+
# DB.run_after_rollback_hooks
|
|
21
|
+
# x # => 3
|
|
22
|
+
# DB.run_after_commit_hooks
|
|
23
|
+
# x # => 2
|
|
24
|
+
# end
|
|
25
|
+
# x # => 2
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
class Sequel::Database
|
|
29
|
+
module RunTransactionHooks
|
|
30
|
+
# Run all savepoint and transaction after_commit hooks for the current transaction,
|
|
31
|
+
# and remove the hooks after running them.
|
|
32
|
+
# Options:
|
|
33
|
+
# :server :: The server/shard to use.
|
|
34
|
+
def run_after_commit_hooks(opts=OPTS)
|
|
35
|
+
_run_transaction_hooks(:after_commit, opts)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Run all savepoint and transaction after_rollback hooks for the current transaction,
|
|
39
|
+
# and remove the hooks after running them.
|
|
40
|
+
# Options:
|
|
41
|
+
# :server :: The server/shard to use.
|
|
42
|
+
def run_after_rollback_hooks(opts=OPTS)
|
|
43
|
+
_run_transaction_hooks(:after_rollback, opts)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def _run_transaction_hooks(type, opts)
|
|
49
|
+
synchronize(opts[:server]) do |conn|
|
|
50
|
+
unless h = _trans(conn)
|
|
51
|
+
raise Sequel::Error, "Cannot call run_#{type}_hooks outside of a transaction"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
if hooks = h[type]
|
|
55
|
+
hooks.each(&:call)
|
|
56
|
+
hooks.clear
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
if (savepoints = h[:savepoints])
|
|
60
|
+
savepoints.each do |savepoint|
|
|
61
|
+
if hooks = savepoint[type]
|
|
62
|
+
hooks.each(&:call)
|
|
63
|
+
hooks.clear
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
register_extension(:run_transaction_hooks, RunTransactionHooks)
|
|
72
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
3
|
+
# The s extension adds Sequel::S, a module containing a private #S
|
|
4
|
+
# method that calls Sequel.expr. It's designed as a shortcut so
|
|
5
|
+
# that instead of:
|
|
6
|
+
#
|
|
7
|
+
# Sequel.expr(:column) + 1
|
|
8
|
+
# # or
|
|
9
|
+
# Sequel.expr{column + 1}
|
|
10
|
+
#
|
|
11
|
+
# you can just write:
|
|
12
|
+
#
|
|
13
|
+
# S(:column) + 1
|
|
14
|
+
# # or
|
|
15
|
+
# S{column + 1}
|
|
16
|
+
#
|
|
17
|
+
# To load the extension:
|
|
18
|
+
#
|
|
19
|
+
# Sequel.extension :s
|
|
20
|
+
#
|
|
21
|
+
# Then you can include the Sequel::S module into whatever classes or
|
|
22
|
+
# objects you care about:
|
|
23
|
+
#
|
|
24
|
+
# Sequel::Model.send(:include, Sequel::S) # available in model instance methods
|
|
25
|
+
# Sequel::Model.extend(Sequel::S) # available in model class methods
|
|
26
|
+
# Sequel::Dataset.send(:include, Sequel::S) # available in dataset methods
|
|
27
|
+
#
|
|
28
|
+
# or just into Object if you want it available everywhere:
|
|
29
|
+
#
|
|
30
|
+
# Object.send(:include, Sequel::S)
|
|
31
|
+
#
|
|
32
|
+
# If you are using Ruby 2+, and you would like to use refinements, you
|
|
33
|
+
# can use Sequel::S as a refinement, in which case the private #S method
|
|
34
|
+
# will be available on all objects while the refinement is active.
|
|
35
|
+
#
|
|
36
|
+
# using Sequel::S
|
|
37
|
+
#
|
|
38
|
+
# S(:column) + 1
|
|
39
|
+
#
|
|
40
|
+
# Related module: Sequel::S
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
module Sequel::S
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
# Delegate to Sequel.expr
|
|
48
|
+
def S(*a, &block)
|
|
49
|
+
Sequel.expr(*a, &block)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# :nocov:
|
|
53
|
+
if RUBY_VERSION >= '2.0.0'
|
|
54
|
+
# :nocov:
|
|
55
|
+
refine Object do
|
|
56
|
+
include Sequel::S
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The schema_caching extension adds a few methods to Sequel::Database
|
|
2
4
|
# that make it easy to dump the parsed schema information to a file,
|
|
3
5
|
# and load it from that file. Loading the schema information from a
|
|
@@ -41,13 +43,23 @@
|
|
|
41
43
|
# The cached schema is dumped in Marshal format, since it is the fastest
|
|
42
44
|
# and it handles all ruby objects used in the schema hash. Because of this,
|
|
43
45
|
# you should not attempt to load the schema from a untrusted file.
|
|
46
|
+
#
|
|
47
|
+
# Related module: Sequel::SchemaCaching
|
|
44
48
|
|
|
45
49
|
#
|
|
46
50
|
module Sequel
|
|
47
51
|
module SchemaCaching
|
|
48
52
|
# Dump the cached schema to the filename given in Marshal format.
|
|
49
53
|
def dump_schema_cache(file)
|
|
50
|
-
|
|
54
|
+
sch = {}
|
|
55
|
+
@schemas.each do |k,v|
|
|
56
|
+
sch[k] = v.map do |c, h|
|
|
57
|
+
h = Hash[h]
|
|
58
|
+
h.delete(:callable_default)
|
|
59
|
+
[c, h]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
File.open(file, 'wb'){|f| f.write(Marshal.dump(sch))}
|
|
51
63
|
nil
|
|
52
64
|
end
|
|
53
65
|
|
|
@@ -61,6 +73,7 @@ module Sequel
|
|
|
61
73
|
# should be in Marshal format.
|
|
62
74
|
def load_schema_cache(file)
|
|
63
75
|
@schemas = Marshal.load(File.read(file))
|
|
76
|
+
@schemas.each_value{|v| schema_post_process(v)}
|
|
64
77
|
nil
|
|
65
78
|
end
|
|
66
79
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
#
|
|
1
3
|
# The schema_dumper extension supports dumping tables and indexes
|
|
2
4
|
# in a Sequel::Migration format, so they can be restored on another
|
|
3
5
|
# database (which can be the same type or a different type than
|
|
@@ -7,6 +9,8 @@
|
|
|
7
9
|
# To load the extension:
|
|
8
10
|
#
|
|
9
11
|
# DB.extension :schema_dumper
|
|
12
|
+
#
|
|
13
|
+
# Related module: Sequel::SchemaDumper
|
|
10
14
|
|
|
11
15
|
Sequel.extension :eval_inspect
|
|
12
16
|
|
|
@@ -16,45 +20,49 @@ module Sequel
|
|
|
16
20
|
# be :type. The other options added should modify that type (e.g. :size). If a
|
|
17
21
|
# database type is not recognized, return it as a String type.
|
|
18
22
|
def column_schema_to_ruby_type(schema)
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
type = schema[:db_type].downcase
|
|
24
|
+
if database_type == :oracle
|
|
25
|
+
type = type.sub(/ not null\z/, '')
|
|
26
|
+
end
|
|
27
|
+
case type
|
|
28
|
+
when /\A(medium|small)?int(?:eger)?(?:\((\d+)\))?( unsigned)?\z/
|
|
21
29
|
if !$1 && $2 && $2.to_i >= 10 && $3
|
|
22
30
|
# Unsigned integer type with 10 digits can potentially contain values which
|
|
23
31
|
# don't fit signed integer type, so use bigint type in target database.
|
|
24
|
-
{:type
|
|
32
|
+
{:type=>:Bignum}
|
|
25
33
|
else
|
|
26
34
|
{:type=>Integer}
|
|
27
35
|
end
|
|
28
|
-
when /\Atinyint(?:\((\d+)\))?(?: unsigned)?\z/
|
|
36
|
+
when /\Atinyint(?:\((\d+)\))?(?: unsigned)?\z/
|
|
29
37
|
{:type =>schema[:type] == :boolean ? TrueClass : Integer}
|
|
30
|
-
when /\Abigint(?:\((?:\d+)\))?(?: unsigned)?\z/
|
|
31
|
-
{:type
|
|
32
|
-
when /\A(?:real|float|double(?: precision)?|double\(\d+,\d+\)(?: unsigned)
|
|
38
|
+
when /\Abigint(?:\((?:\d+)\))?(?: unsigned)?\z/
|
|
39
|
+
{:type=>:Bignum}
|
|
40
|
+
when /\A(?:real|float|double(?: precision)?|double\(\d+,\d+\))(?: unsigned)?\z/
|
|
33
41
|
{:type=>Float}
|
|
34
|
-
when 'boolean', 'bit'
|
|
42
|
+
when 'boolean', 'bit', 'bool'
|
|
35
43
|
{:type=>TrueClass}
|
|
36
|
-
when /\A(?:(?:tiny|medium|long|n)?text|clob)\z/
|
|
44
|
+
when /\A(?:(?:tiny|medium|long|n)?text|clob)\z/
|
|
37
45
|
{:type=>String, :text=>true}
|
|
38
46
|
when 'date'
|
|
39
47
|
{:type=>Date}
|
|
40
|
-
when /\A(?:small)?datetime\z/
|
|
48
|
+
when /\A(?:small)?datetime\z/
|
|
41
49
|
{:type=>DateTime}
|
|
42
|
-
when /\Atimestamp(?:\((\d+)\))?(?: with(?:out)? time zone)?\z/
|
|
50
|
+
when /\Atimestamp(?:\((\d+)\))?(?: with(?:out)? time zone)?\z/
|
|
43
51
|
{:type=>DateTime, :size=>($1.to_i if $1)}
|
|
44
|
-
when /\Atime(?: with(?:out)? time zone)?\z/
|
|
52
|
+
when /\Atime(?: with(?:out)? time zone)?\z/
|
|
45
53
|
{:type=>Time, :only_time=>true}
|
|
46
|
-
when /\An?char(?:acter)?(?:\((\d+)\))?\z/
|
|
54
|
+
when /\An?char(?:acter)?(?:\((\d+)\))?\z/
|
|
47
55
|
{:type=>String, :size=>($1.to_i if $1), :fixed=>true}
|
|
48
|
-
when /\A(?:n?
|
|
56
|
+
when /\A(?:n?varchar2?|character varying|bpchar|string)(?:\((\d+)\))?\z/
|
|
49
57
|
{:type=>String, :size=>($1.to_i if $1)}
|
|
50
|
-
when /\A(?:small)?money\z/
|
|
58
|
+
when /\A(?:small)?money\z/
|
|
51
59
|
{:type=>BigDecimal, :size=>[19,2]}
|
|
52
|
-
when /\A(?:decimal|numeric|number)(?:\((\d+)(?:,\s*(\d+))?\))?\z/
|
|
60
|
+
when /\A(?:decimal|numeric|number)(?:\((\d+)(?:,\s*(\d+))?\))?(?: unsigned)?\z/
|
|
53
61
|
s = [($1.to_i if $1), ($2.to_i if $2)].compact
|
|
54
62
|
{:type=>BigDecimal, :size=>(s.empty? ? nil : s)}
|
|
55
|
-
when /\A(?:bytea|(?:tiny|medium|long)?blob|(?:var)?binary)(?:\((\d+)\))?\z/
|
|
63
|
+
when /\A(?:bytea|(?:tiny|medium|long)?blob|(?:var)?binary)(?:\((\d+)\))?\z/
|
|
56
64
|
{:type=>File, :size=>($1.to_i if $1)}
|
|
57
|
-
when /\A(?:year|(?:int )?identity)\z/
|
|
65
|
+
when /\A(?:year|(?:int )?identity)\z/
|
|
58
66
|
{:type=>Integer}
|
|
59
67
|
else
|
|
60
68
|
{:type=>String}
|
|
@@ -62,7 +70,7 @@ module Sequel
|
|
|
62
70
|
end
|
|
63
71
|
|
|
64
72
|
# Dump foreign key constraints for all tables as a migration. This complements
|
|
65
|
-
# the :
|
|
73
|
+
# the foreign_keys: false option to dump_schema_migration. This only dumps
|
|
66
74
|
# the constraints (not the columns) using alter_table/add_foreign_key with an
|
|
67
75
|
# array of columns.
|
|
68
76
|
#
|
|
@@ -73,14 +81,14 @@ module Sequel
|
|
|
73
81
|
<<END_MIG
|
|
74
82
|
Sequel.migration do
|
|
75
83
|
change do
|
|
76
|
-
#{ts.
|
|
84
|
+
#{ts.sort.map{|t| dump_table_foreign_keys(t)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
|
|
77
85
|
end
|
|
78
86
|
end
|
|
79
87
|
END_MIG
|
|
80
88
|
end
|
|
81
89
|
|
|
82
90
|
# Dump indexes for all tables as a migration. This complements
|
|
83
|
-
# the :
|
|
91
|
+
# the indexes: false option to dump_schema_migration. Options:
|
|
84
92
|
# :same_db :: Create a dump for the same database type, so
|
|
85
93
|
# don't ignore errors if the index statements fail.
|
|
86
94
|
# :index_names :: If set to false, don't record names of indexes. If
|
|
@@ -91,13 +99,13 @@ END_MIG
|
|
|
91
99
|
<<END_MIG
|
|
92
100
|
Sequel.migration do
|
|
93
101
|
change do
|
|
94
|
-
#{ts.
|
|
102
|
+
#{ts.sort.map{|t| dump_table_indexes(t, :add_index, options)}.reject{|x| x == ''}.join("\n\n").gsub(/^/, ' ')}
|
|
95
103
|
end
|
|
96
104
|
end
|
|
97
105
|
END_MIG
|
|
98
106
|
end
|
|
99
107
|
|
|
100
|
-
# Return a string that contains a Sequel
|
|
108
|
+
# Return a string that contains a Sequel migration that when
|
|
101
109
|
# run would recreate the database structure. Options:
|
|
102
110
|
# :same_db :: Don't attempt to translate database types to ruby types.
|
|
103
111
|
# If this isn't set to true, all database types will be translated to
|
|
@@ -124,14 +132,14 @@ END_MIG
|
|
|
124
132
|
# Handle skipped foreign keys by adding them at the end via
|
|
125
133
|
# alter_table/add_foreign_key. Note that skipped foreign keys
|
|
126
134
|
# probably result in a broken down migration.
|
|
127
|
-
sfka = sfk.
|
|
128
|
-
sfka.join("\n\n").gsub(
|
|
135
|
+
sfka = sfk.sort.map{|table, fks| dump_add_fk_constraints(table, fks.values)}
|
|
136
|
+
sfka.join("\n\n").gsub(/^/, ' ') unless sfka.empty?
|
|
129
137
|
end
|
|
130
138
|
|
|
131
139
|
<<END_MIG
|
|
132
140
|
Sequel.migration do
|
|
133
141
|
change do
|
|
134
|
-
#{ts.map{|t| dump_table_schema(t, options)}.join("\n\n").gsub(
|
|
142
|
+
#{ts.map{|t| dump_table_schema(t, options)}.join("\n\n").gsub(/^/, ' ')}#{"\n \n" if skipped_fks}#{skipped_fks}
|
|
135
143
|
end
|
|
136
144
|
end
|
|
137
145
|
END_MIG
|
|
@@ -140,10 +148,9 @@ END_MIG
|
|
|
140
148
|
# Return a string with a create table block that will recreate the given
|
|
141
149
|
# table's schema. Takes the same options as dump_schema_migration.
|
|
142
150
|
def dump_table_schema(table, options=OPTS)
|
|
143
|
-
table = table.value.to_s if table.is_a?(SQL::Identifier)
|
|
144
151
|
gen = dump_table_generator(table, options)
|
|
145
152
|
commands = [gen.dump_columns, gen.dump_constraints, gen.dump_indexes].reject{|x| x == ''}.join("\n\n")
|
|
146
|
-
"create_table(#{table.inspect}#{', :ignore_index_errors=>true' if !options[:same_db] && options[:indexes] != false && !gen.indexes.empty?}) do\n#{commands.gsub(
|
|
153
|
+
"create_table(#{table.inspect}#{', :ignore_index_errors=>true' if !options[:same_db] && options[:indexes] != false && !gen.indexes.empty?}) do\n#{commands.gsub(/^/, ' ')}\nend"
|
|
147
154
|
end
|
|
148
155
|
|
|
149
156
|
private
|
|
@@ -160,12 +167,22 @@ END_MIG
|
|
|
160
167
|
end
|
|
161
168
|
end
|
|
162
169
|
|
|
163
|
-
# Recreate the column in the passed Schema::
|
|
170
|
+
# Recreate the column in the passed Schema::CreateTableGenerator from the given name and parsed database schema.
|
|
164
171
|
def recreate_column(name, schema, gen, options)
|
|
165
172
|
if options[:single_pk] && schema_autoincrementing_primary_key?(schema)
|
|
166
173
|
type_hash = options[:same_db] ? {:type=>schema[:db_type]} : column_schema_to_ruby_type(schema)
|
|
167
174
|
[:table, :key, :on_delete, :on_update, :deferrable].each{|f| type_hash[f] = schema[f] if schema[f]}
|
|
168
175
|
if type_hash == {:type=>Integer} || type_hash == {:type=>"integer"}
|
|
176
|
+
type_hash.delete(:type)
|
|
177
|
+
elsif options[:same_db] && type_hash == {:type=>type_literal_generic_bignum_symbol(type_hash).to_s}
|
|
178
|
+
type_hash[:type] = :Bignum
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
unless gen.columns.empty?
|
|
182
|
+
type_hash[:keep_order] = true
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
if type_hash.empty?
|
|
169
186
|
gen.primary_key(name)
|
|
170
187
|
else
|
|
171
188
|
gen.primary_key(name, type_hash)
|
|
@@ -182,12 +199,18 @@ END_MIG
|
|
|
182
199
|
end
|
|
183
200
|
type = col_opts.delete(:type)
|
|
184
201
|
col_opts.delete(:size) if col_opts[:size].nil?
|
|
185
|
-
|
|
186
|
-
|
|
202
|
+
if schema[:generated]
|
|
203
|
+
if options[:same_db] && database_type == :postgres
|
|
204
|
+
col_opts[:generated_always_as] = column_schema_to_ruby_default_fallback(schema[:default], options)
|
|
205
|
+
end
|
|
187
206
|
else
|
|
188
|
-
schema[:ruby_default]
|
|
207
|
+
col_opts[:default] = if schema[:ruby_default].nil?
|
|
208
|
+
column_schema_to_ruby_default_fallback(schema[:default], options)
|
|
209
|
+
else
|
|
210
|
+
schema[:ruby_default]
|
|
211
|
+
end
|
|
212
|
+
col_opts.delete(:default) if col_opts[:default].nil?
|
|
189
213
|
end
|
|
190
|
-
col_opts.delete(:default) if col_opts[:default].nil?
|
|
191
214
|
col_opts[:null] = false if schema[:allow_null] == false
|
|
192
215
|
if table = schema[:table]
|
|
193
216
|
[:key, :on_delete, :on_update, :deferrable].each{|f| col_opts[f] = schema[f] if schema[f]}
|
|
@@ -195,7 +218,7 @@ END_MIG
|
|
|
195
218
|
gen.foreign_key(name, table, col_opts)
|
|
196
219
|
else
|
|
197
220
|
gen.column(name, type, col_opts)
|
|
198
|
-
if [Integer, Bignum, Float].include?(type) && schema[:db_type] =~ / unsigned\z/io
|
|
221
|
+
if [Integer, :Bignum, Float, BigDecimal].include?(type) && schema[:db_type] =~ / unsigned\z/io
|
|
199
222
|
gen.check(Sequel::SQL::Identifier.new(name) >= 0)
|
|
200
223
|
end
|
|
201
224
|
end
|
|
@@ -205,9 +228,10 @@ END_MIG
|
|
|
205
228
|
# For the table and foreign key metadata array, return an alter_table
|
|
206
229
|
# string that would add the foreign keys if run in a migration.
|
|
207
230
|
def dump_add_fk_constraints(table, fks)
|
|
208
|
-
sfks =
|
|
231
|
+
sfks = String.new
|
|
232
|
+
sfks << "alter_table(#{table.inspect}) do\n"
|
|
209
233
|
sfks << create_table_generator do
|
|
210
|
-
fks.sort_by{|fk| fk[:columns]
|
|
234
|
+
fks.sort_by{|fk| fk[:columns]}.each do |fk|
|
|
211
235
|
foreign_key fk[:columns], fk
|
|
212
236
|
end
|
|
213
237
|
end.dump_constraints.gsub(/^foreign_key /, ' add_foreign_key ')
|
|
@@ -218,7 +242,7 @@ END_MIG
|
|
|
218
242
|
# string that would add the foreign keys if run in a migration.
|
|
219
243
|
def dump_table_foreign_keys(table, options=OPTS)
|
|
220
244
|
if supports_foreign_key_parsing?
|
|
221
|
-
fks = foreign_key_list(table, options).sort_by{|fk| fk[:columns]
|
|
245
|
+
fks = foreign_key_list(table, options).sort_by{|fk| fk[:columns]}
|
|
222
246
|
end
|
|
223
247
|
|
|
224
248
|
if fks.nil? || fks.empty?
|
|
@@ -228,19 +252,17 @@ END_MIG
|
|
|
228
252
|
end
|
|
229
253
|
end
|
|
230
254
|
|
|
231
|
-
# Return a Schema::
|
|
255
|
+
# Return a Schema::CreateTableGenerator object that will recreate the
|
|
232
256
|
# table's schema. Takes the same options as dump_schema_migration.
|
|
233
257
|
def dump_table_generator(table, options=OPTS)
|
|
234
|
-
|
|
235
|
-
raise(Error, "must provide table as a Symbol, String, or Sequel::SQL::Identifier") unless [String, Symbol].any?{|c| table.is_a?(c)}
|
|
236
|
-
s = schema(table).dup
|
|
258
|
+
s = schema(table, options).dup
|
|
237
259
|
pks = s.find_all{|x| x.last[:primary_key] == true}.map(&:first)
|
|
238
260
|
options = options.merge(:single_pk=>true) if pks.length == 1
|
|
239
261
|
m = method(:recreate_column)
|
|
240
262
|
im = method(:index_to_generator_opts)
|
|
241
263
|
|
|
242
264
|
if options[:indexes] != false && supports_index_parsing?
|
|
243
|
-
indexes = indexes(table).
|
|
265
|
+
indexes = indexes(table).sort
|
|
244
266
|
end
|
|
245
267
|
|
|
246
268
|
if options[:foreign_keys] != false && supports_foreign_key_parsing?
|
|
@@ -280,7 +302,7 @@ END_MIG
|
|
|
280
302
|
# creating the index migration.
|
|
281
303
|
def dump_table_indexes(table, meth, options=OPTS)
|
|
282
304
|
if supports_index_parsing?
|
|
283
|
-
indexes = indexes(table).
|
|
305
|
+
indexes = indexes(table).sort
|
|
284
306
|
else
|
|
285
307
|
return ''
|
|
286
308
|
end
|
|
@@ -292,7 +314,7 @@ END_MIG
|
|
|
292
314
|
gen.dump_indexes(meth=>table, :ignore_errors=>!options[:same_db])
|
|
293
315
|
end
|
|
294
316
|
|
|
295
|
-
# Convert the parsed index information into options to the
|
|
317
|
+
# Convert the parsed index information into options to the CreateTableGenerator's index method.
|
|
296
318
|
def index_to_generator_opts(table, name, index_opts, options=OPTS)
|
|
297
319
|
h = {}
|
|
298
320
|
if options[:index_names] != false && default_index_name(table, index_opts[:columns]) != name.to_s
|
|
@@ -319,7 +341,7 @@ END_MIG
|
|
|
319
341
|
options[:skipped_foreign_keys] = skipped_foreign_keys
|
|
320
342
|
tables
|
|
321
343
|
else
|
|
322
|
-
tables.
|
|
344
|
+
tables.sort
|
|
323
345
|
end
|
|
324
346
|
end
|
|
325
347
|
|
|
@@ -344,14 +366,14 @@ END_MIG
|
|
|
344
366
|
# outstanding foreign keys and skipping those foreign keys.
|
|
345
367
|
# The skipped foreign keys will be added at the end of the
|
|
346
368
|
# migration.
|
|
347
|
-
skip_table, skip_fks = table_fks.sort_by{|table, fks| [fks.length, table
|
|
369
|
+
skip_table, skip_fks = table_fks.sort_by{|table, fks| [fks.length, table]}.first
|
|
348
370
|
skip_fks_hash = skipped_foreign_keys[skip_table] = {}
|
|
349
371
|
skip_fks.each{|fk| skip_fks_hash[fk[:columns]] = fk}
|
|
350
372
|
this_loop << skip_table
|
|
351
373
|
end
|
|
352
374
|
|
|
353
375
|
# Add sorted tables from this loop to the final list
|
|
354
|
-
sorted_tables.concat(this_loop.
|
|
376
|
+
sorted_tables.concat(this_loop.sort)
|
|
355
377
|
|
|
356
378
|
# Remove tables that were handled this loop
|
|
357
379
|
this_loop.each{|t| table_fks.delete(t)}
|
|
@@ -368,7 +390,7 @@ END_MIG
|
|
|
368
390
|
end
|
|
369
391
|
|
|
370
392
|
module Schema
|
|
371
|
-
class
|
|
393
|
+
class CreateTableGenerator
|
|
372
394
|
# Dump this generator's columns to a string that could be evaled inside
|
|
373
395
|
# another instance to represent the same columns
|
|
374
396
|
def dump_columns
|
|
@@ -378,7 +400,7 @@ END_MIG
|
|
|
378
400
|
x.delete(:on_delete) if x[:on_delete] == :no_action
|
|
379
401
|
x.delete(:on_update) if x[:on_update] == :no_action
|
|
380
402
|
end
|
|
381
|
-
if pkn = primary_key_name
|
|
403
|
+
if (pkn = primary_key_name) && !@primary_key[:keep_order]
|
|
382
404
|
cols.delete_if{|x| x[:name] == pkn}
|
|
383
405
|
pk = @primary_key.dup
|
|
384
406
|
pkname = pk.delete(:name)
|
|
@@ -391,11 +413,17 @@ END_MIG
|
|
|
391
413
|
strings << if table = c.delete(:table)
|
|
392
414
|
c.delete(:type) if c[:type] == Integer || c[:type] == 'integer'
|
|
393
415
|
"foreign_key #{name.inspect}, #{table.inspect}#{opts_inspect(c)}"
|
|
416
|
+
elsif pkn == name
|
|
417
|
+
@db.serial_primary_key_options.each{|k,v| c.delete(k) if v == c[k]}
|
|
418
|
+
"primary_key #{name.inspect}#{opts_inspect(c)}"
|
|
394
419
|
else
|
|
395
420
|
type = c.delete(:type)
|
|
396
421
|
opts = opts_inspect(c)
|
|
397
|
-
|
|
422
|
+
case type
|
|
423
|
+
when Class
|
|
398
424
|
"#{type.name} #{name.inspect}#{opts}"
|
|
425
|
+
when :Bignum
|
|
426
|
+
"Bignum #{name.inspect}#{opts}"
|
|
399
427
|
else
|
|
400
428
|
"column #{name.inspect}, #{type.inspect}#{opts}"
|
|
401
429
|
end
|
|
@@ -436,11 +464,11 @@ END_MIG
|
|
|
436
464
|
|
|
437
465
|
# Dump this generator's indexes to a string that could be evaled inside
|
|
438
466
|
# another instance to represent the same indexes. Options:
|
|
439
|
-
#
|
|
440
|
-
#
|
|
441
|
-
#
|
|
442
|
-
#
|
|
443
|
-
#
|
|
467
|
+
# :add_index :: Use add_index instead of index, so the methods
|
|
468
|
+
# can be called outside of a generator but inside a migration.
|
|
469
|
+
# The value of this option should be the table name to use.
|
|
470
|
+
# :drop_index :: Same as add_index, but create drop_index statements.
|
|
471
|
+
# :ignore_errors :: Add the ignore_errors option to the outputted indexes
|
|
444
472
|
def dump_indexes(options=OPTS)
|
|
445
473
|
is = indexes.map do |c|
|
|
446
474
|
c = c.dup
|