Module | Sequel::Plugins::PgRow
In: | lib/sequel/plugins/pg_row.rb

The pg_row plugin allows you to use Sequel::Model classes as composite type classes, via the pg_row extension. So if you have an address table:

      DB.create_table(:address) do
        String :street
        String :city
        String :zip
      end

and a company table with an address:

      DB.create_table(:company) do
        String :name
        address :address
      end

You can create a Sequel::Model for the address table, and load the plugin, which registers the row type:

      class Address < Sequel::Model(:address)
        plugin :pg_row
      end

Then when you select from the company table (even using a plain dataset), it will return address values as instances of Address:

      DB[:company].first
      # => {:name=>'MS', :address=>
        Address.load(:street=>'123 Foo St', :city=>'Bar Town', :zip=>'12345')}

If you want a lot of your models to be used as row types, you can load the plugin into Sequel::Model itself:

      Sequel::Model.plugin :pg_row

And then call register_row_type in the class

      Address.register_row_type

Note that automatic conversion only works with the native postgres adapter. For other adapters that connect to PostgreSQL, you need to call the conversion proc manually.

In addition to returning row-valued/composite types as instances of Sequel::Model, this also lets you use model instances in datasets when inserting, updating, and filtering:

      DB[:company].insert(:name=>'MS', :address=>
        Address.load(:street=>'123 Foo St', :city=>'Bar Town', :zip=>'12345'))

### Methods

configure

### Classes and Modules

Module Sequel::Plugins::PgRow::ClassMethods
Module Sequel::Plugins::PgRow::DatabaseMethods
Module Sequel::Plugins::PgRow::InstanceMethods

### Public Class methods

configure(model)

When loading the extension, make sure the database has the pg_row extension loaded, load the custom database extensions, and automatically register the row type if the model has a dataset.

[Source]

        # File lib/sequel/plugins/pg_row.rb, line 56
    56:       def self.configure(model)
    57:         model.db.extension(:pg_row)
    58:         model.db.extend(DatabaseMethods)
    59:         model.register_row_type if model.instance_variable_get(:@dataset)
    60:       end

[Validate]