AxKit-XSP-ESQL
view release on metacpan or search on metacpan
# DBI->trace(1);
sub new_query {
unshift @RESULTS, {};
unshift @NAMES, [];
unshift @STH, undef;
unshift @COUNT, 0;
# warn "new_query: ", scalar @STH, "\n";
}
sub end_query {
shift @RESULTS;
shift @NAMES;
my $sth = shift @STH;
$sth->finish();
shift @COUNT;
# warn "end_query: ", scalar @STH, "\n";
}
sub prepare {
my ($dbh, $query) = @_;
$STH[0] = $dbh->prepare($query);
}
sub execute {
my (@params) = set_null_params(@_);
my $rv = $STH[0]->execute(@params);
$NAMES[0] = $STH[0]->{NAME_lc};
my %hash;
my $rc = $STH[0]->bind_columns(\@hash{ @{$NAMES[0]} });
$RESULTS[0] = \%hash;
return $rv;
}
sub execute_from_update {
my (@params) = set_null_params(@_);
return $STH[0]->execute(@params);
}
sub set_null_params {
map { $_ eq 'NULL' ? undef : $_ } @_;
}
sub get_sth {
my ($ancestor) = @_;
$ancestor ||= 0;
$STH[$ancestor];
}
sub get_row {
my ($ancestor) = @_;
$ancestor ||= 0;
my $res = $STH[$ancestor]->fetch;
$COUNT[$ancestor]++ if $res;
return $res;
}
sub get_column {
my ($column, $ancestor) = @_;
$ancestor ||= 0;
if (DBI::looks_like_number($column)) {
return $RESULTS[$ancestor]{ $NAMES[$ancestor][$column - 1] };
}
else {
return $RESULTS[$ancestor]{$column};
}
}
sub column_name {
my ($column, $ancestor) = @_;
$ancestor ||= 0;
return $STH[$ancestor]->{NAME}->[column_number($column)];
}
sub column_number {
my ($col, $ancestor) = @_;
$ancestor ||= 0;
if (DBI::looks_like_number($col)) {
return $col - 1;
}
else {
my $num = 0;
for (@{$NAMES[$ancestor]}) {
last if $_ eq $col;
$num++;
}
return $num;
}
}
sub get_columns {
my ($ancestor) = @_;
$ancestor ||= 0;
return @{$NAMES[$ancestor]};
}
sub get_count {
my ($ancestor) = @_;
$ancestor ||= 0;
warn("get_count: returning " . $COUNT[$ancestor] . "\n");
return $COUNT[$ancestor];
}
sub parse_char {
my ($e, $text) = @_;
if ($e->current_element() ne 'query') {
$text =~ s/^\s*//;
$text =~ s/\s*$//;
}
return '' unless $text;
$text =~ s/\|/\\\|/g;
return ". q|$text|";
}
sub parse_start {
my ($e, $tag, %attribs) = @_;
if ($tag eq 'connection') {
$e->manage_text(0);
return "{\nmy (\$dbh, \$connect_count, \$driver, \$transactions, \$dburl, \$user, \$pass);\n";
}
elsif ($tag eq 'driver') {
my $transactions = 1;
if (lc($attribs{transactions}) eq 'no') {
$transactions = 0;
}
elsif (lc($attribs{transactions}) eq 'yes') {
$transactions = 1;
}
elsif (exists($attribs{transactions})) {
die "<esql:driver transactions='$attribs{transactions}'> is invalid. Use 'yes' or 'no'";
}
return '$transactions = ' . $transactions . ';$driver = "dbi:"';
}
( run in 0.656 second using v1.01-cache-2.11-cpan-483215c6ad5 )