#!/usr/bin/perl
#
# execinsert-values.pl : test case for multi values insert
#

use strict;
use warnings;

use DBI;
use Time::HiRes qw(time);

my $driver = "Pg";
my $user = "postgres";
my $dbname = "bench";
my $host = "localhost";
my $port = 5439;
my $dsn;

my $dbh;
my $sth;
my $row;
my $elapsed;
my $i;
my $maxi = shift;
my $values;
my $aid = 1;
my $maxaid = 10000000;
my $bid = 1;
my $maxbid = 100;
my $arraysiz = shift;

if (!defined $maxi)  {
	$maxi = 1000000
};
if (!defined $arraysiz)  {
	$arraysiz = 1
};

$dsn = "dbi:$driver:host=$host;port=$port;dbname=$dbname";
$dbh = DBI->connect($dsn, $user, "", {AutoCommit => 0, RaiseError => 1} ) 
		or die "Cannot connect to $dbname!\n";

$dbh->do("TRUNCATE pgbench_accounts");

$elapsed = time();

for ($i = 0; $i < $maxi + 1; $i++) {

	if ($i%$arraysiz eq 0) {

		if ($i > 0 ) {
			$dbh->do("INSERT INTO pgbench_accounts (aid, bid, abalance) VALUES $values");
		}
		$values = "($aid, $bid, 0)";

	} else {

		$values = $values . ",($aid, $bid, 0)";
	}

	$aid++;
	if ($aid eq $maxaid) {
		$aid = 1;
		$bid++;
	}

}

$dbh->commit();

$elapsed = time() - $elapsed;

print "$i inserts with array size $arraysiz in $elapsed s\n";

$dbh->disconnect();
