# $Header: /home/cvsroot/tcldb/wisql/Tlib/mkSQL,v 1.6 1999/05/01 03:49:32 de Exp $
# tcl procs saved on Tue Sep 05 09:33:06 PDT 1995

proc mkSQL w {

	global table base Qtable

	upvar #0 EZRsqlcmd sqlcmd
	upvar #0 EZRprints prints
	upvar #0 EZRsorts sorts
	upvar #0 EZRporder porder
	upvar #0 EZRsorder sorder
	upvar #0 EZRwhere where
	upvar #0 EZRnumprt numprt
	upvar #0 EZRnumsrt numsrt
	upvar #0 EZRnumcol numcol
	upvar #0 EZRcolatts colatts
	upvar #0 EZRcols cols
	upvar #0 EZRcolnames colnames
	upvar #0 EZRdist dist
	



	set ifsort 0
	set ifprint 0
	set ifwhere 0

	foreach c $cols {
		if {$prints($c)} {set ifprint 1}
	}

	foreach c $cols {
		if {$sorts($c) != 0} {set ifsort 1}
	}

	foreach c $cols {
		if {[catch {set where($c,op)}] == 0} {
			if {$where($c,op) != ""} {
				set ifwhere 1
			}
		}
	}
		    
	if {$ifprint == 0} {
		set sqlcmd ""
		$w.messages configure -text "Sorry, I can't generate a SQL command until you select some fields to print."
		$w.control.seeSQL flash
		$w.control.go flash
		return
	}

	if {$dist} {
	set sqlcmd "select distinct"
	} else {
	set sqlcmd "select"
	}

        foreach p [lsort -integer [array names porder]] {
		set c $porder($p)
		set cn [keylget colatts($c) name]
                set wid [keylget colatts($c) width]
                if {$wid} {
                 append sqlcmd [format " convert(char(%s),%s),"  $wid $cn]
                } else {
                 append sqlcmd [format " %s," $cn]
                }
        }

	set sqlcmd [string trimright $sqlcmd " ,"]

	append sqlcmd " from $Qtable "

	if {$ifwhere != 0} {
#	if this is select distinct then we had better use having instead
#	of where!
		if {$dist} {
		append sqlcmd "having"
		} else {
		append sqlcmd "where"
		}
		foreach c $cols { 
			if {[catch {set where($c,op)}] == 0} {
			set cn [keylget colatts($c) name]
			if {$where($c,op) > " "} {
				append sqlcmd [format " %s %s and" $cn $where($c,sql)]
			}
			}
		}
		set sqlcmd [string trimright $sqlcmd "and"]
	}

	if {$ifsort != 0} {
		append sqlcmd "order by "
		foreach c $cols {
			if {$sorts($c) != 0} {
			if {$sorts($c) == "a"} {
				set dir "ASC"
			} else {
				set dir "DESC"
			}
			set cn [keylget colatts($c) name]
			append sqlcmd [format "%s %s, " $cn $dir]
			}
		}
	}
	set sqlcmd [string trimright $sqlcmd " ,"]
			

}

