aisa/libs/modules/_FromProd/v1.0/db_min.pm
2026-02-03 14:35:43 +02:00

269 lines
7.3 KiB
Perl

sub db_min_upd {
my ($table,$where) = @_ ;
our $set = '' ;
foreach (keys %i) {
if (substr($_,0,3) eq 'new') { next ; }
if ($ignore{$_}) { next ; }
if ($hidden{$_} == 1) { next ; }
if ($i{$_} =~ /\"/) { $set .= qq(`$_`='$i{$_}',) ; } elsif ($i{$_} eq 'NULL') { $set .= qq(`$_`=$i{$_},) ; } else { $set .= qq(`$_`="$i{$_}",) ; }
}
$set = substr($set,0,-1) ;
unless ($set) { return ; }
&db_open_upd ;
my $sql = qq(UPDATE $table SET $set WHERE $where) ;
&common_debug($sql) ;
if ($testing == 1 && $useropts{it}{$username}) { &common_debug(">>>>>> *** TESTING, DB NOT UPDATED *** <<<<<<") ; return ; }
$sth = $dbh -> do ($sql) or die "could not execute :<BR>$sql<BR>$!" ;
&db_close_conn ;
$success = qq($i{id} SUCCESSFULLY SAVED) ;
} #------------------------------------------------------------------------------------------
sub db_min_insert {
my ($table) = @_ ;
my $columns = '' ;
my $values = '' ;
foreach (keys %i) {
if ($ignore{$_}) { next ; }
if ($hidden{$_} == 1) { next ; }
$columns .= qq(`$_`,) ;
if ($i{$_} =~ /\"/) { $values .= qq('$i{$_}',) ; } elsif ($i{$_} eq 'NULL') { $values .= qq(`$_`=$i{$_},) ; } else { $values .= qq("$i{$_}",) ; }
}
$columns = substr($columns,0,-1) ;
$values = substr($values,0,-1) ;
&db_open_upd ;
my $sql = qq(INSERT INTO $table ($columns) VALUES ($values) ;) ;
&common_debug($sql) ;
if ($testing == 1 && $useropts{it}{$username}) { &common_debug(">>>>>> *** TESTING, DB NOT UPDATED *** <<<<<<") ; return ; }
$sth = $dbh -> do ($sql) or die "could not execute :<BR>$sql<BR>$!" ;
our $new_row_id = $dbh->last_insert_id(undef, undef, $table, 'id') ; # or die "no insert id?";
&db_close_conn ;
$success = qq($i{id} SUCCESSFULLY SAVED) ;
} #------------------------------------------------------------------------------------------
sub db_min_delete {
my ($table,$where) = @_ ;
&db_open_upd ;
my $sql = qq(DELETE FROM $table WHERE $where) ;
&common_debug($sql) ;
if ($testing == 1 && $useropts{it}{$username}) { &common_debug(">>>>>> *** TESTING, DB NOT UPDATED *** <<<<<<") ; return ; }
$sth = $dbh -> do ($sql) or die "could not execute :<BR>$sql<BR>$!" ;
&db_close_conn ;
$success = qq($i{id} SUCCESSFULLY DELETED) ;
} #------------------------------------------------------------------------------------------
sub db_min_ro {
my ($table,$select,$where,$orderby,$limit) = @_ ;
if ($where) { $where = 'WHERE ' . $where ; }
if ($limit) { $limit = 'LIMIT ' . $limit ; }
if ($orderby) { $orderby = 'ORDER BY ' . $orderby ; }
&db_open_ro ;
my $sql = qq(SELECT $select FROM $table $where $orderby $limit) ;
&common_debug($sql) ;
my $sth = $dbh->prepare($sql) ;
$sth -> execute() or die "Could not execute SQL statement $sql ... maybe invalid? $!";
$col_cnt=0;
foreach $col (@{$sth->{NAME}}) { $col_name{$col_cnt}=$col; $col_cnt++; } # &common_debug($col); NB *** must be before fetchall_arrayref
my $rows_array_ref = $sth->fetchall_arrayref();
$sth->finish();
&db_close_conn ;
$db{$table} = () ; $done_col_val{$table} = () ;
foreach $row (@$rows_array_ref) {
for (0 .. $col_cnt){
if ($done_col_val{$table}{@$row[0]}{$col_name{$_}}) { next; }
# &common_debug("db_common_ro - [$_] [$table] [@$row[0]] [$col_name{$_}] [@$row[$_]]") ;
$db{$table}{@$row[0]}{$col_name{$_}} = @$row[$_] ;
$done_col_val{$table}{@$row[0]}{$col_name{$_}} = 1 ;
}
}
} #------------------------------------------------------------------------------------------
sub db_min_raw {
my ($sql) = @_ ;
&common_debug($sql) ;
if ($testing == 1 && $useropts{it}{$username}) { &common_debug(">>>>>> *** TESTING, DB NOT UPDATED *** <<<<<<") ; return ; }
my $sth = $dbh->prepare($sql) ;
$sth->execute() or die "Could not execute SQL statement $sql ... maybe invalid? $!";
our $col_cnt=0;
foreach $col (@{$sth->{NAME}}) { $col_name{$col_cnt}=$col; $col_cnt++; } # &common_debug($col); NB *** must be before fetchall_arrayref
our $rows_array_ref = $sth->fetchall_arrayref();
$sth->finish();
} #------------------------------------------------------------------------------------------
sub db_min_copy {
my ($table,$id) = @_ ;
&db_open_upd ;
our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it
$i{id} = &db_min_get_max($table,'id') ;
my $add_upd_sql = '' ;
if ($table eq 'quotes' or $table eq 'event_quotes'){
$i{quote_nr} = &db_min_get_max($table,'quote_nr') ;
$add_upd_sql = qq~, `quote_nr`='$i{quote_nr}'~;
}
if ($table eq 'cameras'){
$i{camera_nr} = &db_min_get_max_camera_nr($table,'camera_nr',$id) ;
$add_upd_sql = qq~, `camera_nr`='$i{camera_nr}'~;
}
my $sql = qq~CREATE TEMPORARY TABLE `#temp` SELECT * FROM $table WHERE `id`='$id';~ ;
&common_debug($sql) ;
$sth = $dbh -> do ($sql) or die "could not execute :<BR>$sql<BR>$!" ;
$sql = qq~UPDATE `#temp` SET `id`='$i{id}'$add_upd_sql WHERE `id`='$id';~ ;
&common_debug($sql) ;
$sth = $dbh -> do ($sql) or die "could not execute :<BR>$sql<BR>$!" ;
$sql = qq~INSERT INTO $table SELECT * FROM `#temp` WHERE `id`='$i{id}';~ ;
&common_debug($sql) ;
$sth = $dbh -> do ($sql) or die "could not execute :<BR>$sql<BR>$!" ;
$sql = qq~DROP TEMPORARY TABLE IF EXISTS `#temp`;~ ;
&common_debug($sql) ;
$sth = $dbh -> do ($sql) or die "could not execute :<BR>$sql<BR>$!" ;
$db_ignore_open_close = 0 ; # do one open and one close instead of repeating it
&db_close_conn ;
$success = qq($id SUCCESSFULLY COPIED TO $i{id}) ;
} #------------------------------------------------------------------------------------------
sub db_min_get_max_camera_nr {
my ($table,$orderby,$camera_id) = @_ ;
&db_min_ro($table,'id,camera_system_id',"`id`='$camera_id'",'','') ;
# &db_min_ro($table,'id,camera_nr',"`camera_system_id`='$db{$table}{$camera_id}{camera_nr}'",'`id` DESC',1) ;
&db_min_ro($table,'id,camera_nr',"`camera_system_id`='$db{$table}{$camera_id}{camera_system_id}'",'`id` DESC',1) ;
my $max_cam_cnt = 0 ;
foreach my $id (keys %{$db{$table}}) {
($cam_type,$cam_cnt) = split(/\-/,$db{$table}{$id}{camera_nr});
$max_cam_cnt = $cam_cnt unless $max_cam_cnt > $cam_cnt;
}
$max_cam_cnt++;
my $camera_nr = $cam_type . '-' . sprintf("%04s", $max_cam_cnt) ; # e.g. S1-0001
return ($camera_nr) ;
} #------------------------------------------------------------------------------------------
sub db_min_get_max {
my ($table,$orderby,$where) = @_ ;
&db_open_ro ;
if ($where) { $where = 'WHERE ' . $where ; }
my $sql = qq~SELECT * FROM $table $where ORDER BY $orderby DESC LIMIT 1~ ;
&common_debug($sql) ;
my $sth = $dbh->prepare($sql) ;
$sth -> execute() or die "Could not execute SQL statement $sql ... maybe invalid? $!";
$col_cnt=0;
foreach $col (@{$sth->{NAME}}) { $col_name{$col_cnt}=$col; $col_cnt++; } # &common_debug($col); NB *** must be before fetchall_arrayref
my $rows_array_ref = $sth->fetchall_arrayref();
$sth->finish();
&db_close_conn ;
my $new_id = 1 ;
$db{$table} = () ;
foreach $row (@$rows_array_ref) {
for (0 .. $col_cnt){
$db{$table}{@$row[0]}{$col_name{$_}} = @$row[$_] ;
}
$new_id = $db{$table}{@$row[0]}{$orderby} ;
$new_id++ ;
}
return ($new_id) ;
} #------------------------------------------------------------------------------------------
1;