view release on metacpan or search on metacpan
lib/App/Repository.pm view on Meta::CPAN
}
if ($sign) {
$sign = -$sign if (defined $dir && $dir =~ /^_?[Dd]/); # ("DOWN", "desc", "_desc", etc.)
return ($sign);
}
}
return 0;
}
#############################################################################
# _get_timer()
#############################################################################
sub _get_timer {
my ($self) = @_;
my ($seconds_start, $microseconds_start) = gettimeofday;
my $timer = { seconds_start => $seconds_start, microseconds_start => $microseconds_start };
return($timer);
}
#############################################################################
# _read_timer()
#############################################################################
sub _read_timer {
my ($self, $timer, $reset) = @_;
my ($seconds_finish, $microseconds_finish) = gettimeofday;
my $seconds_elapsed = $seconds_finish - $timer->{seconds_start};
my $microseconds_elapsed = $microseconds_finish - $timer->{microseconds_start};
if ($microseconds_elapsed < 0) {
$microseconds_elapsed += 1000000;
$seconds_elapsed -= 1;
}
my $time_elapsed = sprintf("%d.%06d", $seconds_elapsed, $microseconds_elapsed);
if (defined $reset) {
# store values. don't reset the timer.
if ($reset == 0) {
$timer->{seconds_start} = $seconds_finish;
$timer->{microseconds_start} = $microseconds_finish;
delete $timer->{time_elapsed};
}
# reset the timer to be ready for another reading.
elsif ($reset) {
$timer->{seconds_finish} = $seconds_finish;
$timer->{microseconds_finish} = $microseconds_finish;
$timer->{time_elapsed} = $time_elapsed;
}
}
return($time_elapsed);
}
#############################################################################
# DESTROY()
#############################################################################
=head2 DESTROY()
lib/App/Repository/DBI.pm view on Meta::CPAN
$self->{sql} = $sql;
$dbh = $self->{dbh};
if (!$dbh) {
$self->_connect();
$dbh = $self->{dbh};
}
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: _get_row()\n";
print $App::DEBUG_FILE $sql;
}
if ($context_options->{explain_sql}) {
$self->explain_sql($sql);
}
### TODO: make this similar to the _connect code, using a regex named retryable_select_error_regex
while (1) {
eval {
$row = $dbh->selectrow_arrayref($sql);
lib/App/Repository/DBI.pm view on Meta::CPAN
else {
$self->{context}->log({level=>1},"DBI Exception (fail) in _get_rows(): $@$sql");
die $@;
}
}
else {
last;
}
}
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: nrows [", (defined $row ? 1 : 0), "] ($elapsed_time sec) $DBI::errstr\n";
if ($debug_sql >= 2) {
print $App::DEBUG_FILE "DEBUG_SQL: [", ($row ? join("|",map { defined $_ ? $_ : "undef" } @$row) : ""), "]\n";
}
print $App::DEBUG_FILE "\n";
}
&App::sub_exit($row) if ($App::trace);
return($row);
}
lib/App/Repository/DBI.pm view on Meta::CPAN
die "empty SQL query for table [$table] (does table exist?)" if (!$sql);
$self->_connect() if (!$self->{dbh});
$options = {} if (!$options);
$startrow = $options->{startrow} || 0;
$endrow = $options->{endrow} || 0;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: _get_rows()\n";
print $App::DEBUG_FILE $sql;
}
if ($context_options->{explain_sql}) {
$self->explain_sql($sql);
}
while (1) {
eval {
$rows = $self->_selectrange_arrayref($sql, $startrow, $endrow);
};
lib/App/Repository/DBI.pm view on Meta::CPAN
else {
$self->{context}->log({level=>1},"DBI Exception (fail) in _get_rows(): $@$sql");
die $@;
}
}
else {
last;
}
}
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: nrows [", (defined $rows ? ($#$rows+1) : 0), "] ($elapsed_time sec) $DBI::errstr\n";
if ($debug_sql >= 2) {
foreach my $row (@$rows) {
print $App::DEBUG_FILE "DEBUG_SQL: [", join("|",map { defined $_ ? $_ : "undef"} @$row), "]\n";
}
}
print $App::DEBUG_FILE "\n";
}
&App::sub_exit($rows) if ($App::trace);
lib/App/Repository/DBI.pm view on Meta::CPAN
&App::sub_entry if ($App::trace);
my ($self, $table, $cols, $row, $options) = @_;
$self->{error} = "";
my $sql = $self->_mk_insert_row_sql($table, $cols, undef, $options);
$self->{sql} = $sql;
my $dbh = $self->{dbh};
my $retval = 0;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
my $loglevel = 1;
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: insert()\n";
print $App::DEBUG_FILE "DEBUG_SQL: bind vars [", join("|",map { defined $_ ? $_ : "undef" } @$row), "]\n";
print $App::DEBUG_FILE $sql;
}
if ($context_options->{explain_sql}) {
$self->explain_sql($sql);
}
if (defined $dbh) {
eval {
### TODO: make this work with regex for retry
lib/App/Repository/DBI.pm view on Meta::CPAN
$retval = 0 if ($retval == 0); # turn "0E0" into plain old "0"
};
if ($@) { # Log the error message with the SQL and rethrow the exception
my $bind_values = join("|", map { defined $_ ? $_ : "undef" } @$row);
$loglevel = 3 if ($@ =~ /duplicate/i);
$self->{context}->log({level=>$loglevel}, "DBI Exception (fail) in _insert_row(): $@BIND VALUES: [$bind_values]\nSQL: $sql");
die $@;
}
}
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: retval [$retval] ($elapsed_time sec) $DBI::errstr\n";
print $App::DEBUG_FILE "\n";
}
&App::sub_exit($retval) if ($App::trace);
$retval;
}
# $nrows = $rep->_insert_rows ($table, \@cols, \@rows);
sub _insert_rows {
lib/App/Repository/DBI.pm view on Meta::CPAN
my ($sql, $retval);
my $dbh = $self->{dbh};
return 0 if (!defined $dbh);
my $nrows = 0;
my $ok = 1;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my $explain_sql = $context_options->{explain_sql};
my ($timer, $elapsed_time);
my $loglevel = 1;
if ($debug_sql) {
$timer = $self->_get_timer();
}
if (ref($rows) eq "ARRAY") {
$sql = $self->_mk_insert_row_sql($table, $cols);
foreach my $row (@$rows) {
if ($debug_sql) {
print $App::DEBUG_FILE "DEBUG_SQL: _insert_rows()\n";
print $App::DEBUG_FILE "DEBUG_SQL: bind vars [", join("|",map { defined $_ ? $_ : "undef" } @$row), "]\n";
print $App::DEBUG_FILE $sql;
}
if ($explain_sql) {
lib/App/Repository/DBI.pm view on Meta::CPAN
$nrows ++;
}
else {
$self->{numrows} = $nrows;
$ok = 0;
}
}
}
}
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: nrows [$nrows] ($elapsed_time sec)\n";
}
$self->{sql} = $sql;
$self->{numrows} = $nrows;
&App::sub_exit($nrows) if ($App::trace);
return($nrows);
}
sub _delete {
&App::sub_entry if ($App::trace);
my ($self, $table, $params, $cols, $row, $options) = @_;
$self->{error} = "";
my $sql = $self->_mk_delete_sql($table, $params, $cols, $row, $options);
$self->{sql} = $sql;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: _delete()\n";
print $App::DEBUG_FILE $sql;
}
if ($context_options->{explain_sql}) {
$self->explain_sql($sql);
}
my $retval = 0;
my $dbh = $self->{dbh};
if (defined $dbh) {
eval {
### TODO: make this work with regex for retry
$retval = $dbh->do($sql);
$retval = 0 if ($retval == 0); # turn "0E0" into plain old "0"
};
if ($@) { # Log the error message with the SQL and rethrow the exception
$self->{context}->log({level=>1},"DBI Exception (fail) in _delete(): $@SQL: $sql");
die $@;
}
}
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: retval [$retval] ($elapsed_time sec) $DBI::errstr\n";
print $App::DEBUG_FILE "\n";
}
&App::sub_exit($retval) if ($App::trace);
return($retval);
}
# $nrows = $rep->_update($table, \%params, \@cols, \@row, \%options);
# $nrows = $rep->_update($table, \@keycolidx, \@cols, \@row, \%options);
lib/App/Repository/DBI.pm view on Meta::CPAN
# $nrows = $rep->_update($table, undef, \@cols, \@row, \%options);
sub _update {
&App::sub_entry if ($App::trace);
my ($self, $table, $params, $cols, $row, $options) = @_;
$self->{error} = "";
my $sql = $self->_mk_update_sql($table, $params, $cols, $row, $options);
$self->{sql} = $sql;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: _update()\n";
print $App::DEBUG_FILE $sql;
}
if ($context_options->{explain_sql}) {
$self->explain_sql($sql);
}
my $retval = 0;
my $dbh = $self->{dbh};
if (defined $dbh) {
eval {
### TODO: make this work with regex for retry
$retval = $dbh->do($sql);
$retval = 0 if ($retval == 0); # turn "0E0" into plain old "0"
};
if ($@) { # Log the error message with the SQL and rethrow the exception
$self->{context}->log({level=>1},"DBI Exception (fail) in _update(): $@SQL: $sql");
die $@;
}
}
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: retval [$retval] ($elapsed_time sec) $DBI::errstr\n";
print $App::DEBUG_FILE "\n";
}
&App::sub_exit($retval) if ($App::trace);
return($retval);
}
# $ok = $rep->_delete_row ($table, \@cols, \@row, \@keycolidx);
sub _delete_row {
&App::sub_entry if ($App::trace);
my $self = shift;
$self->{error} = "";
my $sql = $self->_mk_delete_row_sql(@_);
$self->{sql} = $sql;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: _delete_row()\n";
print $App::DEBUG_FILE $sql;
}
if ($context_options->{explain_sql}) {
$self->explain_sql($sql);
}
my $retval = 0;
my $dbh = $self->{dbh};
if (defined $dbh) {
eval {
### TODO: make this work with regex for retry
$retval = $dbh->do($sql);
$retval = 0 if ($retval == 0); # turn "0E0" into plain old "0"
};
if ($@) { # Log the error message with the SQL and rethrow the exception
$self->{context}->log({level=>1},"DBI Exception (fail) in _delete_row(): $@SQL: $sql");
die $@;
}
}
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: retval [$retval] ($elapsed_time sec) $DBI::errstr\n";
print $App::DEBUG_FILE "\n";
}
&App::sub_exit($retval) if ($App::trace);
$retval;
}
# $ok = $rep->_delete_rows($table, \@params, \%paramvalues);
sub _delete_rows {
&App::sub_entry if ($App::trace);
my $self = shift;
$self->{error} = "";
my $sql = $self->_mk_delete_rows_sql(@_);
$self->{sql} = $sql;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: _delete_rows()\n";
print $App::DEBUG_FILE $sql;
}
if ($context_options->{explain_sql}) {
$self->explain_sql($sql);
}
my $retval = 0;
my $dbh = $self->{dbh};
if (defined $dbh) {
eval {
lib/App/Repository/DBI.pm view on Meta::CPAN
$retval = $dbh->do($sql);
$retval = 0 if ($retval == 0); # turn "0E0" into plain old "0"
};
if ($@) { # Log the error message with the SQL and rethrow the exception
$self->{context}->log({level=>1},"DBI Exception (fail) in _delete_rows(): $@SQL: $sql");
die $@;
}
}
$retval = 0 if ($retval == 0); # turn "0E0" into plain old "0"
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: retval [$retval] ($elapsed_time sec) $DBI::errstr\n";
print $App::DEBUG_FILE "\n";
}
&App::sub_exit($retval) if ($App::trace);
$retval;
}
sub _do {
&App::sub_entry if ($App::trace);
my ($self, $sql) = @_;
$self->{error} = "";
$self->{sql} = $sql;
my $dbh = $self->{dbh};
my $retval = 0;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: _do()\n";
print $App::DEBUG_FILE $sql;
print $App::DEBUG_FILE "\n" if ($sql !~ /\n$/);
}
if ($context_options->{explain_sql}) {
$self->explain_sql($sql);
}
if (defined $dbh) {
$self->{sql} = $sql;
my $continue = 1;
lib/App/Repository/DBI.pm view on Meta::CPAN
if ($debug_sql) {
my $nrows = 0;
if ($retval) {
if (ref($retval)) {
$nrows = $#$retval + 1;
}
else {
$nrows = $retval;
}
}
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: nrows [$nrows] ($elapsed_time sec) $DBI::errstr\n";
if ($debug_sql >= 2 && ref($retval)) {
foreach my $row (@$retval) {
print $App::DEBUG_FILE "DEBUG_SQL: [", join("|",map { defined $_ ? $_ : "undef"} @$row), "]\n";
}
}
print $App::DEBUG_FILE "\n";
}
&App::sub_exit($retval) if ($App::trace);
lib/App/Repository/MySQL.pm view on Meta::CPAN
my ($sql, $retval, $nrows_this_insert);
my $dbh = $self->{dbh};
return 0 if (!defined $dbh);
my $nrows = 0;
my $ok = 1;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my $explain_sql = $context_options->{explain_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
}
my $rows_ref = ref($rows);
if ($rows_ref eq "ARRAY") {
my $maxrows = $options->{maxrows} || 100;
my $rownum = 0;
my (@current_rows, $rownum2);
while ($rownum <= $#$rows) {
$rownum2 = $rownum + $maxrows - 1;
$rownum2 = $#$rows if ($rownum2 > $#$rows);
@current_rows = @{$rows}[($rownum .. $rownum2)];
lib/App/Repository/MySQL.pm view on Meta::CPAN
$ok = 0;
last;
}
}
$self->{numrows} = $nrows;
if (!$rows_ref) {
close(App::Repository::MySQL::FILE);
}
}
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: total rows [$nrows] ($elapsed_time sec)\n";
}
$self->{sql} = $sql;
$self->{numrows} = $nrows;
&App::sub_exit($nrows) if ($App::trace);
return($nrows);
}
###################################################################
# This routine was written because a reliable data load method is
lib/App/Repository/MySQL.pm view on Meta::CPAN
my ($sql, $retval);
my $dbh = $self->{dbh};
return 0 if (!defined $dbh);
my $nrows = 0;
my $ok = 1;
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my $explain_sql = $context_options->{explain_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
}
my $rows_ref = ref($rows);
if ($rows_ref eq "ARRAY") {
$sql = $self->_mk_insert_rows_sql($table, $cols, $rows, $options);
if ($debug_sql) {
print $App::DEBUG_FILE "DEBUG_SQL: _insert_rows()\n";
print $App::DEBUG_FILE $sql;
}
### TODO: make this work with regex for retry
$retval = $dbh->do($sql);
lib/App/Repository/MySQL.pm view on Meta::CPAN
my $sql = "load data$local_modifier infile '$file' into table $table";
if ($options->{field_sep} || $options->{field_quote} || $options->{field_escape}) {
$sql .= "\nfields";
$sql .= "\n terminated by '$options->{field_sep}'" if ($options->{field_sep});
$sql .= "\n optionally enclosed by '$options->{field_quote}'" if ($options->{field_quote});
$sql .= "\n escaped by '$options->{field_escape}'" if ($options->{field_escape});
}
$sql .= "\n(" . join(",", @$columns) . ")\n";
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: import_rows()\n";
print $App::DEBUG_FILE $sql;
}
eval {
$nrows = $self->{dbh}->do($sql);
};
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: import_rows=[$nrows] ($elapsed_time sec) $DBI::errstr : $@\n";
}
die $@ if ($@);
}
&App::sub_exit($nrows) if ($App::trace);
return($nrows);
}
#############################################################################
lib/App/Repository/MySQL.pm view on Meta::CPAN
$sql .= "\ninto outfile '$file'";
if ($options->{field_sep} || $options->{field_quote} || $options->{field_escape}) {
$sql .= "\nfields";
$sql .= "\n terminated by '$options->{field_sep}'" if ($options->{field_sep});
$sql .= "\n optionally enclosed by '$options->{field_quote}'" if ($options->{field_quote});
$sql .= "\n escaped by '$options->{field_escape}'" if ($options->{field_escape});
}
$sql .= "\n";
my $context_options = $self->{context}{options};
my $debug_sql = $context_options->{debug_sql};
my ($timer, $elapsed_time);
if ($debug_sql) {
$timer = $self->_get_timer();
print $App::DEBUG_FILE "DEBUG_SQL: export_rows()\n";
print $App::DEBUG_FILE $sql;
}
my ($retval);
eval {
$retval = $self->{dbh}->do($sql);
};
if ($debug_sql) {
$elapsed_time = $self->_read_timer($timer);
print $App::DEBUG_FILE "DEBUG_SQL: export_rows=[$retval] ($elapsed_time sec) $DBI::errstr : $@\n";
}
}
&App::sub_exit() if ($App::trace);
}
#+----+-------------+-------+-------+-------------------------------------+-------------------+---------+-------------+------+-------+
#| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
#+----+-------------+-------+-------+-------------------------------------+-------------------+---------+-------------+------+-------+