The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
#
#   @(#)$Id: t90ius.t,v 2003.2 2003/01/03 19:02:36 jleffler Exp $
#
#   Test basic handling of IUS data types
#
#   Copyright 1998-99 Jonathan Leffler
#   Copyright 2000    Informix Software Inc
#   Copyright 2002-03 IBM

use DBD::Informix::TestHarness;
use strict;

my ($dbh) = &test_for_ius;

&stmt_note("1..4\n");

$dbh->{ChopBlanks} = 1;

# Create table with IUS data types
my ($tab) = "dbd_ix_ius_table";
&stmt_fail() unless
	$dbh->do(qq%
		CREATE TEMP TABLE $tab
		(
			PKEY	SERIAL8 NOT NULL PRIMARY KEY,
			Col1	BOOLEAN,
			Col2	LVARCHAR,
			Col3	INT8,
			Col4	CHAR(20)
		)
	%);
&stmt_ok();

# Insert data into table.

my $lvc = "abc" x 20;
my ($expect) = 0;

&stmt_fail() unless
	$dbh->do(qq%
		INSERT INTO $tab VALUES(0, 'T', '$lvc', 998877665544, 'Silly String')
	%);
$expect++;

&stmt_fail() unless
	$dbh->do(qq%
		INSERT INTO $tab VALUES(0, 'T', '', 998877665544, 'Empty LVARCHAR')
	%);
$expect++;

&stmt_fail() unless
	$dbh->do(qq%
		INSERT INTO $tab VALUES(0, 'T', 'ZZ', 998877665544, 'Two-char LVARCHAR')
	%);
$expect++;

&stmt_fail() unless
	$dbh->do(qq%
		INSERT INTO $tab VALUES(0, 'T', 'Q', 998877665544, 'One-char LVARCHAR')
	%);
$expect++;

&stmt_fail() unless
	$dbh->do(qq%
		INSERT INTO $tab VALUES(0, NULL, NULL, NULL, 'NULL values')
	%);
$expect++;

&stmt_fail() unless
	$dbh->do(qq%
		INSERT INTO $tab VALUES(0, 'F', 'Empty CHAR string', 100, '')
	%);
$expect++;

$lvc = time . $lvc;
&stmt_fail() unless
	$dbh->do(qq%
		INSERT INTO $tab VALUES(0, 'F', '$lvc', 998877665543, 'More Data')
	%);
$expect++;

sub irand { return int rand 1000000; }

&stmt_fail() unless
	my $sth = $dbh->prepare(qq% INSERT INTO $tab VALUES(?, ?, ?, ?, ?) %);
$lvc = ( &irand . "x" ) x 10 . &irand;
&stmt_fail() unless
	$sth->execute(91234567890, 't', $lvc, &irand, &irand);
$expect++;
$lvc = ( &irand . "x" ) x 8 . &irand;
&stmt_fail() unless
	$sth->execute(0, 'f', $lvc, &irand, &irand);
$expect++;

&stmt_ok();

# Fetch and print the data.
my ($data,$row);
&stmt_fail() unless
	($sth = $dbh->prepare("SELECT * FROM $tab"));
&stmt_fail() unless
	$sth->execute;
&stmt_fail() unless
	($data = $sth->fetchall_arrayref);

my ($cnt) = 0;
foreach $row (@$data)
{
	my ($pad, $n, $i) = ("# ", $#$row + 1, 0);
	for ($i = 0; $i < $n; $i++)
	{
		print $pad, (defined $$row[$i]) ? "<$$row[$i]>" : "NULL";
		$pad = " :: ";
	}
	print " ::\n";
	$cnt++;
}

&stmt_fail("Wrong number of rows ($cnt) returned ($expect expected)!\n") if ($cnt != $expect);
&stmt_ok();

# Clean up
undef $sth;
&stmt_fail() unless $dbh->disconnect;
undef $dbh;
&stmt_ok();

&all_ok();