module Sequel

  1. lib/sequel/extensions/_model_constraint_validations.rb
  2. lib/sequel/extensions/_model_pg_row.rb
  3. lib/sequel/extensions/_pretty_table.rb
  4. lib/sequel/extensions/arbitrary_servers.rb
  5. lib/sequel/extensions/auto_literal_strings.rb
  6. lib/sequel/extensions/caller_logging.rb
  7. lib/sequel/extensions/columns_introspection.rb
  8. lib/sequel/extensions/connection_expiration.rb
  9. lib/sequel/extensions/connection_validator.rb
  10. lib/sequel/extensions/constant_sql_override.rb
  11. lib/sequel/extensions/constraint_validations.rb
  12. lib/sequel/extensions/core_extensions.rb
  13. lib/sequel/extensions/core_refinements.rb
  14. lib/sequel/extensions/current_datetime_timestamp.rb
  15. lib/sequel/extensions/dataset_source_alias.rb
  16. lib/sequel/extensions/date_arithmetic.rb
  17. lib/sequel/extensions/datetime_parse_to_time.rb
  18. lib/sequel/extensions/duplicate_columns_handler.rb
  19. lib/sequel/extensions/empty_array_consider_nulls.rb
  20. lib/sequel/extensions/error_sql.rb
  21. lib/sequel/extensions/escaped_like.rb
  22. lib/sequel/extensions/eval_inspect.rb
  23. lib/sequel/extensions/freeze_datasets.rb
  24. lib/sequel/extensions/from_block.rb
  25. lib/sequel/extensions/graph_each.rb
  26. lib/sequel/extensions/identifier_mangling.rb
  27. lib/sequel/extensions/implicit_subquery.rb
  28. lib/sequel/extensions/index_caching.rb
  29. lib/sequel/extensions/inflector.rb
  30. lib/sequel/extensions/integer64.rb
  31. lib/sequel/extensions/looser_typecasting.rb
  32. lib/sequel/extensions/migration.rb
  33. lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb
  34. lib/sequel/extensions/named_timezones.rb
  35. lib/sequel/extensions/no_auto_literal_strings.rb
  36. lib/sequel/extensions/null_dataset.rb
  37. lib/sequel/extensions/pagination.rb
  38. lib/sequel/extensions/pg_array.rb
  39. lib/sequel/extensions/pg_array_ops.rb
  40. lib/sequel/extensions/pg_enum.rb
  41. lib/sequel/extensions/pg_extended_date_support.rb
  42. lib/sequel/extensions/pg_hstore.rb
  43. lib/sequel/extensions/pg_hstore_ops.rb
  44. lib/sequel/extensions/pg_inet.rb
  45. lib/sequel/extensions/pg_inet_ops.rb
  46. lib/sequel/extensions/pg_interval.rb
  47. lib/sequel/extensions/pg_json.rb
  48. lib/sequel/extensions/pg_json_ops.rb
  49. lib/sequel/extensions/pg_loose_count.rb
  50. lib/sequel/extensions/pg_range.rb
  51. lib/sequel/extensions/pg_range_ops.rb
  52. lib/sequel/extensions/pg_row.rb
  53. lib/sequel/extensions/pg_row_ops.rb
  54. lib/sequel/extensions/pg_static_cache_updater.rb
  55. lib/sequel/extensions/pg_timestamptz.rb
  56. lib/sequel/extensions/pretty_table.rb
  57. lib/sequel/extensions/query.rb
  58. lib/sequel/extensions/round_timestamps.rb
  59. lib/sequel/extensions/s.rb
  60. lib/sequel/extensions/schema_caching.rb
  61. lib/sequel/extensions/schema_dumper.rb
  62. lib/sequel/extensions/select_remove.rb
  63. lib/sequel/extensions/sequel_4_dataset_methods.rb
  64. lib/sequel/extensions/server_block.rb
  65. lib/sequel/extensions/server_logging.rb
  66. lib/sequel/extensions/split_array_nil.rb
  67. lib/sequel/extensions/sql_comments.rb
  68. lib/sequel/extensions/string_agg.rb
  69. lib/sequel/extensions/string_date_time.rb
  70. lib/sequel/extensions/symbol_aref.rb
  71. lib/sequel/extensions/symbol_aref_refinement.rb
  72. lib/sequel/extensions/symbol_as_refinement.rb
  73. lib/sequel/extensions/synchronize_sql.rb
  74. lib/sequel/extensions/thread_local_timezones.rb
  75. lib/sequel/extensions/to_dot.rb
  76. lib/sequel/extensions/virtual_row_method_block.rb
  77. lib/sequel/plugins/accessed_columns.rb
  78. lib/sequel/plugins/active_model.rb
  79. lib/sequel/plugins/after_initialize.rb
  80. lib/sequel/plugins/association_dependencies.rb
  81. lib/sequel/plugins/association_pks.rb
  82. lib/sequel/plugins/association_proxies.rb
  83. lib/sequel/plugins/auto_validations.rb
  84. lib/sequel/plugins/before_after_save.rb
  85. lib/sequel/plugins/blacklist_security.rb
  86. lib/sequel/plugins/boolean_readers.rb
  87. lib/sequel/plugins/boolean_subsets.rb
  88. lib/sequel/plugins/caching.rb
  89. lib/sequel/plugins/class_table_inheritance.rb
  90. lib/sequel/plugins/column_conflicts.rb
  91. lib/sequel/plugins/column_select.rb
  92. lib/sequel/plugins/columns_updated.rb
  93. lib/sequel/plugins/composition.rb
  94. lib/sequel/plugins/constraint_validations.rb
  95. lib/sequel/plugins/csv_serializer.rb
  96. lib/sequel/plugins/dataset_associations.rb
  97. lib/sequel/plugins/def_dataset_method.rb
  98. lib/sequel/plugins/defaults_setter.rb
  99. lib/sequel/plugins/delay_add_association.rb
  100. lib/sequel/plugins/dirty.rb
  101. lib/sequel/plugins/eager_each.rb
  102. lib/sequel/plugins/eager_graph_eager.rb
  103. lib/sequel/plugins/error_splitter.rb
  104. lib/sequel/plugins/finder.rb
  105. lib/sequel/plugins/force_encoding.rb
  106. lib/sequel/plugins/hook_class_methods.rb
  107. lib/sequel/plugins/input_transformer.rb
  108. lib/sequel/plugins/insert_returning_select.rb
  109. lib/sequel/plugins/instance_filters.rb
  110. lib/sequel/plugins/instance_hooks.rb
  111. lib/sequel/plugins/inverted_subsets.rb
  112. lib/sequel/plugins/json_serializer.rb
  113. lib/sequel/plugins/lazy_attributes.rb
  114. lib/sequel/plugins/list.rb
  115. lib/sequel/plugins/many_through_many.rb
  116. lib/sequel/plugins/modification_detection.rb
  117. lib/sequel/plugins/mssql_optimistic_locking.rb
  118. lib/sequel/plugins/nested_attributes.rb
  119. lib/sequel/plugins/optimistic_locking.rb
  120. lib/sequel/plugins/pg_array_associations.rb
  121. lib/sequel/plugins/pg_auto_constraint_validations.rb
  122. lib/sequel/plugins/pg_row.rb
  123. lib/sequel/plugins/prepared_statements.rb
  124. lib/sequel/plugins/prepared_statements_safe.rb
  125. lib/sequel/plugins/rcte_tree.rb
  126. lib/sequel/plugins/serialization.rb
  127. lib/sequel/plugins/serialization_modification_detection.rb
  128. lib/sequel/plugins/sharding.rb
  129. lib/sequel/plugins/single_table_inheritance.rb
  130. lib/sequel/plugins/singular_table_names.rb
  131. lib/sequel/plugins/skip_create_refresh.rb
  132. lib/sequel/plugins/split_values.rb
  133. lib/sequel/plugins/static_cache.rb
  134. lib/sequel/plugins/string_stripper.rb
  135. lib/sequel/plugins/subclasses.rb
  136. lib/sequel/plugins/subset_conditions.rb
  137. lib/sequel/plugins/table_select.rb
  138. lib/sequel/plugins/tactical_eager_loading.rb
  139. lib/sequel/plugins/timestamps.rb
  140. lib/sequel/plugins/touch.rb
  141. lib/sequel/plugins/tree.rb
  142. lib/sequel/plugins/typecast_on_load.rb
  143. lib/sequel/plugins/unlimited_update.rb
  144. lib/sequel/plugins/update_or_create.rb
  145. lib/sequel/plugins/update_primary_key.rb
  146. lib/sequel/plugins/update_refresh.rb
  147. lib/sequel/plugins/uuid.rb
  148. lib/sequel/plugins/validate_associated.rb
  149. lib/sequel/plugins/validation_class_methods.rb
  150. lib/sequel/plugins/validation_contexts.rb
  151. lib/sequel/plugins/validation_helpers.rb
  152. lib/sequel/plugins/whitelist_security.rb
  153. lib/sequel/plugins/xml_serializer.rb
  154. show all

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

The pg_range extension adds support for the PostgreSQL 9.2+ range types to Sequel. PostgreSQL range types are similar to ruby's Range class, representating an array of values. However, they are more flexible than ruby's ranges, allowing exclusive beginnings and endings (ruby's range only allows exclusive endings), and unbounded beginnings and endings (which ruby's range does not support).

This extension integrates with Sequel's native postgres and jdbc/postgresql adapters, so that when range type values are retrieved, they are parsed and returned as instances of Sequel::Postgres::PGRange. PGRange mostly acts like a Range, but it's not a Range as not all PostgreSQL range type values would be valid ruby ranges. If the range type value you are using is a valid ruby range, you can call PGRange#to_range to get a Range. However, if you call PGRange#to_range on a range type value uses features that ruby's Range does not support, an exception will be raised.

In addition to the parser, this extension comes with literalizers for both PGRange and Range that use the standard Sequel literalization callbacks, so they work on all adapters.

To turn an existing Range into a PGRange, use Sequel.pg_range:

Sequel.pg_range(range)

If you have loaded the core_extensions extension, or you have loaded the core_refinements extension and have activated refinements for the file, you can also use Range#pg_range:

range.pg_range

You may want to specify a specific range type:

Sequel.pg_range(range, :daterange)
range.pg_range(:daterange)

