sequel 4.49.0 → 5.3.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 +4 -4
- data/CHANGELOG +130 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +6 -9
- data/doc/advanced_associations.rdoc +91 -168
- data/doc/association_basics.rdoc +197 -274
- data/doc/bin_sequel.rdoc +5 -3
- data/doc/cheat_sheet.rdoc +66 -43
- data/doc/code_order.rdoc +1 -8
- data/doc/core_extensions.rdoc +81 -56
- data/doc/dataset_basics.rdoc +8 -17
- data/doc/dataset_filtering.rdoc +81 -86
- data/doc/extensions.rdoc +3 -10
- data/doc/mass_assignment.rdoc +73 -30
- data/doc/migration.rdoc +19 -36
- data/doc/model_dataset_method_design.rdoc +14 -17
- data/doc/model_hooks.rdoc +15 -25
- data/doc/model_plugins.rdoc +10 -10
- data/doc/mssql_stored_procedures.rdoc +3 -3
- data/doc/object_model.rdoc +52 -70
- data/doc/opening_databases.rdoc +39 -32
- data/doc/postgresql.rdoc +48 -38
- data/doc/prepared_statements.rdoc +27 -22
- data/doc/querying.rdoc +173 -150
- 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.2.0.txt +33 -0
- data/doc/release_notes/5.3.0.txt +121 -0
- data/doc/schema_modification.rdoc +78 -64
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +4 -5
- data/doc/thread_safety.rdoc +2 -4
- data/doc/transactions.rdoc +18 -17
- data/doc/validations.rdoc +48 -45
- data/doc/virtual_rows.rdoc +87 -115
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc/db2.rb +8 -37
- data/lib/sequel/adapters/jdbc/derby.rb +4 -50
- data/lib/sequel/adapters/jdbc/h2.rb +6 -26
- data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
- data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
- data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
- data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
- data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
- data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
- data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
- data/lib/sequel/adapters/jdbc.rb +18 -74
- data/lib/sequel/adapters/mock.rb +4 -30
- data/lib/sequel/adapters/mysql.rb +7 -44
- data/lib/sequel/adapters/mysql2.rb +5 -23
- data/lib/sequel/adapters/odbc/db2.rb +1 -1
- data/lib/sequel/adapters/odbc/mssql.rb +4 -12
- data/lib/sequel/adapters/odbc/oracle.rb +1 -1
- data/lib/sequel/adapters/odbc.rb +0 -19
- data/lib/sequel/adapters/oracle.rb +8 -13
- data/lib/sequel/adapters/postgres.rb +28 -150
- data/lib/sequel/adapters/postgresql.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +11 -51
- data/lib/sequel/adapters/shared/db2.rb +3 -61
- data/lib/sequel/adapters/shared/mssql.rb +21 -157
- data/lib/sequel/adapters/shared/mysql.rb +61 -227
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +58 -264
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +22 -101
- data/lib/sequel/adapters/sqlanywhere.rb +4 -23
- data/lib/sequel/adapters/sqlite.rb +2 -19
- data/lib/sequel/adapters/tinytds.rb +5 -15
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
- data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
- data/lib/sequel/adapters/utils/replace.rb +0 -5
- data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
- data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
- data/lib/sequel/ast_transformer.rb +3 -94
- data/lib/sequel/connection_pool/sharded_single.rb +1 -4
- data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
- data/lib/sequel/connection_pool/single.rb +0 -2
- data/lib/sequel/connection_pool/threaded.rb +94 -110
- data/lib/sequel/connection_pool.rb +38 -28
- data/lib/sequel/core.rb +42 -101
- data/lib/sequel/database/connecting.rb +23 -60
- data/lib/sequel/database/dataset.rb +6 -9
- data/lib/sequel/database/dataset_defaults.rb +4 -48
- data/lib/sequel/database/features.rb +5 -4
- data/lib/sequel/database/logging.rb +2 -9
- data/lib/sequel/database/misc.rb +36 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +93 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/database.rb +12 -2
- data/lib/sequel/dataset/actions.rb +57 -107
- data/lib/sequel/dataset/dataset_module.rb +4 -16
- data/lib/sequel/dataset/features.rb +35 -30
- data/lib/sequel/dataset/graph.rb +40 -49
- data/lib/sequel/dataset/misc.rb +12 -37
- data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
- data/lib/sequel/dataset/prepared_statements.rb +23 -51
- data/lib/sequel/dataset/query.rb +91 -161
- data/lib/sequel/dataset/sql.rb +33 -225
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/deprecated.rb +18 -27
- data/lib/sequel/exceptions.rb +1 -17
- data/lib/sequel/extensions/_model_pg_row.rb +0 -7
- data/lib/sequel/extensions/_pretty_table.rb +1 -3
- data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
- data/lib/sequel/extensions/connection_expiration.rb +1 -1
- data/lib/sequel/extensions/connection_validator.rb +1 -1
- data/lib/sequel/extensions/constraint_validations.rb +11 -11
- data/lib/sequel/extensions/core_extensions.rb +39 -49
- data/lib/sequel/extensions/core_refinements.rb +39 -45
- data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
- data/lib/sequel/extensions/date_arithmetic.rb +7 -7
- data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
- data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
- data/lib/sequel/extensions/eval_inspect.rb +4 -11
- data/lib/sequel/extensions/freeze_datasets.rb +1 -69
- data/lib/sequel/extensions/from_block.rb +1 -35
- data/lib/sequel/extensions/graph_each.rb +2 -2
- data/lib/sequel/extensions/identifier_mangling.rb +9 -19
- data/lib/sequel/extensions/implicit_subquery.rb +2 -2
- data/lib/sequel/extensions/inflector.rb +4 -4
- data/lib/sequel/extensions/migration.rb +27 -43
- data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
- data/lib/sequel/extensions/null_dataset.rb +2 -8
- data/lib/sequel/extensions/pagination.rb +1 -17
- data/lib/sequel/extensions/pg_array.rb +20 -189
- data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
- data/lib/sequel/extensions/pg_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +3 -16
- data/lib/sequel/extensions/pg_interval.rb +1 -20
- data/lib/sequel/extensions/pg_json.rb +7 -27
- data/lib/sequel/extensions/pg_loose_count.rb +1 -1
- data/lib/sequel/extensions/pg_range.rb +6 -121
- data/lib/sequel/extensions/pg_range_ops.rb +1 -3
- data/lib/sequel/extensions/pg_row.rb +5 -77
- data/lib/sequel/extensions/pg_row_ops.rb +2 -13
- data/lib/sequel/extensions/query.rb +3 -4
- data/lib/sequel/extensions/round_timestamps.rb +0 -6
- data/lib/sequel/extensions/schema_dumper.rb +13 -13
- data/lib/sequel/extensions/select_remove.rb +3 -3
- data/lib/sequel/extensions/split_array_nil.rb +2 -2
- data/lib/sequel/extensions/sql_comments.rb +2 -2
- data/lib/sequel/extensions/string_agg.rb +11 -8
- data/lib/sequel/extensions/symbol_aref.rb +6 -20
- data/lib/sequel/extensions/synchronize_sql.rb +45 -0
- data/lib/sequel/model/associations.rb +129 -131
- data/lib/sequel/model/base.rb +133 -731
- data/lib/sequel/model/default_inflections.rb +1 -1
- data/lib/sequel/model/errors.rb +0 -3
- data/lib/sequel/model/exceptions.rb +2 -6
- data/lib/sequel/model/inflections.rb +1 -26
- data/lib/sequel/model/plugins.rb +1 -0
- data/lib/sequel/model.rb +27 -62
- data/lib/sequel/plugins/active_model.rb +2 -5
- data/lib/sequel/plugins/association_dependencies.rb +15 -15
- data/lib/sequel/plugins/association_pks.rb +14 -28
- data/lib/sequel/plugins/association_proxies.rb +6 -7
- data/lib/sequel/plugins/auto_validations.rb +4 -4
- data/lib/sequel/plugins/before_after_save.rb +0 -43
- data/lib/sequel/plugins/blacklist_security.rb +9 -8
- data/lib/sequel/plugins/boolean_readers.rb +3 -3
- data/lib/sequel/plugins/boolean_subsets.rb +2 -2
- data/lib/sequel/plugins/caching.rb +5 -5
- data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
- data/lib/sequel/plugins/column_conflicts.rb +2 -2
- data/lib/sequel/plugins/column_select.rb +2 -2
- data/lib/sequel/plugins/composition.rb +15 -24
- data/lib/sequel/plugins/constraint_validations.rb +4 -3
- data/lib/sequel/plugins/csv_serializer.rb +13 -20
- data/lib/sequel/plugins/dataset_associations.rb +2 -2
- data/lib/sequel/plugins/def_dataset_method.rb +5 -5
- data/lib/sequel/plugins/defaults_setter.rb +1 -1
- data/lib/sequel/plugins/delay_add_association.rb +1 -1
- data/lib/sequel/plugins/finder.rb +16 -10
- data/lib/sequel/plugins/force_encoding.rb +1 -7
- data/lib/sequel/plugins/hook_class_methods.rb +4 -106
- data/lib/sequel/plugins/input_transformer.rb +10 -11
- data/lib/sequel/plugins/insert_returning_select.rb +1 -9
- data/lib/sequel/plugins/instance_filters.rb +5 -5
- data/lib/sequel/plugins/instance_hooks.rb +7 -52
- data/lib/sequel/plugins/inverted_subsets.rb +3 -1
- data/lib/sequel/plugins/json_serializer.rb +19 -19
- data/lib/sequel/plugins/lazy_attributes.rb +1 -10
- data/lib/sequel/plugins/list.rb +6 -6
- data/lib/sequel/plugins/many_through_many.rb +11 -8
- data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/nested_attributes.rb +18 -31
- data/lib/sequel/plugins/optimistic_locking.rb +3 -3
- data/lib/sequel/plugins/pg_array_associations.rb +8 -2
- data/lib/sequel/plugins/pg_row.rb +2 -11
- data/lib/sequel/plugins/prepared_statements.rb +13 -66
- data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +7 -7
- data/lib/sequel/plugins/serialization.rb +15 -33
- data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
- data/lib/sequel/plugins/sharding.rb +2 -8
- data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
- data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
- data/lib/sequel/plugins/static_cache.rb +8 -9
- data/lib/sequel/plugins/string_stripper.rb +3 -3
- data/lib/sequel/plugins/subclasses.rb +1 -1
- data/lib/sequel/plugins/subset_conditions.rb +2 -2
- data/lib/sequel/plugins/table_select.rb +2 -2
- data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
- data/lib/sequel/plugins/timestamps.rb +6 -7
- data/lib/sequel/plugins/touch.rb +4 -8
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/typecast_on_load.rb +2 -2
- data/lib/sequel/plugins/unlimited_update.rb +1 -7
- data/lib/sequel/plugins/update_or_create.rb +3 -3
- data/lib/sequel/plugins/update_refresh.rb +3 -3
- data/lib/sequel/plugins/uuid.rb +7 -11
- data/lib/sequel/plugins/validation_class_methods.rb +10 -9
- data/lib/sequel/plugins/validation_contexts.rb +4 -4
- data/lib/sequel/plugins/validation_helpers.rb +26 -25
- data/lib/sequel/plugins/whitelist_security.rb +13 -9
- data/lib/sequel/plugins/xml_serializer.rb +24 -25
- data/lib/sequel/sql.rb +145 -276
- data/lib/sequel/timezones.rb +8 -23
- data/lib/sequel/version.rb +2 -2
- data/lib/sequel.rb +1 -1
- data/spec/adapter_spec.rb +1 -1
- data/spec/adapters/db2_spec.rb +2 -103
- data/spec/adapters/mssql_spec.rb +89 -68
- data/spec/adapters/mysql_spec.rb +111 -478
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +459 -664
- data/spec/adapters/spec_helper.rb +12 -31
- data/spec/adapters/sqlanywhere_spec.rb +2 -77
- data/spec/adapters/sqlite_spec.rb +8 -146
- data/spec/bin_spec.rb +11 -16
- data/spec/core/connection_pool_spec.rb +173 -74
- data/spec/core/database_spec.rb +96 -244
- data/spec/core/dataset_spec.rb +99 -414
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +241 -4
- data/spec/core/object_graph_spec.rb +11 -60
- data/spec/core/placeholder_literalizer_spec.rb +1 -14
- data/spec/core/schema_generator_spec.rb +51 -40
- data/spec/core/schema_spec.rb +88 -77
- data/spec/core/spec_helper.rb +6 -24
- data/spec/core/version_spec.rb +1 -1
- data/spec/core_extensions_spec.rb +7 -83
- data/spec/core_model_spec.rb +2 -2
- data/spec/deprecation_helper.rb +2 -14
- data/spec/extensions/accessed_columns_spec.rb +1 -1
- data/spec/extensions/active_model_spec.rb +3 -3
- data/spec/extensions/after_initialize_spec.rb +1 -1
- data/spec/extensions/arbitrary_servers_spec.rb +2 -2
- data/spec/extensions/association_dependencies_spec.rb +1 -1
- data/spec/extensions/association_pks_spec.rb +30 -92
- data/spec/extensions/association_proxies_spec.rb +1 -1
- data/spec/extensions/auto_literal_strings_spec.rb +1 -12
- data/spec/extensions/auto_validations_spec.rb +1 -1
- data/spec/extensions/blacklist_security_spec.rb +1 -1
- data/spec/extensions/blank_spec.rb +1 -1
- data/spec/extensions/boolean_readers_spec.rb +1 -1
- data/spec/extensions/boolean_subsets_spec.rb +1 -1
- data/spec/extensions/caching_spec.rb +1 -1
- data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
- data/spec/extensions/column_conflicts_spec.rb +1 -1
- data/spec/extensions/column_select_spec.rb +4 -4
- data/spec/extensions/columns_introspection_spec.rb +1 -1
- data/spec/extensions/columns_updated_spec.rb +1 -1
- data/spec/extensions/composition_spec.rb +8 -30
- data/spec/extensions/connection_expiration_spec.rb +3 -3
- data/spec/extensions/connection_validator_spec.rb +3 -3
- data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
- data/spec/extensions/constraint_validations_spec.rb +1 -1
- data/spec/extensions/core_refinements_spec.rb +1 -3
- data/spec/extensions/csv_serializer_spec.rb +4 -9
- data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
- data/spec/extensions/dataset_associations_spec.rb +2 -1
- data/spec/extensions/dataset_source_alias_spec.rb +1 -1
- data/spec/extensions/date_arithmetic_spec.rb +3 -3
- data/spec/extensions/def_dataset_method_spec.rb +1 -1
- data/spec/extensions/defaults_setter_spec.rb +2 -2
- data/spec/extensions/delay_add_association_spec.rb +8 -9
- data/spec/extensions/dirty_spec.rb +1 -1
- data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
- data/spec/extensions/eager_each_spec.rb +2 -2
- data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
- data/spec/extensions/error_splitter_spec.rb +1 -1
- data/spec/extensions/error_sql_spec.rb +1 -1
- data/spec/extensions/eval_inspect_spec.rb +1 -1
- data/spec/extensions/finder_spec.rb +1 -1
- data/spec/extensions/force_encoding_spec.rb +2 -5
- data/spec/extensions/freeze_datasets_spec.rb +1 -1
- data/spec/extensions/graph_each_spec.rb +5 -5
- data/spec/extensions/hook_class_methods_spec.rb +1 -194
- data/spec/extensions/identifier_mangling_spec.rb +17 -170
- data/spec/extensions/implicit_subquery_spec.rb +1 -5
- data/spec/extensions/inflector_spec.rb +1 -1
- data/spec/extensions/input_transformer_spec.rb +7 -2
- data/spec/extensions/insert_returning_select_spec.rb +1 -1
- data/spec/extensions/instance_filters_spec.rb +1 -1
- data/spec/extensions/instance_hooks_spec.rb +1 -95
- data/spec/extensions/inverted_subsets_spec.rb +1 -1
- data/spec/extensions/json_serializer_spec.rb +1 -1
- data/spec/extensions/lazy_attributes_spec.rb +1 -7
- data/spec/extensions/list_spec.rb +5 -6
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +25 -33
- data/spec/extensions/migration_spec.rb +12 -2
- data/spec/extensions/modification_detection_spec.rb +1 -1
- data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
- data/spec/extensions/named_timezones_spec.rb +3 -3
- data/spec/extensions/nested_attributes_spec.rb +1 -29
- data/spec/extensions/null_dataset_spec.rb +1 -11
- data/spec/extensions/optimistic_locking_spec.rb +2 -2
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +22 -26
- data/spec/extensions/pg_array_ops_spec.rb +1 -1
- data/spec/extensions/pg_array_spec.rb +3 -48
- data/spec/extensions/pg_enum_spec.rb +1 -1
- data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
- data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +22 -31
- data/spec/extensions/pg_inet_ops_spec.rb +1 -1
- data/spec/extensions/pg_inet_spec.rb +1 -14
- data/spec/extensions/pg_interval_spec.rb +3 -13
- data/spec/extensions/pg_json_ops_spec.rb +1 -1
- data/spec/extensions/pg_json_spec.rb +1 -13
- data/spec/extensions/pg_loose_count_spec.rb +1 -1
- data/spec/extensions/pg_range_ops_spec.rb +1 -1
- data/spec/extensions/pg_range_spec.rb +3 -88
- data/spec/extensions/pg_row_ops_spec.rb +1 -1
- data/spec/extensions/pg_row_plugin_spec.rb +1 -1
- data/spec/extensions/pg_row_spec.rb +1 -44
- data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
- data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +40 -9
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +23 -34
- data/spec/extensions/round_timestamps_spec.rb +1 -5
- data/spec/extensions/s_spec.rb +1 -1
- data/spec/extensions/schema_caching_spec.rb +1 -1
- data/spec/extensions/schema_dumper_spec.rb +43 -32
- data/spec/extensions/select_remove_spec.rb +1 -1
- data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
- data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
- data/spec/extensions/serialization_spec.rb +5 -17
- data/spec/extensions/server_block_spec.rb +1 -1
- data/spec/extensions/server_logging_spec.rb +2 -2
- data/spec/extensions/sharding_spec.rb +1 -1
- data/spec/extensions/shared_caching_spec.rb +1 -28
- data/spec/extensions/single_table_inheritance_spec.rb +2 -5
- data/spec/extensions/singular_table_names_spec.rb +1 -1
- data/spec/extensions/skip_create_refresh_spec.rb +1 -1
- data/spec/extensions/spec_helper.rb +5 -27
- data/spec/extensions/split_array_nil_spec.rb +1 -1
- data/spec/extensions/split_values_spec.rb +1 -1
- data/spec/extensions/sql_comments_spec.rb +1 -1
- data/spec/extensions/sql_expr_spec.rb +1 -1
- data/spec/extensions/static_cache_spec.rb +1 -1
- data/spec/extensions/string_agg_spec.rb +2 -2
- data/spec/extensions/string_date_time_spec.rb +1 -1
- data/spec/extensions/string_stripper_spec.rb +1 -1
- data/spec/extensions/subclasses_spec.rb +1 -1
- data/spec/extensions/subset_conditions_spec.rb +1 -1
- data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
- data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
- data/spec/extensions/synchronize_sql_spec.rb +124 -0
- data/spec/extensions/table_select_spec.rb +4 -4
- data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
- data/spec/extensions/thread_local_timezones_spec.rb +1 -1
- data/spec/extensions/timestamps_spec.rb +5 -7
- data/spec/extensions/to_dot_spec.rb +1 -1
- data/spec/extensions/touch_spec.rb +1 -1
- data/spec/extensions/tree_spec.rb +1 -1
- data/spec/extensions/typecast_on_load_spec.rb +1 -1
- data/spec/extensions/unlimited_update_spec.rb +1 -1
- data/spec/extensions/update_or_create_spec.rb +12 -16
- data/spec/extensions/update_primary_key_spec.rb +4 -3
- data/spec/extensions/update_refresh_spec.rb +1 -1
- data/spec/extensions/uuid_spec.rb +10 -13
- data/spec/extensions/validate_associated_spec.rb +1 -1
- data/spec/extensions/validation_class_methods_spec.rb +3 -3
- data/spec/extensions/validation_contexts_spec.rb +1 -1
- data/spec/extensions/validation_helpers_spec.rb +10 -44
- data/spec/extensions/whitelist_security_spec.rb +5 -5
- data/spec/extensions/xml_serializer_spec.rb +8 -13
- data/spec/guards_helper.rb +2 -1
- data/spec/integration/associations_test.rb +1 -23
- data/spec/integration/database_test.rb +7 -7
- data/spec/integration/dataset_test.rb +12 -47
- data/spec/integration/eager_loader_test.rb +1 -1
- data/spec/integration/migrator_test.rb +1 -1
- data/spec/integration/model_test.rb +4 -82
- data/spec/integration/plugin_test.rb +7 -23
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +10 -10
- data/spec/integration/spec_helper.rb +17 -21
- data/spec/integration/timezone_test.rb +5 -5
- data/spec/integration/transaction_test.rb +3 -55
- data/spec/integration/type_test.rb +9 -9
- data/spec/model/association_reflection_spec.rb +24 -9
- data/spec/model/associations_spec.rb +124 -303
- data/spec/model/base_spec.rb +43 -137
- data/spec/model/class_dataset_methods_spec.rb +2 -20
- data/spec/model/dataset_methods_spec.rb +1 -20
- data/spec/model/eager_loading_spec.rb +48 -17
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +29 -339
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +33 -129
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +19 -65
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do/mysql.rb +0 -69
- data/lib/sequel/adapters/do/postgres.rb +0 -46
- data/lib/sequel/adapters/do/sqlite3.rb +0 -41
- data/lib/sequel/adapters/do.rb +0 -166
- data/lib/sequel/adapters/jdbc/as400.rb +0 -92
- data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
- data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
- data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
- data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
- data/lib/sequel/adapters/odbc/progress.rb +0 -12
- data/lib/sequel/adapters/shared/cubrid.rb +0 -245
- data/lib/sequel/adapters/shared/firebird.rb +0 -261
- data/lib/sequel/adapters/shared/informix.rb +0 -63
- data/lib/sequel/adapters/shared/progress.rb +0 -40
- data/lib/sequel/adapters/swift/mysql.rb +0 -50
- data/lib/sequel/adapters/swift/postgres.rb +0 -49
- data/lib/sequel/adapters/swift/sqlite.rb +0 -48
- data/lib/sequel/adapters/swift.rb +0 -169
- data/lib/sequel/adapters/utils/pg_types.rb +0 -4
- data/lib/sequel/dataset/mutation.rb +0 -98
- data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
- data/lib/sequel/extensions/filter_having.rb +0 -65
- data/lib/sequel/extensions/hash_aliases.rb +0 -51
- data/lib/sequel/extensions/meta_def.rb +0 -37
- data/lib/sequel/extensions/query_literals.rb +0 -86
- data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
- data/lib/sequel/extensions/set_overrides.rb +0 -82
- data/lib/sequel/no_core_ext.rb +0 -4
- data/lib/sequel/plugins/association_autoreloading.rb +0 -11
- data/lib/sequel/plugins/identifier_columns.rb +0 -49
- data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
- data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
- data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
- data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
- data/lib/sequel/plugins/schema.rb +0 -84
- data/lib/sequel/plugins/scissors.rb +0 -37
- data/spec/core/dataset_mutation_spec.rb +0 -253
- data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
- data/spec/extensions/before_after_save_spec.rb +0 -40
- data/spec/extensions/filter_having_spec.rb +0 -42
- data/spec/extensions/from_block_spec.rb +0 -21
- data/spec/extensions/hash_aliases_spec.rb +0 -26
- data/spec/extensions/identifier_columns_spec.rb +0 -19
- data/spec/extensions/meta_def_spec.rb +0 -35
- data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
- data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
- data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
- data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
- data/spec/extensions/query_literals_spec.rb +0 -185
- data/spec/extensions/schema_spec.rb +0 -123
- data/spec/extensions/scissors_spec.rb +0 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
- data/spec/extensions/set_overrides_spec.rb +0 -75
data/lib/sequel/dataset/sql.rb
CHANGED
|
@@ -17,7 +17,7 @@ module Sequel
|
|
|
17
17
|
|
|
18
18
|
# Returns an INSERT SQL query string. See +insert+.
|
|
19
19
|
#
|
|
20
|
-
# DB[:items].insert_sql(:
|
|
20
|
+
# DB[:items].insert_sql(a: 1)
|
|
21
21
|
# # => "INSERT INTO items (a) VALUES (1)"
|
|
22
22
|
def insert_sql(*values)
|
|
23
23
|
return static_sql(@opts[:sql]) if @opts[:sql]
|
|
@@ -49,6 +49,9 @@ module Sequel
|
|
|
49
49
|
|
|
50
50
|
if values.is_a?(Array) && values.empty? && !insert_supports_empty_values?
|
|
51
51
|
columns, values = insert_empty_columns_values
|
|
52
|
+
elsif values.is_a?(Dataset) && hoist_cte?(values) && supports_cte?(:insert)
|
|
53
|
+
ds, values = hoist_cte(values)
|
|
54
|
+
return ds.clone(:columns=>columns, :values=>values).send(:_insert_sql)
|
|
52
55
|
end
|
|
53
56
|
clone(:columns=>columns, :values=>values).send(:_insert_sql)
|
|
54
57
|
end
|
|
@@ -112,9 +115,6 @@ module Sequel
|
|
|
112
115
|
# Returns an array of insert statements for inserting multiple records.
|
|
113
116
|
# This method is used by +multi_insert+ to format insert statements and
|
|
114
117
|
# expects a keys array and and an array of value arrays.
|
|
115
|
-
#
|
|
116
|
-
# This method should be overridden by descendants if the support
|
|
117
|
-
# inserting multiple records in a single SQL statement.
|
|
118
118
|
def multi_insert_sql(columns, values)
|
|
119
119
|
case multi_insert_sql_strategy
|
|
120
120
|
when :values
|
|
@@ -165,7 +165,7 @@ module Sequel
|
|
|
165
165
|
|
|
166
166
|
# Formats an UPDATE statement using the given values. See +update+.
|
|
167
167
|
#
|
|
168
|
-
# DB[:items].update_sql(:
|
|
168
|
+
# DB[:items].update_sql(price: 100, category: 'software')
|
|
169
169
|
# # => "UPDATE items SET price = 100, category = 'software'
|
|
170
170
|
#
|
|
171
171
|
# Raises an +Error+ if the dataset is grouped or includes more
|
|
@@ -179,8 +179,7 @@ module Sequel
|
|
|
179
179
|
when LiteralString
|
|
180
180
|
# nothing
|
|
181
181
|
when String
|
|
182
|
-
|
|
183
|
-
# raise Error, "plain string passed to Dataset#update" # SEQUEL5
|
|
182
|
+
raise Error, "plain string passed to Dataset#update is not supported, use Sequel.lit to use a literal string"
|
|
184
183
|
end
|
|
185
184
|
|
|
186
185
|
clone(:values=>values).send(:_update_sql)
|
|
@@ -246,10 +245,10 @@ module Sequel
|
|
|
246
245
|
DEFAULT = LiteralString.new('DEFAULT').freeze
|
|
247
246
|
|
|
248
247
|
EXISTS = ['EXISTS '.freeze].freeze
|
|
249
|
-
BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR}
|
|
250
|
-
COUNT_FROM_SELF_OPTS = [:distinct, :group, :sql, :limit, :offset, :compounds]
|
|
248
|
+
BITWISE_METHOD_MAP = {:& =>:BITAND, :| => :BITOR, :^ => :BITXOR}.freeze
|
|
249
|
+
COUNT_FROM_SELF_OPTS = [:distinct, :group, :sql, :limit, :offset, :compounds].freeze
|
|
251
250
|
IS_LITERALS = {nil=>'NULL'.freeze, true=>'TRUE'.freeze, false=>'FALSE'.freeze}.freeze
|
|
252
|
-
QUALIFY_KEYS = [:select, :where, :having, :order, :group]
|
|
251
|
+
QUALIFY_KEYS = [:select, :where, :having, :order, :group].freeze
|
|
253
252
|
|
|
254
253
|
IS_OPERATORS = ::Sequel::SQL::ComplexExpression::IS_OPERATORS
|
|
255
254
|
LIKE_OPERATORS = ::Sequel::SQL::ComplexExpression::LIKE_OPERATORS
|
|
@@ -257,196 +256,6 @@ module Sequel
|
|
|
257
256
|
TWO_ARITY_OPERATORS = ::Sequel::SQL::ComplexExpression::TWO_ARITY_OPERATORS
|
|
258
257
|
REGEXP_OPERATORS = ::Sequel::SQL::ComplexExpression::REGEXP_OPERATORS
|
|
259
258
|
|
|
260
|
-
EMULATED_FUNCTION_MAP = {}
|
|
261
|
-
Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
|
|
262
|
-
|
|
263
|
-
ALL = ' ALL'.freeze
|
|
264
|
-
Sequel::Deprecation.deprecate_constant(self, :ALL)
|
|
265
|
-
AND_SEPARATOR = " AND ".freeze
|
|
266
|
-
Sequel::Deprecation.deprecate_constant(self, :AND_SEPARATOR)
|
|
267
|
-
APOS = "'".freeze
|
|
268
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS)
|
|
269
|
-
APOS_RE = /'/.freeze
|
|
270
|
-
Sequel::Deprecation.deprecate_constant(self, :APOS_RE)
|
|
271
|
-
ARRAY_EMPTY = '(NULL)'.freeze
|
|
272
|
-
Sequel::Deprecation.deprecate_constant(self, :ARRAY_EMPTY)
|
|
273
|
-
AS = ' AS '.freeze
|
|
274
|
-
Sequel::Deprecation.deprecate_constant(self, :AS)
|
|
275
|
-
ASC = ' ASC'.freeze
|
|
276
|
-
Sequel::Deprecation.deprecate_constant(self, :ASC)
|
|
277
|
-
BACKSLASH = "\\".freeze
|
|
278
|
-
Sequel::Deprecation.deprecate_constant(self, :BACKSLASH)
|
|
279
|
-
BITCOMP_CLOSE = ") - 1)".freeze
|
|
280
|
-
Sequel::Deprecation.deprecate_constant(self, :BITCOMP_CLOSE)
|
|
281
|
-
BITCOMP_OPEN = "((0 - ".freeze
|
|
282
|
-
Sequel::Deprecation.deprecate_constant(self, :BITCOMP_OPEN)
|
|
283
|
-
BOOL_FALSE = "'f'".freeze
|
|
284
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
|
|
285
|
-
BOOL_TRUE = "'t'".freeze
|
|
286
|
-
Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
|
|
287
|
-
BRACKET_CLOSE = ']'.freeze
|
|
288
|
-
Sequel::Deprecation.deprecate_constant(self, :BRACKET_CLOSE)
|
|
289
|
-
BRACKET_OPEN = '['.freeze
|
|
290
|
-
Sequel::Deprecation.deprecate_constant(self, :BRACKET_OPEN)
|
|
291
|
-
CASE_ELSE = " ELSE ".freeze
|
|
292
|
-
Sequel::Deprecation.deprecate_constant(self, :CASE_ELSE)
|
|
293
|
-
CASE_END = " END)".freeze
|
|
294
|
-
Sequel::Deprecation.deprecate_constant(self, :CASE_END)
|
|
295
|
-
CASE_OPEN = '(CASE'.freeze
|
|
296
|
-
Sequel::Deprecation.deprecate_constant(self, :CASE_OPEN)
|
|
297
|
-
CASE_THEN = " THEN ".freeze
|
|
298
|
-
Sequel::Deprecation.deprecate_constant(self, :CASE_THEN)
|
|
299
|
-
CASE_WHEN = " WHEN ".freeze
|
|
300
|
-
Sequel::Deprecation.deprecate_constant(self, :CASE_WHEN)
|
|
301
|
-
CAST_OPEN = 'CAST('.freeze
|
|
302
|
-
Sequel::Deprecation.deprecate_constant(self, :CAST_OPEN)
|
|
303
|
-
COLON = ':'.freeze
|
|
304
|
-
Sequel::Deprecation.deprecate_constant(self, :COLON)
|
|
305
|
-
COLUMN_REF_RE1 = /\A((?:(?!__).)+)__((?:(?!___).)+)___(.+)\z/.freeze
|
|
306
|
-
Sequel::Deprecation.deprecate_constant(self, :COLUMN_REF_RE1)
|
|
307
|
-
COLUMN_REF_RE2 = /\A((?:(?!___).)+)___(.+)\z/.freeze
|
|
308
|
-
Sequel::Deprecation.deprecate_constant(self, :COLUMN_REF_RE2)
|
|
309
|
-
COLUMN_REF_RE3 = /\A((?:(?!__).)+)__(.+)\z/.freeze
|
|
310
|
-
Sequel::Deprecation.deprecate_constant(self, :COLUMN_REF_RE3)
|
|
311
|
-
COMMA = ', '.freeze
|
|
312
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
|
313
|
-
COMMA_SEPARATOR = ', '.freeze
|
|
314
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA_SEPARATOR)
|
|
315
|
-
CONDITION_FALSE = '(1 = 0)'.freeze
|
|
316
|
-
Sequel::Deprecation.deprecate_constant(self, :CONDITION_FALSE)
|
|
317
|
-
CONDITION_TRUE = '(1 = 1)'.freeze
|
|
318
|
-
Sequel::Deprecation.deprecate_constant(self, :CONDITION_TRUE)
|
|
319
|
-
DATASET_ALIAS_BASE_NAME = 't'.freeze
|
|
320
|
-
Sequel::Deprecation.deprecate_constant(self, :DATASET_ALIAS_BASE_NAME)
|
|
321
|
-
DATETIME_SECFRACTION_ARG = RUBY_VERSION >= '1.9.0' ? 1000000 : 86400000000
|
|
322
|
-
Sequel::Deprecation.deprecate_constant(self, :DATETIME_SECFRACTION_ARG)
|
|
323
|
-
DEFAULT_VALUES = " DEFAULT VALUES".freeze
|
|
324
|
-
Sequel::Deprecation.deprecate_constant(self, :DEFAULT_VALUES)
|
|
325
|
-
DELETE = 'DELETE'.freeze
|
|
326
|
-
Sequel::Deprecation.deprecate_constant(self, :DELETE)
|
|
327
|
-
DESC = ' DESC'.freeze
|
|
328
|
-
Sequel::Deprecation.deprecate_constant(self, :DESC)
|
|
329
|
-
DISTINCT = " DISTINCT".freeze
|
|
330
|
-
Sequel::Deprecation.deprecate_constant(self, :DISTINCT)
|
|
331
|
-
DOT = '.'.freeze
|
|
332
|
-
Sequel::Deprecation.deprecate_constant(self, :DOT)
|
|
333
|
-
DOUBLE_APOS = "''".freeze
|
|
334
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_APOS)
|
|
335
|
-
DOUBLE_QUOTE = '""'.freeze
|
|
336
|
-
Sequel::Deprecation.deprecate_constant(self, :DOUBLE_QUOTE)
|
|
337
|
-
EQUAL = ' = '.freeze
|
|
338
|
-
Sequel::Deprecation.deprecate_constant(self, :EQUAL)
|
|
339
|
-
EMPTY_PARENS = '()'.freeze
|
|
340
|
-
Sequel::Deprecation.deprecate_constant(self, :EMPTY_PARENS)
|
|
341
|
-
ESCAPE = " ESCAPE ".freeze
|
|
342
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE)
|
|
343
|
-
EXTRACT = 'extract('.freeze
|
|
344
|
-
Sequel::Deprecation.deprecate_constant(self, :EXTRACT)
|
|
345
|
-
FILTER = " FILTER (WHERE ".freeze
|
|
346
|
-
Sequel::Deprecation.deprecate_constant(self, :FILTER)
|
|
347
|
-
FOR_UPDATE = ' FOR UPDATE'.freeze
|
|
348
|
-
Sequel::Deprecation.deprecate_constant(self, :FOR_UPDATE)
|
|
349
|
-
FORMAT_DATE = "'%Y-%m-%d'".freeze
|
|
350
|
-
Sequel::Deprecation.deprecate_constant(self, :FORMAT_DATE)
|
|
351
|
-
FORMAT_DATE_STANDARD = "DATE '%Y-%m-%d'".freeze
|
|
352
|
-
Sequel::Deprecation.deprecate_constant(self, :FORMAT_DATE_STANDARD)
|
|
353
|
-
FORMAT_OFFSET = "%+03i%02i".freeze
|
|
354
|
-
Sequel::Deprecation.deprecate_constant(self, :FORMAT_OFFSET)
|
|
355
|
-
FORMAT_TIMESTAMP_RE = /%[Nz]/.freeze
|
|
356
|
-
Sequel::Deprecation.deprecate_constant(self, :FORMAT_TIMESTAMP_RE)
|
|
357
|
-
FORMAT_USEC = '%N'.freeze
|
|
358
|
-
Sequel::Deprecation.deprecate_constant(self, :FORMAT_USEC)
|
|
359
|
-
FRAME_ALL = "ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING".freeze
|
|
360
|
-
Sequel::Deprecation.deprecate_constant(self, :FRAME_ALL)
|
|
361
|
-
FRAME_ROWS = "ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW".freeze
|
|
362
|
-
Sequel::Deprecation.deprecate_constant(self, :FRAME_ROWS)
|
|
363
|
-
FROM = ' FROM '.freeze
|
|
364
|
-
Sequel::Deprecation.deprecate_constant(self, :FROM)
|
|
365
|
-
FUNCTION_DISTINCT = "DISTINCT ".freeze
|
|
366
|
-
Sequel::Deprecation.deprecate_constant(self, :FUNCTION_DISTINCT)
|
|
367
|
-
GROUP_BY = " GROUP BY ".freeze
|
|
368
|
-
Sequel::Deprecation.deprecate_constant(self, :GROUP_BY)
|
|
369
|
-
HAVING = " HAVING ".freeze
|
|
370
|
-
Sequel::Deprecation.deprecate_constant(self, :HAVING)
|
|
371
|
-
INSERT = "INSERT".freeze
|
|
372
|
-
Sequel::Deprecation.deprecate_constant(self, :INSERT)
|
|
373
|
-
INTO = " INTO ".freeze
|
|
374
|
-
Sequel::Deprecation.deprecate_constant(self, :INTO)
|
|
375
|
-
LATERAL = 'LATERAL '.freeze
|
|
376
|
-
Sequel::Deprecation.deprecate_constant(self, :LATERAL)
|
|
377
|
-
LIMIT = " LIMIT ".freeze
|
|
378
|
-
Sequel::Deprecation.deprecate_constant(self, :LIMIT)
|
|
379
|
-
NOT_SPACE = 'NOT '.freeze
|
|
380
|
-
Sequel::Deprecation.deprecate_constant(self, :NOT_SPACE)
|
|
381
|
-
NULL = "NULL".freeze
|
|
382
|
-
Sequel::Deprecation.deprecate_constant(self, :NULL)
|
|
383
|
-
NULLS_FIRST = " NULLS FIRST".freeze
|
|
384
|
-
Sequel::Deprecation.deprecate_constant(self, :NULLS_FIRST)
|
|
385
|
-
NULLS_LAST = " NULLS LAST".freeze
|
|
386
|
-
Sequel::Deprecation.deprecate_constant(self, :NULLS_LAST)
|
|
387
|
-
OFFSET = " OFFSET ".freeze
|
|
388
|
-
Sequel::Deprecation.deprecate_constant(self, :OFFSET)
|
|
389
|
-
ON = ' ON '.freeze
|
|
390
|
-
Sequel::Deprecation.deprecate_constant(self, :ON)
|
|
391
|
-
ON_PAREN = " ON (".freeze
|
|
392
|
-
Sequel::Deprecation.deprecate_constant(self, :ON_PAREN)
|
|
393
|
-
ORDER_BY = " ORDER BY ".freeze
|
|
394
|
-
Sequel::Deprecation.deprecate_constant(self, :ORDER_BY)
|
|
395
|
-
ORDER_BY_NS = "ORDER BY ".freeze
|
|
396
|
-
Sequel::Deprecation.deprecate_constant(self, :ORDER_BY_NS)
|
|
397
|
-
OVER = ' OVER '.freeze
|
|
398
|
-
Sequel::Deprecation.deprecate_constant(self, :OVER)
|
|
399
|
-
PAREN_CLOSE = ')'.freeze
|
|
400
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
|
|
401
|
-
PAREN_OPEN = '('.freeze
|
|
402
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
|
|
403
|
-
PAREN_SPACE_OPEN = ' ('.freeze
|
|
404
|
-
Sequel::Deprecation.deprecate_constant(self, :PAREN_SPACE_OPEN)
|
|
405
|
-
PARTITION_BY = "PARTITION BY ".freeze
|
|
406
|
-
Sequel::Deprecation.deprecate_constant(self, :PARTITION_BY)
|
|
407
|
-
QUESTION_MARK = '?'.freeze
|
|
408
|
-
Sequel::Deprecation.deprecate_constant(self, :QUESTION_MARK)
|
|
409
|
-
QUESTION_MARK_RE = /\?/.freeze
|
|
410
|
-
Sequel::Deprecation.deprecate_constant(self, :QUESTION_MARK_RE)
|
|
411
|
-
QUOTE = '"'.freeze
|
|
412
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTE)
|
|
413
|
-
QUOTE_RE = /"/.freeze
|
|
414
|
-
Sequel::Deprecation.deprecate_constant(self, :QUOTE_RE)
|
|
415
|
-
RETURNING = " RETURNING ".freeze
|
|
416
|
-
Sequel::Deprecation.deprecate_constant(self, :RETURNING)
|
|
417
|
-
SELECT = 'SELECT'.freeze
|
|
418
|
-
Sequel::Deprecation.deprecate_constant(self, :SELECT)
|
|
419
|
-
SET = ' SET '.freeze
|
|
420
|
-
Sequel::Deprecation.deprecate_constant(self, :SET)
|
|
421
|
-
SPACE = ' '.freeze
|
|
422
|
-
Sequel::Deprecation.deprecate_constant(self, :SPACE)
|
|
423
|
-
SQL_WITH = "WITH ".freeze
|
|
424
|
-
Sequel::Deprecation.deprecate_constant(self, :SQL_WITH)
|
|
425
|
-
SPACE_WITH = " WITH ".freeze
|
|
426
|
-
Sequel::Deprecation.deprecate_constant(self, :SPACE_WITH)
|
|
427
|
-
TILDE = '~'.freeze
|
|
428
|
-
Sequel::Deprecation.deprecate_constant(self, :TILDE)
|
|
429
|
-
TIMESTAMP_FORMAT = "'%Y-%m-%d %H:%M:%S%N%z'".freeze
|
|
430
|
-
Sequel::Deprecation.deprecate_constant(self, :TIMESTAMP_FORMAT)
|
|
431
|
-
STANDARD_TIMESTAMP_FORMAT = "TIMESTAMP '%Y-%m-%d %H:%M:%S%N%z'".freeze
|
|
432
|
-
Sequel::Deprecation.deprecate_constant(self, :STANDARD_TIMESTAMP_FORMAT)
|
|
433
|
-
UNDERSCORE = '_'.freeze
|
|
434
|
-
Sequel::Deprecation.deprecate_constant(self, :UNDERSCORE)
|
|
435
|
-
UPDATE = 'UPDATE'.freeze
|
|
436
|
-
Sequel::Deprecation.deprecate_constant(self, :UPDATE)
|
|
437
|
-
USING = ' USING ('.freeze
|
|
438
|
-
Sequel::Deprecation.deprecate_constant(self, :USING)
|
|
439
|
-
UNION_ALL_SELECT = ' UNION ALL SELECT '.freeze
|
|
440
|
-
Sequel::Deprecation.deprecate_constant(self, :UNION_ALL_SELECT)
|
|
441
|
-
VALUES = " VALUES ".freeze
|
|
442
|
-
Sequel::Deprecation.deprecate_constant(self, :VALUES)
|
|
443
|
-
WHERE = " WHERE ".freeze
|
|
444
|
-
Sequel::Deprecation.deprecate_constant(self, :WHERE)
|
|
445
|
-
WITH_ORDINALITY = " WITH ORDINALITY".freeze
|
|
446
|
-
Sequel::Deprecation.deprecate_constant(self, :WITH_ORDINALITY)
|
|
447
|
-
WITHIN_GROUP = " WITHIN GROUP (ORDER BY ".freeze
|
|
448
|
-
Sequel::Deprecation.deprecate_constant(self, :WITHIN_GROUP)
|
|
449
|
-
|
|
450
259
|
[:literal, :quote_identifier, :quote_schema_table].each do |meth|
|
|
451
260
|
class_eval(<<-END, __FILE__, __LINE__ + 1)
|
|
452
261
|
def #{meth}(*args, &block)
|
|
@@ -874,9 +683,9 @@ module Sequel
|
|
|
874
683
|
# Splits table_name into an array of strings.
|
|
875
684
|
#
|
|
876
685
|
# ds.split_qualifiers(:s) # ['s']
|
|
877
|
-
# ds.split_qualifiers(:
|
|
878
|
-
# ds.split_qualifiers(Sequel[:d][:
|
|
879
|
-
# ds.split_qualifiers(Sequel[:
|
|
686
|
+
# ds.split_qualifiers(Sequel[:t][:s]) # ['t', 's']
|
|
687
|
+
# ds.split_qualifiers(Sequel[:d][:t][:s]) # ['d', 't', 's']
|
|
688
|
+
# ds.split_qualifiers(Sequel.qualify(Sequel[:h][:d], Sequel[:t][:s])) # ['h', 'd', 't', 's']
|
|
880
689
|
def split_qualifiers(table_name, *args)
|
|
881
690
|
case table_name
|
|
882
691
|
when SQL::QualifiedIdentifier
|
|
@@ -889,9 +698,10 @@ module Sequel
|
|
|
889
698
|
|
|
890
699
|
# Append literalization of subscripts (SQL array accesses) to SQL string.
|
|
891
700
|
def subscript_sql_append(sql, s)
|
|
892
|
-
literal_append(sql, s.
|
|
701
|
+
literal_append(sql, s.expression)
|
|
893
702
|
sql << '['
|
|
894
|
-
|
|
703
|
+
sub = s.sub
|
|
704
|
+
if sub.length == 1 && (range = sub.first).is_a?(Range)
|
|
895
705
|
literal_append(sql, range.begin)
|
|
896
706
|
sql << ':'
|
|
897
707
|
e = range.end
|
|
@@ -1015,25 +825,21 @@ module Sequel
|
|
|
1015
825
|
end
|
|
1016
826
|
end
|
|
1017
827
|
|
|
1018
|
-
#
|
|
1019
|
-
# specifically been marked as not allowing SQL caching.
|
|
828
|
+
# Don't allow caching SQL if specifically marked not to.
|
|
1020
829
|
def cache_sql?
|
|
1021
|
-
|
|
830
|
+
!@opts[:no_cache_sql] && !cache_get(:_no_cache_sql)
|
|
1022
831
|
end
|
|
1023
832
|
|
|
1024
|
-
# Raise an InvalidOperation exception if deletion is not allowed
|
|
1025
|
-
# for this dataset
|
|
833
|
+
# Raise an InvalidOperation exception if deletion is not allowed for this dataset.
|
|
1026
834
|
def check_modification_allowed!
|
|
1027
835
|
raise(InvalidOperation, "Grouped datasets cannot be modified") if opts[:group]
|
|
1028
836
|
raise(InvalidOperation, "Joined datasets cannot be modified") if !supports_modifying_joins? && joined_dataset?
|
|
1029
837
|
end
|
|
1030
838
|
|
|
1031
|
-
#
|
|
839
|
+
# Raise error if the dataset uses limits or offsets.
|
|
1032
840
|
def check_not_limited!(type)
|
|
1033
841
|
return if @opts[:skip_limit_check] && type != :truncate
|
|
1034
|
-
|
|
1035
|
-
#raise InvalidOperation, "Dataset##{type} not supported on datasets with limits or offsets" if opts[:limit] || opts[:offset]
|
|
1036
|
-
Sequel::Deprecation.deprecate("Dataset##{type} on datasets with limits or offsets", "Call unlimited to remove the limit #{'or skip_limit_check to ignore the limit ' unless type == :truncate}before calling #{type}") if @opts[:limit] || @opts[:offset]
|
|
842
|
+
raise InvalidOperation, "Dataset##{type} not supported on datasets with limits or offsets" if opts[:limit] || opts[:offset]
|
|
1037
843
|
end
|
|
1038
844
|
|
|
1039
845
|
# Alias of check_modification_allowed!
|
|
@@ -1042,8 +848,7 @@ module Sequel
|
|
|
1042
848
|
end
|
|
1043
849
|
|
|
1044
850
|
# Append column list to SQL string.
|
|
1045
|
-
#
|
|
1046
|
-
# column names. If the array is empty, a wildcard (*) is returned.
|
|
851
|
+
# If the column list is empty, a wildcard (*) is appended.
|
|
1047
852
|
def column_list_append(sql, columns)
|
|
1048
853
|
if (columns.nil? || columns.empty?)
|
|
1049
854
|
sql << '*'
|
|
@@ -1138,7 +943,8 @@ module Sequel
|
|
|
1138
943
|
false
|
|
1139
944
|
end
|
|
1140
945
|
|
|
1141
|
-
# Append literalization of array of expressions to SQL string
|
|
946
|
+
# Append literalization of array of expressions to SQL string, separating them
|
|
947
|
+
# with commas.
|
|
1142
948
|
def expression_list_append(sql, columns)
|
|
1143
949
|
c = false
|
|
1144
950
|
co = ', '
|
|
@@ -1149,7 +955,7 @@ module Sequel
|
|
|
1149
955
|
end
|
|
1150
956
|
end
|
|
1151
957
|
|
|
1152
|
-
# Append literalization of array of grouping elements to SQL string.
|
|
958
|
+
# Append literalization of array of grouping elements to SQL string, seperating them with commas.
|
|
1153
959
|
def grouping_element_list_append(sql, columns)
|
|
1154
960
|
c = false
|
|
1155
961
|
co = ', '
|
|
@@ -1177,7 +983,10 @@ module Sequel
|
|
|
1177
983
|
v2 = db.from_application_timestamp(v)
|
|
1178
984
|
fmt = default_timestamp_format.gsub(/%[Nz]/) do |m|
|
|
1179
985
|
if m == '%N'
|
|
1180
|
-
|
|
986
|
+
# Ruby 1.9 supports %N in timestamp formats, but Sequel has supported %N
|
|
987
|
+
# for longer in a different way, where the . is already appended and only 6
|
|
988
|
+
# decimal places are used by default.
|
|
989
|
+
format_timestamp_usec(v.is_a?(DateTime) ? v.sec_fraction*(1000000) : v.usec) if supports_timestamp_usecs?
|
|
1181
990
|
else
|
|
1182
991
|
if supports_timestamp_timezones?
|
|
1183
992
|
# Would like to just use %z format, but it doesn't appear to work on Windows
|
|
@@ -1407,7 +1216,7 @@ module Sequel
|
|
|
1407
1216
|
|
|
1408
1217
|
# Append literalization of string to SQL string.
|
|
1409
1218
|
def literal_string_append(sql, v)
|
|
1410
|
-
sql << "'" << v.gsub(
|
|
1219
|
+
sql << "'" << v.gsub("'", "''") << "'"
|
|
1411
1220
|
end
|
|
1412
1221
|
|
|
1413
1222
|
# Append literalization of symbol to SQL string.
|
|
@@ -1471,7 +1280,7 @@ module Sequel
|
|
|
1471
1280
|
end
|
|
1472
1281
|
end
|
|
1473
1282
|
|
|
1474
|
-
# Qualify the given expression
|
|
1283
|
+
# Qualify the given expression to the given table.
|
|
1475
1284
|
def qualified_expression(e, table)
|
|
1476
1285
|
Qualifier.new(table).transform(e)
|
|
1477
1286
|
end
|
|
@@ -1494,7 +1303,7 @@ module Sequel
|
|
|
1494
1303
|
|
|
1495
1304
|
# Modify the sql to add a dataset to the via an EXCEPT, INTERSECT, or UNION clause.
|
|
1496
1305
|
# This uses a subselect for the compound datasets used, because using parantheses doesn't
|
|
1497
|
-
# work on all databases.
|
|
1306
|
+
# work on all databases.
|
|
1498
1307
|
def select_compounds_sql(sql)
|
|
1499
1308
|
return unless c = @opts[:compounds]
|
|
1500
1309
|
c.each do |type, dataset, all|
|
|
@@ -1626,7 +1435,6 @@ module Sequel
|
|
|
1626
1435
|
alias insert_with_sql select_with_sql
|
|
1627
1436
|
alias update_with_sql select_with_sql
|
|
1628
1437
|
|
|
1629
|
-
# The base keyword to use for the SQL WITH clause
|
|
1630
1438
|
def select_with_sql_base
|
|
1631
1439
|
"WITH "
|
|
1632
1440
|
end
|
|
@@ -1649,7 +1457,7 @@ module Sequel
|
|
|
1649
1457
|
end
|
|
1650
1458
|
|
|
1651
1459
|
# The string that is appended to to create the SQL query, the empty
|
|
1652
|
-
# string by default
|
|
1460
|
+
# string by default.
|
|
1653
1461
|
def sql_string_origin
|
|
1654
1462
|
String.new
|
|
1655
1463
|
end
|
|
@@ -1680,7 +1488,7 @@ module Sequel
|
|
|
1680
1488
|
end
|
|
1681
1489
|
end
|
|
1682
1490
|
|
|
1683
|
-
# Append literalization of the subselect to SQL
|
|
1491
|
+
# Append literalization of the subselect to SQL string.
|
|
1684
1492
|
def subselect_sql_append(sql, ds)
|
|
1685
1493
|
ds.clone(:append_sql=>sql).sql
|
|
1686
1494
|
end
|
data/lib/sequel/dataset.rb
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
# frozen-string-literal: true
|
|
2
2
|
|
|
3
3
|
module Sequel
|
|
4
|
-
# A dataset represents an SQL query
|
|
5
|
-
#
|
|
6
|
-
# can be used to create, retrieve, update and delete records.
|
|
4
|
+
# A dataset represents an SQL query. Datasets
|
|
5
|
+
# can be used to select, insert, update and delete records.
|
|
7
6
|
#
|
|
8
7
|
# Query results are always retrieved on demand, so a dataset can be kept
|
|
9
8
|
# around and reused indefinitely (datasets never cache results):
|
|
10
9
|
#
|
|
11
|
-
# my_posts = DB[:posts].where(:
|
|
10
|
+
# my_posts = DB[:posts].where(author: 'david') # no records are retrieved
|
|
12
11
|
# my_posts.all # records are retrieved
|
|
13
12
|
# my_posts.all # records are retrieved again
|
|
14
13
|
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
14
|
+
# Datasets are frozen and use a functional style where modification methods
|
|
15
|
+
# return modified copies of the the dataset. This allows you to reuse
|
|
16
|
+
# datasets:
|
|
17
17
|
#
|
|
18
18
|
# posts = DB[:posts]
|
|
19
|
-
# davids_posts = posts.where(:
|
|
20
|
-
# old_posts = posts.where
|
|
21
|
-
# davids_old_posts = davids_posts.where
|
|
19
|
+
# davids_posts = posts.where(author: 'david')
|
|
20
|
+
# old_posts = posts.where{stamp < Date.today - 7}
|
|
21
|
+
# davids_old_posts = davids_posts.where{stamp < Date.today - 7}
|
|
22
22
|
#
|
|
23
23
|
# Datasets are Enumerable objects, so they can be manipulated using any
|
|
24
24
|
# of the Enumerable methods, such as map, inject, etc.
|
|
@@ -42,5 +42,13 @@ module Sequel
|
|
|
42
42
|
include SQL::StringMethods
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
require_relative "dataset/query"
|
|
46
|
+
require_relative "dataset/actions"
|
|
47
|
+
require_relative "dataset/features"
|
|
48
|
+
require_relative "dataset/graph"
|
|
49
|
+
require_relative "dataset/prepared_statements"
|
|
50
|
+
require_relative "dataset/misc"
|
|
51
|
+
require_relative "dataset/sql"
|
|
52
|
+
require_relative "dataset/placeholder_literalizer"
|
|
53
|
+
require_relative "dataset/dataset_module"
|
|
46
54
|
end
|
data/lib/sequel/deprecated.rb
CHANGED
|
@@ -20,7 +20,7 @@ module Sequel
|
|
|
20
20
|
module Deprecation
|
|
21
21
|
@backtrace_filter = 10
|
|
22
22
|
@output = $stderr
|
|
23
|
-
@prefix = "SEQUEL DEPRECATION WARNING: "
|
|
23
|
+
@prefix = "SEQUEL DEPRECATION WARNING: ".freeze
|
|
24
24
|
|
|
25
25
|
class << self
|
|
26
26
|
# How to filter backtraces. +false+ does not include backtraces, +true+ includes
|
|
@@ -36,34 +36,25 @@ module Sequel
|
|
|
36
36
|
attr_accessor :prefix
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
message = "#{prefix}#{message}" if prefix
|
|
52
|
-
output.puts(message)
|
|
53
|
-
case b = backtrace_filter
|
|
54
|
-
when Integer
|
|
55
|
-
caller.each do |c|
|
|
56
|
-
b -= 1
|
|
57
|
-
output.puts(c)
|
|
58
|
-
break if b <= 0
|
|
59
|
-
end
|
|
60
|
-
when true
|
|
61
|
-
caller.each{|c| output.puts(c)}
|
|
62
|
-
when Proc
|
|
63
|
-
caller.each_with_index{|line, line_no| output.puts(line) if b.call(line, line_no)}
|
|
39
|
+
# Print the message and possibly backtrace to the output.
|
|
40
|
+
def self.deprecate(method, instead=nil)
|
|
41
|
+
return unless output
|
|
42
|
+
message = instead ? "#{method} is deprecated and will be removed in Sequel 5.1. #{instead}." : method
|
|
43
|
+
message = "#{prefix}#{message}" if prefix
|
|
44
|
+
output.puts(message)
|
|
45
|
+
case b = backtrace_filter
|
|
46
|
+
when Integer
|
|
47
|
+
caller.each do |c|
|
|
48
|
+
b -= 1
|
|
49
|
+
output.puts(c)
|
|
50
|
+
break if b <= 0
|
|
64
51
|
end
|
|
65
|
-
|
|
52
|
+
when true
|
|
53
|
+
caller.each{|c| output.puts(c)}
|
|
54
|
+
when Proc
|
|
55
|
+
caller.each_with_index{|line, line_no| output.puts(line) if b.call(line, line_no)}
|
|
66
56
|
end
|
|
57
|
+
nil
|
|
67
58
|
end
|
|
68
59
|
|
|
69
60
|
# If using ruby 2.3+, use Module#deprecate_constant to deprecate the constant,
|
data/lib/sequel/exceptions.rb
CHANGED
|
@@ -75,7 +75,7 @@ module Sequel
|
|
|
75
75
|
|
|
76
76
|
(
|
|
77
77
|
# Error raised on an invalid operation, such as trying to update or delete
|
|
78
|
-
# a joined or grouped dataset.
|
|
78
|
+
# a joined or grouped dataset when the database does not support that.
|
|
79
79
|
InvalidOperation = Class.new(Error)
|
|
80
80
|
).name
|
|
81
81
|
|
|
@@ -113,20 +113,4 @@ module Sequel
|
|
|
113
113
|
# and won't reraise it (unless a reraise is requested).
|
|
114
114
|
Rollback = Class.new(Error)
|
|
115
115
|
).name
|
|
116
|
-
|
|
117
|
-
# SEQUEL5: Remove
|
|
118
|
-
(UnbindDuplicate = Class.new(Error)).name
|
|
119
|
-
|
|
120
|
-
Error::AdapterNotFound = AdapterNotFound
|
|
121
|
-
Error::InvalidOperation = InvalidOperation
|
|
122
|
-
Error::InvalidValue = InvalidValue
|
|
123
|
-
Error::PoolTimeoutError = PoolTimeout
|
|
124
|
-
Error::Rollback = Rollback
|
|
125
|
-
|
|
126
|
-
Sequel::Deprecation.deprecate_constant(self, :UnbindDuplicate)
|
|
127
|
-
Sequel::Deprecation.deprecate_constant(Error, :AdapterNotFound)
|
|
128
|
-
Sequel::Deprecation.deprecate_constant(Error, :InvalidOperation)
|
|
129
|
-
Sequel::Deprecation.deprecate_constant(Error, :InvalidValue)
|
|
130
|
-
Sequel::Deprecation.deprecate_constant(Error, :PoolTimeoutError)
|
|
131
|
-
Sequel::Deprecation.deprecate_constant(Error, :Rollback)
|
|
132
116
|
end
|
|
@@ -4,13 +4,6 @@ module Sequel
|
|
|
4
4
|
module Plugins
|
|
5
5
|
module PgRow
|
|
6
6
|
module DatabaseMethods
|
|
7
|
-
ESCAPE_RE = /("|\\)/.freeze
|
|
8
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_RE)
|
|
9
|
-
ESCAPE_REPLACEMENT = '\\\\\1'.freeze
|
|
10
|
-
Sequel::Deprecation.deprecate_constant(self, :ESCAPE_REPLACEMENT)
|
|
11
|
-
COMMA = ','
|
|
12
|
-
Sequel::Deprecation.deprecate_constant(self, :COMMA)
|
|
13
|
-
|
|
14
7
|
# Handle Sequel::Model instances in bound variables.
|
|
15
8
|
def bound_variable_arg(arg, conn)
|
|
16
9
|
case arg
|
|
@@ -27,7 +27,7 @@ module Sequel
|
|
|
27
27
|
|
|
28
28
|
# Return the string that #print will print via puts.
|
|
29
29
|
def self.string(records, columns = nil) # records is an array of hashes
|
|
30
|
-
columns ||= records.first.keys.
|
|
30
|
+
columns ||= records.first.keys.sort
|
|
31
31
|
sizes = column_sizes(records, columns)
|
|
32
32
|
sep_line = separator_line(columns, sizes)
|
|
33
33
|
|
|
@@ -37,8 +37,6 @@ module Sequel
|
|
|
37
37
|
array.join("\n")
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
### Private Module Methods ###
|
|
41
|
-
|
|
42
40
|
# Hash of the maximum size of the value for each column
|
|
43
41
|
def self.column_sizes(records, columns) # :nodoc:
|
|
44
42
|
sizes = Hash.new {0}
|
|
@@ -9,34 +9,34 @@
|
|
|
9
9
|
# Then you can pass arbitrary connection options for the server/shard
|
|
10
10
|
# to use as a hash:
|
|
11
11
|
#
|
|
12
|
-
# DB[:table].server(:
|
|
12
|
+
# DB[:table].server(host: '...', database: '...').all
|
|
13
13
|
#
|
|
14
14
|
# Because Sequel can never be sure that the connection will be reused,
|
|
15
15
|
# arbitrary connections are disconnected as soon as the outermost block
|
|
16
16
|
# that uses them exits. So this example uses the same connection:
|
|
17
17
|
#
|
|
18
|
-
# DB.transaction(:
|
|
19
|
-
# DB.transaction(:
|
|
18
|
+
# DB.transaction(server: {host: '...', database: '...'}) do |c|
|
|
19
|
+
# DB.transaction(server: {host: '...', database: '...'}) do |c2|
|
|
20
20
|
# # c == c2
|
|
21
21
|
# end
|
|
22
22
|
# end
|
|
23
23
|
#
|
|
24
24
|
# But this example does not:
|
|
25
25
|
#
|
|
26
|
-
# DB.transaction(:
|
|
26
|
+
# DB.transaction(server: {host: '...', database: '...'}) do |c|
|
|
27
27
|
# end
|
|
28
|
-
# DB.transaction(:
|
|
28
|
+
# DB.transaction(server: {host: '...', database: '...'}) do |c2|
|
|
29
29
|
# # c != c2
|
|
30
30
|
# end
|
|
31
31
|
#
|
|
32
32
|
# You can use this extension in conjunction with the server_block
|
|
33
33
|
# extension:
|
|
34
34
|
#
|
|
35
|
-
# DB.with_server(:
|
|
35
|
+
# DB.with_server(host: '...', database: '...') do
|
|
36
36
|
# DB.synchronize do
|
|
37
37
|
# # All of these use the host/database given to with_server
|
|
38
|
-
# DB[:table].insert(:
|
|
39
|
-
# DB[:table].update(:
|
|
38
|
+
# DB[:table].insert(c: 1)
|
|
39
|
+
# DB[:table].update(c: 2)
|
|
40
40
|
# DB.tables
|
|
41
41
|
# DB[:table].all
|
|
42
42
|
# end
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
# extension may want to do the following to so that you don't need
|
|
47
47
|
# to call synchronize separately:
|
|
48
48
|
#
|
|
49
|
-
# def DB.with_server(*)
|
|
50
|
-
# super{synchronize{yield}}
|
|
49
|
+
# def DB.with_server(*a)
|
|
50
|
+
# super(*a){synchronize{yield}}
|
|
51
51
|
# end
|
|
52
52
|
#
|
|
53
53
|
# Note that this extension only works with the sharded threaded connection
|