=head1 Name

DbFehler


=head1 Ziel

Testen, dass die Datenbank Fehler und Warnungen korrekt behandelt.


=cut


package Test::Fehler;
use utf8;
use warnings;
use strict; use warnings;
BEGIN { unshift(@INC,($ENV{'POPHOME'}||'@POPHOME@').'/lib')
			unless $ENV{'KUNDE_NO_PERLPATH'};
      }


use Test::More tests => 18; $|=1;
use Dbase::Test;
use Dbase::Help qw(DoTrans Do DoN DoFn DoNonFatal qquote);
use Fehler qw(warnung problem fehler warnungen probleme ohne_warnung ffehler hat_warnung hat_problem);
use utf8;

my $res;

okF "drop table if exists test28";

ffehler {
	$res = DoN "select * from test28";
	like($res,qr/\A-/,"Fehlermeldungen fangen mit einem Minuszeichen an");
} sub {
	fail "DoN() nicht abgefangen"
};

ffehler {
	$res = Do "select * from test28";
	fail "Do() nicht abgefangen"
} sub {
	print "#F ".join("\n#  ", map {s/\n/\n#  /g; $_} @_)."\n";
	pass "Do() abgefangen"
};

okF "create table test28(a char(3), b tinyint) engine=innodb";

ffehler {
	DoTrans {
		$res = Do "insert into test28 set a='abcd'";
		warnungen {
			print "#W ".join("\n#  ", map {s/\n/\n#  /g; $_} @_)."\n";
			$res++ if join(" ",@_) =~ /\b1265\b/;;
			1;
		};
		fail "kein harter Fehler bei Warnung 1";
	};
} sub {
	print "#F ".join("\n#  ", map {s/\n/\n#  /g; $_} @_)."\n";
	pass "harter Fehler bei Warnung 1";
};
is(DoFn("select count(*) from test28"),0,"kein neuer Datensatz 1");
okF "delete from test28";

ffehler {
	DoTrans {
		DoNonFatal {
			$res = Do "insert into test28 set a='bcde'";
		};
	};
	$res = 0;
	warnungen {
		print "#W ".join("\n#  ", map {s/\n/\n#  /g; $_} @_)."\n";
		$res++ if join(" ",@_) =~ /\b1265\b/;;
		1;
	};
	is($res,1,"eine korrekte Warnung");
} sub {
	fail "harter Fehler trotz NonFatal: @_";
};
is(DoFn("select count(*) from test28"),1,"kein neuer Datensatz 2");
okF "delete from test28";

ffehler {
	$res = Do "insert into test28 set a='cdef'";
	warnungen {
		print "#W ".join("\n#  ", map {s/\n/\n#  /g; $_} @_)."\n";
		$res++ if join(" ",@_) =~ /\b1265\b/;;
		1;
	};
	fail "kein harter Fehler bei Warnung 2";
} sub {
	print "#F ".join("\n#  ",@_)."\n";
	pass "harter Fehler bei Warnung 2";
};
is(DoFn("select count(*) from test28"),1,"trotzdem ein neuer Datensatz");
okF "delete from test28";

okF "drop table test28";

okF "create table test28(inhalt text) engine=innodb default charset=latin1";
my $cont = <<_;

Dies ist
  ein
	Täscht.

_
okF "insert into test28 set inhalt = ${\qquote $cont}";
okQ "select inhalt from test28",$cont;

okF "drop table test28";
