use Mojo::Base -strict;
BEGIN { $ENV{MOJO_REACTOR} = 'Mojo::Reactor::Poll' }
use Test::More;
plan skip_all => 'set TEST_ONLINE to enable this test'
unless $ENV{TEST_ONLINE};
use Mojo::IOLoop;
use Mojo::MySQL5;
my $mysql = Mojo::MySQL5->new($ENV{TEST_ONLINE});
$mysql->url->options->{found_rows} = 0;
my $db = $mysql->db;
$db->query(
'create table if not exists results_test (
id integer auto_increment primary key,
name text
)'
);
$db->query('truncate table results_test');
my $res = $db->query('insert into results_test (name) values (?)', 'foo');
is $res->affected_rows, 1, 'right affected_rows';
is $res->last_insert_id, 1, 'right last_insert_id';
is $res->warnings_count, 0, 'no warnings';
is $res->err, undef, 'no error';
is $res->errstr, undef, 'no error';
is $res->state, '', 'no state';
$res = $db->query('insert into results_test (name) values (?)', 'bar');
is $res->affected_rows, 1, 'right affected_rows';
is $res->last_insert_id, 2, 'right last_insert_id';
is $res->warnings_count, 0, 'no warnings';
is $db->query('update results_test set name=? where name=?', 'foo', 'foo1')->affected_rows, 0, 'right affected rows';
is $db->query('update results_test set name=? where name=?', 'foo', 'foo')->affected_rows, 0, 'right affected rows';
is $db->query('update results_test set id=1 where id=1')->affected_rows, 0, 'right affected rows';
my $count = $db->{dbh} && $db->dbh->{mysql_use_result} ? 0 : 1;
$res = $db->query("select 1 + '4a'");
is_deeply $res->arrays, [[5 ]];
is $res->warnings_count, $count, 'warnings';
$res = $db->query('show warnings');
like $res->hashes->[0]->{Message}, qr/Truncated/, 'warning message';
$db->disconnect;
$mysql->url->options->{found_rows} = 1;
$db = $mysql->db;
is $db->query('update results_test set name=? where name=?', 'foo', 'foo1')->affected_rows, 0, 'right affected rows';
is $db->query('update results_test set name=? where name=?', 'foo', 'foo')->affected_rows, 1, 'right affected rows';
is $db->query('update results_test set id=1 where id=1')->affected_rows, 1, 'right affected rows';
$db->query('drop table results_test');
my $err;
Mojo::IOLoop->delay(
sub {
my $delay = shift;
$db->query('select name from results_test', $delay->begin);
},
sub {
my $delay = shift;
$err = shift;
$res = shift;
}
)->wait;
like $err, qr/results_test/, 'has error';
is $err, $res->errstr, 'same error';
is length($res->state), 5, 'has state';
done_testing;