The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

DBIx::EnumConstraints - generates enum-like SQL constraints.

SYNOPSIS

  use DBIx::EnumConstraints;

  my $ec = DBIx::EnumConstraints->new({
                name => 'kind', fields => [ [ 'k1', 'a', 'b' ]
                                        , [ 'k2', 'b' ] ]
  });

  # get enum field definition
  my $edef = $ec->enum_definition;

  # $edef is now 'kind smallint not null check (kind > 0 and kind < 2)'

  # get constraints array
  my @cons = $ec->constraints;

  # @cons is now (
  #     'constraint k1_has_a check (kind <> 1 or a is not null)'
  #     , 'constraint k1_has_b check (kind <> 1 or a is not null)'
  #     , 'constraint k2_has_b check (kind <> 2 or b is not null)'
  #     , 'constraint k2_has_no_a check (kind <> 2 or a is null)')

DESCRIPTION

This module generates SQL statements for enforcing enum semantics on the database columns.

Enum columns is the column which can get one of 1 .. k values. For each of those values there are other columns which should or should not be null.

For example in the SYNOPSIS above, when kind column is 1 the row should have both of a and b columns not null. When kind column is 2 the row should have a but no b columns.

CONSTRUCTORS

$class->new($args)

$args should be HASH reference containing the following parameters:

name

The name of the enum.

fields

Array of arrays describing fields dependent on the enum. Each row is index is the possible value of enum minus 1 (e.g. row number 1 is for enum value 2).

First item in the array is the state name. The rest of the items are field names. There is a possibility to mark optional fields by using trailing ? (e.g. b? denotes an optional b field.

METHODS

$self->enum_definition

Returns the definition of enum column. See SYNOPSIS for example.

$self->for_each_kind($callback)

Runs $callback over registered enum states. For each state passes state name, fields which are in the state and fields which are out of the state.

The fields are passed as ARRAY references.

$self->constraints

Returns the list of generated constraints. See SYNOPSIS above for an example.

AUTHOR

        Boris Sukholitko
        CPAN ID: BOSU
        
        boriss@gmail.com
        

COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.