use File::Copy ();
use File::Path ();
use List::MoreUtils qw(uniq);
+use SL::DBUtils qw(selectfirst_hashref_query);
+use version;
use Rose::Object::MakeMethods::Generic (
scalar => [ qw(dbh myconfig) ],
sub db_errstr {
my ($self, $handle) = @_;
+ # DBD::Pg before 2.16.1 doesn't set the UTF-8 flag for error
+ # messages even if the connection has UTF-8 enabled. Therefore we
+ # have to convert it to Perl's internal encoding ourselves. See
+ # https://rt.cpan.org/Public/Bug/Display.html?id=53854
+
my $error = $handle ? $handle->errstr : $self->dbh->errstr;
+ return $error if version->new("$DBD::Pg::VERSION")->numify >= version->new("2.16.1")->numify;
return Encode::decode('utf-8', $error);
}
croak "File '${src_dir}/$_' does not exist" unless -f "${src_dir}/$_";
}
- my $template_dir = $::instance_conf->reload->get_templates;
+ # can't use Rose or InstanceConf here because defaults might not be fully upgraded yet.
+ my $defaults = selectfirst_hashref_query($::form, $::form->get_standard_dbh, "SELECT * FROM defaults");
+ return 1 unless my $template_dir = $defaults->{template};
$::lxdebug->message(LXDebug::DEBUG1(), "add_print_templates: template_dir $template_dir");
- return 1 if !$template_dir;
-
foreach my $src_file (@files) {
my $dest_file = $template_dir . '/' . $src_file;
AND (table_name = ?)
SQL
- $self->db_query(qq|ALTER TABLE auth."$params{table}" DROP CONSTRAINT "${_}"|) for map { $_->[0] } @{ $constraints };
+ $self->db_query(qq|ALTER TABLE $params{schema}."$params{table}" DROP CONSTRAINT "${_}"|) for map { $_->[0] } @{ $constraints };
}
1;
=item C<db_errstr [$handle]>
Returns the last database from C<$handle> error message encoded in
-Perl's internal encoding. The PostgreSQL DBD leaves the UTF-8 flag off
-for error messages even if the C<pg_enable_utf8> attribute is set.
+Perl's internal encoding. The PostgreSQL DBD before 2.16.1 leaves the
+UTF-8 flag off for error messages even if the C<pg_enable_utf8>
+attribute is set. For older versions the error string is already
+encoded correctly and is left unchanged.
C<$handle> is optional and can be one of three things: