X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDBUtils.pm;h=f0952440e4aaa6595fe621eb4e77eee48ca11b46;hb=7718459cd0be728a57d7ca75dd8077316df7d730;hp=c9c70c95a94fabd69881b6d8c79465925ff75af3;hpb=be54aea5115bbfcc5d91de846879126417cacdbd;p=kivitendo-erp.git diff --git a/SL/DBUtils.pm b/SL/DBUtils.pm index c9c70c95a..f0952440e 100644 --- a/SL/DBUtils.pm +++ b/SL/DBUtils.pm @@ -8,12 +8,12 @@ our @ISA = qw(Exporter); our @EXPORT = qw(conv_i conv_date conv_dateq do_query selectrow_query do_statement dump_query quote_db_date like selectfirst_hashref_query selectfirst_array_query - selectall_hashref_query selectall_array_query + selectall_hashref_query selectall_array_query selectcol_array_query selectall_as_map selectall_ids prepare_execute_query prepare_query create_sort_spec does_table_exist - add_token); + add_token check_trgm); use strict; @@ -92,7 +92,7 @@ sub dump_query { my $self_filename = 'SL/DBUtils.pm'; my $filename = $self_filename; my ($caller_level, $line, $subroutine); - while ($filename eq $self_filename) { + while ($filename =~ m{$self_filename$}) { (undef, $filename, $line, $subroutine) = caller $caller_level++; } @@ -171,16 +171,15 @@ sub selectall_hashref_query { return wantarray ? @{ $result } : $result; } -sub selectall_array_query { +sub selectall_array_query { goto &selectcol_array_query; } + +sub selectcol_array_query { $main::lxdebug->enter_sub(2); my ($form, $dbh, $query) = splice(@_, 0, 3); my $sth = prepare_execute_query($form, $dbh, $query, @_); - my @result; - while (my ($value) = $sth->fetchrow_array()) { - push(@result, $value); - } + my @result = @{ $dbh->selectcol_arrayref($sth) }; $sth->finish(); $main::lxdebug->leave_sub(2); @@ -399,6 +398,14 @@ sub role_is_superuser { return $is_superuser; } +sub check_trgm { + my ($dbh) = @_; + + my $version = $dbh->selectrow_array(qq|SELECT installed_version FROM pg_available_extensions WHERE name = 'pg_trgm'|); + + return !!$version; +} + 1; @@ -408,7 +415,7 @@ __END__ =head1 NAME -SL::DBUTils.pm: All about database connections in kivitendo +SL::DBUtils.pm: All about database connections in kivitendo =head1 SYNOPSIS @@ -419,6 +426,8 @@ SL::DBUTils.pm: All about database connections in kivitendo conv_dateq($str) quote_db_date($date) + my $dbh = SL::DB->client->dbh; + do_query($form, $dbh, $query) do_statement($form, $sth, $query) @@ -428,9 +437,11 @@ SL::DBUTils.pm: All about database connections in kivitendo my $all_results_ref = selectall_hashref_query($form, $dbh, $query) my $first_result_hash_ref = selectfirst_hashref_query($form, $dbh, $query); - my @first_result = selectfirst_array_query($form, $dbh, $query); # == + my @first_result = selectfirst_array_query($form, $dbh, $query); my @first_result = selectrow_query($form, $dbh, $query); + my @values = selectcol_array_query($form, $dbh, $query); + my %sort_spec = create_sort_spec(%params); =head1 DESCRIPTION @@ -439,7 +450,7 @@ DBUtils provides wrapper functions for low level database retrieval. It saves you the trouble of mucking around with statement handles for small database queries and does exception handling in the common cases for you. -Query and retrieval function share the parameter scheme: +Query and retrieval functions share the parameter scheme: query_or_retrieval(C