1#! /bin/sh
2# src/pl/tcl/modules/pltcl_listmod.in
3#
4# Start tclsh \
5exec @TCLSH@ "$0" "$@"
6
7#
8# Code still has to be documented
9#
10
11#load /usr/local/pgsql/lib/libpgtcl.so
12package require Pgtcl
13
14
15#
16# Check for minimum arguments
17#
18if {$argc < 1} {
19    puts stderr ""
20    puts stderr "usage: pltcl_listmod dbname \[options\] \[modulename \[...\]\]"
21    puts stderr ""
22    puts stderr "options:"
23    puts stderr "    -host hostname"
24    puts stderr "    -port portnumber"
25    puts stderr ""
26    exit 1
27}
28
29#
30# Remember database name and initialize options
31#
32set dbname [lindex $argv 0]
33set options ""
34set errors 0
35set opt ""
36set val ""
37
38set i 1
39while {$i < $argc} {
40    if {[string compare [string index [lindex $argv $i] 0] "-"] != 0} {
41        break;
42    }
43
44    set opt [lindex $argv $i]
45    incr i
46    if {$i >= $argc} {
47        puts stderr "no value given for option $opt"
48	incr errors
49	continue
50    }
51    set val [lindex $argv $i]
52    incr i
53
54    switch -- $opt {
55        -host {
56	    append options "-host \"$val\" "
57	}
58	-port {
59	    append options "-port $val "
60	}
61	default {
62	    puts stderr "unknown option '$opt'"
63	    incr errors
64	}
65    }
66}
67
68#
69# Final syntax check
70#
71if {$errors > 0} {
72    puts stderr ""
73    puts stderr "usage: pltcl_listmod dbname \[options\] \[modulename \[...\]\]"
74    puts stderr ""
75    puts stderr "options:"
76    puts stderr "    -host hostname"
77    puts stderr "    -port portnumber"
78    puts stderr ""
79    exit 1
80}
81
82proc listmodule {conn modname} {
83    set xname $modname
84    regsub -all {\\} $xname {\\} xname
85    regsub -all {'}  $xname {''} xname
86
87    set found 0
88    pg_select $conn "select * from pltcl_modules where modname = '$xname'" \
89    MOD {
90        set found 1
91	break;
92    }
93
94    if {!$found} {
95        puts "Module $modname not found in pltcl_modules"
96	puts ""
97	return
98    }
99
100    puts "Module $modname defines procedures:"
101    pg_select $conn "select funcname from pltcl_modfuncs \
102	    where modname = '$xname' order by funcname" FUNC {
103        puts "    $FUNC(funcname)"
104    }
105    puts ""
106}
107
108set conn [eval pg_connect $dbname $options]
109
110if {$i == $argc} {
111    pg_select $conn "select distinct modname from pltcl_modules	\
112		order by modname"	\
113		MOD {
114        listmodule $conn $MOD(modname)
115    }
116} else {
117    while {$i < $argc} {
118        listmodule $conn [lindex $argv $i]
119	incr i
120    }
121}
122
123pg_disconnect $conn
124