If you specify the range database type, Sequel will automatically cast the value to that type when literalizing.

To use this extension, load it into the Database instance:

DB.extension :pg_range

See the schema modification guide for details on using range type columns in CREATE/ALTER TABLE statements.

This extension makes it easy to add support for other range types. In general, you just need to make sure that the subtype is handled and has the appropriate converter installed. For user defined types, you can do this via:

DB.add_conversion_proc(subtype_oid){|string| }

Then you can call Sequel::Postgres::PGRange::DatabaseMethods#register_range_type to automatically set up a handler for the range type. So if you want to support the timerange type (assuming the time type is already supported):

DB.register_range_type('timerange')

This extension integrates with the pg_array extension. If you plan to use arrays of range types, load the pg_array extension before the pg_range extension:

DB.extension :pg_array, :pg_range

Related module: Sequel::Postgres::PGRange

The round_timestamps extension will automatically round timestamp values to the database's supported level of precision before literalizing them.

For example, if the database supports millisecond precision, and you give it a Time value with microsecond precision, it will round it appropriately:

Time.at(1405341161.917999982833862)
# default: 2014-07-14 14:32:41.917999
# with extension: 2014-07-14 14:32:41.918000

The round_timestamps extension correctly deals with databases that support millisecond or second precision. In addition to handling Time values, it also handles DateTime values and Sequel::SQLTime values (for the TIME type).

To round timestamps for a single dataset:

ds = ds.extension(:round_timestamps)

To round timestamps for all datasets on a single database:

DB.extension(:round_timestamps)

Related module: Sequel::Dataset::RoundTimestamps

Methods

Public Class

  1. core_extensions?
  2. migration

Public Class methods

core_extensions? ()

This extension loads the core extensions.

[show source]
# File lib/sequel/extensions/core_extensions.rb, line 10
def Sequel.core_extensions?
  true
end
migration (&block)

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.

[show source]
# File lib/sequel/extensions/migration.rb, line 287
def self.migration(&block)
  MigrationDSL.create(&block)
end