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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "prepared_statements_safe plugin" do
|
|
4
4
|
before do
|
|
@@ -23,30 +23,30 @@ describe "prepared_statements_safe plugin" do
|
|
|
23
23
|
|
|
24
24
|
it "should set default values when creating" do
|
|
25
25
|
@c.create
|
|
26
|
-
@db.sqls.
|
|
26
|
+
@db.sqls.must_equal ['INSERT INTO people (i, name) VALUES (NULL, NULL)', "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
27
27
|
@c.create(:name=>'foo')
|
|
28
|
-
@db.sqls.
|
|
28
|
+
@db.sqls.must_equal ["INSERT INTO people (i, name) VALUES (NULL, 'foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
29
29
|
@c.create(:name=>'foo', :i=>2)
|
|
30
|
-
@db.sqls.
|
|
30
|
+
@db.sqls.must_equal ["INSERT INTO people (i, name) VALUES (2, 'foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
it "should use database default values" do
|
|
34
34
|
@c.instance_variable_set(:@db_schema, {:i=>{:ruby_default=>2}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}})
|
|
35
35
|
c = Class.new(@c)
|
|
36
36
|
c.create
|
|
37
|
-
@db.sqls.
|
|
37
|
+
@db.sqls.must_equal ["INSERT INTO people (i, name) VALUES (2, 'foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
it "should not set defaults for unparseable dataset default values" do
|
|
41
41
|
@c.instance_variable_set(:@db_schema, {:i=>{:default=>'f(x)'}, :name=>{:ruby_default=>'foo'}, :id=>{:primary_key=>true}})
|
|
42
42
|
c = Class.new(@c)
|
|
43
43
|
c.create
|
|
44
|
-
@db.sqls.
|
|
44
|
+
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo')", "SELECT * FROM people WHERE (id = 1) LIMIT 1"]
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
it "should save all fields when updating" do
|
|
48
48
|
@p.update(:i=>3)
|
|
49
|
-
@db.sqls.
|
|
49
|
+
@db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 3 WHERE (id = 1)"]
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
it "should work with abstract classes" do
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "prepared_statements plugin" do
|
|
4
4
|
before do
|
|
@@ -13,11 +13,11 @@ describe "prepared_statements plugin" do
|
|
|
13
13
|
@db.sqls
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
it "should work with implicit subqueries used for joined datasets" do
|
|
17
17
|
@c.dataset = @c.dataset.from(:people, :people2)
|
|
18
18
|
@db.sqls
|
|
19
19
|
@c[1].must_equal @p
|
|
20
|
-
@db.sqls.must_equal ["SELECT * FROM people, people2 WHERE (
|
|
20
|
+
@db.sqls.must_equal ["SELECT * FROM (SELECT * FROM people, people2) AS people WHERE (id = 1) LIMIT 1 -- read_only"]
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
it "should correctly lookup by primary key for dataset using subquery" do
|
|
@@ -32,33 +32,12 @@ describe "prepared_statements plugin" do
|
|
|
32
32
|
@c.set_primary_key [:id, :name]
|
|
33
33
|
@c.send(:use_prepared_statements_for_pk_lookup?).must_equal true
|
|
34
34
|
@c.set_primary_key :id
|
|
35
|
-
deprecated do
|
|
36
35
|
@c.dataset = @c.dataset.from(:people, :people2)
|
|
37
|
-
@c.send(:use_prepared_statements_for_pk_lookup?).must_equal
|
|
38
|
-
end
|
|
36
|
+
@c.send(:use_prepared_statements_for_pk_lookup?).must_equal true
|
|
39
37
|
@c.dataset = @db[:people].select(:id, :name, :i)
|
|
40
38
|
@c.send(:use_prepared_statements_for_pk_lookup?).must_equal true
|
|
41
39
|
end
|
|
42
40
|
|
|
43
|
-
it "should use prepared statements for refreshes if default is not optimized" do
|
|
44
|
-
@p.send(:use_prepared_statements_for?, :refresh).must_equal false
|
|
45
|
-
@c.set_primary_key [:id, :name]
|
|
46
|
-
@p.send(:use_prepared_statements_for?, :refresh).must_equal true
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "should use prepared statements for deletes if default is not optimized" do
|
|
50
|
-
@p.send(:use_prepared_statements_for?, :delete).must_equal false
|
|
51
|
-
@c.set_primary_key [:id, :name]
|
|
52
|
-
@p.send(:use_prepared_statements_for?, :delete).must_equal true
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "should use prepared statements for deletes if default on Oracle and DB2" do
|
|
56
|
-
def @db.database_type; :oracle end
|
|
57
|
-
@p.send(:use_prepared_statements_for?, :delete).must_equal true
|
|
58
|
-
def @db.database_type; :db2 end
|
|
59
|
-
@p.send(:use_prepared_statements_for?, :delete).must_equal true
|
|
60
|
-
end
|
|
61
|
-
|
|
62
41
|
it "should raise Error for unsupported prepared statement types" do
|
|
63
42
|
proc{@p.send(:use_prepared_statements_for?, :foo)}.must_raise Sequel::Error
|
|
64
43
|
end
|
|
@@ -102,22 +81,7 @@ describe "prepared_statements plugin" do
|
|
|
102
81
|
|
|
103
82
|
it "should correctly create instance" do
|
|
104
83
|
@c.create(:name=>'foo').must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
|
|
105
|
-
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo')", "SELECT
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it "should correctly lookup by primary key" do
|
|
109
|
-
@c[1].must_equal @p
|
|
110
|
-
@db.sqls.must_equal ["SELECT id, name, i FROM people WHERE (id = 1) LIMIT 1 -- read_only"]
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
it "should correctly delete instance" do
|
|
114
|
-
@p.destroy.must_equal @p
|
|
115
|
-
@db.sqls.must_equal ["DELETE FROM people WHERE (id = 1)"]
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
it "should correctly delete instance when specifying server" do
|
|
119
|
-
@p.set_server(:read_only).destroy.must_equal @p
|
|
120
|
-
@db.sqls.must_equal ["DELETE FROM people WHERE (id = 1) -- read_only"]
|
|
84
|
+
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo')", "SELECT * FROM people WHERE id = 1"]
|
|
121
85
|
end
|
|
122
86
|
|
|
123
87
|
it "should correctly update instance when specifying server" do
|
|
@@ -127,7 +91,7 @@ describe "prepared_statements plugin" do
|
|
|
127
91
|
|
|
128
92
|
it "should correctly create instance when specifying server" do
|
|
129
93
|
@c.new(:name=>'foo').set_server(:read_only).save.must_equal @c.load(:id=>1, :name=>'foo', :i => 2)
|
|
130
|
-
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo') -- read_only", "SELECT
|
|
94
|
+
@db.sqls.must_equal ["INSERT INTO people (name) VALUES ('foo') -- read_only", "SELECT * FROM people WHERE id = 1 -- read_only"]
|
|
131
95
|
end
|
|
132
96
|
|
|
133
97
|
it "should correctly create instance if dataset supports insert_select when specifying server" do
|
|
@@ -152,14 +116,15 @@ describe "prepared_statements plugin" do
|
|
|
152
116
|
|
|
153
117
|
it "should work correctly when subclassing" do
|
|
154
118
|
c = Class.new(@c)
|
|
155
|
-
|
|
156
|
-
|
|
119
|
+
@db.sqls
|
|
120
|
+
c.load(:id=>1, :name=>'foo', :i=>2).save
|
|
121
|
+
@db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 2 WHERE (id = 1)"]
|
|
157
122
|
end
|
|
158
123
|
|
|
159
124
|
it "should correctly handle without schema type when placeholder type specifiers are required" do
|
|
160
125
|
@c.dataset = @ds.with_extend{def requires_placeholder_type_specifiers?; true end}
|
|
161
|
-
@
|
|
162
|
-
@db.sqls.must_equal ["
|
|
126
|
+
@p.save
|
|
127
|
+
@db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 2 WHERE (id = 1)"]
|
|
163
128
|
end
|
|
164
129
|
|
|
165
130
|
it "should correctly handle with schema type when placeholder type specifiers are required" do
|
|
@@ -183,8 +148,8 @@ describe "prepared_statements plugin" do
|
|
|
183
148
|
end
|
|
184
149
|
end
|
|
185
150
|
@c.db_schema[:id][:type] = :integer
|
|
186
|
-
@
|
|
187
|
-
@db.sqls.must_equal ["
|
|
151
|
+
@p.save
|
|
152
|
+
@db.sqls.must_equal ["UPDATE people SET name = 'foo', i = 2 WHERE (id = 1)"]
|
|
188
153
|
end
|
|
189
154
|
end
|
|
190
155
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
require 'stringio'
|
|
4
4
|
Sequel.extension :pretty_table
|
|
@@ -60,11 +60,23 @@ describe "PrettyTable" do
|
|
|
60
60
|
it "should infer the columns if not given" do
|
|
61
61
|
Sequel::PrettyTable.print(@data1)
|
|
62
62
|
@output.rewind
|
|
63
|
-
@output.read.
|
|
63
|
+
@output.read.must_equal(<<OUTPUT)
|
|
64
|
+
+-+-+
|
|
65
|
+
|x|y|
|
|
66
|
+
+-+-+
|
|
67
|
+
|3|4|
|
|
68
|
+
+-+-+
|
|
69
|
+
OUTPUT
|
|
64
70
|
end
|
|
65
71
|
|
|
66
72
|
it "should have #string return the string without printing" do
|
|
67
|
-
Sequel::PrettyTable.string(@data1).
|
|
73
|
+
Sequel::PrettyTable.string(@data1).must_equal((<<OUTPUT).chomp)
|
|
74
|
+
+-+-+
|
|
75
|
+
|x|y|
|
|
76
|
+
+-+-+
|
|
77
|
+
|3|4|
|
|
78
|
+
+-+-+
|
|
79
|
+
OUTPUT
|
|
68
80
|
@output.rewind
|
|
69
81
|
@output.read.must_equal ''
|
|
70
82
|
end
|
|
@@ -72,21 +84,40 @@ describe "PrettyTable" do
|
|
|
72
84
|
it "should calculate the maximum width of each column correctly" do
|
|
73
85
|
Sequel::PrettyTable.print(@data2, [:a, :b])
|
|
74
86
|
@output.rewind
|
|
75
|
-
@output.read.must_equal
|
|
76
|
-
|
|
87
|
+
@output.read.must_equal(<<OUTPUT)
|
|
88
|
+
+--+----+
|
|
89
|
+
|a |b |
|
|
90
|
+
+--+----+
|
|
91
|
+
|23| 45|
|
|
92
|
+
|45|2377|
|
|
93
|
+
+--+----+
|
|
94
|
+
OUTPUT
|
|
77
95
|
end
|
|
78
96
|
|
|
79
97
|
it "should also take header width into account" do
|
|
80
98
|
Sequel::PrettyTable.print(@data3, [:aaa, :bb, :c])
|
|
81
99
|
@output.rewind
|
|
82
|
-
@output.read.must_equal
|
|
83
|
-
|
|
100
|
+
@output.read.must_equal(<<OUTPUT)
|
|
101
|
+
+---+--+---+
|
|
102
|
+
|aaa|bb|c |
|
|
103
|
+
+---+--+---+
|
|
104
|
+
| 1| | |
|
|
105
|
+
| | 2| |
|
|
106
|
+
| | |3.1|
|
|
107
|
+
+---+--+---+
|
|
108
|
+
OUTPUT
|
|
84
109
|
end
|
|
85
110
|
|
|
86
111
|
it "should print only the specified columns" do
|
|
87
112
|
Sequel::PrettyTable.print(@data2, [:a])
|
|
88
113
|
@output.rewind
|
|
89
|
-
@output.read.must_equal
|
|
90
|
-
|
|
114
|
+
@output.read.must_equal(<<OUTPUT)
|
|
115
|
+
+--+
|
|
116
|
+
|a |
|
|
117
|
+
+--+
|
|
118
|
+
|23|
|
|
119
|
+
|45|
|
|
120
|
+
+--+
|
|
121
|
+
OUTPUT
|
|
91
122
|
end
|
|
92
123
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Database#query" do
|
|
4
4
|
before do
|
|
@@ -87,17 +87,6 @@ describe "Dataset#query" do
|
|
|
87
87
|
q.sql.must_equal "SELECT * FROM xyz"
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
-
# SEQUEL5: Remove
|
|
91
|
-
unless Sequel.mock.dataset.frozen?
|
|
92
|
-
deprecated "should have an appropriate mutation method" do
|
|
93
|
-
@d.query! do
|
|
94
|
-
select :a, Sequel[:b].as(:mongo)
|
|
95
|
-
from :yyy
|
|
96
|
-
end
|
|
97
|
-
@d.sql.must_equal "SELECT a, b AS mongo FROM yyy"
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
90
|
it "should raise on non-chainable method calls" do
|
|
102
91
|
proc {@d.query {row_proc}}.must_raise(Sequel::Error)
|
|
103
92
|
proc {@d.query {all}}.must_raise(Sequel::Error)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe Sequel::Model, "rcte_tree" do
|
|
4
4
|
before do
|
|
@@ -121,9 +121,8 @@ describe Sequel::Model, "rcte_tree" do
|
|
|
121
121
|
{:id=>1, :name=>'00', :parent_id=>8, :x_root_x=>1}, {:id=>1, :name=>'00', :parent_id=>8, :x_root_x=>2},
|
|
122
122
|
{:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>2}, {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>1}]])
|
|
123
123
|
os = @ds.eager(:ancestors).all
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
sqls.last.must_match(/WITH t AS \(SELECT id AS x_root_x, nodes\.\* FROM nodes WHERE \(id IN \([12], [12]\)\) UNION ALL SELECT t\.x_root_x, nodes\.\* FROM nodes INNER JOIN t ON \(t\.parent_id = nodes\.id\)\) SELECT \* FROM t AS nodes/)
|
|
124
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
125
|
+
'WITH t AS (SELECT id AS x_root_x, nodes.* FROM nodes WHERE (id IN (1, 2)) UNION ALL SELECT t.x_root_x, nodes.* FROM nodes INNER JOIN t ON (t.parent_id = nodes.id)) SELECT * FROM t AS nodes']
|
|
127
126
|
os.must_equal [@c.load(:id=>2, :parent_id=>1, :name=>'AA'), @c.load(:id=>6, :parent_id=>2, :name=>'C'), @c.load(:id=>7, :parent_id=>1, :name=>'D'), @c.load(:id=>9, :parent_id=>nil, :name=>'E')]
|
|
128
127
|
os.map{|o| o.ancestors}.must_equal [[@c.load(:id=>1, :name=>'00', :parent_id=>8), @c.load(:id=>8, :name=>'?', :parent_id=>nil)],
|
|
129
128
|
[@c.load(:id=>2, :name=>'AA', :parent_id=>1), @c.load(:id=>1, :name=>'00', :parent_id=>8), @c.load(:id=>8, :name=>'?', :parent_id=>nil)],
|
|
@@ -143,9 +142,8 @@ describe Sequel::Model, "rcte_tree" do
|
|
|
143
142
|
{:i=>1, :name=>'00', :pi=>8, :kal=>1}, {:i=>1, :name=>'00', :pi=>8, :kal=>2},
|
|
144
143
|
{:i=>8, :name=>'?', :pi=>nil, :kal=>2}, {:i=>8, :name=>'?', :pi=>nil, :kal=>1}]])
|
|
145
144
|
os = @ds.eager(:as).all
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
sqls.last.must_match(/WITH cte AS \(SELECT i AS kal, nodes\.\* FROM nodes WHERE \(i IN \([12], [12]\)\) UNION ALL SELECT cte\.kal, nodes\.\* FROM nodes INNER JOIN cte ON \(cte\.pi = nodes\.i\)\) SELECT \* FROM cte/)
|
|
145
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
146
|
+
'WITH cte AS (SELECT i AS kal, nodes.* FROM nodes WHERE (i IN (1, 2)) UNION ALL SELECT cte.kal, nodes.* FROM nodes INNER JOIN cte ON (cte.pi = nodes.i)) SELECT * FROM cte AS nodes']
|
|
149
147
|
os.must_equal [@c.load(:i=>2, :pi=>1, :name=>'AA'), @c.load(:i=>6, :pi=>2, :name=>'C'), @c.load(:i=>7, :pi=>1, :name=>'D'), @c.load(:i=>9, :pi=>nil, :name=>'E')]
|
|
150
148
|
os.map{|o| o.as}.must_equal [[@c.load(:i=>1, :name=>'00', :pi=>8), @c.load(:i=>8, :name=>'?', :pi=>nil)],
|
|
151
149
|
[@c.load(:i=>2, :name=>'AA', :pi=>1), @c.load(:i=>1, :name=>'00', :pi=>8), @c.load(:i=>8, :name=>'?', :pi=>nil)],
|
|
@@ -164,9 +162,8 @@ describe Sequel::Model, "rcte_tree" do
|
|
|
164
162
|
{:id=>1, :name=>'00', :parent_id=>8, :x_root_x=>1}, {:id=>1, :name=>'00', :parent_id=>8, :x_root_x=>2},
|
|
165
163
|
{:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>2}, {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>1}]])
|
|
166
164
|
@ds.eager(:ancestors).all
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
sqls.last.must_match(/WITH t AS \(SELECT id AS x_root_x, nodes\.\* FROM nodes WHERE \(\(id IN \([12], [12]\)\) AND \(i = 1\)\) UNION ALL SELECT t\.x_root_x, nodes\.\* FROM nodes INNER JOIN t ON \(t\.parent_id = nodes\.id\) WHERE \(i = 1\)\) SELECT \* FROM t AS nodes WHERE \(i = 1\)/)
|
|
165
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
166
|
+
'WITH t AS (SELECT id AS x_root_x, nodes.* FROM nodes WHERE ((id IN (1, 2)) AND (i = 1)) UNION ALL SELECT t.x_root_x, nodes.* FROM nodes INNER JOIN t ON (t.parent_id = nodes.id) WHERE (i = 1)) SELECT * FROM t AS nodes WHERE (i = 1)']
|
|
170
167
|
end
|
|
171
168
|
|
|
172
169
|
it "should eagerly load descendants" do
|
|
@@ -176,9 +173,8 @@ describe Sequel::Model, "rcte_tree" do
|
|
|
176
173
|
{:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>6}, {:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>2},
|
|
177
174
|
{:id=>4, :name=>'?', :parent_id=>7, :x_root_x=>7}, {:id=>5, :name=>'?', :parent_id=>4, :x_root_x=>7}]])
|
|
178
175
|
os = @ds.eager(:descendants).all
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
sqls.last.must_match(/WITH t AS \(SELECT parent_id AS x_root_x, nodes\.\* FROM nodes WHERE \(parent_id IN \([267], [267], [267]\)\) UNION ALL SELECT t\.x_root_x, nodes\.\* FROM nodes INNER JOIN t ON \(t\.id = nodes\.parent_id\)\) SELECT \* FROM t AS nodes/)
|
|
176
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
177
|
+
'WITH t AS (SELECT parent_id AS x_root_x, nodes.* FROM nodes WHERE (parent_id IN (2, 6, 7)) UNION ALL SELECT t.x_root_x, nodes.* FROM nodes INNER JOIN t ON (t.id = nodes.parent_id)) SELECT * FROM t AS nodes']
|
|
182
178
|
os.must_equal [@c.load(:id=>2, :parent_id=>1, :name=>'AA'), @c.load(:id=>6, :parent_id=>2, :name=>'C'), @c.load(:id=>7, :parent_id=>1, :name=>'D')]
|
|
183
179
|
os.map{|o| o.descendants}.must_equal [[@c.load(:id=>6, :parent_id=>2, :name=>'C'), @c.load(:id=>9, :parent_id=>2, :name=>'E'), @c.load(:id=>3, :name=>'00', :parent_id=>6)],
|
|
184
180
|
[@c.load(:id=>3, :name=>'00', :parent_id=>6)],
|
|
@@ -198,9 +194,8 @@ describe Sequel::Model, "rcte_tree" do
|
|
|
198
194
|
{:i=>3, :name=>'00', :pi=>6, :kal=>6}, {:i=>3, :name=>'00', :pi=>6, :kal=>2},
|
|
199
195
|
{:i=>4, :name=>'?', :pi=>7, :kal=>7}, {:i=>5, :name=>'?', :pi=>4, :kal=>7}]])
|
|
200
196
|
os = @ds.eager(:ds).all
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
sqls.last.must_match(/WITH cte AS \(SELECT pi AS kal, nodes\.\* FROM nodes WHERE \(pi IN \([267], [267], [267]\)\) UNION ALL SELECT cte\.kal, nodes\.\* FROM nodes INNER JOIN cte ON \(cte\.i = nodes\.pi\)\) SELECT \* FROM cte/)
|
|
197
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
198
|
+
'WITH cte AS (SELECT pi AS kal, nodes.* FROM nodes WHERE (pi IN (2, 6, 7)) UNION ALL SELECT cte.kal, nodes.* FROM nodes INNER JOIN cte ON (cte.i = nodes.pi)) SELECT * FROM cte AS nodes']
|
|
204
199
|
os.must_equal [@c.load(:i=>2, :pi=>1, :name=>'AA'), @c.load(:i=>6, :pi=>2, :name=>'C'), @c.load(:i=>7, :pi=>1, :name=>'D')]
|
|
205
200
|
os.map{|o| o.ds}.must_equal [[@c.load(:i=>6, :pi=>2, :name=>'C'), @c.load(:i=>9, :pi=>2, :name=>'E'), @c.load(:i=>3, :name=>'00', :pi=>6)],
|
|
206
201
|
[@c.load(:i=>3, :name=>'00', :pi=>6)],
|
|
@@ -218,9 +213,8 @@ describe Sequel::Model, "rcte_tree" do
|
|
|
218
213
|
{:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>6, :x_level_x=>0}, {:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>2, :x_level_x=>1},
|
|
219
214
|
{:id=>4, :name=>'?', :parent_id=>7, :x_root_x=>7, :x_level_x=>0}, {:id=>5, :name=>'?', :parent_id=>4, :x_root_x=>7, :x_level_x=>1}]])
|
|
220
215
|
os = @ds.eager(:descendants=>2).all
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
sqls.last.must_match(/WITH t AS \(SELECT parent_id AS x_root_x, nodes\.\*, CAST\(0 AS integer\) AS x_level_x FROM nodes WHERE \(parent_id IN \([267], [267], [267]\)\) UNION ALL SELECT t\.x_root_x, nodes\.\*, \(t\.x_level_x \+ 1\) AS x_level_x FROM nodes INNER JOIN t ON \(t\.id = nodes\.parent_id\) WHERE \(t\.x_level_x < 1\)\) SELECT \* FROM t AS nodes/)
|
|
216
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
217
|
+
'WITH t AS (SELECT parent_id AS x_root_x, nodes.*, CAST(0 AS integer) AS x_level_x FROM nodes WHERE (parent_id IN (2, 6, 7)) UNION ALL SELECT t.x_root_x, nodes.*, (t.x_level_x + 1) AS x_level_x FROM nodes INNER JOIN t ON (t.id = nodes.parent_id) WHERE (t.x_level_x < 1)) SELECT * FROM t AS nodes']
|
|
224
218
|
os.must_equal [@c.load(:id=>2, :parent_id=>1, :name=>'AA'), @c.load(:id=>6, :parent_id=>2, :name=>'C'), @c.load(:id=>7, :parent_id=>1, :name=>'D')]
|
|
225
219
|
os.map{|o| o.descendants}.must_equal [[@c.load(:id=>6, :parent_id=>2, :name=>'C'), @c.load(:id=>9, :parent_id=>2, :name=>'E'), @c.load(:id=>3, :name=>'00', :parent_id=>6)],
|
|
226
220
|
[@c.load(:id=>3, :name=>'00', :parent_id=>6)],
|
|
@@ -238,9 +232,8 @@ describe Sequel::Model, "rcte_tree" do
|
|
|
238
232
|
{:i=>3, :name=>'00', :pi=>6, :kal=>6, :lal=>0}, {:i=>3, :name=>'00', :pi=>6, :kal=>2, :lal=>1},
|
|
239
233
|
{:i=>4, :name=>'?', :pi=>7, :kal=>7, :lal=>0}, {:i=>5, :name=>'?', :pi=>4, :kal=>7, :lal=>1}]])
|
|
240
234
|
os = @ds.eager(:ds=>2).all
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
sqls.last.must_match(/WITH cte AS \(SELECT pi AS kal, nodes\.\*, CAST\(0 AS integer\) AS lal FROM nodes WHERE \(pi IN \([267], [267], [267]\)\) UNION ALL SELECT cte\.kal, nodes\.\*, \(cte\.lal \+ 1\) AS lal FROM nodes INNER JOIN cte ON \(cte\.i = nodes\.pi\) WHERE \(cte\.lal < 1\)\) SELECT \* FROM cte/)
|
|
235
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
236
|
+
'WITH cte AS (SELECT pi AS kal, nodes.*, CAST(0 AS integer) AS lal FROM nodes WHERE (pi IN (2, 6, 7)) UNION ALL SELECT cte.kal, nodes.*, (cte.lal + 1) AS lal FROM nodes INNER JOIN cte ON (cte.i = nodes.pi) WHERE (cte.lal < 1)) SELECT * FROM cte AS nodes']
|
|
244
237
|
os.must_equal [@c.load(:i=>2, :pi=>1, :name=>'AA'), @c.load(:i=>6, :pi=>2, :name=>'C'), @c.load(:i=>7, :pi=>1, :name=>'D')]
|
|
245
238
|
os.map{|o| o.ds}.must_equal [[@c.load(:i=>6, :pi=>2, :name=>'C'), @c.load(:i=>9, :pi=>2, :name=>'E'), @c.load(:i=>3, :name=>'00', :pi=>6)],
|
|
246
239
|
[@c.load(:i=>3, :name=>'00', :pi=>6)],
|
|
@@ -258,9 +251,8 @@ describe Sequel::Model, "rcte_tree" do
|
|
|
258
251
|
{:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>6}, {:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>2},
|
|
259
252
|
{:id=>4, :name=>'?', :parent_id=>7, :x_root_x=>7}, {:id=>5, :name=>'?', :parent_id=>4, :x_root_x=>7}]])
|
|
260
253
|
@ds.eager(:descendants).all
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
sqls.last.must_match(/WITH t AS \(SELECT parent_id AS x_root_x, nodes\.\* FROM nodes WHERE \(\(parent_id IN \([267], [267], [267]\)\) AND \(i = 1\)\) UNION ALL SELECT t\.x_root_x, nodes\.\* FROM nodes INNER JOIN t ON \(t\.id = nodes\.parent_id\) WHERE \(i = 1\)\) SELECT \* FROM t AS nodes WHERE \(i = 1\)/)
|
|
254
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
255
|
+
'WITH t AS (SELECT parent_id AS x_root_x, nodes.* FROM nodes WHERE ((parent_id IN (2, 6, 7)) AND (i = 1)) UNION ALL SELECT t.x_root_x, nodes.* FROM nodes INNER JOIN t ON (t.id = nodes.parent_id) WHERE (i = 1)) SELECT * FROM t AS nodes WHERE (i = 1)']
|
|
264
256
|
end
|
|
265
257
|
end
|
|
266
258
|
|
|
@@ -335,9 +327,8 @@ describe Sequel::Model, "rcte_tree with composite keys" do
|
|
|
335
327
|
{:id=>1, :id2=>2, :name=>'00', :parent_id=>8, :parent_id2=>9, :x_root_x_0=>1, :x_root_x_1=>2}, {:id=>1, :id2=>2, :name=>'00', :parent_id=>8, :parent_id2=>9, :x_root_x_0=>2, :x_root_x_1=>3},
|
|
336
328
|
{:id=>8, :id2=>9, :name=>'?', :parent_id=>nil, :parent_id2=>nil, :x_root_x_0=>2, :x_root_x_1=>3}, {:id=>8, :id2=>9, :name=>'?', :parent_id=>nil, :parent_id2=>nil, :x_root_x_0=>1, :x_root_x_1=>2}]])
|
|
337
329
|
os = @ds.eager(:ancestors).all
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
sqls.last.must_match(/WITH t AS \(SELECT id AS x_root_x_0, id2 AS x_root_x_1, nodes\.\* FROM nodes WHERE \(\(id, id2\) IN \(\([12], [23]\), \([12], [23]\)\)\) UNION ALL SELECT t\.x_root_x_0, t\.x_root_x_1, nodes\.\* FROM nodes INNER JOIN t ON \(\(t\.parent_id = nodes\.id\) AND \(t\.parent_id2 = nodes\.id2\)\)\) SELECT \* FROM t AS nodes/)
|
|
330
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
331
|
+
'WITH t AS (SELECT id AS x_root_x_0, id2 AS x_root_x_1, nodes.* FROM nodes WHERE ((id, id2) IN ((1, 2), (2, 3))) UNION ALL SELECT t.x_root_x_0, t.x_root_x_1, nodes.* FROM nodes INNER JOIN t ON ((t.parent_id = nodes.id) AND (t.parent_id2 = nodes.id2))) SELECT * FROM t AS nodes']
|
|
341
332
|
os.must_equal [@c.load(:id=>2, :id2=>3, :parent_id=>1, :parent_id2=>2, :name=>'AA'), @c.load(:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'), @c.load(:id=>7, :id2=>8, :parent_id=>1, :parent_id2=>2, :name=>'D'), @c.load(:id=>9, :id2=>10, :parent_id=>nil, :parent_id2=>nil, :name=>'E')]
|
|
342
333
|
os.map{|o| o.ancestors}.must_equal [[@c.load(:id=>1, :id2=>2, :name=>'00', :parent_id=>8, :parent_id2=>9), @c.load(:id=>8, :id2=>9, :name=>'?', :parent_id=>nil, :parent_id2=>nil)],
|
|
343
334
|
[@c.load(:id=>2, :id2=>3, :name=>'AA', :parent_id=>1, :parent_id2=>2), @c.load(:id=>1, :id2=>2, :name=>'00', :parent_id=>8, :parent_id2=>9), @c.load(:id=>8, :id2=>9, :name=>'?', :parent_id=>nil, :parent_id2=>nil)],
|
|
@@ -357,9 +348,8 @@ describe Sequel::Model, "rcte_tree with composite keys" do
|
|
|
357
348
|
{:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7, :x_root_x_0=>6, :x_root_x_1=>7}, {:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7, :x_root_x_0=>2, :x_root_x_1=>3},
|
|
358
349
|
{:id=>4, :id2=>5, :name=>'?', :parent_id=>7, :parent_id2=>8, :x_root_x_0=>7, :x_root_x_1=>8}, {:id=>5, :id2=>6, :name=>'?', :parent_id=>4, :parent_id2=>5, :x_root_x_0=>7, :x_root_x_1=>8}]])
|
|
359
350
|
os = @ds.eager(:descendants).all
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
sqls.last.must_match(/WITH t AS \(SELECT parent_id AS x_root_x_0, parent_id2 AS x_root_x_1, nodes\.\* FROM nodes WHERE \(\(parent_id, parent_id2\) IN \(\([267], [378]\), \([267], [378]\), \([267], [378]\)\)\) UNION ALL SELECT t\.x_root_x_0, t\.x_root_x_1, nodes\.\* FROM nodes INNER JOIN t ON \(\(t\.id = nodes\.parent_id\) AND \(t\.id2 = nodes\.parent_id2\)\)\) SELECT \* FROM t AS nodes/)
|
|
351
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
352
|
+
'WITH t AS (SELECT parent_id AS x_root_x_0, parent_id2 AS x_root_x_1, nodes.* FROM nodes WHERE ((parent_id, parent_id2) IN ((2, 3), (6, 7), (7, 8))) UNION ALL SELECT t.x_root_x_0, t.x_root_x_1, nodes.* FROM nodes INNER JOIN t ON ((t.id = nodes.parent_id) AND (t.id2 = nodes.parent_id2))) SELECT * FROM t AS nodes']
|
|
363
353
|
os.must_equal [@c.load(:id=>2, :id2=>3, :parent_id=>1, :parent_id2=>2, :name=>'AA'), @c.load(:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'), @c.load(:id=>7, :id2=>8, :parent_id=>1, :parent_id2=>2, :name=>'D')]
|
|
364
354
|
os.map{|o| o.descendants}.must_equal [[@c.load(:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'), @c.load(:id=>9, :id2=>10, :parent_id=>2, :parent_id2=>3, :name=>'E'), @c.load(:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7)],
|
|
365
355
|
[@c.load(:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7)],
|
|
@@ -377,9 +367,8 @@ describe Sequel::Model, "rcte_tree with composite keys" do
|
|
|
377
367
|
{:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7, :x_root_x_0=>6, :x_root_x_1=>7, :x_level_x=>0}, {:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7, :x_root_x_0=>2, :x_root_x_1=>3, :x_level_x=>1},
|
|
378
368
|
{:id=>4, :id2=>5, :name=>'?', :parent_id=>7, :parent_id2=>8, :x_root_x_0=>7, :x_root_x_1=>8, :x_level_x=>0}, {:id=>5, :id2=>6, :name=>'?', :parent_id=>4, :parent_id2=>5, :x_root_x_0=>7, :x_root_x_1=>8, :x_level_x=>1}]])
|
|
379
369
|
os = @ds.eager(:descendants=>2).all
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
sqls.last.must_match(/WITH t AS \(SELECT parent_id AS x_root_x_0, parent_id2 AS x_root_x_1, nodes\.\*, CAST\(0 AS integer\) AS x_level_x FROM nodes WHERE \(\(parent_id, parent_id2\) IN \(\([267], [378]\), \([267], [378]\), \([267], [378]\)\)\) UNION ALL SELECT t\.x_root_x_0, t\.x_root_x_1, nodes\.\*, \(t\.x_level_x \+ 1\) AS x_level_x FROM nodes INNER JOIN t ON \(\(t\.id = nodes\.parent_id\) AND \(t\.id2 = nodes\.parent_id2\)\) WHERE \(t\.x_level_x < 1\)\) SELECT \* FROM t AS nodes/)
|
|
370
|
+
@db.sqls.must_equal ["SELECT * FROM nodes",
|
|
371
|
+
'WITH t AS (SELECT parent_id AS x_root_x_0, parent_id2 AS x_root_x_1, nodes.*, CAST(0 AS integer) AS x_level_x FROM nodes WHERE ((parent_id, parent_id2) IN ((2, 3), (6, 7), (7, 8))) UNION ALL SELECT t.x_root_x_0, t.x_root_x_1, nodes.*, (t.x_level_x + 1) AS x_level_x FROM nodes INNER JOIN t ON ((t.id = nodes.parent_id) AND (t.id2 = nodes.parent_id2)) WHERE (t.x_level_x < 1)) SELECT * FROM t AS nodes']
|
|
383
372
|
os.must_equal [@c.load(:id=>2, :id2=>3, :parent_id=>1, :parent_id2=>2, :name=>'AA'), @c.load(:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'), @c.load(:id=>7, :id2=>8, :parent_id=>1, :parent_id2=>2, :name=>'D')]
|
|
384
373
|
os.map{|o| o.descendants}.must_equal [[@c.load(:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'), @c.load(:id=>9, :id2=>10, :parent_id=>2, :parent_id2=>3, :name=>'E'), @c.load(:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7)],
|
|
385
374
|
[@c.load(:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7)],
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
|
-
if RUBY_VERSION >= '1.9.0'
|
|
4
3
|
describe "Sequel::Dataset::RoundTimestamps" do
|
|
5
4
|
before do
|
|
6
5
|
@dataset = Sequel.mock.dataset.extension(:round_timestamps)
|
|
@@ -38,6 +37,3 @@ describe "Sequel::Dataset::RoundTimestamps" do
|
|
|
38
37
|
@dataset.literal(DateTime.new(2010, 1, 2, 3, 4, Rational(54999999, 10000000))).must_equal "'2010-01-02 03:04:05'"
|
|
39
38
|
end
|
|
40
39
|
end
|
|
41
|
-
else
|
|
42
|
-
skip_warn "round_timestamps extension: only works on ruby 1.9+"
|
|
43
|
-
end
|
data/spec/extensions/s_spec.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "Sequel::Schema::CreateTableGenerator dump methods" do
|
|
4
4
|
before do
|
|
@@ -140,60 +140,55 @@ describe "Sequel::Database dump methods" do
|
|
|
140
140
|
def @d.schema(*s) [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]] end
|
|
141
141
|
def @d.supports_foreign_key_parsing?; true end
|
|
142
142
|
def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2]}] end
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
143
|
+
@d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
|
|
144
|
+
create_table(:t6) do
|
|
145
|
+
primary_key :c1, :table=>:t2, :key=>[:c2]
|
|
146
|
+
end
|
|
147
|
+
OUTPUT
|
|
147
148
|
end
|
|
148
149
|
|
|
149
150
|
it "should handle foreign key options" do
|
|
150
151
|
def @d.schema(*s) [[:c1, {:db_type=>'integer', :allow_null=>true}]] end
|
|
151
152
|
def @d.supports_foreign_key_parsing?; true end
|
|
152
153
|
def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true}] end
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
s.must_match(/:deferrable=>true/)
|
|
154
|
+
@d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
|
|
155
|
+
create_table(:t6) do
|
|
156
|
+
foreign_key :c1, :t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true
|
|
157
|
+
end
|
|
158
|
+
OUTPUT
|
|
159
159
|
end
|
|
160
160
|
|
|
161
161
|
it "should handle foreign key options in the primary key" do
|
|
162
162
|
def @d.schema(*s) [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]] end
|
|
163
163
|
def @d.supports_foreign_key_parsing?; true end
|
|
164
164
|
def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true}] end
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
s.must_match(/:on_update=>:set_null/)
|
|
171
|
-
s.must_match(/:deferrable=>true/)
|
|
165
|
+
@d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
|
|
166
|
+
create_table(:t6) do
|
|
167
|
+
primary_key :c1, :table=>:t2, :key=>[:c2], :on_delete=>:restrict, :on_update=>:set_null, :deferrable=>true
|
|
168
|
+
end
|
|
169
|
+
OUTPUT
|
|
172
170
|
end
|
|
173
171
|
|
|
174
172
|
it "should omit foreign key options that are the same as defaults" do
|
|
175
173
|
def @d.schema(*s) [[:c1, {:db_type=>'integer', :allow_null=>true}]] end
|
|
176
174
|
def @d.supports_foreign_key_parsing?; true end
|
|
177
175
|
def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:no_action, :on_update=>:no_action, :deferrable=>false}] end
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
s.wont_match(/:deferrable/)
|
|
176
|
+
@d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
|
|
177
|
+
create_table(:t6) do
|
|
178
|
+
foreign_key :c1, :t2, :key=>[:c2]
|
|
179
|
+
end
|
|
180
|
+
OUTPUT
|
|
184
181
|
end
|
|
185
182
|
|
|
186
183
|
it "should omit foreign key options that are the same as defaults in the primary key" do
|
|
187
184
|
def @d.schema(*s) [[:c1, {:db_type=>'integer', :primary_key=>true, :allow_null=>true, :auto_increment=>true}]] end
|
|
188
185
|
def @d.supports_foreign_key_parsing?; true end
|
|
189
186
|
def @d.foreign_key_list(*s) [{:columns=>[:c1], :table=>:t2, :key=>[:c2], :on_delete=>:no_action, :on_update=>:no_action, :deferrable=>false}] end
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
s.wont_match(/:on_update/)
|
|
196
|
-
s.wont_match(/:deferrable/)
|
|
187
|
+
@d.dump_table_schema(:t6).must_equal((<<OUTPUT).chomp)
|
|
188
|
+
create_table(:t6) do
|
|
189
|
+
primary_key :c1, :table=>:t2, :key=>[:c2]
|
|
190
|
+
end
|
|
191
|
+
OUTPUT
|
|
197
192
|
end
|
|
198
193
|
|
|
199
194
|
it "should dump primary key columns with explicit type equal to the database type when :same_db option is passed" do
|
|
@@ -508,7 +503,23 @@ END_MIG
|
|
|
508
503
|
def @d.foreign_key_list(t)
|
|
509
504
|
t == :t1 ? [{:columns=>[:c2], :table=>:t2, :key=>[:c1]}] : []
|
|
510
505
|
end
|
|
511
|
-
@d.dump_schema_migration(:indexes=>false, :foreign_keys=>true).
|
|
506
|
+
@d.dump_schema_migration(:indexes=>false, :foreign_keys=>true).must_equal(<<OUTPUT)
|
|
507
|
+
Sequel.migration do
|
|
508
|
+
change do
|
|
509
|
+
create_table(:t2) do
|
|
510
|
+
Integer :c1, :null=>false
|
|
511
|
+
BigDecimal :c2, :null=>false
|
|
512
|
+
|
|
513
|
+
primary_key [:c1, :c2]
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
create_table(:t1) do
|
|
517
|
+
primary_key :c1
|
|
518
|
+
foreign_key :c2, :t2, :type=>String, :size=>20, :key=>[:c1]
|
|
519
|
+
end
|
|
520
|
+
end
|
|
521
|
+
end
|
|
522
|
+
OUTPUT
|
|
512
523
|
end
|
|
513
524
|
|
|
514
525
|
it "should support dumping just indexes as a migration" do
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "spec_helper"
|
|
2
2
|
|
|
3
3
|
require 'yaml'
|
|
4
4
|
require 'json'
|
|
@@ -12,25 +12,18 @@ describe "Serialization plugin" do
|
|
|
12
12
|
DB.reset
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
deprecated "should allow access to serialization_module" do
|
|
16
|
-
@c.plugin :serialization, :yaml, :abc
|
|
17
|
-
@c.serialization_module.must_be_kind_of Module
|
|
18
|
-
@c.serialization_module = v = Module.new
|
|
19
|
-
@c.serialization_module.must_equal v
|
|
20
|
-
end
|
|
21
|
-
|
|
22
15
|
it "should allow setting additional serializable attributes via plugin :serialization call" do
|
|
23
16
|
@c.plugin :serialization, :yaml, :abc
|
|
24
17
|
@c.create(:abc => 1, :def=> 2)
|
|
25
|
-
DB.sqls.
|
|
18
|
+
DB.sqls.map{|s| s.sub("1\n...", '1')}.must_equal ["INSERT INTO items (def, abc) VALUES (2, '--- 1\n')"]
|
|
26
19
|
|
|
27
20
|
@c.plugin :serialization, :marshal, :def
|
|
28
21
|
@c.create(:abc => 1, :def=> 1)
|
|
29
|
-
DB.sqls.
|
|
22
|
+
DB.sqls.map{|s| s.sub("1\n...", '1')}.must_equal ["INSERT INTO items (abc, def) VALUES ('--- 1\n', 'BAhpBg==\n')"]
|
|
30
23
|
|
|
31
24
|
@c.plugin :serialization, :json, :ghi
|
|
32
25
|
@c.create(:ghi => [123])
|
|
33
|
-
DB.sqls.
|
|
26
|
+
DB.sqls.must_equal ["INSERT INTO items (ghi) VALUES ('[123]')"]
|
|
34
27
|
end
|
|
35
28
|
|
|
36
29
|
it "should handle validations of underlying column" do
|
|
@@ -59,11 +52,6 @@ describe "Serialization plugin" do
|
|
|
59
52
|
DB.sqls.map{|s| s.sub("...\n", '')}.must_equal ["INSERT INTO items (abc) VALUES ('--- 1\n')", "INSERT INTO items (abc) VALUES ('--- hello\n')"]
|
|
60
53
|
end
|
|
61
54
|
|
|
62
|
-
deprecated "serialized_columns should be the columns serialized" do
|
|
63
|
-
@c.plugin :serialization, :yaml, :abc
|
|
64
|
-
@c.serialized_columns.must_equal [:abc]
|
|
65
|
-
end
|
|
66
|
-
|
|
67
55
|
it "should allow serializing attributes to marshal" do
|
|
68
56
|
@c.plugin :serialization, :marshal, :abc
|
|
69
57
|
@c.create(:abc => 1)
|
|
@@ -202,7 +190,7 @@ describe "Serialization plugin" do
|
|
|
202
190
|
|
|
203
191
|
it "should handle registration of custom serializer/deserializer pairs" do
|
|
204
192
|
@c.set_primary_key :id
|
|
205
|
-
|
|
193
|
+
require_relative '../../lib/sequel/plugins/serialization'
|
|
206
194
|
Sequel::Plugins::Serialization.register_format(:reverse, proc{|s| s.reverse}, proc{|s| s.reverse})
|
|
207
195
|
@c.plugin :serialization, :reverse, :abc, :def
|
|
208
196
|
@c.dataset = @c.dataset.with_fetch(:id => 1, :abc => 'cba', :def => 'olleh')
|