The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Copyright (c) 2003-2006 Jeffrey I Cohen.  All rights reserved.
#
#!/usr/bin/perl
use strict;
use warnings;

use File::Path;
use File::Spec;

use Genezzo::GenDBI;
use Data::Dumper;

#    my $gnz_home = $ENV{GNZ_HOME} || ($ENV{HOME} . '/gnz_home');
    my $gnz_home = File::Spec->catdir("t", "gnz_home");

if (1)
{
    # build a database if necessary

    # works interactively, but not via system??
#    system ("perl -Iblib/lib lib/Genezzo/gendba.pl -init -gnz_home $gnz_home -shutdown");


    # can have additional database definition parameters if necessary
    my %defs = (
                dbsize    => "10M", # set default dbf file to 10 meg
                blocksize => "4k",  # database uses 4k blocks
#               force_init_db => 0  # set to 1 to overwrite (and destroy)
                                    # an existing database
                );

    # create a database (not command-line)
    # Note: do not overwrite an existing database (even with dbinit => 1)
    #       unless defs => {force_init_db => 1} is set.
    my $fb = Genezzo::GenDBI->new(exe => $0, 
                             gnz_home => $gnz_home, 
                             dbinit => 1,       # init 
#                            defs => \%defs     # define additional parameters
                             );
    print "\n\n";
    print "created a new database"
        if (defined($fb));
    print "\n\n";
}

{ 
    
    # connect to the database
    my $dbh = Genezzo::GenDBI->connect($gnz_home, "NOUSER", "NOPASSWORD");
    
    $dbh->do("startup"); # start the database
    
    # create table test2 (col1 char, col2 char, col3 char, col4 char);
#    $dbh->do("dt test2"); 
    $dbh->do("drop table test2");

#    $dbh->do("ct test2 col1=c col2=c col3=c col4=c");
    $dbh->do("create table test2 (col1 char,col2 char,col3 char,col4 char)");

    my $sth = 
        $dbh->prepare("insert into test2 values (\'alpha\', \'bravo\', \'charlie\', \'delta\', \'echo\', \'foxtrot\', \'golf\', \'hotel\')");

    for my $ii (1..10)
    {
        $sth->execute();
    }

    $dbh->do("commit"); 

    $sth = $dbh->prepare("select * from test2");
    
    print $sth->execute(), " rows \n";

    my @ftchary;
    while (1)
    {
        my @ggg = $sth->fetchrow_array();

        last
            unless (scalar(@ggg));
        @ftchary = @ggg;
    }
    print Dumper( @ftchary);
    print $sth->execute(), " rows \n";

    $sth = $dbh->prepare("select count(*) from test2");

    print $sth->execute(), " rows \n";

    my $lastfetch;
    while (1)
    {
        my $ggg = $sth->fetchrow_hashref();
    
        last
            unless (defined($ggg));
        $lastfetch = $ggg;
    }
    print Dumper($lastfetch);

    $sth = 
        $dbh->prepare("select rid ROWid, rownum as NuMbEr, col1 BAKER, col2 as CHUCK from test2");

    print $sth->execute(), " rows \n";

    print $sth->{NUM_OF_FIELDS}, " columns in select list\n";
    print Dumper($sth->{NAME});

    print Dumper ($dbh->selectall_arrayref("select rid, rownum, col1 from test2 where col1 < \'bravo\'"));

    $dbh->do("shutdown"); # shutdown the database

}