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,35 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
2
|
-
|
3
|
-
describe "Sequel::Metaprogramming" do
|
4
|
-
before do
|
5
|
-
deprecated do
|
6
|
-
Sequel.extension :meta_def
|
7
|
-
end
|
8
|
-
end
|
9
|
-
after do
|
10
|
-
Sequel::Metaprogramming.send(:remove_method, :meta_def)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should add meta_def method to Database, Dataset, and Model classes and instances" do
|
14
|
-
Sequel::Database.meta_def(:foo){1}
|
15
|
-
Sequel::Database.foo.must_equal 1
|
16
|
-
Sequel::Dataset.meta_def(:foo){2}
|
17
|
-
Sequel::Dataset.foo.must_equal 2
|
18
|
-
Sequel::Model.meta_def(:foo){3}
|
19
|
-
Sequel::Model.foo.must_equal 3
|
20
|
-
o = Sequel::Database.new
|
21
|
-
o.meta_def(:foo){4}
|
22
|
-
o.foo.must_equal 4
|
23
|
-
|
24
|
-
o = o[:a]
|
25
|
-
# SEQUEL5: Remove
|
26
|
-
unless o.frozen?
|
27
|
-
o.meta_def(:foo){5}
|
28
|
-
o.foo.must_equal 5
|
29
|
-
end
|
30
|
-
|
31
|
-
o = Sequel::Model.new
|
32
|
-
o.meta_def(:foo){6}
|
33
|
-
o.foo.must_equal 6
|
34
|
-
end
|
35
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
2
|
-
|
3
|
-
describe "no_auto_literal_strings extension" do
|
4
|
-
before do
|
5
|
-
@ds = Sequel.mock[:t].extension(:no_auto_literal_strings)
|
6
|
-
end
|
7
|
-
|
8
|
-
it "should raise exception for plain strings in filter methods" do
|
9
|
-
proc{@ds.where("a")}.must_raise Sequel::Error
|
10
|
-
proc{@ds.having("a")}.must_raise Sequel::Error
|
11
|
-
proc{@ds.filter("a")}.must_raise Sequel::Error
|
12
|
-
proc{@ds.exclude_having("a")}.must_raise Sequel::Error
|
13
|
-
deprecated do
|
14
|
-
proc{@ds.exclude_where("a")}.must_raise Sequel::Error
|
15
|
-
proc{@ds.and("a")}.must_raise Sequel::Error
|
16
|
-
end
|
17
|
-
proc{@ds.where(:a).or("a")}.must_raise Sequel::Error
|
18
|
-
proc{@ds.first("a")}.must_raise Sequel::Error
|
19
|
-
proc{@ds.order(:a).last("a")}.must_raise Sequel::Error
|
20
|
-
proc{@ds["a"]}.must_raise Sequel::Error
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should raise exception for plain strings arrays in filter methods" do
|
24
|
-
proc{@ds.where(["a"])}.must_raise Sequel::Error
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should handle explicit literal strings in filter methods" do
|
28
|
-
@ds.where(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE (a)'
|
29
|
-
@ds.having(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t HAVING (a)'
|
30
|
-
@ds.filter(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE (a)'
|
31
|
-
@ds.exclude_having(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t HAVING NOT (a)'
|
32
|
-
deprecated do
|
33
|
-
@ds.exclude_where(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE NOT (a)'
|
34
|
-
@ds.and(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE (a)'
|
35
|
-
end
|
36
|
-
@ds.where(:a).or(Sequel.lit("a")).sql.must_equal 'SELECT * FROM t WHERE (a OR (a))'
|
37
|
-
@ds.first(Sequel.lit("a"))
|
38
|
-
@ds.order(:a).last(Sequel.lit("a"))
|
39
|
-
@ds[Sequel.lit("a")]
|
40
|
-
@ds.db.sqls.must_equal ["SELECT * FROM t WHERE (a) LIMIT 1",
|
41
|
-
"SELECT * FROM t WHERE (a) ORDER BY a DESC LIMIT 1",
|
42
|
-
"SELECT * FROM t WHERE (a) LIMIT 1"]
|
43
|
-
end
|
44
|
-
|
45
|
-
deprecated "should handle literal strings in arrays in filter methods" do
|
46
|
-
@ds.where([Sequel.lit("a")]).sql.must_equal 'SELECT * FROM t WHERE (a)'
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should handle other objects in filter methods" do
|
50
|
-
@ds.where(:a).sql.must_equal 'SELECT * FROM t WHERE a'
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should raise exception for plain strings in update methods" do
|
54
|
-
proc{@ds.update("a = a + 1")}.must_raise Sequel::Error
|
55
|
-
proc{@ds.update_sql("a = a + 1")}.must_raise Sequel::Error
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should handle explicit literal strings in update methods" do
|
59
|
-
@ds.update_sql(Sequel.lit("a = a + 1")).must_equal "UPDATE t SET a = a + 1"
|
60
|
-
@ds.update(Sequel.lit("a = a + 1"))
|
61
|
-
@ds.db.sqls.must_equal ["UPDATE t SET a = a + 1"]
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should handle other objects in update methods" do
|
65
|
-
@ds.update_sql(:a=>:a).must_equal "UPDATE t SET a = a"
|
66
|
-
@ds.update(:a=>:a)
|
67
|
-
@ds.db.sqls.must_equal ["UPDATE t SET a = a"]
|
68
|
-
end
|
69
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
2
|
-
|
3
|
-
describe Sequel::Model, "PgTypecastOnLoad plugin" do
|
4
|
-
before do
|
5
|
-
@db = Sequel.mock(:host=>'postgres', :fetch=>{:id=>1, :b=>"t", :y=>"0"}, :columns=>[:id, :b, :y], :numrows=>1)
|
6
|
-
def @db.schema(*args)
|
7
|
-
[[:id, {}], [:b, {:type=>:boolean, :oid=>16}], [:y, {:type=>:integer, :oid=>20}]]
|
8
|
-
end
|
9
|
-
@c = Class.new(Sequel::Model(@db[:items]))
|
10
|
-
deprecated do
|
11
|
-
@c.plugin :pg_typecast_on_load, :b, :y
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
deprecated "should call the database conversion proc for all given columns" do
|
16
|
-
@c.first.values.must_equal(:id=>1, :b=>true, :y=>0)
|
17
|
-
end
|
18
|
-
|
19
|
-
deprecated "should call the database conversion proc with value when reloading the object, for all given columns" do
|
20
|
-
@c.first.refresh.values.must_equal(:id=>1, :b=>true, :y=>0)
|
21
|
-
end
|
22
|
-
|
23
|
-
deprecated "should not fail if schema oid does not have a related conversion proc" do
|
24
|
-
@c.db_schema[:b][:oid] = 0
|
25
|
-
@c.first.refresh.values.must_equal(:id=>1, :b=>"t", :y=>0)
|
26
|
-
end
|
27
|
-
|
28
|
-
deprecated "should call the database conversion proc with value when automatically reloading the object on creation via insert_select" do
|
29
|
-
@c.dataset = @c.dataset.with_extend{def insert_select(h) insert(h); first end}
|
30
|
-
@c.create.values.must_equal(:id=>1, :b=>true, :y=>0)
|
31
|
-
end
|
32
|
-
|
33
|
-
deprecated "should allowing setting columns separately via add_pg_typecast_on_load_columns" do
|
34
|
-
@c = Class.new(Sequel::Model(@db[:items]))
|
35
|
-
@c.plugin :pg_typecast_on_load
|
36
|
-
@c.first.values.must_equal(:id=>1, :b=>"t", :y=>"0")
|
37
|
-
@c.add_pg_typecast_on_load_columns :b
|
38
|
-
@c.first.values.must_equal(:id=>1, :b=>true, :y=>"0")
|
39
|
-
@c.add_pg_typecast_on_load_columns :y
|
40
|
-
@c.first.values.must_equal(:id=>1, :b=>true, :y=>0)
|
41
|
-
end
|
42
|
-
|
43
|
-
deprecated "should work with subclasses" do
|
44
|
-
@c = Class.new(Sequel::Model(@db[:items]))
|
45
|
-
@c.plugin :pg_typecast_on_load
|
46
|
-
@c.first.values.must_equal(:id=>1, :b=>"t", :y=>"0")
|
47
|
-
|
48
|
-
c1 = Class.new(@c)
|
49
|
-
@c.add_pg_typecast_on_load_columns :b
|
50
|
-
@c.first.values.must_equal(:id=>1, :b=>true, :y=>"0")
|
51
|
-
c1.first.values.must_equal(:id=>1, :b=>"t", :y=>"0")
|
52
|
-
|
53
|
-
c2 = Class.new(@c)
|
54
|
-
@c.add_pg_typecast_on_load_columns :y
|
55
|
-
@c.first.values.must_equal(:id=>1, :b=>true, :y=>0)
|
56
|
-
c2.first.values.must_equal(:id=>1, :b=>true, :y=>"0")
|
57
|
-
|
58
|
-
c1.add_pg_typecast_on_load_columns :y
|
59
|
-
c1.first.values.must_equal(:id=>1, :b=>"t", :y=>0)
|
60
|
-
end
|
61
|
-
|
62
|
-
deprecated "should not mark the object as modified" do
|
63
|
-
@c.first.modified?.must_equal false
|
64
|
-
end
|
65
|
-
|
66
|
-
deprecated "should freeze pg_typecast_on_load_columns" do
|
67
|
-
@c.freeze
|
68
|
-
@c.pg_typecast_on_load_columns.frozen?.must_equal true
|
69
|
-
end
|
70
|
-
end
|
@@ -1,212 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
2
|
-
|
3
|
-
describe "Sequel::Plugins::PreparedStatementsAssociations" do
|
4
|
-
before do
|
5
|
-
deprecated do
|
6
|
-
@db = Sequel.mock(:servers=>{:foo=>{}})
|
7
|
-
@db.extend_datasets do
|
8
|
-
def select_sql
|
9
|
-
sql = super
|
10
|
-
sql << ' -- prepared' if is_a?(Sequel::Dataset::PreparedStatementMethods)
|
11
|
-
sql
|
12
|
-
end
|
13
|
-
end
|
14
|
-
@Artist = Class.new(Sequel::Model(@db[:artists]))
|
15
|
-
@Artist.columns :id, :id2
|
16
|
-
@Album= Class.new(Sequel::Model(@db[:albums]))
|
17
|
-
@Album.columns :id, :artist_id, :id2, :artist_id2
|
18
|
-
@Tag = Class.new(Sequel::Model(@db[:tags]))
|
19
|
-
@Tag.columns :id, :id2
|
20
|
-
@Artist.plugin :prepared_statements_associations
|
21
|
-
@Album.plugin :prepared_statements_associations
|
22
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
23
|
-
@Artist.one_to_one :album, :class=>@Album, :key=>:artist_id
|
24
|
-
@Album.many_to_one :artist, :class=>@Artist
|
25
|
-
@Album.many_to_many :tags, :class=>@Tag, :join_table=>:albums_tags, :left_key=>:album_id
|
26
|
-
@Album.one_through_one :tag, :clone=>:tags
|
27
|
-
@Artist.plugin :many_through_many
|
28
|
-
@Artist.many_through_many :tags, [[:albums, :artist_id, :id], [:albums_tags, :album_id, :tag_id]], :class=>@Tag
|
29
|
-
@Artist.one_through_many :tag, :clone=>:tags
|
30
|
-
@db.sqls
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
deprecated "should run correct SQL for associations" do
|
35
|
-
@Artist.load(:id=>1).albums
|
36
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE (albums.artist_id = 1) -- prepared"]
|
37
|
-
|
38
|
-
@Artist.load(:id=>1).album
|
39
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE (albums.artist_id = 1) LIMIT 1 -- prepared"]
|
40
|
-
|
41
|
-
@Album.load(:id=>1, :artist_id=>2).artist
|
42
|
-
@db.sqls.must_equal ["SELECT id, id2 FROM artists WHERE (artists.id = 2) LIMIT 1 -- prepared"]
|
43
|
-
|
44
|
-
@Album.load(:id=>1, :artist_id=>2).tags
|
45
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1) -- prepared"]
|
46
|
-
|
47
|
-
@Album.load(:id=>1, :artist_id=>2).tag
|
48
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1) LIMIT 1 -- prepared"]
|
49
|
-
|
50
|
-
@Artist.load(:id=>1).tags
|
51
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) WHERE (albums.artist_id = 1) -- prepared"]
|
52
|
-
|
53
|
-
@Artist.load(:id=>1).tag
|
54
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) WHERE (albums.artist_id = 1) LIMIT 1 -- prepared"]
|
55
|
-
end
|
56
|
-
|
57
|
-
deprecated "should run correct shard for associations when also using sharding plugin" do
|
58
|
-
@Artist.plugin :sharding
|
59
|
-
@Album.plugin :sharding
|
60
|
-
|
61
|
-
@Artist.load(:id=>1).set_server(:foo).albums
|
62
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE (albums.artist_id = 1) -- prepared -- foo"]
|
63
|
-
|
64
|
-
@Artist.load(:id=>1).set_server(:foo).album
|
65
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE (albums.artist_id = 1) LIMIT 1 -- prepared -- foo"]
|
66
|
-
|
67
|
-
@Album.load(:id=>1, :artist_id=>2).set_server(:foo).artist
|
68
|
-
@db.sqls.must_equal ["SELECT id, id2 FROM artists WHERE (artists.id = 2) LIMIT 1 -- prepared -- foo"]
|
69
|
-
|
70
|
-
@Album.load(:id=>1, :artist_id=>2).set_server(:foo).tags
|
71
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1) -- prepared -- foo"]
|
72
|
-
|
73
|
-
@Album.load(:id=>1, :artist_id=>2).set_server(:foo).tag
|
74
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) WHERE (albums_tags.album_id = 1) LIMIT 1 -- prepared -- foo"]
|
75
|
-
|
76
|
-
@Artist.load(:id=>1).set_server(:foo).tags
|
77
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) WHERE (albums.artist_id = 1) -- prepared -- foo"]
|
78
|
-
|
79
|
-
@Artist.load(:id=>1).set_server(:foo).tag
|
80
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) WHERE (albums.artist_id = 1) LIMIT 1 -- prepared -- foo"]
|
81
|
-
|
82
|
-
@Tag.plugin :sharding
|
83
|
-
@Tag.plugin :prepared_statements_associations
|
84
|
-
@Tag.many_to_many :albums, :class=>@Album, :join_table=>:albums_tags, :left_key=>:tag_id
|
85
|
-
@Tag.load(:id=>1).set_server(:foo).albums
|
86
|
-
@db.sqls.must_equal ["SELECT albums.id, albums.artist_id, albums.id2, albums.artist_id2 FROM albums INNER JOIN albums_tags ON (albums_tags.album_id = albums.id) WHERE (albums_tags.tag_id = 1) -- prepared -- foo"]
|
87
|
-
end
|
88
|
-
|
89
|
-
deprecated "should not override the shard for associations if not using the sharding plugin" do
|
90
|
-
@Artist.load(:id=>1).set_server(:foo).albums
|
91
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE (albums.artist_id = 1) -- prepared"]
|
92
|
-
end
|
93
|
-
|
94
|
-
deprecated "should run correct SQL for composite key associations" do
|
95
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>[:artist_id, :artist_id2], :primary_key=>[:id, :id2]
|
96
|
-
@Artist.one_to_one :album, :class=>@Album, :key=>[:artist_id, :artist_id2], :primary_key=>[:id, :id2]
|
97
|
-
@Album.many_to_one :artist, :class=>@Artist, :key=>[:artist_id, :artist_id2], :primary_key=>[:id, :id2]
|
98
|
-
@Album.many_to_many :tags, :class=>@Tag, :join_table=>:albums_tags, :left_key=>[:album_id, :album_id2], :right_key=>[:tag_id, :tag_id2], :right_primary_key=>[:id, :id2], :left_primary_key=>[:id, :id2]
|
99
|
-
@Album.one_through_one :tag, :clone=>:tags
|
100
|
-
|
101
|
-
@Artist.many_through_many :tags, [[:albums, [:artist_id, :artist_id2], [:id, :id2]], [:albums_tags, [:album_id, :album_id2], [:tag_id, :tag_id2]]], :class=>@Tag, :right_primary_key=>[:id, :id2], :left_primary_key=>[:id, :id2]
|
102
|
-
@Artist.one_through_many :tag, :clone=>:tags
|
103
|
-
|
104
|
-
@Artist.load(:id=>1, :id2=>2).albums
|
105
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE ((albums.artist_id = 1) AND (albums.artist_id2 = 2)) -- prepared"]
|
106
|
-
|
107
|
-
@Artist.load(:id=>1, :id2=>2).album
|
108
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE ((albums.artist_id = 1) AND (albums.artist_id2 = 2)) LIMIT 1 -- prepared"]
|
109
|
-
|
110
|
-
@Album.load(:id=>1, :artist_id=>2, :artist_id2=>3).artist
|
111
|
-
@db.sqls.must_equal ["SELECT id, id2 FROM artists WHERE ((artists.id = 2) AND (artists.id2 = 3)) LIMIT 1 -- prepared"]
|
112
|
-
|
113
|
-
@Album.load(:id=>1, :artist_id=>2, :id2=>3).tags
|
114
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON ((albums_tags.tag_id = tags.id) AND (albums_tags.tag_id2 = tags.id2)) WHERE ((albums_tags.album_id = 1) AND (albums_tags.album_id2 = 3)) -- prepared"]
|
115
|
-
|
116
|
-
@Album.load(:id=>1, :artist_id=>2, :id2=>3).tag
|
117
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON ((albums_tags.tag_id = tags.id) AND (albums_tags.tag_id2 = tags.id2)) WHERE ((albums_tags.album_id = 1) AND (albums_tags.album_id2 = 3)) LIMIT 1 -- prepared"]
|
118
|
-
|
119
|
-
@Artist.load(:id=>1, :id2=>2).tags
|
120
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON ((albums_tags.tag_id = tags.id) AND (albums_tags.tag_id2 = tags.id2)) INNER JOIN albums ON ((albums.id = albums_tags.album_id) AND (albums.id2 = albums_tags.album_id2)) WHERE ((albums.artist_id = 1) AND (albums.artist_id2 = 2)) -- prepared"]
|
121
|
-
|
122
|
-
@Artist.load(:id=>1, :id2=>2).tag
|
123
|
-
@db.sqls.must_equal ["SELECT tags.id, tags.id2 FROM tags INNER JOIN albums_tags ON ((albums_tags.tag_id = tags.id) AND (albums_tags.tag_id2 = tags.id2)) INNER JOIN albums ON ((albums.id = albums_tags.album_id) AND (albums.id2 = albums_tags.album_id2)) WHERE ((albums.artist_id = 1) AND (albums.artist_id2 = 2)) LIMIT 1 -- prepared"]
|
124
|
-
end
|
125
|
-
|
126
|
-
deprecated "should not run query if no objects can be associated" do
|
127
|
-
@Artist.new.albums.must_equal []
|
128
|
-
@Album.new.artist.must_be_nil
|
129
|
-
@db.sqls.must_equal []
|
130
|
-
end
|
131
|
-
|
132
|
-
deprecated "should run a regular query if not caching association metadata" do
|
133
|
-
@Artist.cache_associations = false
|
134
|
-
@Artist.load(:id=>1).albums
|
135
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1)"]
|
136
|
-
@Artist.load(:id=>1).album
|
137
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1) LIMIT 1"]
|
138
|
-
end
|
139
|
-
|
140
|
-
deprecated "should run a regular query if there is a callback" do
|
141
|
-
@Artist.load(:id=>1).albums(proc{|ds| ds})
|
142
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1)"]
|
143
|
-
@Artist.load(:id=>1).album(proc{|ds| ds})
|
144
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1) LIMIT 1"]
|
145
|
-
end
|
146
|
-
|
147
|
-
deprecated "should run a regular query if there is a block" do
|
148
|
-
@Artist.load(:id=>1).albums{|ds| ds}
|
149
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1)"]
|
150
|
-
@Artist.load(:id=>1).album{|ds| ds}
|
151
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1) LIMIT 1"]
|
152
|
-
end
|
153
|
-
|
154
|
-
deprecated "should run a regular query if :prepared_statement=>false option is used for the association" do
|
155
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id, :prepared_statement=>false
|
156
|
-
@Artist.load(:id=>1).albums
|
157
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1)"]
|
158
|
-
end
|
159
|
-
|
160
|
-
deprecated "should run a regular query if unrecognized association is used" do
|
161
|
-
a = @Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
162
|
-
a[:type] = :foo
|
163
|
-
@Artist.load(:id=>1).albums
|
164
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1)"]
|
165
|
-
end
|
166
|
-
|
167
|
-
deprecated "should run a regular query if a block is used when defining the association" do
|
168
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id do |ds| ds end
|
169
|
-
@Artist.load(:id=>1).albums
|
170
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1)"]
|
171
|
-
end
|
172
|
-
|
173
|
-
deprecated "should use a prepared statement if the associated dataset has conditions" do
|
174
|
-
@Album.dataset = @Album.dataset.where(:a=>2)
|
175
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id
|
176
|
-
@Artist.load(:id=>1).albums
|
177
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE ((a = 2) AND (albums.artist_id = 1)) -- prepared"]
|
178
|
-
end
|
179
|
-
|
180
|
-
deprecated "should use a prepared statement if the :conditions association option" do
|
181
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id, :conditions=>{:a=>2}
|
182
|
-
@Artist.load(:id=>1).albums
|
183
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE ((a = 2) AND (albums.artist_id = 1)) -- prepared"]
|
184
|
-
end
|
185
|
-
|
186
|
-
deprecated "should not use a prepared statement if :conditions association option uses an identifier" do
|
187
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id, :conditions=>{Sequel.identifier('a')=>2}
|
188
|
-
@Artist.load(:id=>1).albums
|
189
|
-
@db.sqls.must_equal ["SELECT id, artist_id, id2, artist_id2 FROM albums WHERE ((a = 2) AND (albums.artist_id = 1)) -- prepared"]
|
190
|
-
end
|
191
|
-
|
192
|
-
deprecated "should run a regular query if :dataset option is used when defining the association" do
|
193
|
-
album = @Album
|
194
|
-
@Artist.one_to_many :albums, :class=>@Album, :dataset=>proc{album.filter(:artist_id=>id)}
|
195
|
-
@Artist.load(:id=>1).albums
|
196
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (artist_id = 1)"]
|
197
|
-
end
|
198
|
-
|
199
|
-
deprecated "should run a regular query if :cloning an association that doesn't used prepared statements" do
|
200
|
-
@Artist.one_to_many :albums, :class=>@Album, :key=>:artist_id do |ds| ds end
|
201
|
-
@Artist.one_to_many :oalbums, :clone=>:albums
|
202
|
-
@Artist.load(:id=>1).oalbums
|
203
|
-
@db.sqls.must_equal ["SELECT * FROM albums WHERE (albums.artist_id = 1)"]
|
204
|
-
end
|
205
|
-
|
206
|
-
deprecated "should work correctly when using an instance specific association" do
|
207
|
-
tag = @Tag
|
208
|
-
@Artist.many_to_one :tag, :key=>nil, :read_only=>true, :dataset=>proc{tag.where(:id=>id).limit(1)}, :reciprocal=>nil, :reciprocal_type=>nil
|
209
|
-
@Artist.load(:id=>1).tag.must_be_nil
|
210
|
-
@db.sqls.must_equal ["SELECT * FROM tags WHERE (id = 1) LIMIT 1"]
|
211
|
-
end
|
212
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
2
|
-
|
3
|
-
describe "prepared_statements_with_pk plugin" do
|
4
|
-
before do
|
5
|
-
deprecated do
|
6
|
-
@db = Sequel.mock(:fetch=>{:id=>1, :name=>'foo', :i=>2}, :autoid=>proc{|sql| 1}, :numrows=>1, :servers=>{:read_only=>{}})
|
7
|
-
@c = Class.new(Sequel::Model(@db[:people]))
|
8
|
-
@c.columns :id, :name, :i
|
9
|
-
@c.plugin :prepared_statements_with_pk
|
10
|
-
@p = @c.load(:id=>1, :name=>'foo', :i=>2)
|
11
|
-
@db.sqls
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
deprecated "should load the prepared_statements plugin" do
|
16
|
-
@c.plugins.must_include(Sequel::Plugins::PreparedStatements)
|
17
|
-
end
|
18
|
-
|
19
|
-
deprecated "should correctly lookup by primary key from dataset" do
|
20
|
-
@c.dataset.filter(:name=>'foo')[1].must_equal @p
|
21
|
-
@c.db.sqls.must_equal ["SELECT * FROM people WHERE ((name = 'foo') AND (people.id = 1)) LIMIT 1 -- read_only"]
|
22
|
-
end
|
23
|
-
|
24
|
-
deprecated "should still work correctly if there are multiple conflicting variables" do
|
25
|
-
@c.dataset.filter(:name=>'foo').or(:name=>'bar')[1].must_equal @p
|
26
|
-
@c.db.sqls.must_equal ["SELECT * FROM people WHERE (((name = 'foo') OR (name = 'bar')) AND (people.id = 1)) LIMIT 1 -- read_only"]
|
27
|
-
end
|
28
|
-
|
29
|
-
deprecated "should still work correctly if the primary key is used elsewhere in the query" do
|
30
|
-
@c.dataset.filter{id > 2}[1].must_equal @p
|
31
|
-
@c.db.sqls.must_equal ["SELECT * FROM people WHERE ((id > 2) AND (people.id = 1)) LIMIT 1 -- read_only"]
|
32
|
-
end
|
33
|
-
|
34
|
-
deprecated "should respect explicitly set server" do
|
35
|
-
@c.dataset.filter(:name=>'foo')[1].must_equal @p
|
36
|
-
@c.db.sqls.must_equal ["SELECT * FROM people WHERE ((name = 'foo') AND (people.id = 1)) LIMIT 1 -- read_only"]
|
37
|
-
@c.dataset.server(:default).filter(:name=>'foo')[1].must_equal @p
|
38
|
-
@c.db.sqls.must_equal ["SELECT * FROM people WHERE ((name = 'foo') AND (people.id = 1)) LIMIT 1"]
|
39
|
-
end
|
40
|
-
end
|
@@ -1,185 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
2
|
-
|
3
|
-
describe "query_literals extension" do
|
4
|
-
before do
|
5
|
-
deprecated do
|
6
|
-
@ds = Sequel.mock.dataset.from(:t).extension(:query_literals)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should not use special support if given a block" do
|
11
|
-
@ds.select('a, b, c'){d}.sql.must_equal 'SELECT \'a, b, c\', d FROM t'
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should have #select use literal string if given a single string" do
|
15
|
-
@ds.select('a, b, c').sql.must_equal 'SELECT a, b, c FROM t'
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should have #select use placeholder literal string if given a string and additional arguments" do
|
19
|
-
@ds.select('a, b, ?', 1).sql.must_equal 'SELECT a, b, 1 FROM t'
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should have #select work the standard way if initial string is a literal string already" do
|
23
|
-
@ds.select(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT a, b, ?, 1 FROM t'
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should have #select work regularly if not given a string as the first argument" do
|
27
|
-
@ds.select(:a, 1).sql.must_equal 'SELECT a, 1 FROM t'
|
28
|
-
end
|
29
|
-
|
30
|
-
describe 'with existing selection' do
|
31
|
-
before do
|
32
|
-
@ds = @ds.select(:d)
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should have #select_more use literal string if given a single string" do
|
36
|
-
@ds.select_more('a, b, c').sql.must_equal 'SELECT d, a, b, c FROM t'
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should have #select_more use placeholder literal string if given a string and additional arguments" do
|
40
|
-
@ds.select_more('a, b, ?', 1).sql.must_equal 'SELECT d, a, b, 1 FROM t'
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should have #select_more work the standard way if initial string is a literal string already" do
|
44
|
-
@ds.select_more(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT d, a, b, ?, 1 FROM t'
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should have #select_more work regularly if not given a string as the first argument" do
|
48
|
-
@ds.select_more(:a, 1).sql.must_equal 'SELECT d, a, 1 FROM t'
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should have #select_append use literal string if given a single string" do
|
53
|
-
@ds.select_append('a, b, c').sql.must_equal 'SELECT *, a, b, c FROM t'
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should have #select_append use placeholder literal string if given a string and additional arguments" do
|
57
|
-
@ds.select_append('a, b, ?', 1).sql.must_equal 'SELECT *, a, b, 1 FROM t'
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should have #select_append work the standard way if initial string is a literal string already" do
|
61
|
-
@ds.select_append(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT *, a, b, ?, 1 FROM t'
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should have #select_append work regularly if not given a string as the first argument" do
|
65
|
-
@ds.select_append(:a, 1).sql.must_equal 'SELECT *, a, 1 FROM t'
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should have #select_group use literal string if given a single string" do
|
69
|
-
@ds.select_group('a, b, c').sql.must_equal 'SELECT a, b, c FROM t GROUP BY a, b, c'
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should have #select_group use placeholder literal string if given a string and additional arguments" do
|
73
|
-
@ds.select_group('a, b, ?', 1).sql.must_equal 'SELECT a, b, 1 FROM t GROUP BY a, b, 1'
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should have #select_group work the standard way if initial string is a literal string already" do
|
77
|
-
@ds.select_group(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT a, b, ?, 1 FROM t GROUP BY a, b, ?, 1'
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should have #select_group work regularly if not given a string as the first argument" do
|
81
|
-
@ds.select_group(:a, 1).sql.must_equal 'SELECT a, 1 FROM t GROUP BY a, 1'
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should have #group use literal string if given a single string" do
|
85
|
-
@ds.group('a, b, c').sql.must_equal 'SELECT * FROM t GROUP BY a, b, c'
|
86
|
-
end
|
87
|
-
|
88
|
-
it "should have #group use placeholder literal string if given a string and additional arguments" do
|
89
|
-
@ds.group('a, b, ?', 1).sql.must_equal 'SELECT * FROM t GROUP BY a, b, 1'
|
90
|
-
end
|
91
|
-
|
92
|
-
it "should have #group work the standard way if initial string is a literal string already" do
|
93
|
-
@ds.group(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT * FROM t GROUP BY a, b, ?, 1'
|
94
|
-
end
|
95
|
-
|
96
|
-
it "should have #group work regularly if not given a string as the first argument" do
|
97
|
-
@ds.group(:a, 1).sql.must_equal 'SELECT * FROM t GROUP BY a, 1'
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should have #group_and_count use literal string if given a single string" do
|
101
|
-
@ds.group_and_count('a, b, c').sql.must_equal 'SELECT a, b, c, count(*) AS count FROM t GROUP BY a, b, c'
|
102
|
-
end
|
103
|
-
|
104
|
-
it "should have #group_and_count use placeholder literal string if given a string and additional arguments" do
|
105
|
-
@ds.group_and_count('a, b, ?', 1).sql.must_equal 'SELECT a, b, 1, count(*) AS count FROM t GROUP BY a, b, 1'
|
106
|
-
end
|
107
|
-
|
108
|
-
it "should have #group_and_count work the standard way if initial string is a literal string already" do
|
109
|
-
@ds.group_and_count(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT a, b, ?, 1, count(*) AS count FROM t GROUP BY a, b, ?, 1'
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should have #group_and_count work regularly if not given a string as the first argument" do
|
113
|
-
@ds.group_and_count(:a, 1).sql.must_equal 'SELECT a, 1, count(*) AS count FROM t GROUP BY a, 1'
|
114
|
-
end
|
115
|
-
|
116
|
-
it "should have #group_append use literal string if given a single string" do
|
117
|
-
@ds.group(:d).group_append('a, b, c').sql.must_equal 'SELECT * FROM t GROUP BY d, a, b, c'
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should have #group_append use placeholder literal string if given a string and additional arguments" do
|
121
|
-
@ds.group(:d).group_append('a, b, ?', 1).sql.must_equal 'SELECT * FROM t GROUP BY d, a, b, 1'
|
122
|
-
end
|
123
|
-
|
124
|
-
it "should have #group_append work the standard way if initial string is a literal string already" do
|
125
|
-
@ds.group(:d).group_append(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT * FROM t GROUP BY d, a, b, ?, 1'
|
126
|
-
end
|
127
|
-
|
128
|
-
it "should have #group_append work regularly if not given a string as the first argument" do
|
129
|
-
@ds.group(:d).group_append(:a, 1).sql.must_equal 'SELECT * FROM t GROUP BY d, a, 1'
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should have #order use literal string if given a single string" do
|
133
|
-
@ds.order('a, b, c').sql.must_equal 'SELECT * FROM t ORDER BY a, b, c'
|
134
|
-
end
|
135
|
-
|
136
|
-
it "should have #order use placeholder literal string if given a string and additional arguments" do
|
137
|
-
@ds.order('a, b, ?', 1).sql.must_equal 'SELECT * FROM t ORDER BY a, b, 1'
|
138
|
-
end
|
139
|
-
|
140
|
-
it "should have #order work the standard way if initial string is a literal string already" do
|
141
|
-
@ds.order(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT * FROM t ORDER BY a, b, ?, 1'
|
142
|
-
end
|
143
|
-
|
144
|
-
it "should have #order work regularly if not given a string as the first argument" do
|
145
|
-
@ds.order(:a, 1).sql.must_equal 'SELECT * FROM t ORDER BY a, 1'
|
146
|
-
end
|
147
|
-
|
148
|
-
describe 'with existing order' do
|
149
|
-
before do
|
150
|
-
@ds = @ds.order(:d)
|
151
|
-
end
|
152
|
-
|
153
|
-
it "should have #order_more use literal string if given a single string" do
|
154
|
-
@ds.order_more('a, b, c').sql.must_equal 'SELECT * FROM t ORDER BY d, a, b, c'
|
155
|
-
end
|
156
|
-
|
157
|
-
it "should have #order_more use placeholder literal string if given a string and additional arguments" do
|
158
|
-
@ds.order_more('a, b, ?', 1).sql.must_equal 'SELECT * FROM t ORDER BY d, a, b, 1'
|
159
|
-
end
|
160
|
-
|
161
|
-
it "should have #order_more work the standard way if initial string is a literal string already" do
|
162
|
-
@ds.order_more(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT * FROM t ORDER BY d, a, b, ?, 1'
|
163
|
-
end
|
164
|
-
|
165
|
-
it "should have #order_more work regularly if not given a string as the first argument" do
|
166
|
-
@ds.order_more(:a, 1).sql.must_equal 'SELECT * FROM t ORDER BY d, a, 1'
|
167
|
-
end
|
168
|
-
|
169
|
-
it "should have #order_prepend use literal string if given a single string" do
|
170
|
-
@ds.order_prepend('a, b, c').sql.must_equal 'SELECT * FROM t ORDER BY a, b, c, d'
|
171
|
-
end
|
172
|
-
|
173
|
-
it "should have #order_append use placeholder literal string if given a string and additional arguments" do
|
174
|
-
@ds.order_prepend('a, b, ?', 1).sql.must_equal 'SELECT * FROM t ORDER BY a, b, 1, d'
|
175
|
-
end
|
176
|
-
|
177
|
-
it "should have #order_append work the standard way if initial string is a literal string already" do
|
178
|
-
@ds.order_prepend(Sequel.lit('a, b, ?'), 1).sql.must_equal 'SELECT * FROM t ORDER BY a, b, ?, 1, d'
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should have #order_append work regularly if not given a string as the first argument" do
|
182
|
-
@ds.order_prepend(:a, 1).sql.must_equal 'SELECT * FROM t ORDER BY a, 1, d'
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|