sequel 4.49.0 → 5.0.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 +70 -0
- data/README.rdoc +195 -136
- data/Rakefile +26 -42
- data/bin/sequel +3 -5
- data/doc/advanced_associations.rdoc +86 -163
- 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/schema_modification.rdoc +63 -60
- data/doc/security.rdoc +97 -88
- data/doc/sharding.rdoc +43 -30
- data/doc/sql.rdoc +53 -65
- data/doc/testing.rdoc +3 -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.rb +1 -1
- data/lib/sequel/adapters/ado.rb +9 -25
- data/lib/sequel/adapters/ado/access.rb +7 -13
- data/lib/sequel/adapters/ado/mssql.rb +2 -9
- data/lib/sequel/adapters/amalgalite.rb +3 -18
- data/lib/sequel/adapters/ibmdb.rb +9 -45
- data/lib/sequel/adapters/jdbc.rb +13 -73
- 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 +4 -25
- data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
- 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 +1 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
- data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
- 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/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.rb +0 -19
- 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/oracle.rb +7 -13
- data/lib/sequel/adapters/postgres.rb +13 -57
- 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 +23 -224
- data/lib/sequel/adapters/shared/oracle.rb +13 -41
- data/lib/sequel/adapters/shared/postgres.rb +44 -259
- data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
- data/lib/sequel/adapters/shared/sqlite.rb +12 -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 +2 -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.rb +26 -28
- 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/core.rb +42 -101
- data/lib/sequel/database.rb +12 -2
- 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 +23 -55
- data/lib/sequel/database/query.rb +8 -13
- data/lib/sequel/database/schema_generator.rb +89 -64
- data/lib/sequel/database/schema_methods.rb +61 -79
- data/lib/sequel/database/transactions.rb +4 -24
- data/lib/sequel/dataset.rb +18 -10
- data/lib/sequel/dataset/actions.rb +53 -107
- data/lib/sequel/dataset/dataset_module.rb +3 -15
- data/lib/sequel/dataset/features.rb +30 -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 +71 -155
- data/lib/sequel/dataset/sql.rb +30 -225
- 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 +23 -40
- 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_hstore.rb +11 -50
- data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
- data/lib/sequel/extensions/pg_inet.rb +2 -15
- 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/model.rb +27 -62
- data/lib/sequel/model/associations.rb +128 -131
- data/lib/sequel/model/base.rb +171 -711
- 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/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 -22
- data/lib/sequel/version.rb +2 -2
- 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 +101 -480
- data/spec/adapters/oracle_spec.rb +1 -9
- data/spec/adapters/postgres_spec.rb +312 -565
- 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 +64 -244
- data/spec/core/dataset_spec.rb +81 -415
- data/spec/core/deprecated_spec.rb +3 -3
- data/spec/core/expression_filters_spec.rb +37 -144
- data/spec/core/mock_adapter_spec.rb +176 -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 +74 -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 +4 -59
- 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 +35 -1086
- 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 +1 -7
- 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 +1 -1
- data/spec/extensions/looser_typecasting_spec.rb +1 -1
- data/spec/extensions/many_through_many_spec.rb +1 -1
- data/spec/extensions/migration_spec.rb +2 -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 +1 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/pg_array_associations_spec.rb +4 -1
- 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_hstore_ops_spec.rb +1 -1
- data/spec/extensions/pg_hstore_spec.rb +23 -32
- 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 +1 -1
- data/spec/extensions/prepared_statements_spec.rb +13 -48
- data/spec/extensions/pretty_table_spec.rb +1 -1
- data/spec/extensions/query_spec.rb +1 -12
- data/spec/extensions/rcte_tree_spec.rb +1 -1
- 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 +1 -1
- 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 +2 -14
- 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/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 +3 -3
- 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 +1 -1
- 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 -12
- 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 +3 -3
- 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 +5 -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 +6 -22
- data/spec/integration/prepared_statement_test.rb +8 -88
- data/spec/integration/schema_test.rb +6 -6
- data/spec/integration/spec_helper.rb +13 -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 +18 -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 +17 -11
- data/spec/model/hooks_spec.rb +5 -300
- data/spec/model/inflector_spec.rb +1 -1
- data/spec/model/model_spec.rb +15 -320
- data/spec/model/plugins_spec.rb +2 -16
- data/spec/model/record_spec.rb +29 -121
- data/spec/model/spec_helper.rb +5 -15
- data/spec/model/validations_spec.rb +1 -1
- data/spec/sequel_warning.rb +1 -12
- metadata +8 -64
- data/doc/active_record.rdoc +0 -927
- data/lib/sequel/adapters/cubrid.rb +0 -160
- data/lib/sequel/adapters/do.rb +0 -166
- 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/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.rb +0 -169
- 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/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 Sequel::Dataset, "graphing" do
|
4
4
|
before do
|
@@ -212,11 +212,8 @@ describe Sequel::Dataset, "graphing" do
|
|
212
212
|
ds.sql.must_equal 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON ((lines.x = points.id) AND (lines.y = points.id))'
|
213
213
|
end
|
214
214
|
|
215
|
-
|
216
|
-
|
217
|
-
ds.sql.must_equal 'SELECT points.x, lines.y FROM points'
|
218
|
-
ds = ds.graph(:lines, :x=>:id)
|
219
|
-
ds.sql.must_equal 'SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
215
|
+
it "should raise Error if set_graph_aliases is called on an ungraphed dataset" do
|
216
|
+
proc{@ds1.set_graph_aliases([[:x,[:points, :x]], [:y,[:lines, :y]]])}.must_raise Sequel::Error
|
220
217
|
end
|
221
218
|
|
222
219
|
it "should allow graphing of multiple datasets" do
|
@@ -243,15 +240,6 @@ describe Sequel::Dataset, "graphing" do
|
|
243
240
|
end
|
244
241
|
|
245
242
|
describe "#set_graph_aliases" do
|
246
|
-
deprecated "should not modify the current dataset's opts" do
|
247
|
-
o1 = @ds1.opts
|
248
|
-
o2 = o1.dup
|
249
|
-
ds1 = @ds1.set_graph_aliases(:x=>[:graphs,:id])
|
250
|
-
@ds1.opts.must_equal o1
|
251
|
-
@ds1.opts.must_equal o2
|
252
|
-
ds1.opts.wont_equal o1
|
253
|
-
end
|
254
|
-
|
255
243
|
it "should not modify the current dataset's opts" do
|
256
244
|
o1 = @ds1.opts
|
257
245
|
o2 = o1.dup
|
@@ -264,69 +252,32 @@ describe Sequel::Dataset, "graphing" do
|
|
264
252
|
it "should specify the graph mapping" do
|
265
253
|
ds = @ds1.graph(:lines, :x=>:id)
|
266
254
|
ds.sql.must_equal 'SELECT points.id, points.x, points.y, lines.id AS lines_id, lines.x AS lines_x, lines.y AS lines_y, lines.graph_id FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
267
|
-
ds
|
268
|
-
['SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)',
|
269
|
-
'SELECT lines.y, points.x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
270
|
-
].must_include(ds.sql)
|
255
|
+
ds.set_graph_aliases(:x=>[:points, :x], :y=>[:lines, :y]).sql.must_equal 'SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
271
256
|
end
|
272
257
|
|
273
258
|
it "should allow a third entry to specify an expression to use other than the default" do
|
274
|
-
|
275
|
-
['SELECT 1 AS x, random() AS y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)',
|
276
|
-
'SELECT random() AS y, 1 AS x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
277
|
-
].must_include(ds.sql)
|
259
|
+
@ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x, 1], :y=>[:lines, :y, Sequel.function(:random)]).sql.must_equal 'SELECT 1 AS x, random() AS y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
278
260
|
end
|
279
261
|
|
280
262
|
it "should allow a single array entry to specify a table, assuming the same column as the key" do
|
281
|
-
|
282
|
-
['SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)',
|
283
|
-
'SELECT lines.y, points.x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
284
|
-
].must_include(ds.sql)
|
263
|
+
@ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points], :y=>[:lines]).sql.must_equal 'SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
285
264
|
end
|
286
265
|
|
287
266
|
it "should allow hash values to be symbols specifying table, assuming the same column as the key" do
|
288
|
-
|
289
|
-
['SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)',
|
290
|
-
'SELECT lines.y, points.x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
291
|
-
].must_include(ds.sql)
|
267
|
+
@ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>:points, :y=>:lines).sql.must_equal 'SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
292
268
|
end
|
293
269
|
|
294
|
-
|
295
|
-
|
296
|
-
['SELECT points.x, lines.y FROM points',
|
297
|
-
'SELECT lines.y, points.x FROM points'
|
298
|
-
].must_include(ds.sql)
|
299
|
-
|
300
|
-
ds = @ds1.set_graph_aliases(:x1=>[:points, :x], :y=>[:lines, :y])
|
301
|
-
['SELECT points.x AS x1, lines.y FROM points',
|
302
|
-
'SELECT lines.y, points.x AS x1 FROM points'
|
303
|
-
].must_include(ds.sql)
|
270
|
+
it "should only alias columns if necessary" do
|
271
|
+
@ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x], :y=>[:lines, :y]).sql.must_equal 'SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
304
272
|
end
|
305
273
|
|
306
274
|
it "should only alias columns if necessary" do
|
307
|
-
|
308
|
-
['SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
309
|
-
'SELECT lines.y, points.x FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
310
|
-
].must_include(ds.sql)
|
311
|
-
|
312
|
-
ds = @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x1=>[:points, :x], :y=>[:lines, :y])
|
313
|
-
['SELECT points.x AS x1, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)',
|
314
|
-
'SELECT lines.y, points.x AS x1 FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
315
|
-
].must_include(ds.sql)
|
275
|
+
@ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x], :y=>[:lines, :y]).sql.must_equal 'SELECT points.x, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
276
|
+
@ds1.graph(:lines, :x=>:id).set_graph_aliases(:x1=>[:points, :x], :y=>[:lines, :y]).sql.must_equal 'SELECT points.x AS x1, lines.y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
|
316
277
|
end
|
317
278
|
end
|
318
279
|
|
319
280
|
describe "#add_graph_aliases" do
|
320
|
-
deprecated "should not modify the current dataset's opts" do
|
321
|
-
ds1 = @ds1.set_graph_aliases(:x=>[:graphs,:id])
|
322
|
-
o1 = ds1.opts
|
323
|
-
o2 = o1.dup
|
324
|
-
ds2 = ds1.add_graph_aliases(:y=>[:blah,:id])
|
325
|
-
ds1.opts.must_equal o1
|
326
|
-
ds1.opts.must_equal o2
|
327
|
-
ds2.opts.wont_equal o1
|
328
|
-
end
|
329
|
-
|
330
281
|
it "should not modify the current dataset's opts" do
|
331
282
|
ds1 = @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:graphs,:id])
|
332
283
|
o1 = ds1.opts
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe "Dataset::PlaceholderLiteralizer" do
|
4
4
|
before do
|
@@ -56,12 +56,6 @@ describe "Dataset::PlaceholderLiteralizer" do
|
|
56
56
|
@db.sqls.must_equal ["SELECT * FROM items WHERE (id = 1)", "SELECT * FROM items WHERE a(b)"]
|
57
57
|
end
|
58
58
|
|
59
|
-
deprecated "should handle calls with a literal strings used as filter arguments" do
|
60
|
-
loader = @c.loader(@ds){|pl, ds| ds.where(pl.arg)}
|
61
|
-
loader.first("a = 1").must_equal @h
|
62
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE (a = 1)"]
|
63
|
-
end
|
64
|
-
|
65
59
|
it "should handle calls with a literal strings used as filter arguments" do
|
66
60
|
loader = @c.loader(@ds){|pl, ds| ds.where(pl.arg)}
|
67
61
|
loader.first(Sequel.lit("a = 1")).must_equal @h
|
@@ -83,13 +77,6 @@ describe "Dataset::PlaceholderLiteralizer" do
|
|
83
77
|
@db.sqls.must_equal ["SELECT * FROM items WHERE ((a = 1) AND (b = 1))", "SELECT * FROM items WHERE ((a = 2) AND (b = 2))"]
|
84
78
|
end
|
85
79
|
|
86
|
-
deprecated "should handle calls with a placeholder used multiple times in different capacities" do
|
87
|
-
loader = @c.loader(@ds){|pl, ds| a = pl.arg; ds.where(a).where(:b=>a)}
|
88
|
-
loader.first("a = 1").must_equal @h
|
89
|
-
loader.first(["a = ?", 2]).must_equal @h
|
90
|
-
@db.sqls.must_equal ["SELECT * FROM items WHERE ((a = 1) AND (b = 'a = 1'))", "SELECT * FROM items WHERE ((a = 2) AND (b IN ('a = ?', 2)))"]
|
91
|
-
end
|
92
|
-
|
93
80
|
it "should handle calls with a placeholder used multiple times in different capacities" do
|
94
81
|
loader = @c.loader(@ds){|pl, ds| a = pl.arg; ds.select(a).where(:b=>a)}
|
95
82
|
loader.first("a").must_equal @h
|
@@ -1,27 +1,39 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe Sequel::Schema::CreateTableGenerator do
|
4
4
|
before do
|
5
5
|
@generator = Sequel::Schema::CreateTableGenerator.new(Sequel.mock) do
|
6
|
-
string
|
7
|
-
column
|
8
|
-
foreign_key
|
9
|
-
primary_key
|
10
|
-
check
|
11
|
-
constraint(:xxx)
|
12
|
-
index
|
13
|
-
index
|
14
|
-
foreign_key
|
15
|
-
foreign_key
|
16
|
-
primary_key
|
17
|
-
foreign_key
|
6
|
+
string(:title).must_be_nil
|
7
|
+
column(:body, :text).must_be_nil
|
8
|
+
foreign_key(:parent_id).must_be_nil
|
9
|
+
primary_key(:id).must_be_nil
|
10
|
+
check('price > 100').must_be_nil
|
11
|
+
constraint(:xxx){{:yyy => :zzz}}.must_be_nil
|
12
|
+
index(:title).must_be_nil
|
13
|
+
index([:title, :body], :unique => true).must_be_nil
|
14
|
+
foreign_key(:node_id, :nodes).must_be_nil
|
15
|
+
foreign_key(:deferrable_node_id, :nodes, :deferrable => true).must_be_nil
|
16
|
+
primary_key([:title, :parent_id], :name => :cpk).must_be_nil
|
17
|
+
foreign_key([:node_id, :prop_id], :nodes_props, :name => :cfk).must_be_nil
|
18
18
|
end
|
19
19
|
@columns, @indexes, @constraints = @generator.columns, @generator.indexes, @generator.constraints
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should respond to everything" do
|
23
23
|
@generator.respond_to?(:foo).must_equal true
|
24
|
-
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should respond adding types" do
|
27
|
+
c = Class.new(Sequel::Schema::CreateTableGenerator)
|
28
|
+
c2 = Class.new
|
29
|
+
def c2.to_s; 'Foo' end
|
30
|
+
c.add_type_method(c2)
|
31
|
+
gen = c.new(Sequel.mock) do
|
32
|
+
Foo :bar
|
33
|
+
end
|
34
|
+
|
35
|
+
gen.columns.first.values_at(:name, :type).must_equal [:bar, c2]
|
36
|
+
end
|
25
37
|
|
26
38
|
it "should primary key column first" do
|
27
39
|
@columns.first[:name].must_equal :id
|
@@ -117,38 +129,37 @@ describe Sequel::Schema::CreateTableGenerator do
|
|
117
129
|
end
|
118
130
|
|
119
131
|
it "creates indexes" do
|
120
|
-
@indexes[0][:columns].
|
121
|
-
@indexes[1][:columns].
|
122
|
-
@indexes[1][:columns].must_include(:body)
|
132
|
+
@indexes[0][:columns].must_equal [:title]
|
133
|
+
@indexes[1][:columns].must_equal [:title, :body]
|
123
134
|
end
|
124
135
|
end
|
125
136
|
|
126
137
|
describe Sequel::Schema::AlterTableGenerator do
|
127
138
|
before do
|
128
139
|
@generator = Sequel::Schema::AlterTableGenerator.new(Sequel.mock) do
|
129
|
-
add_column
|
130
|
-
drop_column
|
131
|
-
rename_column
|
132
|
-
set_column_type
|
133
|
-
set_column_default
|
134
|
-
add_index
|
135
|
-
drop_index
|
136
|
-
drop_index
|
137
|
-
add_full_text_index
|
138
|
-
add_spatial_index
|
139
|
-
add_index
|
140
|
-
add_index
|
141
|
-
add_constraint
|
142
|
-
drop_constraint
|
143
|
-
add_unique_constraint
|
144
|
-
add_primary_key
|
145
|
-
add_foreign_key
|
146
|
-
add_primary_key
|
147
|
-
add_foreign_key
|
148
|
-
add_foreign_key
|
149
|
-
drop_foreign_key
|
150
|
-
drop_foreign_key
|
151
|
-
drop_foreign_key
|
140
|
+
add_column(:aaa, :text).must_be_nil
|
141
|
+
drop_column(:bbb).must_be_nil
|
142
|
+
rename_column(:ccc, :ho).must_be_nil
|
143
|
+
set_column_type(:ddd, :float).must_be_nil
|
144
|
+
set_column_default(:eee, 1).must_be_nil
|
145
|
+
add_index([:fff, :ggg]).must_be_nil
|
146
|
+
drop_index(:hhh).must_be_nil
|
147
|
+
drop_index(:hhh, :name=>:blah_blah).must_be_nil
|
148
|
+
add_full_text_index(:blah).must_be_nil
|
149
|
+
add_spatial_index(:geom).must_be_nil
|
150
|
+
add_index(:blah, :type => :hash).must_be_nil
|
151
|
+
add_index(:blah, :where => {:something => true}).must_be_nil
|
152
|
+
add_constraint(:con1, 'fred > 100').must_be_nil
|
153
|
+
drop_constraint(:con2).must_be_nil
|
154
|
+
add_unique_constraint([:aaa, :bbb, :ccc], :name => :con3).must_be_nil
|
155
|
+
add_primary_key(:id).must_be_nil
|
156
|
+
add_foreign_key(:node_id, :nodes).must_be_nil
|
157
|
+
add_primary_key([:aaa, :bbb]).must_be_nil
|
158
|
+
add_foreign_key([:node_id, :prop_id], :nodes_props).must_be_nil
|
159
|
+
add_foreign_key([:node_id, :prop_id], :nodes_props, :name => :fkey).must_be_nil
|
160
|
+
drop_foreign_key(:node_id).must_be_nil
|
161
|
+
drop_foreign_key([:node_id, :prop_id]).must_be_nil
|
162
|
+
drop_foreign_key([:node_id, :prop_id], :name => :fkey).must_be_nil
|
152
163
|
end
|
153
164
|
end
|
154
165
|
|
data/spec/core/schema_spec.rb
CHANGED
@@ -1,17 +1,12 @@
|
|
1
|
-
|
1
|
+
require_relative "spec_helper"
|
2
2
|
|
3
3
|
describe "DB#create_table" do
|
4
4
|
before do
|
5
5
|
@db = Sequel.mock
|
6
6
|
end
|
7
7
|
|
8
|
-
deprecated "should support an CreateTableGenerator as second argument" do
|
9
|
-
@db.create_table(:cats, Sequel::Schema::CreateTableGenerator.new(@db){})
|
10
|
-
@db.sqls.must_equal ['CREATE TABLE cats ()']
|
11
|
-
end
|
12
|
-
|
13
8
|
it "should accept the table name" do
|
14
|
-
@db.create_table(:cats)
|
9
|
+
@db.create_table(:cats){}.must_be_nil
|
15
10
|
@db.sqls.must_equal ['CREATE TABLE cats ()']
|
16
11
|
end
|
17
12
|
|
@@ -514,15 +509,22 @@ describe "DB#create_table" do
|
|
514
509
|
end
|
515
510
|
|
516
511
|
it "should ignore errors if the database raises an error on an index creation statement and the :ignore_index_errors option is used" do
|
517
|
-
|
512
|
+
@db.define_singleton_method(:execute_ddl){|*a| raise Sequel::DatabaseError if /blah/.match(a.first); super(*a)}
|
518
513
|
lambda{@db.create_table(:cats){Integer :id; index :blah; index :id}}.must_raise(Sequel::DatabaseError)
|
519
514
|
@db.sqls.must_equal ['CREATE TABLE cats (id integer)']
|
520
515
|
@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}
|
521
516
|
@db.sqls.must_equal ['CREATE TABLE cats (id integer)', 'CREATE INDEX cats_id_index ON cats (id)']
|
522
517
|
end
|
523
518
|
|
524
|
-
it "should use savepoints around index creation if running inside a transaction if :ignore_index_errors option is used" do
|
525
|
-
|
519
|
+
it "should not use savepoints around index creation if running inside a transaction if :ignore_index_errors option is used" do
|
520
|
+
@db.define_singleton_method(:execute_ddl){|*a| super(*a); raise Sequel::DatabaseError if /blah/.match(a.first)}
|
521
|
+
@db.transaction{@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}}
|
522
|
+
@db.sqls.must_equal ["BEGIN", "CREATE TABLE cats (id integer)", "CREATE INDEX cats_blah_index ON cats (blah)", "CREATE INDEX cats_id_index ON cats (id)", "COMMIT"]
|
523
|
+
end
|
524
|
+
|
525
|
+
it "should use savepoints around index creation if running inside a transaction if :ignore_index_errors option is used and transactional schema modifications are supported" do
|
526
|
+
@db.define_singleton_method(:supports_transactional_ddl?){true}
|
527
|
+
@db.define_singleton_method(:execute_ddl){|*a| super(*a); raise Sequel::DatabaseError if /blah/.match(a.first)}
|
526
528
|
@db.transaction{@db.create_table(:cats, :ignore_index_errors=>true){Integer :id; index :blah; index :id}}
|
527
529
|
@db.sqls.must_equal ["BEGIN", "CREATE TABLE cats (id integer)", "SAVEPOINT autopoint_1", "CREATE INDEX cats_blah_index ON cats (blah)", "ROLLBACK TO SAVEPOINT autopoint_1", "SAVEPOINT autopoint_1", "CREATE INDEX cats_id_index ON cats (id)", "RELEASE SAVEPOINT autopoint_1", "COMMIT"]
|
528
530
|
end
|
@@ -613,7 +615,7 @@ describe "DB#create_table" do
|
|
613
615
|
@db.sqls.must_equal ["CREATE TABLE cats (CHECK (price = 100))"]
|
614
616
|
end
|
615
617
|
|
616
|
-
|
618
|
+
it "should accept array constraints" do
|
617
619
|
@db.create_table(:cats) do
|
618
620
|
check [Sequel.expr(:x) > 0, Sequel.expr(:y) < 1]
|
619
621
|
end
|
@@ -757,19 +759,19 @@ describe "DB#create_table!" do
|
|
757
759
|
end
|
758
760
|
|
759
761
|
it "should create the table if it does not exist" do
|
760
|
-
|
761
|
-
@db.create_table!(:cats){|*a|}
|
762
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
763
|
+
@db.create_table!(:cats){|*a|}.must_be_nil
|
762
764
|
@db.sqls.must_equal ['CREATE TABLE cats ()']
|
763
765
|
end
|
764
766
|
|
765
767
|
it "should drop the table before creating it if it already exists" do
|
766
|
-
|
768
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
767
769
|
@db.create_table!(:cats){|*a|}
|
768
770
|
@db.sqls.must_equal ['DROP TABLE cats', 'CREATE TABLE cats ()']
|
769
771
|
end
|
770
772
|
|
771
773
|
it "should use IF EXISTS if the database supports it" do
|
772
|
-
|
774
|
+
@db.define_singleton_method(:supports_drop_table_if_exists?){true}
|
773
775
|
@db.create_table!(:cats){|*a|}
|
774
776
|
@db.sqls.must_equal ['DROP TABLE IF EXISTS cats', 'CREATE TABLE cats ()']
|
775
777
|
end
|
@@ -781,30 +783,30 @@ describe "DB#create_table?" do
|
|
781
783
|
end
|
782
784
|
|
783
785
|
it "should not create the table if the table already exists" do
|
784
|
-
|
785
|
-
@db.create_table?(:cats){|*a|}
|
786
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
787
|
+
@db.create_table?(:cats){|*a|}.must_be_nil
|
786
788
|
@db.sqls.must_equal []
|
787
789
|
end
|
788
790
|
|
789
791
|
it "should create the table if the table doesn't already exist" do
|
790
|
-
|
792
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
791
793
|
@db.create_table?(:cats){|*a|}
|
792
794
|
@db.sqls.must_equal ['CREATE TABLE cats ()']
|
793
795
|
end
|
794
796
|
|
795
797
|
it "should use IF NOT EXISTS if the database supports that" do
|
796
|
-
|
798
|
+
@db.define_singleton_method(:supports_create_table_if_not_exists?){true}
|
797
799
|
@db.create_table?(:cats){|*a|}
|
798
800
|
@db.sqls.must_equal ['CREATE TABLE IF NOT EXISTS cats ()']
|
799
801
|
end
|
800
802
|
|
801
803
|
it "should not use IF NOT EXISTS if the indexes are created" do
|
802
|
-
|
803
|
-
|
804
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
805
|
+
@db.define_singleton_method(:supports_create_table_if_not_exists?){true}
|
804
806
|
@db.create_table?(:cats){|*a| Integer :a, :index=>true}
|
805
807
|
@db.sqls.must_equal ['CREATE TABLE cats (a integer)', 'CREATE INDEX cats_a_index ON cats (a)']
|
806
808
|
|
807
|
-
|
809
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
808
810
|
@db.create_table?(:cats){|*a| Integer :a, :index=>true}
|
809
811
|
@db.sqls.must_equal []
|
810
812
|
end
|
@@ -816,7 +818,7 @@ describe "DB#create_join_table" do
|
|
816
818
|
end
|
817
819
|
|
818
820
|
it "should take a hash with foreign keys and table name values" do
|
819
|
-
@db.create_join_table(:cat_id=>:cats, :dog_id=>:dogs)
|
821
|
+
@db.create_join_table(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
|
820
822
|
@db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
821
823
|
end
|
822
824
|
|
@@ -864,30 +866,30 @@ describe "DB#create_join_table?" do
|
|
864
866
|
end
|
865
867
|
|
866
868
|
it "should create the table if it does not already exist" do
|
867
|
-
|
868
|
-
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
|
869
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
870
|
+
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
|
869
871
|
@db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
870
872
|
end
|
871
873
|
|
872
874
|
it "should not create the table if it already exists" do
|
873
|
-
|
875
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
874
876
|
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
|
875
877
|
@db.sqls.must_equal []
|
876
878
|
end
|
877
879
|
|
878
880
|
it "should not use IF NOT EXISTS" do
|
879
|
-
|
880
|
-
|
881
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
882
|
+
@db.define_singleton_method(:supports_create_table_if_not_exists?){true}
|
881
883
|
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
|
882
884
|
@db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
883
885
|
|
884
|
-
|
886
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
885
887
|
@db.create_join_table?(:cat_id=>:cats, :dog_id=>:dogs)
|
886
888
|
@db.sqls.must_equal []
|
887
889
|
end
|
888
890
|
|
889
891
|
it "should not use IF NOT EXISTS if no_index is used" do
|
890
|
-
|
892
|
+
@db.define_singleton_method(:supports_create_table_if_not_exists?){true}
|
891
893
|
@db.create_join_table?({:cat_id=>:cats, :dog_id=>:dogs}, :no_index=>true)
|
892
894
|
@db.sqls.must_equal ['CREATE TABLE IF NOT EXISTS cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))']
|
893
895
|
end
|
@@ -899,19 +901,19 @@ describe "DB#create_join_table!" do
|
|
899
901
|
end
|
900
902
|
|
901
903
|
it "should drop the table first if it already exists" do
|
902
|
-
|
903
|
-
@db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs)
|
904
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
905
|
+
@db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
|
904
906
|
@db.sqls.must_equal ['DROP TABLE cats_dogs', 'CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
905
907
|
end
|
906
908
|
|
907
909
|
it "should not drop the table if it doesn't exists" do
|
908
|
-
|
910
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
909
911
|
@db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs)
|
910
912
|
@db.sqls.must_equal ['CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
911
913
|
end
|
912
914
|
|
913
915
|
it "should use IF EXISTS if the database supports it" do
|
914
|
-
|
916
|
+
@db.define_singleton_method(:supports_drop_table_if_exists?){true}
|
915
917
|
@db.create_join_table!(:cat_id=>:cats, :dog_id=>:dogs)
|
916
918
|
@db.sqls.must_equal ['DROP TABLE IF EXISTS cats_dogs', 'CREATE TABLE cats_dogs (cat_id integer NOT NULL REFERENCES cats, dog_id integer NOT NULL REFERENCES dogs, PRIMARY KEY (cat_id, dog_id))', 'CREATE INDEX cats_dogs_dog_id_cat_id_index ON cats_dogs (dog_id, cat_id)']
|
917
919
|
end
|
@@ -923,7 +925,7 @@ describe "DB#drop_join_table" do
|
|
923
925
|
end
|
924
926
|
|
925
927
|
it "should take a hash with foreign keys and table name values and drop the table" do
|
926
|
-
@db.drop_join_table(:cat_id=>:cats, :dog_id=>:dogs)
|
928
|
+
@db.drop_join_table(:cat_id=>:cats, :dog_id=>:dogs).must_be_nil
|
927
929
|
@db.sqls.must_equal ['DROP TABLE cats_dogs']
|
928
930
|
end
|
929
931
|
|
@@ -956,7 +958,7 @@ describe "DB#drop_table" do
|
|
956
958
|
end
|
957
959
|
|
958
960
|
it "should generate a DROP TABLE statement" do
|
959
|
-
@db.drop_table
|
961
|
+
@db.drop_table(:cats).must_be_nil
|
960
962
|
@db.sqls.must_equal ['DROP TABLE cats']
|
961
963
|
end
|
962
964
|
|
@@ -977,37 +979,37 @@ describe "DB#drop_table?" do
|
|
977
979
|
end
|
978
980
|
|
979
981
|
it "should drop the table if it exists" do
|
980
|
-
|
981
|
-
@db.drop_table?(:cats)
|
982
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
983
|
+
@db.drop_table?(:cats).must_be_nil
|
982
984
|
@db.sqls.must_equal ["DROP TABLE cats"]
|
983
985
|
end
|
984
986
|
|
985
987
|
it "should do nothing if the table does not exist" do
|
986
|
-
|
988
|
+
@db.define_singleton_method(:table_exists?){|a| false}
|
987
989
|
@db.drop_table?(:cats)
|
988
990
|
@db.sqls.must_equal []
|
989
991
|
end
|
990
992
|
|
991
993
|
it "should operate on multiple tables at once" do
|
992
|
-
|
994
|
+
@db.define_singleton_method(:table_exists?){|a| a == :cats}
|
993
995
|
@db.drop_table? :cats, :dogs
|
994
996
|
@db.sqls.must_equal ['DROP TABLE cats']
|
995
997
|
end
|
996
998
|
|
997
999
|
it "should take an options hash and support the :cascade option" do
|
998
|
-
|
1000
|
+
@db.define_singleton_method(:table_exists?){|a| true}
|
999
1001
|
@db.drop_table? :cats, :dogs, :cascade=>true
|
1000
1002
|
@db.sqls.must_equal ['DROP TABLE cats CASCADE', 'DROP TABLE dogs CASCADE']
|
1001
1003
|
end
|
1002
1004
|
|
1003
1005
|
it "should use IF NOT EXISTS if the database supports that" do
|
1004
|
-
|
1006
|
+
@db.define_singleton_method(:supports_drop_table_if_exists?){true}
|
1005
1007
|
@db.drop_table? :cats, :dogs
|
1006
1008
|
@db.sqls.must_equal ['DROP TABLE IF EXISTS cats', 'DROP TABLE IF EXISTS dogs']
|
1007
1009
|
end
|
1008
1010
|
|
1009
1011
|
it "should use IF NOT EXISTS with CASCADE if the database supports that" do
|
1010
|
-
|
1012
|
+
@db.define_singleton_method(:supports_drop_table_if_exists?){true}
|
1011
1013
|
@db.drop_table? :cats, :dogs, :cascade=>true
|
1012
1014
|
@db.sqls.must_equal ['DROP TABLE IF EXISTS cats CASCADE', 'DROP TABLE IF EXISTS dogs CASCADE']
|
1013
1015
|
end
|
@@ -1018,15 +1020,10 @@ describe "DB#alter_table" do
|
|
1018
1020
|
@db = Sequel.mock
|
1019
1021
|
end
|
1020
1022
|
|
1021
|
-
deprecated "should support an AlterTableGenerator as second argument" do
|
1022
|
-
@db.alter_table(:cats, Sequel::Schema::AlterTableGenerator.new(@db){set_column_allow_null :score, false})
|
1023
|
-
@db.sqls.must_equal ["ALTER TABLE cats ALTER COLUMN score SET NOT NULL"]
|
1024
|
-
end
|
1025
|
-
|
1026
1023
|
it "should allow adding not null constraint via set_column_allow_null with false argument" do
|
1027
1024
|
@db.alter_table(:cats) do
|
1028
1025
|
set_column_allow_null :score, false
|
1029
|
-
end
|
1026
|
+
end.must_be_nil
|
1030
1027
|
@db.sqls.must_equal ["ALTER TABLE cats ALTER COLUMN score SET NOT NULL"]
|
1031
1028
|
end
|
1032
1029
|
|
@@ -1128,7 +1125,7 @@ describe "DB#alter_table" do
|
|
1128
1125
|
end
|
1129
1126
|
|
1130
1127
|
it "should ignore errors if the database raises an error on an add_index call and the :ignore_errors option is used" do
|
1131
|
-
|
1128
|
+
@db.define_singleton_method(:execute_ddl){|*a| raise Sequel::DatabaseError}
|
1132
1129
|
lambda{@db.add_index(:cats, :id)}.must_raise(Sequel::DatabaseError)
|
1133
1130
|
@db.add_index(:cats, :id, :ignore_errors=>true)
|
1134
1131
|
@db.sqls.must_equal []
|
@@ -1283,7 +1280,7 @@ describe "DB#alter_table" do
|
|
1283
1280
|
end
|
1284
1281
|
|
1285
1282
|
it "should combine operations into a single query if the database supports it" do
|
1286
|
-
|
1283
|
+
@db.define_singleton_method(:supports_combining_alter_table_ops?){true}
|
1287
1284
|
@db.alter_table(:cats) do
|
1288
1285
|
add_column :a, Integer
|
1289
1286
|
drop_column :b
|
@@ -1298,7 +1295,7 @@ describe "DB#alter_table" do
|
|
1298
1295
|
end
|
1299
1296
|
|
1300
1297
|
it "should combine operations into consecutive groups of combinable operations if the database supports combining operations" do
|
1301
|
-
|
1298
|
+
@db.define_singleton_method(:supports_combining_alter_table_ops?){true}
|
1302
1299
|
@db.alter_table(:cats) do
|
1303
1300
|
add_column :a, Integer
|
1304
1301
|
drop_column :b
|
@@ -1373,7 +1370,7 @@ end
|
|
1373
1370
|
describe "Database#add_column" do
|
1374
1371
|
it "should construct proper SQL" do
|
1375
1372
|
db = Sequel.mock
|
1376
|
-
db.add_column
|
1373
|
+
db.add_column(:test, :name, :text, :unique => true).must_be_nil
|
1377
1374
|
db.sqls.must_equal ['ALTER TABLE test ADD COLUMN name text UNIQUE']
|
1378
1375
|
end
|
1379
1376
|
end
|
@@ -1384,7 +1381,7 @@ describe "Database#drop_column" do
|
|
1384
1381
|
end
|
1385
1382
|
|
1386
1383
|
it "should construct proper SQL" do
|
1387
|
-
@db.drop_column
|
1384
|
+
@db.drop_column(:test, :name).must_be_nil
|
1388
1385
|
@db.sqls.must_equal ['ALTER TABLE test DROP COLUMN name']
|
1389
1386
|
end
|
1390
1387
|
|
@@ -1400,7 +1397,7 @@ describe "Database#rename_column" do
|
|
1400
1397
|
end
|
1401
1398
|
|
1402
1399
|
it "should construct proper SQL" do
|
1403
|
-
@db.rename_column
|
1400
|
+
@db.rename_column(:test, :abc, :def).must_be_nil
|
1404
1401
|
@db.sqls.must_equal ['ALTER TABLE test RENAME COLUMN abc TO def']
|
1405
1402
|
end
|
1406
1403
|
end
|
@@ -1411,7 +1408,7 @@ describe "Database#set_column_type" do
|
|
1411
1408
|
end
|
1412
1409
|
|
1413
1410
|
it "should construct proper SQL" do
|
1414
|
-
@db.set_column_type
|
1411
|
+
@db.set_column_type(:test, :name, :integer).must_be_nil
|
1415
1412
|
@db.sqls.must_equal ['ALTER TABLE test ALTER COLUMN name TYPE integer']
|
1416
1413
|
end
|
1417
1414
|
end
|
@@ -1422,7 +1419,7 @@ describe "Database#set_column_default" do
|
|
1422
1419
|
end
|
1423
1420
|
|
1424
1421
|
it "should construct proper SQL" do
|
1425
|
-
@db.set_column_default
|
1422
|
+
@db.set_column_default(:test, :name, 'zyx').must_be_nil
|
1426
1423
|
@db.sqls.must_equal ["ALTER TABLE test ALTER COLUMN name SET DEFAULT 'zyx'"]
|
1427
1424
|
end
|
1428
1425
|
end
|
@@ -1433,7 +1430,7 @@ describe "Database#add_index" do
|
|
1433
1430
|
end
|
1434
1431
|
|
1435
1432
|
it "should construct proper SQL" do
|
1436
|
-
@db.add_index
|
1433
|
+
@db.add_index(:test, :name, :unique => true).must_be_nil
|
1437
1434
|
@db.sqls.must_equal ['CREATE UNIQUE INDEX test_name_index ON test (name)']
|
1438
1435
|
end
|
1439
1436
|
|
@@ -1449,7 +1446,7 @@ describe "Database#drop_index" do
|
|
1449
1446
|
end
|
1450
1447
|
|
1451
1448
|
it "should construct proper SQL" do
|
1452
|
-
@db.drop_index
|
1449
|
+
@db.drop_index(:test, :name).must_be_nil
|
1453
1450
|
@db.sqls.must_equal ['DROP INDEX test_name_index']
|
1454
1451
|
end
|
1455
1452
|
|
@@ -1461,7 +1458,7 @@ describe "Database#drop_table" do
|
|
1461
1458
|
end
|
1462
1459
|
|
1463
1460
|
it "should construct proper SQL" do
|
1464
|
-
@db.drop_table
|
1461
|
+
@db.drop_table(:test).must_be_nil
|
1465
1462
|
@db.sqls.must_equal ['DROP TABLE test']
|
1466
1463
|
end
|
1467
1464
|
|
@@ -1477,7 +1474,7 @@ describe "Database#rename_table" do
|
|
1477
1474
|
end
|
1478
1475
|
|
1479
1476
|
it "should construct proper SQL" do
|
1480
|
-
@db.rename_table
|
1477
|
+
@db.rename_table(:abc, :xyz).must_be_nil
|
1481
1478
|
@db.sqls.must_equal ['ALTER TABLE abc RENAME TO xyz']
|
1482
1479
|
end
|
1483
1480
|
end
|
@@ -1488,7 +1485,7 @@ describe "Database#create_view" do
|
|
1488
1485
|
end
|
1489
1486
|
|
1490
1487
|
it "should construct proper SQL with raw SQL" do
|
1491
|
-
@db.create_view
|
1488
|
+
@db.create_view(:test, "SELECT * FROM xyz").must_be_nil
|
1492
1489
|
@db.sqls.must_equal ['CREATE VIEW test AS SELECT * FROM xyz']
|
1493
1490
|
@db.create_view Sequel.identifier(:test), "SELECT * FROM xyz"
|
1494
1491
|
@db.sqls.must_equal ['CREATE VIEW test AS SELECT * FROM xyz']
|
@@ -1540,7 +1537,7 @@ describe "Database#drop_view" do
|
|
1540
1537
|
end
|
1541
1538
|
|
1542
1539
|
with_symbol_splitting "should construct proper SQL for splittable symbols" do
|
1543
|
-
@db.drop_view
|
1540
|
+
@db.drop_view(:sch__test).must_be_nil
|
1544
1541
|
@db.sqls.must_equal ['DROP VIEW sch.test']
|
1545
1542
|
end
|
1546
1543
|
|
@@ -1580,21 +1577,21 @@ describe "Schema Parser" do
|
|
1580
1577
|
end
|
1581
1578
|
|
1582
1579
|
it "should raise an error if there are no columns" do
|
1583
|
-
|
1580
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
1584
1581
|
[]
|
1585
1582
|
end
|
1586
1583
|
proc{@db.schema(:x)}.must_raise(Sequel::Error)
|
1587
1584
|
end
|
1588
1585
|
|
1589
1586
|
it "should cache data by default" do
|
1590
|
-
|
1587
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
1591
1588
|
[[:a, {}]]
|
1592
1589
|
end
|
1593
1590
|
@db.schema(:x).must_be_same_as(@db.schema(:x))
|
1594
1591
|
end
|
1595
1592
|
|
1596
1593
|
it "should not cache data if :reload=>true is given" do
|
1597
|
-
|
1594
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
1598
1595
|
[[:a, {}]]
|
1599
1596
|
end
|
1600
1597
|
@db.schema(:x).wont_be_same_as(@db.schema(:x, :reload=>true))
|
@@ -1602,7 +1599,7 @@ describe "Schema Parser" do
|
|
1602
1599
|
|
1603
1600
|
it "should not cache schema metadata if cache_schema is false" do
|
1604
1601
|
@db.cache_schema = false
|
1605
|
-
|
1602
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
1606
1603
|
[[:a, {}]]
|
1607
1604
|
end
|
1608
1605
|
@db.schema(:x).wont_be_same_as(@db.schema(:x))
|
@@ -1610,7 +1607,7 @@ describe "Schema Parser" do
|
|
1610
1607
|
|
1611
1608
|
it "should provide options if given a table name" do
|
1612
1609
|
c = nil
|
1613
|
-
|
1610
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
1614
1611
|
c = [t, opts]
|
1615
1612
|
[[:a, {:db_type=>t.to_s}]]
|
1616
1613
|
end
|
@@ -1625,7 +1622,7 @@ describe "Schema Parser" do
|
|
1625
1622
|
|
1626
1623
|
with_symbol_splitting "should provide options if given a table name with splittable symbols" do
|
1627
1624
|
c = nil
|
1628
|
-
|
1625
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
1629
1626
|
c = [t, opts]
|
1630
1627
|
[[:a, {:db_type=>t.to_s}]]
|
1631
1628
|
end
|
@@ -1639,7 +1636,7 @@ describe "Schema Parser" do
|
|
1639
1636
|
it "should parse the schema correctly for a single table" do
|
1640
1637
|
sqls = @sqls
|
1641
1638
|
proc{@db.schema(:x)}.must_raise(Sequel::Error)
|
1642
|
-
|
1639
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
1643
1640
|
sqls << t
|
1644
1641
|
[[:a, {:db_type=>t.to_s}]]
|
1645
1642
|
end
|
@@ -1652,33 +1649,33 @@ describe "Schema Parser" do
|
|
1652
1649
|
end
|
1653
1650
|
|
1654
1651
|
it "should set :auto_increment to true by default if unset and a single integer primary key is used" do
|
1655
|
-
|
1652
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer'}]]}
|
1656
1653
|
@db.schema(:x).first.last[:auto_increment].must_equal true
|
1657
1654
|
end
|
1658
1655
|
|
1659
1656
|
it "should not set :auto_increment if already set" do
|
1660
|
-
|
1657
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer', :auto_increment=>false}]]}
|
1661
1658
|
@db.schema(:x).first.last[:auto_increment].must_equal false
|
1662
1659
|
end
|
1663
1660
|
|
1664
1661
|
it "should set :auto_increment to false by default if unset and a single nonintegery primary key is used" do
|
1665
|
-
|
1662
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'varchar'}]]}
|
1666
1663
|
@db.schema(:x).first.last[:auto_increment].must_equal false
|
1667
1664
|
end
|
1668
1665
|
|
1669
1666
|
it "should set :auto_increment to false by default if unset and a composite primary key" do
|
1670
|
-
|
1667
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:a, {:primary_key=>true, :db_type=>'integer'}], [:b, {:primary_key=>true, :db_type=>'integer'}]]}
|
1671
1668
|
@db.schema(:x).first.last[:auto_increment].must_equal false
|
1672
1669
|
@db.schema(:x).last.last[:auto_increment].must_equal false
|
1673
1670
|
end
|
1674
1671
|
|
1675
1672
|
it "should set :auto_increment to true by default if set and not the first column" do
|
1676
|
-
|
1673
|
+
@db.define_singleton_method(:schema_parse_table){|*| [[:b, {}], [:a, {:primary_key=>true, :db_type=>'integer'}]]}
|
1677
1674
|
@db.schema(:x).last.last[:auto_increment].must_equal true
|
1678
1675
|
end
|
1679
1676
|
|
1680
1677
|
it "should convert various types of table name arguments" do
|
1681
|
-
|
1678
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
1682
1679
|
[[t, opts]]
|
1683
1680
|
end
|
1684
1681
|
s1 = @db.schema(:x)
|
@@ -1703,7 +1700,7 @@ describe "Schema Parser" do
|
|
1703
1700
|
end
|
1704
1701
|
|
1705
1702
|
with_symbol_splitting "should convert splittable symbol arguments" do
|
1706
|
-
|
1703
|
+
@db.define_singleton_method(:schema_parse_table) do |t, opts|
|
1707
1704
|
[[t, opts]]
|
1708
1705
|
end
|
1709
1706
|
s1 = @db.schema(:x)
|