#!/usr/bin/perl -w # example.pl - an example of ingperl usage $| = 1; print <= 5 group by t.table_name, t.num_rows SQL $sql_readonly = 1; &exec_test('set noqep'); # ===== example of dbmsinfo and wide query ===== @req=split(' ',<<'END'); autocommit_state collation database dba language on_error_state query_language server_class session_id terminal transaction_state username _version group role query_io_limit query_row_limit create_table create_procedure db_admin lockmode maxio maxrow END @field=(); foreach (@req){ push(@field, "dbmsinfo('$_') as ${_}_"); } &select_test("select ".join(", ",@field), 1, 0); # ===== tidy up and disconnect ===== &sql_test("rollback"); &sql("disconnect"); print "Test complete.\n"; exit 0; # ------------------------ support functions --------------------------------- sub sql_test{ local($sql) = @_; local($ok) = "done"; print "Executing: '$sql'\n"; local($ret) = &sql($sql); $ok = (($sql_showerrors) ? "failed" : $sql_error) if $sql_error; print "$ok\n\n"; $ret; } sub exec_test{ local($sql) = @_; local($ok) = "done"; print "Executing: '$sql'\n"; local($ret) = &sql_exec($sql); $ok = (($sql_showerrors) ? "failed" : $sql_error) if $sql_error; print "$ok (rowcount=$sql_rowcount)\n\n"; $ret; } sub select_test{ local($sql, $byfield, $maxrows) = @_; print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; print "Preparing query...\n"; unless(&sql($sql)){ print "$sql_error\n" unless $sql_showerrors; print "while preparing '$sql'\n"; &failed(); } local(@n,@t,@i,@u,@l); print "Fetching names: "; print join(", ", @n=&sql_names), "\n"; print "Fetching types: "; print join(", ", @t=&sql_types), "\n"; print "Fetching ingtypes: "; print join(", ", @i=&sql_ingtypes), "\n"; print "Fetching nullable: "; print join(", ", @u=&sql_nullable), "\n"; print "Fetching lengths: "; print join(", ", @l=&sql_lengths), "\n"; print "Fetching data...\n"; local($i, $f, @row) = (0,0); while (@row = &sql_fetch) { ++$i; if ($byfield){ print"Row Field (Type Len Name ) Value:\n" if ($i==1); foreach $f (0..$#row){ $fmt="%$t[$f]"; printf("R%2d, F%2d: (%2d($t[$f]), %2d, %-11s) $fmt", $i, $f, $i[$f], $l[$f], "'$n[$f]'", (defined($row[$f])) ? $row[$f] : ""); print " (nullable)" if $u[$f]; print "\n"; } }else{ printf("R%2d: '%s'\n",$i,join("', '", @row)); } if ($maxrows && $i >= $maxrows){ &sql_close; last; } } print "$sql_error\n" if $sql_error; print "Complete (sqlcode=$sql_sqlcode).\n"; print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"; } sub failed{ local($msg) = @_; $msg = "" unless ($msg); $sql_showerrors = 0; &sql('rollback'); &sql('disconnect'); print "ingtest.pl failed $msg"; exit 1; } # end.