use strict;
use warnings;

use Test::More;
use DBI;

use vars qw($test_dsn $test_user $test_password);
use lib 't', '.';
require 'lib.pl';

my $dbh = DbiTestConnect($test_dsn, $test_user, $test_password, { RaiseError => 1, PrintError => 0, mariadb_server_prepare => 1 });

plan skip_all => "CREATE PROCEDURE is supported since MySQL version 5.0" if $dbh->{mariadb_serverversion} < 50000;

plan skip_all => $dbh->errstr() if !CheckRoutinePerms($dbh);

plan tests => 12;

ok $dbh->do('DROP PROCEDURE IF EXISTS t44_call_placeholder');

ok $dbh->do(<<EOPROC);
CREATE PROCEDURE t44_call_placeholder(IN param INT)
BEGIN
  SELECT 5, param;
END
EOPROC

ok my $sth = $dbh->prepare('CALL t44_call_placeholder(?)');
ok $sth->execute(10);
is_deeply $sth->fetchall_arrayref(), [ [5, 10] ];

ok $dbh->do('DROP PROCEDURE t44_call_placeholder');

ok $dbh->do('CREATE TEMPORARY TABLE t(a INT, b INT)');

ok $dbh->do(<<EOPROC);
CREATE PROCEDURE t44_call_placeholder(IN param INT)
BEGIN
  INSERT INTO t(a, b) SELECT 5, param;
END
EOPROC

ok $dbh->do('CALL t44_call_placeholder(?)', undef, 10);
is_deeply $dbh->selectall_arrayref('SELECT a, b FROM t'), [ [5, 10] ];

ok $dbh->do('DROP PROCEDURE t44_call_placeholder');

ok $dbh->disconnect();