#!/usr/bin/perl

use strict;
use warnings;
use DBI;

my $conn = DBI->connect(
  "DBI:Pg:dbname=pos;host=localhost",
  "postgres",
  "",
  { PrintError => 0, RaiseError => 1 },
);

my $sth = $conn->prepare(qq{
  SELECT tablename FROM pg_tables
});

$sth->execute;

while (my $row = $sth->fetchrow_hashref) {
  my $tbl = $row->{tablename};

  if ( $row->{tablename} =~ /^sales_headers\_\d/ ) {
    my $error = 0;

    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_bdate ON $tbl(business_date)");
    };
    $error++ if $@;
    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_clerk_close ON $tbl(clerk_close)");
    };
    $error++ if $@;
    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_doc_type ON $tbl(doc_type)");
    };
    $error++ if $@;
    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_fo_doc_number ON $tbl(fo_doc_number)");
    };
    $error++ if $@;
    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_serie ON $tbl(serie)");
    };
    $error++ if $@;

    if ($error < 5) {
      $conn->do("ANALYZE VERBOSE $tbl");
    }
  }

  if ( $row->{tablename} =~ /^sales_details\_\d/ ) {
    my $error = 0;

    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_header ON $tbl(header)");
    };
    $error++ if $@;
    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_bdate ON $tbl(business_date)");
    };
    $error++ if $@;
    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_operation_type ON $tbl(operation_type)");
    };
    $error++ if $@;
    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_product ON $tbl(product)");
    };
    $error++ if $@;

    if ($error < 4) {
      $conn->do("ANALYZE VERBOSE $tbl");
    }
  }

  if ( $row->{tablename} =~ /^sales_payments\_\d/ ) {
    my $error = 0;

    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_header ON $tbl(header)");
    };
    $error++ if $@;
    eval {
      $conn->do("CREATE INDEX ".$tbl."_idx_bdate ON $tbl(business_date)");
    };
    $error++ if $@;

    if ($error < 2) {
      $conn->do("ANALYZE VERBOSE $tbl");
    }
  }
}


