Parse::Dia::SQL::Output::DB2 - Create SQL for DB2.


Parse-Dia-SQL documentation Contained in the Parse-Dia-SQL distribution.

Index


Code Index:

NAME

Top

Parse::Dia::SQL::Output::DB2 - Create SQL for DB2.

SYNOPSIS

Top

    use Parse::Dia::SQL;
    my $dia = Parse::Dia::SQL->new(...);
    print $dia->get_sql();

DESCRIPTION

Top

This class creates SQL for the IBM DB2 database.

new

The constructor. Arguments:

Create primary key clause, e.g.

constraint pk_<tablename> primary key (<column1>,..,<columnN>)

For DB2 the PK must be 18 characters or less

Returns undefined if list of primary key is empty (i.e. if there are no primary keys on given table).

For DB2 a constraint name must be 18 characters or less.

Returns shortened tablename.

Subclass for outputting SQL for the DB2 database


Parse-Dia-SQL documentation Contained in the Parse-Dia-SQL distribution.
package Parse::Dia::SQL::Output::DB2;

# $Id: DB2.pm,v 1.5 2009/03/13 14:20:26 aff Exp $


use warnings;
use strict;

use Data::Dumper;
use File::Spec::Functions qw(catfile);

use lib q{lib};
use base q{Parse::Dia::SQL::Output}; # extends

require Parse::Dia::SQL::Logger;
require Parse::Dia::SQL::Const;

sub new {
  my ( $class, %param ) = @_;
  my $self = {};

  # Set defaults for db2
  $param{object_name_max_length} = $param{object_name_max_length} || 18;
  $param{index_options} = ['allow reverse scans'] unless 
    defined($param{index_options}) && scalar(@{$param{index_options}});
  $param{db} = q{db2}; 

  $self = $class->SUPER::new(%param);

  bless( $self, $class );
  return $self;
}


sub _create_pk_string {
  my ( $self, $tablename, @pks ) = @_;

  if ( !$tablename ) {
    $self->{log}
      ->error(q{Missing argument tablename - cannot create pk string!});
    return;
  }
  if ( scalar(@pks) == 0 ) {
    $self->{log}->debug(qq{table '$tablename' has no primary keys});
    return;
  }

  # old school name length reduction
  $tablename =
    $self->{utils}
    ->mangle_name( $tablename, $self->{object_name_max_length} - 4 );

  # new school name length reduction
  #  $tablename = $self->{utils}->make_name ($tablename);

  $self->{log}->debug( qq{tablename: '$tablename' pks: } . join( q{,}, @pks ) );

  return qq{constraint pk_$tablename primary key (} . join( q{,}, @pks ) . q{)};
}

sub _create_constraint_name {
  my ( $self, $constraint_name ) = @_;

  if ( !defined($constraint_name) ||  $constraint_name eq q{} ) {
	$self->{log}->error( qq{constraint_name was undefined or empty!});
	return;
  }

  # new school
  return $self->{utils}->make_name (0, $constraint_name);

  # old school 
  #  return $self->{utils}->mangle_name( $constraint_name, $self->{object_name_max_length} - 4 );
}

1;

__END__