package DBI::LZE; use strict; use warnings; no warnings 'redefine'; use vars qw( $dbh $dsn $DefaultClass $settings @EXPORT_OK @ISA %functions $style $right $install); $DefaultClass = 'DBI::LZE' unless defined $DBI::LZE::DefaultClass; @DBI::LZE::EXPORT_OK = qw( useexecute quote void fetch_hashref fetch_AoH fetch_array updateModules deleteexecute editexecute addexecute tableLength tableExists initDB $dsn $dbh); %DBI::LZE::EXPORT_TAGS = ( 'all' => [qw( useexecute quote void fetch_hashref fetch_AoH fetch_array updateModules deleteexecute editexecute addexecute tableLength tableExists initDB)], 'dynamic' => [qw( useexecute void fetch_hashref fetch_AoH fetch_array updateModules deleteexecute editexecute addexecute)], 'independent' => [qw(tableLength tableExists initDB useexecute void fetch_hashref fetch_AoH fetch_array updateModules deleteexecute editexecute addexecute)], ); $DBI::LZE::VERSION = '0.2.1'; require Exporter; use DBI; @DBI::LZE::ISA = qw( Exporter DBI); $install = 0; =head1 NAME DBI::LZE =head1 SYNOPSIS FO Syntax use DBI::LZE qw(:all); my $dbh = initDB({name => 'LZE',host => 'localhost',user => 'root',password =>'',style=> 'Crystal'}); OO Syntax use DBI::LZE; my $database = new DBI::LZE( { name =>'LZE', host => 'localhost', user => 'root', password =>'', style=> 'Crystal' } ); my %execute = ( title => 'showTables', description => 'description', sql => "show tables", return => "fetch_array", ); $database->addexecute(\%execute); $database->showTables(); =head2 Export Tags :all execute useexecute quote void fetch_hashref fetch_AoH fetch_array updateModules deleteexecute editexecute addexecute tableLength tableExists initDB :dynamic execute useexecute void fetch_hashref fetch_AoH fetch_array updateModules deleteexecute editexecute addexecute independent: tableLength tableExists initDB :dynamic =head1 DESCRIPTION DBI::LZE =head1 BUGS & LIMITATIONS you can`t use the dynamic statements under mod_perl. =head2 new() my $database = new DBI::LZE(optional \%initializer); see initDB() =cut sub new { my ($class, @initializer) = @_; my $self = {}; bless $self, ref $class || $class || $DefaultClass; $self->initDB(@initializer) if(@initializer); return $self; } =head2 initDB() my $dbh = initDB({name => 'LZE',host => 'localhost',user => 'root',password =>'',style=> 'Crystal'}); =cut sub initDB { my ($self, @p) = getSelf(@_); my $hash = $p[0]; my $database = defined $hash->{name} ? $hash->{name} : 'LZE'; my $host = defined $hash->{host} ? $hash->{host} : 'localhost'; my $user = defined $hash->{user} ? $hash->{user} : 'root'; my $pass = defined $hash->{password} ? $hash->{password} : ''; $style = defined $hash->{style} ? $hash->{style} : 'Crystal'; $dsn = "DBI:mysql:database=$database;host=$host"; $dbh = DBI::LZE->connect($dsn, $user, $pass, {RaiseError => 0, PrintError => 0, AutoCommit => 1,}) or warn "DBI::LZE::errs"; unless ($install) { my @q = $self->fetch_array("select title from querys"); $functions{$_} = $_ foreach (@q); } return $dbh; } =head1 independent functions =head2 tableExists() $bool = $database->tableExists($table); =cut sub tableExists { my ($self, @p) = getSelf(@_); my $table = $p[0]; my $db_clause = ""; ($db_clause, $table) = (" FROM $1", $2) if $table =~ /(.*)\.(.*)/; return ($dbh->selectrow_array("SHOW TABLES $db_clause LIKE '$table'")); } =head2 tableLength $length = $database->tableLength($table); =cut sub tableLength { my ($self, @p) = getSelf(@_); my $table = $p[0]; my $sql = "select count(*) from `$table`"; if($self->tableExists($p[0])) { if(defined $p[1]) { $sql = "select count(*) from `$table`"; } my $sth = $dbh->prepare($sql) or warn $dbh->errstr; $sth->execute() or warn $dbh->errstr; my $length = $sth->fetchrow_array; $sth->finish(); return $length; } else { return 0; } } =head1 dynamic statements =head2 addexecute() add sql statments to yourdatabase for later use witdh useexecute(); my %execute = ( title => 'showTables', description => 'description', sql => "show tables", return => "fetch_array", ); $database->addexecute(\%execute); print join '
' ,$database->showTables(); Fo Syntax: print join '
' , useexecute('showTables'); =cut sub addexecute { my ($self, @p) = getSelf(@_); my $hash = $p[0]; my $title = ((defined $hash->{title})) ? $hash->{title} : 0; my $sql = $hash->{sql} if((defined $hash->{sql})); my $description = $hash->{description} if(defined $hash->{description}); my $return = $hash->{'return'} if(defined $hash->{'return'}); unless ($functions{$title}) { my $sql_addexecute = qq/INSERT INTO querys(`title`,`sql`,`description`,`return`) VALUES(?,?,?,?);/; my $sth = $dbh->prepare($sql_addexecute); $sth->execute($title, $sql, $description, $return) or warn $dbh->errstr; $sth->finish(); $self->updateModules(); } else { return 0; } } =head2 editexecute my %hash = ( title => 'Titel', newTitle => 'New Titel', description => 'querys Abfragen', sql => "sql statement", return => 'fetch_hashref', #subname ); editexecute(\%hash); =cut sub editexecute { my ($self, @p) = getSelf(@_); my $hash = $p[0]; my $title = ((defined $hash->{title})) ? $hash->{title} : 0; my $newTitle = ((defined $hash->{newTitle})) ? $hash->{newTitle} : $title; my $sql = $hash->{sql} if((defined $hash->{sql})); my $description = $hash->{description} if(defined $hash->{description}); my $return = (defined $hash->{'return'}) ? $hash->{'return'} : 'array'; if($functions{$title}) { my $sql_edit = qq(update querys set title = ?, sql=? ,description=?,return=? where title = ? ); my $sth = $dbh->prepare($sql_edit); $sth->execute($newTitle, $sql, $description, $return, $title) or warn $dbh->errstr; $sth->finish(); } else { return 0; } } =head2 useexecute() useexecute($title, @parameter); =cut sub useexecute { my ($self, @p) = getSelf(@_); my $title = shift(@p); my $sql = "select `sql`,`return` from querys where `title` = ?"; my $sth = $dbh->prepare($sql); $sth->execute($title) or warn $dbh->errstr; my ($sqlexec, $return) = $sth->fetchrow_array(); $sth->finish(); return eval(" \$self->$return(\$sqlexec,\@p)"); } =head2 deleteexecute() deleteexecute($title); =cut sub deleteexecute { my ($self, @p) = getSelf(@_); my $id = $p[0]; my $sql_delete = "DELETE FROM querys Where title = ?"; my $sth = $dbh->prepare($sql_delete); $sth->execute($id) or warn $dbh->errstr; $sth->finish(); } =head2 fetch_array() @AoA = $database->fetch_array($sql); =cut sub fetch_array { my ($self, @p) = getSelf(@_); my $sql = shift @p; my @r; eval(' my $sth = $dbh->prepare($sql); if(defined $p[0]) { $sth->execute(@p) or warn $dbh->errstr; }else { $sth->execute() or warn $dbh->errstr; } while(my @comms = $sth->fetchrow_array()) { push(@r, @comms); } $sth->finish();'); @r = $@ if $@; return @r; }