1#---------------------------------------------------------------------
2# Support for unknown command
3#---------------------------------------------------------------------
4
5proc unknown {proname args} {
6    upvar #0	__PLTcl_unknown_support_plan_modname	p_mod
7    upvar #0	__PLTcl_unknown_support_plan_modsrc	p_src
8
9    #-----------------------------------------------------------
10    # On first call prepare the plans
11    #-----------------------------------------------------------
12    if {![info exists p_mod]} {
13        set p_mod [spi_prepare 					\
14		"select modname from pltcl_modfuncs		\
15		 where funcname = \$1" name]
16        set p_src [spi_prepare					\
17		"select modseq, modsrc from pltcl_modules	\
18		 where modname = \$1				\
19		 order by modseq" name]
20    }
21
22    #-----------------------------------------------------------
23    # Lookup the requested function in pltcl_modfuncs
24    #-----------------------------------------------------------
25    set n [spi_execp -count 1 $p_mod [list [quote $proname]]]
26    if {$n != 1} {
27	#-----------------------------------------------------------
28	# Not found there either - now it's really unknown
29	#-----------------------------------------------------------
30        return -code error "unknown command '$proname'"
31    }
32
33    #-----------------------------------------------------------
34    # Collect the source pieces from pltcl_modules
35    #-----------------------------------------------------------
36    set src ""
37    spi_execp $p_src [list [quote $modname]] {
38        append src $modsrc
39    }
40
41    #-----------------------------------------------------------
42    # Load the source into the interpreter
43    #-----------------------------------------------------------
44    if {[catch {
45            uplevel #0 "$src"
46        } msg]} {
47	elog NOTICE "pltcl unknown: error while loading module $modname"
48	elog WARN $msg
49    }
50
51    #-----------------------------------------------------------
52    # This should never happen
53    #-----------------------------------------------------------
54    if {[catch {info args $proname}]} {
55        return -code error \
56	    "unknown command '$proname' (still after loading module $modname)"
57    }
58
59    #-----------------------------------------------------------
60    # Finally simulate the initial procedure call
61    #-----------------------------------------------------------
62    return [uplevel 1 $proname $args]
63}
64