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