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/adapters/trilogy.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/inspect_pk.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/provenance.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/dataset_run.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/extensions/stdio_logger.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/paged_operations.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/set_literalizer.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/extensions/pg_schema_caching.rb,
lib/sequel/plugins/dataset_associations.rb,
lib/sequel/plugins/require_valid_schema.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/extensions/pg_auto_parameterize.rb,
lib/sequel/plugins/class_table_inheritance.rb,
lib/sequel/plugins/insert_returning_select.rb,
lib/sequel/plugins/optimistic_locking_base.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/auto_cast_date_and_time.rb,
lib/sequel/extensions/pg_static_cache_updater.rb,
lib/sequel/plugins/pg_xmin_optimistic_locking.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/extensions/pg_extended_integer_support.rb,
lib/sequel/plugins/pg_auto_constraint_validations.rb,
lib/sequel/plugins/primary_key_lookup_check_values.rb,
lib/sequel/adapters/utils/mysql_prepared_statements.rb,
lib/sequel/extensions/_model_constraint_validations.rb,
lib/sequel/extensions/pg_auto_parameterize_in_array.rb,
lib/sequel/extensions/temporarily_release_connection.rb,
lib/sequel/dataset/deprecated_singleton_class_methods.rb,
lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb,
lib/sequel/extensions/transaction_connection_validator.rb,
lib/sequel/plugins/serialization_modification_detection.rb,
lib/sequel/adapters/utils/emulate_offset_with_row_number.rb,
lib/sequel/plugins/validation_helpers_generic_type_messages.rb,
lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb,
lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb

Overview

The pg_auto_parameterize_in_array extension builds on the pg_auto_parameterize extension, adding support for handling additional types when converting from IN to = ANY and NOT IN to != ALL:

DB[:table].where(column: [1.0, 2.0, ...])
# Without extension: column IN ($1::numeric, $2:numeric, ...) # bound variables: 1.0, 2.0, ...
# With extension:    column = ANY($1::numeric[]) # bound variables: [1.0, 2.0, ...]

This prevents the use of an unbounded number of bound variables based on the size of the array, as well as using different SQL for different array sizes.

The following types are supported when doing the conversions, with the database type used:

Float

if any are infinite or NaN, double precision, otherwise numeric

BigDecimal

numeric

Date

date

Time

timestamp (or timestamptz if pg_timestamptz extension is used)

DateTime

timestamp (or timestamptz if pg_timestamptz extension is used)

Sequel::SQLTime

time

Sequel::SQL::Blob

bytea

String values are also supported using the text type, but only if the :treat_string_list_as_text_array Database option is used. This is because treating strings as text can break programs, since the type for literal strings in PostgreSQL is unknown, not text.

The conversion is only done for single dimensional arrays that have more than two elements, where all elements are of the same class (other than nil values).

Related module: Sequel::Postgres::AutoParameterizeInArray

Defined Under Namespace

Modules: ADO, Access, Amalgalite, AnyNotEmpty, ArbitraryServers, AutoCastDateAndTime, CallerLogging, ColumnsIntrospection, ConnectionExpiration, ConnectionValidator, ConstantSqlOverride, ConstraintValidations, CoreRefinements, CurrentDateTimeTimestamp, DB2, DatabaseQuery, DatasetPagination, DatasetPrinter, DatasetQuery, DatasetRun, 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, TransactionConnectionValidator, Trilogy, UnmodifiedIdentifiers, UnthreadedServerBlock Classes: ASTTransformer, BasicObject, ConnectionPool, Database, DatabaseError, Dataset, DuplicateColumnError, Error, HookFailed, IntegerMigrator, LiteralString, MassAssignmentRestriction, Migration, MigrationAlterTableReverser, MigrationDSL, MigrationReverser, Migrator, Model, NoMatchingRow, Qualifier, SQLTime, ShardedSingleConnectionPool, ShardedThreadedConnectionPool, ShardedTimedQueueConnectionPool, SimpleMigration, SingleConnectionPool, StdioLogger, ThreadedConnectionPool, TimedQueueConnectionPool, TimestampMigrator, ToDot, UnableToReacquireConnectionError, 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.

87
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

#tzinfo_disambiguator

Class Method Summary collapse

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, skip_pg_auto_param, sqlite_json_op, sqlite_jsonb_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

eval_inspect

Methods included from FiberConcurrency

current

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.

Returns:

  • (Boolean)


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.

Yields:



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

The preferred method for writing Sequel migrations, using a DSL:

Sequel.migration do
  up do
    create_table(:artists) do
      primary_key :id
      String :name
    end
  end

  down do
    drop_table(:artists)
  end
end

Designed to be used with the Migrator class, part of the migration extension.



308
309
310
# File 'lib/sequel/extensions/migration.rb', line 308

def self.migration(&block)
  MigrationDSL.create(&block)
end

.versionObject

The version of Sequel you are using, as a string (e.g. “2.11.0”)



22
23
24
# File 'lib/sequel/version.rb', line 22

def self.version
  VERSION
end