| Meta documentation | Contained in the Meta distribution. |
Meta::Cgi::SqlTable - show the results of an SQL query.
Copyright (C) 2001, 2002 Mark Veltzer; All rights reserved.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
MANIFEST: SqlTable.pm PROJECT: meta VERSION: 0.02
package foo; use Meta::Cgi::SqlTable qw(); my($object)=Meta::Cgi::SqlTable->new(); my($result)=$object->method();
Give this class: 1. An SQL statement. 2. A description of a database that it's supposed to work on. 3. A DBI handle. 4. How many rows of results you want displayed and other hints.
And it will display a CGI UI which enabled you to browse through the results.
The object will: 1. Analyze the statement using SQL::Statement to find out which fields it returns. 2. Build a table with hints about the columns. 3. Build buttons to move forward, backward in the results and select how many results to see at once.
get_columns($$) sql_table($$$$$) core_code($$$$$$) TEST($)
This function analyzes an SQL statement using SQL::Statement and returns the columns that the statement returns.
This method does all the work. Give it hell. Arguments are: 0. Meta::Cgi::SqlTable object. 1. SQL statement to be used. 2. definition object of the database. 3. dbi handle. 4. number of rows to display.
This method actually does the work and gets the columns too.
This is a testing suite for the Meta::Cgi::SqlTable module. This test is should be run by a higher level management system at integration or release time or just as a regular routine to check that all is well.
CGI(3)
None.
Name: Mark Veltzer Email: mailto:veltzer@cpan.org WWW: http://www.veltzer.org CPAN id: VELTZER
0.00 MV download scripts 0.01 MV weblog issues 0.02 MV md5 issues
CGI(3), SQL::Statement(3), strict(3)
-add support for the SORTED BY (combo box which allows the user to select according to which field to sort).
-add limit for nubmer of rows.
-add forward and back buttons.
-add options to change the limit by the user.
-add cascading style sheet support.
-add tool tips about the headers of the table.
-add options to gather results according to groups (for example letters) if there is too much results.
| Meta documentation | Contained in the Meta distribution. |
#!/bin/echo This is a perl module and should not be run package Meta::Cgi::SqlTable; use strict qw(vars refs subs); use CGI qw(); use SQL::Statement qw(); our($VERSION,@ISA); $VERSION="0.02"; @ISA=qw(CGI); #sub get_columns($$); #sub sql_table($$$$$); #sub core_code($$$$$$); #sub TEST($); #__DATA__ sub get_columns($$) { my($self,$stat)=@_; my($stmt)=SQL::Statement->new($stat); my(@columns)=$stmt->columns(); my(@col_res); for(my($i)=0;$i<=$#columns;$i++) { my($curr)=$columns[$i]; my($table)=$curr->table(); my($name)=$curr->name(); # the reason of lc in the next line is that SQL::Statement is not # consistant in upper case and lower case handling of table and field # name (this needs to be reported to the author). my($full)=CORE::lc($table.".".$name); push(@col_res,$full); } return(\@col_res); } sub sql_table($$$$$) { my($self,$stat,$def,$dbi,$rows)=@_; my($columns)=$self->get_columns($stat); return($self->core_code($stat,$def,$dbi,$rows,$columns)); } sub core_code($$$$$$) { my($self,$stat,$def,$dbi,$rows,$columns)=@_; my($pretty)=1; my($res); $res.=$self->comment("Generated by Meta::Cgi::SqlTable"); $res.=$self->start_table(); $res.=$self->caption($stat); $res.="<tr>"; for(my($i)=0;$i<=$#$columns;$i++) { my($curr)=$columns->[$i]; $res.=$self->th($curr); } $res.="</tr>"; my($ar)=$dbi->execute_arrayref($stat." LIMIT ".$rows); for(my($i)=0;$i<=$#$ar;$i++) { $res.="<tr>"; my($arr)=$ar->[$i]; #Meta::Utils::Output::print("arr is [".$arr."]\n"); for(my($j)=0;$j<=$#$arr;$j++) { my($curr)=$arr->[$j]; $res.=$self->td($curr); } $res.="</tr>"; if($pretty) { $res.="\n"; } } $res.=$self->end_table(); return($res); } sub TEST($) { my($context)=@_; return(1); } 1; __END__