1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
#!/usr/bin/perl
# $Id: Show.cgi,v 1.4 2001/06/04 14:06:39 mpeppler Exp $
#
# Show a Sybase stored proc etc, in HTML.
# Usage: http://host/cgi-bin/Show.cgi?server=SERVERNAME&database=DATABASE
# where SERVERNAME is the server you wish to connect to (eg SYBASE)
# and DATABASE is the database in which you wish to view the objects.
use strict;
use DBI;
use CGI;
my $query = new CGI;
print $query->header;
print $query->start_html(-title => "Show a Sybase Object");
my $server = $query->param('server');
my $database = $query->param('database');
my $state = $query->param('__state__') || 0;
if(!$database) {
error("Please supply the <b>database</b> parameter.<p>");
}
my $dbh = DBI->connect("dbi:Sybase:$server", 'sa', '');
($dbh->do("use $database") != -2) || error("The database <b>$database</b> deosn't exist");
SWITCH_STATE: while(1) {
($state == 0) && do {
my($values, $labels) = getObjects();
print "<h1>Show a Sybase objects definition:</h1>\n";
print "<p><p>Please select an object:<p>\n";
print $query->start_form;
print $query->scrolling_list(-name=>'object',
'-values'=>$values,
-labels=>$labels,
-size=>10);
$query->param(-name=>'__state__', '-values'=>1);
print $query->hidden(-name=>'__state__');
print $query->hidden(-name=>'database');
print $query->hidden(-name=>'server');
print $query->submit;
print $query->end_form;
last SWITCH_STATE;
};
($state == 1) && do {
print "<h1>Show a Sybase object's definition:</h1>\n";
my $objId = $query->param('object');
my $html = getText($objId);
print $html;
last SWITCH_STATE;
};
}
print $query->end_html;
$dbh->disconnect;
exit(0);
sub getObjects {
my $sth = $dbh->prepare("
select distinct 'obj' = o.name, 'user' = u.name, o.id, o.type
from dbo.sysobjects o, dbo.sysusers u, dbo.sysprocedures p
where u.uid = o.uid and o.id = p.id and p.status & 4096 != 4096
order by o.name
");
$sth->execute;
my $dat;
my @values;
my %labels;
my $value;
while($dat = $sth->fetchrow_hashref) {
$value = "$dat->{id} - $dat->{type}";
push(@values, $value);
$labels{$value} = "$dat->{user}.$dat->{obj}";
}
$sth->finish;
(\@values, \%labels);
}
sub getText {
my $objId = shift;
$objId =~ s/[\D\-\s]+$//;
my $sth = $dbh->prepare("select text from dbo.syscomments where id = $objId");
$sth->execute;
my $html = '';
my $text;
while(($text) = $sth->fetchrow) {
$html .= $text;
}
$sth->finish;
TsqlToHtml($html);
}
sub TsqlToHtml {
my $html = shift;
$html =~ s/\n/<br>\n/g;
$html =~ s/\b(as|begin|between|declare|delete|drop|else|end|exec|exists|go|if|insert|procedure|return|set|update|values|from|select|where|and|or|create|order by)\b/<b>$1<\/b>/ig;
$html =~ s/\b(tinyint|smallint|int|char|varchar|datetime|smalldatetime|money|smallmoney|numeric|decimal|text|binary|varbinary|image)\b/<i>$1<\/i>/gi;
$html =~ s/\t/\ \ \ \ /g;
$html =~ s/ /\ /sg;
$html;
}
sub error {
print "<h1>Error!</h1>\n";
print @_;
print $query->end_html;
exit(0);
}
|