Module: Sequel
- Extended by:
- DateParseInputHandler, DateTimeParseToTime, EvalInspect, FiberConcurrency, NamedTimezones, SQL::Builders, SQL::OperatorBuilders, SequelMethods, ThreadLocalTimezones
- Includes:
- SQL::Constants
- Defined in:
- lib/sequel/core.rb,
lib/sequel/sql.rb,
lib/sequel/model.rb,
lib/sequel/dataset.rb,
lib/sequel/version.rb,
lib/sequel/database.rb,
lib/sequel/timezones.rb,
lib/sequel/deprecated.rb,
lib/sequel/exceptions.rb,
lib/sequel/model/base.rb,
lib/sequel/dataset/sql.rb,
lib/sequel/adapters/ado.rb,
lib/sequel/dataset/misc.rb,
lib/sequel/model/errors.rb,
lib/sequel/plugins/enum.rb,
lib/sequel/plugins/list.rb,
lib/sequel/plugins/tree.rb,
lib/sequel/plugins/uuid.rb,
lib/sequel/adapters/jdbc.rb,
lib/sequel/adapters/mock.rb,
lib/sequel/adapters/odbc.rb,
lib/sequel/database/misc.rb,
lib/sequel/dataset/graph.rb,
lib/sequel/dataset/query.rb,
lib/sequel/model/plugins.rb,
lib/sequel/plugins/dirty.rb,
lib/sequel/plugins/touch.rb,
lib/sequel/adapters/ibmdb.rb,
lib/sequel/adapters/mysql.rb,
lib/sequel/database/query.rb,
lib/sequel/plugins/finder.rb,
lib/sequel/plugins/pg_row.rb,
lib/sequel/adapters/mysql2.rb,
lib/sequel/adapters/oracle.rb,
lib/sequel/adapters/sqlite.rb,
lib/sequel/ast_transformer.rb,
lib/sequel/dataset/actions.rb,
lib/sequel/plugins/caching.rb,
lib/sequel/adapters/jdbc/h2.rb,
lib/sequel/adapters/tinytds.rb,
lib/sequel/database/dataset.rb,
lib/sequel/database/logging.rb,
lib/sequel/dataset/features.rb,
lib/sequel/extensions/query.rb,
lib/sequel/model/exceptions.rb,
lib/sequel/plugins/sharding.rb,
lib/sequel/adapters/jdbc/db2.rb,
lib/sequel/adapters/postgres.rb,
lib/sequel/database/features.rb,
lib/sequel/extensions/pg_row.rb,
lib/sequel/extensions/to_dot.rb,
lib/sequel/model/inflections.rb,
lib/sequel/plugins/rcte_tree.rb,
lib/sequel/adapters/ado/mssql.rb,
lib/sequel/adapters/jdbc/jtds.rb,
lib/sequel/extensions/pg_enum.rb,
lib/sequel/extensions/pg_inet.rb,
lib/sequel/extensions/pg_json.rb,
lib/sequel/model/associations.rb,
lib/sequel/plugins/eager_each.rb,
lib/sequel/plugins/subclasses.rb,
lib/sequel/plugins/timestamps.rb,
lib/sequel/adapters/ado/access.rb,
lib/sequel/adapters/amalgalite.rb,
lib/sequel/adapters/jdbc/derby.rb,
lib/sequel/adapters/jdbc/mssql.rb,
lib/sequel/adapters/jdbc/mysql.rb,
lib/sequel/adapters/odbc/mssql.rb,
lib/sequel/adapters/shared/db2.rb,
lib/sequel/database/connecting.rb,
lib/sequel/extensions/pg_array.rb,
lib/sequel/extensions/pg_range.rb,
lib/sequel/plugins/composition.rb,
lib/sequel/adapters/jdbc/hsqldb.rb,
lib/sequel/adapters/jdbc/oracle.rb,
lib/sequel/adapters/jdbc/sqlite.rb,
lib/sequel/adapters/sqlanywhere.rb,
lib/sequel/extensions/error_sql.rb,
lib/sequel/extensions/integer64.rb,
lib/sequel/extensions/migration.rb,
lib/sequel/extensions/pg_hstore.rb,
lib/sequel/model/dataset_module.rb,
lib/sequel/plugins/active_model.rb,
lib/sequel/plugins/split_values.rb,
lib/sequel/plugins/sql_comments.rb,
lib/sequel/plugins/static_cache.rb,
lib/sequel/plugins/table_select.rb,
lib/sequel/adapters/shared/mssql.rb,
lib/sequel/adapters/shared/mysql.rb,
lib/sequel/database/transactions.rb,
lib/sequel/extensions/graph_each.rb,
lib/sequel/extensions/pagination.rb,
lib/sequel/extensions/pg_row_ops.rb,
lib/sequel/extensions/string_agg.rb,
lib/sequel/plugins/column_select.rb,
lib/sequel/plugins/serialization.rb,
lib/sequel/adapters/shared/access.rb,
lib/sequel/adapters/shared/oracle.rb,
lib/sequel/adapters/shared/sqlite.rb,
lib/sequel/adapters/utils/replace.rb,
lib/sequel/dataset/dataset_module.rb,
lib/sequel/extensions/pg_inet_ops.rb,
lib/sequel/extensions/pg_interval.rb,
lib/sequel/extensions/pg_json_ops.rb,
lib/sequel/plugins/csv_serializer.rb,
lib/sequel/plugins/error_splitter.rb,
lib/sequel/plugins/force_encoding.rb,
lib/sequel/plugins/instance_hooks.rb,
lib/sequel/plugins/throw_failures.rb,
lib/sequel/plugins/update_refresh.rb,
lib/sequel/plugins/xml_serializer.rb,
lib/sequel/adapters/jdbc/sqlserver.rb,
lib/sequel/database/schema_methods.rb,
lib/sequel/extensions/escaped_like.rb,
lib/sequel/extensions/eval_inspect.rb,
lib/sequel/extensions/null_dataset.rb,
lib/sequel/extensions/pg_array_ops.rb,
lib/sequel/extensions/pg_range_ops.rb,
lib/sequel/extensions/pretty_table.rb,
lib/sequel/extensions/server_block.rb,
lib/sequel/extensions/sql_comments.rb,
lib/sequel/plugins/association_pks.rb,
lib/sequel/plugins/boolean_readers.rb,
lib/sequel/plugins/boolean_subsets.rb,
lib/sequel/plugins/columns_updated.rb,
lib/sequel/plugins/defaults_setter.rb,
lib/sequel/plugins/insert_conflict.rb,
lib/sequel/plugins/json_serializer.rb,
lib/sequel/plugins/lazy_attributes.rb,
lib/sequel/plugins/string_stripper.rb,
lib/sequel/adapters/jdbc/postgresql.rb,
lib/sequel/adapters/shared/postgres.rb,
lib/sequel/extensions/_model_pg_row.rb,
lib/sequel/extensions/_pretty_table.rb,
lib/sequel/extensions/any_not_empty.rb,
lib/sequel/extensions/index_caching.rb,
lib/sequel/extensions/pg_hstore_ops.rb,
lib/sequel/extensions/pg_multirange.rb,
lib/sequel/extensions/schema_dumper.rb,
lib/sequel/extensions/select_remove.rb,
lib/sequel/plugins/accessed_columns.rb,
lib/sequel/plugins/after_initialize.rb,
lib/sequel/plugins/auto_validations.rb,
lib/sequel/plugins/column_conflicts.rb,
lib/sequel/plugins/forbid_lazy_load.rb,
lib/sequel/plugins/instance_filters.rb,
lib/sequel/plugins/inverted_subsets.rb,
lib/sequel/plugins/typecast_on_load.rb,
lib/sequel/plugins/unlimited_update.rb,
lib/sequel/plugins/update_or_create.rb,
lib/sequel/adapters/jdbc/sqlanywhere.rb,
lib/sequel/database/dataset_defaults.rb,
lib/sequel/database/schema_generator.rb,
lib/sequel/extensions/caller_logging.rb,
lib/sequel/extensions/pg_loose_count.rb,
lib/sequel/extensions/pg_timestamptz.rb,
lib/sequel/extensions/schema_caching.rb,
lib/sequel/extensions/server_logging.rb,
lib/sequel/model/default_inflections.rb,
lib/sequel/plugins/async_thread_pool.rb,
lib/sequel/plugins/before_after_save.rb,
lib/sequel/plugins/column_encryption.rb,
lib/sequel/plugins/eager_graph_eager.rb,
lib/sequel/plugins/input_transformer.rb,
lib/sequel/plugins/many_through_many.rb,
lib/sequel/plugins/nested_attributes.rb,
lib/sequel/plugins/subset_conditions.rb,
lib/sequel/adapters/jdbc/transactions.rb,
lib/sequel/extensions/date_arithmetic.rb,
lib/sequel/extensions/exclude_or_null.rb,
lib/sequel/extensions/named_timezones.rb,
lib/sequel/extensions/split_array_nil.rb,
lib/sequel/extensions/sqlite_json_ops.rb,
lib/sequel/extensions/synchronize_sql.rb,
lib/sequel/plugins/blacklist_security.rb,
lib/sequel/plugins/def_dataset_method.rb,
lib/sequel/plugins/hook_class_methods.rb,
lib/sequel/plugins/optimistic_locking.rb,
lib/sequel/plugins/static_cache_cache.rb,
lib/sequel/plugins/update_primary_key.rb,
lib/sequel/plugins/validation_helpers.rb,
lib/sequel/plugins/whitelist_security.rb,
lib/sequel/adapters/shared/sqlanywhere.rb,
lib/sequel/adapters/utils/mysql_mysql2.rb,
lib/sequel/dataset/prepared_statements.rb,
lib/sequel/extensions/is_distinct_from.rb,
lib/sequel/extensions/round_timestamps.rb,
lib/sequel/plugins/association_proxies.rb,
lib/sequel/plugins/prepared_statements.rb,
lib/sequel/plugins/skip_create_refresh.rb,
lib/sequel/plugins/skip_saving_columns.rb,
lib/sequel/plugins/unused_associations.rb,
lib/sequel/plugins/validate_associated.rb,
lib/sequel/plugins/validation_contexts.rb,
lib/sequel/extensions/arbitrary_servers.rb,
lib/sequel/extensions/async_thread_pool.rb,
lib/sequel/extensions/fiber_concurrency.rb,
lib/sequel/extensions/implicit_subquery.rb,
lib/sequel/plugins/dataset_associations.rb,
lib/sequel/plugins/singular_table_names.rb,
lib/sequel/extensions/looser_typecasting.rb,
lib/sequel/extensions/sql_log_normalizer.rb,
lib/sequel/plugins/delay_add_association.rb,
lib/sequel/plugins/pg_array_associations.rb,
lib/sequel/adapters/utils/columns_limit_1.rb,
lib/sequel/extensions/identifier_mangling.rb,
lib/sequel/plugins/constraint_validations.rb,
lib/sequel/plugins/modification_detection.rb,
lib/sequel/plugins/tactical_eager_loading.rb,
lib/sequel/dataset/placeholder_literalizer.rb,
lib/sequel/extensions/auto_literal_strings.rb,
lib/sequel/extensions/connection_validator.rb,
lib/sequel/extensions/dataset_source_alias.rb,
lib/sequel/plugins/class_table_inheritance.rb,
lib/sequel/plugins/insert_returning_select.rb,
lib/sequel/adapters/utils/stored_procedures.rb,
lib/sequel/extensions/columns_introspection.rb,
lib/sequel/extensions/connection_expiration.rb,
lib/sequel/extensions/constant_sql_override.rb,
lib/sequel/plugins/association_dependencies.rb,
lib/sequel/plugins/concurrent_eager_loading.rb,
lib/sequel/plugins/empty_failure_backtraces.rb,
lib/sequel/plugins/mssql_optimistic_locking.rb,
lib/sequel/plugins/prepared_statements_safe.rb,
lib/sequel/plugins/single_table_inheritance.rb,
lib/sequel/plugins/validation_class_methods.rb,
lib/sequel/extensions/constraint_validations.rb,
lib/sequel/extensions/thread_local_timezones.rb,
lib/sequel/plugins/auto_restrict_eager_graph.rb,
lib/sequel/plugins/instance_specific_default.rb,
lib/sequel/extensions/pg_static_cache_updater.rb,
lib/sequel/extensions/date_parse_input_handler.rb,
lib/sequel/extensions/pg_extended_date_support.rb,
lib/sequel/extensions/sequel_4_dataset_methods.rb,
lib/sequel/extensions/virtual_row_method_block.rb,
lib/sequel/extensions/duplicate_columns_handler.rb,
lib/sequel/plugins/association_multi_add_remove.rb,
lib/sequel/adapters/utils/unmodified_identifiers.rb,
lib/sequel/extensions/current_datetime_timestamp.rb,
lib/sequel/extensions/empty_array_consider_nulls.rb,
lib/sequel/plugins/association_lazy_eager_option.rb,
lib/sequel/plugins/pg_auto_constraint_validations.rb,
lib/sequel/adapters/utils/mysql_prepared_statements.rb,
lib/sequel/extensions/_model_constraint_validations.rb,
lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb,
lib/sequel/plugins/serialization_modification_detection.rb,
lib/sequel/adapters/utils/emulate_offset_with_row_number.rb,
lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb,
lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb
Overview
The duplicate_columns_handler extension allows you to customize handling of duplicate column names in your queries on a per-database or per-dataset level.
For example, you may want to raise an exception if you join 2 tables together which contains a column that will override another columns.
To use the extension, you need to load the extension into the database:
DB.extension :duplicate_columns_handler
or into individual datasets:
ds = DB[:items].extension(:duplicate_columns_handler)
A database option is introduced: :on_duplicate_columns. It accepts a Symbol or any object that responds to :call.
on_duplicate_columns: :raise
on_duplicate_columns: :warn
on_duplicate_columns: :ignore
on_duplicate_columns: lambda{|columns| arbitrary_condition? ? :raise : :warn}
You may also configure duplicate columns handling for a specific dataset:
ds.on_duplicate_columns(:warn)
ds.on_duplicate_columns(:raise)
ds.on_duplicate_columns(:ignore)
ds.on_duplicate_columns{|columns| arbitrary_condition? ? :raise : :warn}
ds.on_duplicate_columns(lambda{|columns| arbitrary_condition? ? :raise : :warn})
If :raise is specified, a Sequel::DuplicateColumnError is raised. If :warn is specified, you will receive a warning via warn
. If a callable is specified, it will be called. If no on_duplicate_columns is specified, the default is :warn.
Related module: Sequel::DuplicateColumnsHandler
Defined Under Namespace
Modules: ADO, Access, Amalgalite, AnyNotEmpty, ArbitraryServers, CallerLogging, ColumnsIntrospection, ConnectionExpiration, ConnectionValidator, ConstantSqlOverride, ConstraintValidations, CoreRefinements, CurrentDateTimeTimestamp, DB2, DatabaseQuery, DatasetPagination, DatasetPrinter, DatasetQuery, DateParseInputHandler, DateTimeParseToTime, Deprecation, DuplicateColumnsHandler, EmptyArrayConsiderNulls, EmulateOffsetWithReverseAndCount, EmulateOffsetWithRowNumber, ErrorSQL, EvalInspect, ExcludeOrNull, FiberConcurrency, GraphEach, IBMDB, IdentifierMangling, IndexCaching, Inflections, Integer64, JDBC, LooserTypecasting, MSSQL, Mock, MySQL, Mysql2, NamedTimezones, ODBC, Oracle, Plugins, Postgres, PrettyTable, S, SQL, SQLComments, SQLLogNormalizer, SQLite, Schema, SchemaCaching, SchemaDumper, SelectRemove, Sequel4DatasetMethods, SequelMethods, ServerBlock, ServerLogging, SqlAnywhere, SymbolAref, SymbolAs, ThreadLocalTimezones, ThreadedServerBlock, TinyTDS, UnmodifiedIdentifiers, UnthreadedServerBlock Classes: ASTTransformer, BasicObject, ConnectionPool, Database, DatabaseError, Dataset, DuplicateColumnError, Error, HookFailed, IntegerMigrator, LiteralString, Migration, MigrationAlterTableReverser, MigrationDSL, MigrationReverser, Migrator, Model, NoMatchingRow, Qualifier, SQLTime, ShardedSingleConnectionPool, ShardedThreadedConnectionPool, SimpleMigration, SingleConnectionPool, ThreadedConnectionPool, TimestampMigrator, ToDot, ValidationFailed
Constant Summary collapse
- VIRTUAL_ROW =
new
- OPTS =
Frozen hash used as the default options hash for most options.
{}.freeze
- SPLIT_SYMBOL_CACHE =
{}
- MAJOR =
The major version of Sequel. Only bumped for major changes.
5
- MINOR =
The minor version of Sequel. Bumped for every non-patch level release, generally around once a month.
58
- TINY =
The tiny version of Sequel. Usually 0, only bumped for bugfix releases that fix regressions from previous versions.
0
- VERSION =
The version of Sequel you are using, as a string (e.g. “2.11.0”)
[MAJOR, MINOR, TINY].join('.').freeze
- VERSION_NUMBER =
The version of Sequel you are using, as a number (2.11.0 -> 20110)
MAJOR*10000 + MINOR*10 + TINY
- ADAPTER_MAP =
Hash of adapters that have been used. The key is the adapter scheme symbol, and the value is the Database subclass.
{}
- SHARED_ADAPTER_MAP =
Hash of shared adapters that have been registered. The key is the adapter scheme symbol, and the value is the Sequel module containing the shared adapter.
{}
- DATABASES =
Array of all databases to which Sequel has connected. If you are developing an application that can connect to an arbitrary number of databases, delete the database objects from this (or use the :keep_reference Database option or a block when connecting) or they will not get garbage collected.
[]
- Timezones =
Backwards compatible alias
SequelMethods
- DEFAULT_INFLECTIONS_PROC =
Proc that is instance_execed to create the default inflections for both the model inflector and the inflector extension.
proc do plural(/$/, 's') plural(/s$/i, 's') plural(/(alias|(?:stat|octop|vir|b)us)$/i, '\1es') plural(/(buffal|tomat)o$/i, '\1oes') plural(/([ti])um$/i, '\1a') plural(/sis$/i, 'ses') plural(/(?:([^f])fe|([lr])f)$/i, '\1\2ves') plural(/(hive)$/i, '\1s') plural(/([^aeiouy]|qu)y$/i, '\1ies') plural(/(x|ch|ss|sh)$/i, '\1es') plural(/(matr|vert|ind)ix|ex$/i, '\1ices') plural(/([m|l])ouse$/i, '\1ice') singular(/s$/i, '') singular(/([ti])a$/i, '\1um') singular(/(analy|ba|cri|diagno|parenthe|progno|synop|the)ses$/i, '\1sis') singular(/([^f])ves$/i, '\1fe') singular(/([h|t]ive)s$/i, '\1') singular(/([lr])ves$/i, '\1f') singular(/([^aeiouy]|qu)ies$/i, '\1y') singular(/(m)ovies$/i, '\1ovie') singular(/(x|ch|ss|sh)es$/i, '\1') singular(/([m|l])ice$/i, '\1ouse') singular(/buses$/i, 'bus') singular(/oes$/i, 'o') singular(/shoes$/i, 'shoe') singular(/(alias|(?:stat|octop|vir|b)us)es$/i, '\1') singular(/(vert|ind)ices$/i, '\1ex') singular(/matrices$/i, 'matrix') irregular('person', 'people') irregular('man', 'men') irregular('child', 'children') irregular('sex', 'sexes') irregular('move', 'moves') irregular('quiz', 'quizzes') irregular('testis', 'testes') uncountable(%w(equipment information rice money species series fish sheep news)) end
Constants included from SQL::Constants
SQL::Constants::CURRENT_DATE, SQL::Constants::CURRENT_TIME, SQL::Constants::CURRENT_TIMESTAMP, SQL::Constants::DEFAULT, SQL::Constants::NOTNULL, SQL::Constants::NULL, SQL::Constants::SQLFALSE, SQL::Constants::SQLTRUE
Instance Attribute Summary
Attributes included from SequelMethods
#application_timezone, #convert_two_digit_years, #database_timezone, #datetime_class, #single_threaded, #typecast_timezone
Attributes included from NamedTimezones
Class Method Summary collapse
-
.core_extensions? ⇒ Boolean
This extension loads the core extensions.
-
.inflections {|Inflections| ... } ⇒ Object
Yield the Inflections module if a block is given, and return the Inflections module.
-
.migration(&block) ⇒ Object
The preferred method for writing Sequel migrations, using a DSL:.
-
.version ⇒ Object
The version of Sequel you are using, as a string (e.g. “2.11.0”).
Methods included from SQL::Builders
as, asc, blob, case, cast, cast_numeric, cast_string, char_length, date_add, date_sub, deep_qualify, delay, desc, expr, extract, function, hstore, hstore_op, identifier, ilike, is_distinct_from, join, like, lit, negate, or, pg_array, pg_array_op, pg_inet_op, pg_json, pg_json_op, pg_json_wrap, pg_jsonb, pg_jsonb_op, pg_jsonb_wrap, pg_multirange, pg_range, pg_range_op, pg_row, pg_row_op, qualify, sqlite_json_op, string_agg, subscript, trim, value_list
Methods included from SQL::OperatorBuilders
Methods included from SequelMethods
application_to_database_timestamp, condition_specifier?, connect, convert_exception_class, convert_output_timestamp, convert_timestamp, core_extensions?, current, database_to_application_timestamp, default_timezone=, elapsed_seconds_since, extension, json_parser_error_class, object_to_json, parse_json, recursive_map, require, split_symbol, split_symbols=, split_symbols?, start_timer, string_to_date, string_to_datetime, string_to_time, synchronize, synchronize_with, transaction, typecast_to_application_timestamp, virtual_row
Methods included from EvalInspect
Methods included from FiberConcurrency
Methods included from DateParseInputHandler
date_parse_input_handler, string_to_date, string_to_datetime, string_to_time
Class Method Details
.core_extensions? ⇒ Boolean
This extension loads the core extensions.
11 12 13 |
# File 'lib/sequel/extensions/core_extensions.rb', line 11 def Sequel.core_extensions? true end |
.inflections {|Inflections| ... } ⇒ Object
Yield the Inflections module if a block is given, and return the Inflections module.
6 7 8 9 |
# File 'lib/sequel/model/inflections.rb', line 6 def self.inflections yield Inflections if defined?(yield) Inflections end |
.migration(&block) ⇒ Object
291 292 293 |
# File 'lib/sequel/extensions/migration.rb', line 291 def self.migration(&block) MigrationDSL.create(&block) end |