Commit 25acbc51 authored by Marc G. Fournier's avatar Marc G. Fournier

parent 7737dfd3
namespace eval Database {
proc {getTablesList} {} {
global CurrentDB PgAcVar
set tlist {}
if {[catch {
wpg_select $CurrentDB "select c.relname,count(c.relname) from pg_class C, pg_rewrite R where (r.ev_class = C.oid) and (r.ev_type = '1') group by relname" rec {
if {$rec(count)!=0} {
set itsaview($rec(relname)) 1
}
}
if {! $PgAcVar(pref,systemtables)} {
wpg_select $CurrentDB "select relname from pg_class where (relname !~ '^pg_') and (relkind='r') order by relname" rec {
if {![regexp "^pga_" $rec(relname)]} then {
if {![info exists itsaview($rec(relname))]} {
lappend tlist $rec(relname)
}
}
}
} else {
wpg_select $CurrentDB "select relname from pg_class where (relkind='r') order by relname" rec {
if {![info exists itsaview($rec(relname))]} {
lappend tlist $rec(relname)
}
}
}
} gterrmsg]} {
showError $gterrmsg
}
return $tlist
}
proc {vacuum} {} {
global PgAcVar CurrentDB
if {$CurrentDB==""} return;
set PgAcVar(statusline,dbname) [format [intlmsg "vacuuming database %s ..."] $PgAcVar(currentdb,dbname)]
setCursor CLOCK
set pgres [wpg_exec $CurrentDB "vacuum;"]
catch {pg_result $pgres -clear}
setCursor DEFAULT
set PgAcVar(statusline,dbname) $PgAcVar(currentdb,dbname)
}
proc {getPgType} {oid} {
global CurrentDB
set temp "unknown"
wpg_select $CurrentDB "select typname from pg_type where oid=$oid" rec {
set temp $rec(typname)
}
return $temp
}
proc {executeUpdate} {sqlcmd} {
global CurrentDB
return [sql_exec noquiet $sqlcmd]
}
}
This diff is collapsed.
namespace eval Functions {
proc {new} {} {
global PgAcVar
Window show .pgaw:Function
set PgAcVar(function,name) {}
set PgAcVar(function,nametodrop) {}
set PgAcVar(function,parameters) {}
set PgAcVar(function,returns) {}
set PgAcVar(function,language) {}
.pgaw:Function.fs.text1 delete 1.0 end
focus .pgaw:Function.fp.e1
wm transient .pgaw:Function .pgaw:Main
}
proc {design} {functionname} {
global PgAcVar CurrentDB
Window show .pgaw:Function
.pgaw:Function.fs.text1 delete 1.0 end
wpg_select $CurrentDB "select * from pg_proc where proname='$functionname'" rec {
set PgAcVar(function,name) $functionname
set temppar $rec(proargtypes)
set PgAcVar(function,returns) [Database::getPgType $rec(prorettype)]
set funcnrp $rec(pronargs)
set prolanguage $rec(prolang)
.pgaw:Function.fs.text1 insert end $rec(prosrc)
}
wpg_select $CurrentDB "select lanname from pg_language where oid=$prolanguage" rec {
set PgAcVar(function,language) $rec(lanname)
}
if { $PgAcVar(function,language)=="C" || $PgAcVar(function,language)=="c" } {
wpg_select $CurrentDB "select probin from pg_proc where proname='$functionname'" rec {
.pgaw:Function.fs.text1 delete 1.0 end
.pgaw:Function.fs.text1 insert end $rec(probin)
}
}
set PgAcVar(function,parameters) {}
for {set i 0} {$i<$funcnrp} {incr i} {
lappend PgAcVar(function,parameters) [Database::getPgType [lindex $temppar $i]]
}
set PgAcVar(function,parameters) [join $PgAcVar(function,parameters) ,]
set PgAcVar(function,nametodrop) "$PgAcVar(function,name) ($PgAcVar(function,parameters))"
}
proc {save} {} {
global PgAcVar
if {$PgAcVar(function,name)==""} {
focus .pgaw:Function.fp.e1
showError [intlmsg "You must supply a name for this function!"]
} elseif {$PgAcVar(function,returns)==""} {
focus .pgaw:Function.fp.e3
showError [intlmsg "You must supply a return type!"]
} elseif {$PgAcVar(function,language)==""} {
focus .pgaw:Function.fp.e4
showError [intlmsg "You must supply the function language!"]
} else {
set funcbody [.pgaw:Function.fs.text1 get 1.0 end]
regsub -all "\n" $funcbody " " funcbody
if {$PgAcVar(function,nametodrop) != ""} {
if {! [sql_exec noquiet "drop function $PgAcVar(function,nametodrop)"]} {
return
}
}
if {[sql_exec noquiet "create function $PgAcVar(function,name) ($PgAcVar(function,parameters)) returns $PgAcVar(function,returns) as '$funcbody' language '$PgAcVar(function,language)'"]} {
Window destroy .pgaw:Function
tk_messageBox -title PostgreSQL -parent .pgaw:Main -message [intlmsg "Function saved!"]
Mainlib::tab_click Functions
}
}
}
}
proc vTclWindow.pgaw:Function {base} {
global PgAcVar
if {$base == ""} {
set base .pgaw:Function
}
if {[winfo exists $base]} {
wm deiconify $base; return
}
toplevel $base -class Toplevel
wm focusmodel $base passive
wm geometry $base 480x330+98+212
wm maxsize $base 1009 738
wm minsize $base 480 330
wm overrideredirect $base 0
wm resizable $base 1 1
wm deiconify $base
wm title $base [intlmsg "Function"]
bind $base <Key-F1> "Help::load functions"
frame $base.fp \
-height 88 -relief groove -width 125
label $base.fp.l1 \
-borderwidth 0 -relief raised -text [intlmsg Name]
entry $base.fp.e1 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(function,name)
bind $base.fp.e1 <Key-Return> {
focus .pgaw:Function.fp.e2
}
label $base.fp.l2 \
-borderwidth 0 -relief raised -text [intlmsg Parameters]
entry $base.fp.e2 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(function,parameters) -width 15
bind $base.fp.e2 <Key-Return> {
focus .pgaw:Function.fp.e3
}
label $base.fp.l3 \
-borderwidth 0 -relief raised -text [intlmsg Returns]
entry $base.fp.e3 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(function,returns)
bind $base.fp.e3 <Key-Return> {
focus .pgaw:Function.fp.e4
}
label $base.fp.l4 \
-borderwidth 0 -relief raised -text [intlmsg Language]
entry $base.fp.e4 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(function,language) -width 15
bind $base.fp.e4 <Key-Return> {
focus .pgaw:Function.fs.text1
}
label $base.fp.lspace \
-borderwidth 0 -relief raised -text { }
frame $base.fs \
-borderwidth 2 -height 75 -relief groove -width 125
text $base.fs.text1 \
-background #fefefe -foreground #000000 -borderwidth 1 -font $PgAcVar(pref,font_fix) -height 16 \
-tabs {20 40 60 80 100 120} -width 43 -yscrollcommand {.pgaw:Function.fs.vsb set}
scrollbar $base.fs.vsb \
-borderwidth 1 -command {.pgaw:Function.fs.text1 yview} -orient vert
frame $base.fb \
-borderwidth 2 -height 75 -width 125
frame $base.fb.fbc \
-borderwidth 2 -height 75 -width 125
button $base.fb.fbc.btnsave -command {Functions::save} \
-borderwidth 1 -padx 9 -pady 3 -text [intlmsg Save]
button $base.fb.fbc.btnhelp -command {Help::load functions} \
-borderwidth 1 -padx 9 -pady 3 -text [intlmsg Help]
button $base.fb.fbc.btncancel \
-borderwidth 1 -command {Window destroy .pgaw:Function} -padx 9 -pady 3 \
-text [intlmsg Cancel]
pack $base.fp \
-in .pgaw:Function -anchor center -expand 0 -fill x -side top
grid $base.fp.l1 \
-in .pgaw:Function.fp -column 0 -row 0 -columnspan 1 -rowspan 1 -sticky w
grid $base.fp.e1 \
-in .pgaw:Function.fp -column 1 -row 0 -columnspan 1 -rowspan 1
grid $base.fp.l2 \
-in .pgaw:Function.fp -column 3 -row 0 -columnspan 1 -rowspan 1 -sticky w
grid $base.fp.e2 \
-in .pgaw:Function.fp -column 4 -row 0 -columnspan 1 -rowspan 1 -pady 2
grid $base.fp.l3 \
-in .pgaw:Function.fp -column 0 -row 4 -columnspan 1 -rowspan 1 -sticky w
grid $base.fp.e3 \
-in .pgaw:Function.fp -column 1 -row 4 -columnspan 1 -rowspan 1
grid $base.fp.l4 \
-in .pgaw:Function.fp -column 3 -row 4 -columnspan 1 -rowspan 1 -sticky w
grid $base.fp.e4 \
-in .pgaw:Function.fp -column 4 -row 4 -columnspan 1 -rowspan 1 -pady 3
grid $base.fp.lspace \
-in .pgaw:Function.fp -column 2 -row 4 -columnspan 1 -rowspan 1
pack $base.fs \
-in .pgaw:Function -anchor center -expand 1 -fill both -side top
pack $base.fs.text1 \
-in .pgaw:Function.fs -anchor center -expand 1 -fill both -side left
pack $base.fs.vsb \
-in .pgaw:Function.fs -anchor center -expand 0 -fill y -side right
pack $base.fb \
-in .pgaw:Function -anchor center -expand 0 -fill x -side bottom
pack $base.fb.fbc \
-in .pgaw:Function.fb -anchor center -expand 0 -fill none -side top
pack $base.fb.fbc.btnsave \
-in .pgaw:Function.fb.fbc -anchor center -expand 0 -fill none -side left
pack $base.fb.fbc.btnhelp \
-in .pgaw:Function.fb.fbc -anchor center -expand 0 -fill none -side left
pack $base.fb.fbc.btncancel \
-in .pgaw:Function.fb.fbc -anchor center -expand 0 -fill none -side right
}
namespace eval Help {
proc {findLink} {} {
foreach tagname [.pgaw:Help.f.t tag names current] {
if {$tagname!="link"} {
load $tagname
return
}
}
}
proc {load} {topic args} {
global PgAcVar
if {![winfo exists .pgaw:Help]} {
Window show .pgaw:Help
tkwait visibility .pgaw:Help
}
wm deiconify .pgaw:Help
if {![info exists PgAcVar(help,history)]} {
set PgAcVar(help,history) {}
}
if {[llength $args]==1} {
set PgAcVar(help,current_topic) [lindex $args 0]
set PgAcVar(help,history) [lrange $PgAcVar(help,history) 0 [lindex $args 0]]
} else {
lappend PgAcVar(help,history) $topic
set PgAcVar(help,current_topic) [expr {[llength $PgAcVar(help,history)]-1}]
}
# Limit the history length to 100 topics
if {[llength $PgAcVar(help,history)]>100} {
set PgAcVar(help,history) [lrange $PgAcVar(help,history) 1 end]
}
.pgaw:Help.f.t configure -state normal
.pgaw:Help.f.t delete 1.0 end
.pgaw:Help.f.t tag configure bold -font $PgAcVar(pref,font_bold)
.pgaw:Help.f.t tag configure italic -font $PgAcVar(pref,font_italic)
.pgaw:Help.f.t tag configure large -font {Helvetica -14 bold}
.pgaw:Help.f.t tag configure title -font $PgAcVar(pref,font_bold) -justify center
.pgaw:Help.f.t tag configure link -font {Helvetica -12 underline} -foreground #000080
.pgaw:Help.f.t tag configure code -font $PgAcVar(pref,font_fix)
.pgaw:Help.f.t tag configure warning -font $PgAcVar(pref,font_bold) -foreground #800000
.pgaw:Help.f.t tag bind link <Button-1> {Help::findLink}
set errmsg {}
.pgaw:Help.f.t configure -tabs {30 60 90 120 150 180 210 240 270 300 330 360 390}
catch { source [file join $PgAcVar(PGACCESS_HOME) lib help $topic.hlp] } errmsg
if {$errmsg!=""} {
.pgaw:Help.f.t insert end "Error loading help file [file join $PgAcVar(PGACCESS_HOME) $topic.hlp]\n\n$errmsg" bold
}
.pgaw:Help.f.t configure -state disabled
focus .pgaw:Help.f.sb
}
proc {back} {} {
global PgAcVar
if {![info exists PgAcVar(help,history)]} {return}
if {[llength $PgAcVar(help,history)]==0} {return}
set i $PgAcVar(help,current_topic)
if {$i<1} {return}
incr i -1
load [lindex $PgAcVar(help,history) $i] $i
}
}
proc vTclWindow.pgaw:Help {base} {
global PgAcVar
if {$base == ""} {
set base .pgaw:Help
}
if {[winfo exists $base]} {
wm deiconify $base; return
}
toplevel $base -class Toplevel
wm focusmodel $base passive
set sw [winfo screenwidth .]
set sh [winfo screenheight .]
set x [expr {($sw - 640)/2}]
set y [expr {($sh - 480)/2}]
wm geometry $base 640x480+$x+$y
wm maxsize $base 1009 738
wm minsize $base 1 1
wm overrideredirect $base 0
wm resizable $base 1 1
wm deiconify $base
wm title $base [intlmsg "Help"]
bind $base <Key-Escape> "Window destroy .pgaw:Help"
frame $base.fb \
-borderwidth 2 -height 75 -relief groove -width 125
button $base.fb.bback \
-command Help::back -padx 9 -pady 3 -text [intlmsg Back]
button $base.fb.bi \
-command {Help::load index} -padx 9 -pady 3 -text [intlmsg Index]
button $base.fb.bp \
-command {Help::load postgresql} -padx 9 -pady 3 -text PostgreSQL
button $base.fb.btnclose \
-command {Window destroy .pgaw:Help} -padx 9 -pady 3 -text [intlmsg Close]
frame $base.f \
-borderwidth 2 -height 75 -relief groove -width 125
text $base.f.t \
-borderwidth 1 -cursor {} -font $PgAcVar(pref,font_normal) -height 2 \
-highlightthickness 0 -state disabled \
-tabs {30 60 90 120 150 180 210 240 270 300 330 360 390} -width 8 \
-wrap word -yscrollcommand {.pgaw:Help.f.sb set}
scrollbar $base.f.sb \
-borderwidth 1 -command {.pgaw:Help.f.t yview} -highlightthickness 0 \
-orient vert
pack $base.fb \
-in .pgaw:Help -anchor center -expand 0 -fill x -side top
pack $base.fb.bback \
-in .pgaw:Help.fb -anchor center -expand 0 -fill none -side left
pack $base.fb.bi \
-in .pgaw:Help.fb -anchor center -expand 0 -fill none -side left
pack $base.fb.bp \
-in .pgaw:Help.fb -anchor center -expand 0 -fill none -side left
pack $base.fb.btnclose \
-in .pgaw:Help.fb -anchor center -expand 0 -fill none -side right
pack $base.f \
-in .pgaw:Help -anchor center -expand 1 -fill both -side top
pack $base.f.t \
-in .pgaw:Help.f -anchor center -expand 1 -fill both -side left
pack $base.f.sb \
-in .pgaw:Help.f -anchor center -expand 0 -fill y -side right
}
This diff is collapsed.
This diff is collapsed.
#!/bin/bash
for fisier in *.tcl ; do
echo $fisier ;
sed -e "s/show_error/showError/g" <$fisier >temp
mv temp $fisier
done
namespace eval Queries {
proc {new} {} {
global PgAcVar
Window show .pgaw:QueryBuilder
PgAcVar:clean query,*
set PgAcVar(query,oid) 0
set PgAcVar(query,name) {}
set PgAcVar(query,asview) 0
set PgAcVar(query,tables) {}
set PgAcVar(query,links) {}
set PgAcVar(query,results) {}
.pgaw:QueryBuilder.saveAsView configure -state normal
}
proc {open} {queryname} {
global PgAcVar
if {! [loadQuery $queryname]} return;
if {$PgAcVar(query,type)=="S"} then {
set wn [Tables::getNewWindowName]
set PgAcVar(mw,$wn,query) [subst $PgAcVar(query,sqlcmd)]
set PgAcVar(mw,$wn,updatable) 0
set PgAcVar(mw,$wn,isaquery) 1
Tables::createWindow
wm title $wn "Query result: $PgAcVar(query,name)"
Tables::loadLayout $wn $PgAcVar(query,name)
Tables::selectRecords $wn $PgAcVar(mw,$wn,query)
} else {
set answ [tk_messageBox -title [intlmsg Warning] -type yesno -message "This query is an action query!\n\n[string range $qcmd 0 30] ...\n\nDo you want to execute it?"]
if {$answ} {
if {[sql_exec noquiet $qcmd]} {
tk_messageBox -title Information -message "Your query has been executed without error!"
}
}
}
}
proc {design} {queryname} {
global PgAcVar
if {! [loadQuery $queryname]} return;
Window show .pgaw:QueryBuilder
.pgaw:QueryBuilder.text1 delete 0.0 end
.pgaw:QueryBuilder.text1 insert end $PgAcVar(query,sqlcmd)
.pgaw:QueryBuilder.text2 delete 0.0 end
.pgaw:QueryBuilder.text2 insert end $PgAcVar(query,comments)
}
proc {loadQuery} {queryname} {
global PgAcVar CurrentDB
set PgAcVar(query,name) $queryname
if {[set pgres [wpg_exec $CurrentDB "select querycommand,querytype,querytables,querylinks,queryresults,querycomments,oid from pga_queries where queryname='$PgAcVar(query,name)'"]]==0} then {
showError [intlmsg "Error retrieving query definition"]
return 0
}
if {[pg_result $pgres -numTuples]==0} {
showError [format [intlmsg "Query '%s' was not found!"] $PgAcVar(query,name)]
pg_result $pgres -clear
return 0
}
set tuple [pg_result $pgres -getTuple 0]
set PgAcVar(query,sqlcmd) [lindex $tuple 0]
set PgAcVar(query,type) [lindex $tuple 1]
set PgAcVar(query,tables) [lindex $tuple 2]
set PgAcVar(query,links) [lindex $tuple 3]
set PgAcVar(query,results) [lindex $tuple 4]
set PgAcVar(query,comments) [lindex $tuple 5]
set PgAcVar(query,oid) [lindex $tuple 6]
pg_result $pgres -clear
return 1
}
proc {visualDesigner} {} {
global PgAcVar
Window show .pgaw:VisualQuery
VisualQueryBuilder::loadVisualLayout
focus .pgaw:VisualQuery.fb.entt
}
proc {save} {} {
global PgAcVar CurrentDB
if {$PgAcVar(query,name)==""} then {
showError [intlmsg "You have to supply a name for this query!"]
focus .pgaw:QueryBuilder.eqn
} else {
set qcmd [.pgaw:QueryBuilder.text1 get 1.0 end]
set PgAcVar(query,comments) [.pgaw:QueryBuilder.text2 get 1.0 end]
regsub -all "\n" $qcmd " " qcmd
if {$qcmd==""} then {
showError [intlmsg "This query has no commands?"]
} else {
if { [lindex [split [string toupper [string trim $qcmd]]] 0] == "SELECT" } {
set qtype S
} else {
set qtype A
}
if {$PgAcVar(query,asview)} {
wpg_select $CurrentDB "select pg_get_viewdef('$PgAcVar(query,name)') as vd" tup {
if {$tup(vd)!="Not a view"} {
if {[tk_messageBox -title [intlmsg Warning] -message [format [intlmsg "View '%s' already exists!\nOverwrite ?"] $PgAcVar(query,name)] -type yesno -default no]=="yes"} {
set pg_res [wpg_exec $CurrentDB "drop view \"$PgAcVar(query,name)\""]
if {$PgAcVar(pgsql,status)!="PGRES_COMMAND_OK"} {
showError "[intlmsg {Error deleting view}] '$PgAcVar(query,name)'"
}
}
}
}
set pgres [wpg_exec $CurrentDB "create view \"$PgAcVar(query,name)\" as $qcmd"]
if {$PgAcVar(pgsql,status)!="PGRES_COMMAND_OK"} {
showError "[intlmsg {Error defining view}]\n\n$PgAcVar(pgsql,errmsg)"
} else {
Mainlib::tab_click Views
Window destroy .pgaw:QueryBuilder
}
catch {pg_result $pgres -clear}
} else {
regsub -all "'" $qcmd "''" qcmd
regsub -all "'" $PgAcVar(query,comments) "''" PgAcVar(query,comments)
regsub -all "'" $PgAcVar(query,results) "''" PgAcVar(query,results)
setCursor CLOCK
if {$PgAcVar(query,oid)==0} then {
set pgres [wpg_exec $CurrentDB "insert into pga_queries values ('$PgAcVar(query,name)','$qtype','$qcmd','$PgAcVar(query,tables)','$PgAcVar(query,links)','$PgAcVar(query,results)','$PgAcVar(query,comments)')"]
} else {
set pgres [wpg_exec $CurrentDB "update pga_queries set queryname='$PgAcVar(query,name)',querytype='$qtype',querycommand='$qcmd',querytables='$PgAcVar(query,tables)',querylinks='$PgAcVar(query,links)',queryresults='$PgAcVar(query,results)',querycomments='$PgAcVar(query,comments)' where oid=$PgAcVar(query,oid)"]
}
setCursor DEFAULT
if {$PgAcVar(pgsql,status)!="PGRES_COMMAND_OK"} then {
showError "[intlmsg {Error executing query}]\n$PgAcVar(pgsql,errmsg)"
} else {
Mainlib::tab_click Queries
if {$PgAcVar(query,oid)==0} {set PgAcVar(query,oid) [pg_result $pgres -oid]}
}
}
catch {pg_result $pgres -clear}
}
}
}
proc {execute} {} {
global PgAcVar
set qcmd [.pgaw:QueryBuilder.text1 get 0.0 end]
regsub -all "\n" [string trim $qcmd] " " qcmd
if {[lindex [split [string toupper $qcmd]] 0]!="SELECT"} {
if {[tk_messageBox -title [intlmsg Warning] -parent .pgaw:QueryBuilder -message [intlmsg "This is an action query!\n\nExecute it?"] -type yesno -default no]=="yes"} {
sql_exec noquiet $qcmd
}
} else {
set wn [Tables::getNewWindowName]
set PgAcVar(mw,$wn,query) [subst $qcmd]
set PgAcVar(mw,$wn,updatable) 0
set PgAcVar(mw,$wn,isaquery) 1
Tables::createWindow
Tables::loadLayout $wn $PgAcVar(query,name)
Tables::selectRecords $wn $PgAcVar(mw,$wn,query)
}
}
proc {close} {} {
global PgAcVar
.pgaw:QueryBuilder.saveAsView configure -state normal
set PgAcVar(query,asview) 0
set PgAcVar(query,name) {}
.pgaw:QueryBuilder.text1 delete 1.0 end
Window destroy .pgaw:QueryBuilder
}
}
proc vTclWindow.pgaw:QueryBuilder {base} {
global PgAcVar
if {$base == ""} {
set base .pgaw:QueryBuilder
}
if {[winfo exists $base]} {
wm deiconify $base; return
}
toplevel $base -class Toplevel
wm focusmodel $base passive
wm geometry $base 542x364+150+150
wm maxsize $base 1009 738
wm minsize $base 1 1
wm overrideredirect $base 0
wm resizable $base 0 0
wm deiconify $base
wm title $base [intlmsg "Query builder"]
bind $base <Key-F1> "Help::load queries"
label $base.lqn -borderwidth 0 -text [intlmsg {Query name}]
entry $base.eqn -background #fefefe -borderwidth 1 -foreground #000000 -highlightthickness 1 -selectborderwidth 0 -textvariable PgAcVar(query,name)
text $base.text1 -background #fefefe -borderwidth 1 -font $PgAcVar(pref,font_normal) -foreground #000000 -highlightthickness 1 -wrap word
label $base.lcomm -borderwidth 0 -text [intlmsg Comments]
text $base.text2 -background #fefefe -borderwidth 1 -font $PgAcVar(pref,font_normal) -foreground #000000 -highlightthickness 1 -wrap word
checkbutton $base.saveAsView -borderwidth 1 -text [intlmsg {Save this query as a view}] -variable PgAcVar(query,asview)
frame $base.frb \
-height 75 -relief groove -width 125
button $base.frb.savebtn -command {Queries::save} \
-borderwidth 1 -text [intlmsg {Save query definition}]
button $base.frb.execbtn -command {Queries::execute} \
-borderwidth 1 -text [intlmsg {Execute query}]
button $base.frb.pgaw:VisualQueryshow -command {Queries::visualDesigner} \
-borderwidth 1 -text [intlmsg {Visual designer}]
button $base.frb.termbtn -command {Queries::close} \
-borderwidth 1 -text [intlmsg Close]
place $base.lqn -x 5 -y 5 -anchor nw -bordermode ignore
place $base.eqn -x 100 -y 1 -width 335 -height 24 -anchor nw -bordermode ignore
place $base.frb \
-x 5 -y 55 -width 530 -height 35 -anchor nw -bordermode ignore
pack $base.frb.savebtn \
-in $base.frb -anchor center -expand 0 -fill none -side left
pack $base.frb.execbtn \
-in $base.frb -anchor center -expand 0 -fill none -side left
pack $base.frb.pgaw:VisualQueryshow \
-in $base.frb -anchor center -expand 0 -fill none -side left
pack $base.frb.termbtn \
-in $base.frb -anchor center -expand 0 -fill none -side right
place $base.text1 -x 5 -y 90 -width 530 -height 160 -anchor nw -bordermode ignore
place $base.lcomm -x 5 -y 255
place $base.text2 -x 5 -y 270 -width 530 -height 86 -anchor nw -bordermode ignore
place $base.saveAsView -x 5 -y 30 -height 25 -anchor nw -bordermode ignore
}
This diff is collapsed.
This diff is collapsed.
namespace eval Scripts {
proc {new} {} {
design {}
}
proc {open} {scriptname} {
global CurrentDB
set ss {}
wpg_select $CurrentDB "select * from pga_scripts where scriptname='$scriptname'" rec {
set ss $rec(scriptsource)
}
if {[string length $ss] > 0} {
eval $ss
}
}
proc {design} {scriptname} {
global PgAcVar CurrentDB
Window show .pgaw:Scripts
set PgAcVar(script,name) $scriptname
.pgaw:Scripts.src delete 1.0 end
if {[string length $scriptname]==0} return;
wpg_select $CurrentDB "select * from pga_scripts where scriptname='$scriptname'" rec {
.pgaw:Scripts.src insert end $rec(scriptsource)
}
}
proc {execute} {scriptname} {
# a wrap for execute command
open $scriptname
}
proc {save} {} {
global PgAcVar
if {$PgAcVar(script,name)==""} {
tk_messageBox -title [intlmsg Warning] -parent .pgaw:Scripts -message [intlmsg "The script must have a name!"]
} else {
sql_exec noquiet "delete from pga_scripts where scriptname='$PgAcVar(script,name)'"
regsub -all {\\} [.pgaw:Scripts.src get 1.0 end] {\\\\} PgAcVar(script,body)
regsub -all ' $PgAcVar(script,body) \\' PgAcVar(script,body)
sql_exec noquiet "insert into pga_scripts values ('$PgAcVar(script,name)','$PgAcVar(script,body)')"
Mainlib::tab_click Scripts
}
}
}
########################## END OF NAMESPACE SCRIPTS ##################
proc vTclWindow.pgaw:Scripts {base} {
global PgAcVar
if {$base == ""} {
set base .pgaw:Scripts
}
if {[winfo exists $base]} {
wm deiconify $base; return
}
toplevel $base -class Toplevel
wm focusmodel $base passive
wm geometry $base 594x416+192+152
wm maxsize $base 1009 738
wm minsize $base 300 300
wm overrideredirect $base 0
wm resizable $base 1 1
wm title $base [intlmsg "Design script"]
frame $base.f1 -height 55 -relief groove -width 125
label $base.f1.l1 -borderwidth 0 -text [intlmsg {Script name}]
entry $base.f1.e1 -background #fefefe -borderwidth 1 -highlightthickness 0 -textvariable PgAcVar(script,name) -width 32
text $base.src -background #fefefe -foreground #000000 -font $PgAcVar(pref,font_normal) -height 2 -highlightthickness 1 -selectborderwidth 0 -width 2
frame $base.f2 -height 75 -relief groove -width 125
button $base.f2.b1 -borderwidth 1 -command {Window destroy .pgaw:Scripts} -text [intlmsg Cancel]
button $base.f2.b2 -borderwidth 1 -command Scripts::save \
-text [intlmsg Save] -width 6
pack $base.f1 -in .pgaw:Scripts -anchor center -expand 0 -fill x -pady 2 -side top
pack $base.f1.l1 -in .pgaw:Scripts.f1 -anchor center -expand 0 -fill none -ipadx 2 -side left
pack $base.f1.e1 -in .pgaw:Scripts.f1 -anchor center -expand 0 -fill none -side left
pack $base.src -in .pgaw:Scripts -anchor center -expand 1 -fill both -padx 2 -side top
pack $base.f2 -in .pgaw:Scripts -anchor center -expand 0 -fill none -side top
pack $base.f2.b1 -in .pgaw:Scripts.f2 -anchor center -expand 0 -fill none -side right
pack $base.f2.b2 -in .pgaw:Scripts.f2 -anchor center -expand 0 -fill none -side right
}
namespace eval Sequences {
proc {new} {} {
global PgAcVar
Window show .pgaw:Sequence
set PgAcVar(seq,name) {}
set PgAcVar(seq,incr) 1
set PgAcVar(seq,start) 1
set PgAcVar(seq,minval) 1
set PgAcVar(seq,maxval) 2147483647
focus .pgaw:Sequence.f1.e1
}
proc {open} {seqname} {
global PgAcVar CurrentDB
Window show .pgaw:Sequence
set flag 1
wpg_select $CurrentDB "select * from \"$seqname\"" rec {
set flag 0
set PgAcVar(seq,name) $seqname
set PgAcVar(seq,incr) $rec(increment_by)
set PgAcVar(seq,start) $rec(last_value)
.pgaw:Sequence.f1.l3 configure -text [intlmsg "Last value"]
set PgAcVar(seq,minval) $rec(min_value)
set PgAcVar(seq,maxval) $rec(max_value)
.pgaw:Sequence.fb.btnsave configure -state disabled
}
if {$flag} {
showError [format [intlmsg "Sequence '%s' not found!"] $seqname]
} else {
for {set i 1} {$i<6} {incr i} {
.pgaw:Sequence.f1.e$i configure -state disabled
}
focus .pgaw:Sequence.fb.btncancel
}
}
proc {save} {} {
global PgAcVar
if {$PgAcVar(seq,name)==""} {
showError [intlmsg "You should supply a name for this sequence"]
} else {
set s1 {};set s2 {};set s3 {};set s4 {};
if {$PgAcVar(seq,incr)!=""} {set s1 "increment $PgAcVar(seq,incr)"};
if {$PgAcVar(seq,start)!=""} {set s2 "start $PgAcVar(seq,start)"};
if {$PgAcVar(seq,minval)!=""} {set s3 "minvalue $PgAcVar(seq,minval)"};
if {$PgAcVar(seq,maxval)!=""} {set s4 "maxvalue $PgAcVar(seq,maxval)"};
set sqlcmd "create sequence \"$PgAcVar(seq,name)\" $s1 $s2 $s3 $s4"
if {[sql_exec noquiet $sqlcmd]} {
Mainlib::cmd_Sequences
tk_messageBox -title [intlmsg Information] -parent .pgaw:Sequence -message [intlmsg "Sequence created!"]
}
}
}
}
proc vTclWindow.pgaw:Sequence {base} {
if {$base == ""} {
set base .pgaw:Sequence
}
if {[winfo exists $base]} {
wm deiconify $base; return
}
toplevel $base -class Toplevel
wm focusmodel $base passive
wm geometry $base 283x172+119+210
wm maxsize $base 1009 738
wm minsize $base 1 1
wm overrideredirect $base 0
wm resizable $base 0 0
wm deiconify $base
wm title $base [intlmsg "Sequence"]
bind $base <Key-F1> "Help::load sequences"
frame $base.f1 \
-borderwidth 2 -height 75 -width 125
label $base.f1.l1 \
-borderwidth 0 -relief raised -text [intlmsg {Sequence name}]
entry $base.f1.e1 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(seq,name) -width 200
bind $base.f1.e1 <Key-KP_Enter> {
focus .pgaw:Sequence.f1.e2
}
bind $base.f1.e1 <Key-Return> {
focus .pgaw:Sequence.f1.e2
}
label $base.f1.l2 \
-borderwidth 0 -relief raised -text [intlmsg Increment]
entry $base.f1.e2 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(seq,incr) -width 200
bind $base.f1.e2 <Key-Return> {
focus .pgaw:Sequence.f1.e3
}
label $base.f1.l3 \
-borderwidth 0 -relief raised -text [intlmsg {Start value}]
entry $base.f1.e3 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(seq,start) -width 200
bind $base.f1.e3 <Key-Return> {
focus .pgaw:Sequence.f1.e4
}
label $base.f1.l4 \
-borderwidth 0 -relief raised -text [intlmsg Minvalue]
entry $base.f1.e4 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(seq,minval) \
-width 200
bind $base.f1.e4 <Key-Return> {
focus .pgaw:Sequence.f1.e5
}
label $base.f1.ls2 \
-borderwidth 0 -relief raised -text { }
label $base.f1.l5 \
-borderwidth 0 -relief raised -text [intlmsg Maxvalue]
entry $base.f1.e5 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(seq,maxval) \
-width 200
bind $base.f1.e5 <Key-Return> {
focus .pgaw:Sequence.fb.btnsave
}
frame $base.fb \
-height 75 -relief groove -width 125
button $base.fb.btnsave \
-borderwidth 1 -command Sequences::save \
-padx 9 -pady 3 -text [intlmsg {Define sequence}]
button $base.fb.btncancel \
-borderwidth 1 -command {Window destroy .pgaw:Sequence} \
-padx 9 -pady 3 -text [intlmsg Close]
place $base.f1 \
-x 9 -y 5 -width 265 -height 126 -anchor nw -bordermode ignore
grid columnconf $base.f1 2 -weight 1
grid $base.f1.l1 \
-in .pgaw:Sequence.f1 -column 0 -row 0 -columnspan 1 -rowspan 1 -sticky w
grid $base.f1.e1 \
-in .pgaw:Sequence.f1 -column 2 -row 0 -columnspan 1 -rowspan 1 -pady 2
grid $base.f1.l2 \
-in .pgaw:Sequence.f1 -column 0 -row 2 -columnspan 1 -rowspan 1 -sticky w
grid $base.f1.e2 \
-in .pgaw:Sequence.f1 -column 2 -row 2 -columnspan 1 -rowspan 1 -pady 2
grid $base.f1.l3 \
-in .pgaw:Sequence.f1 -column 0 -row 4 -columnspan 1 -rowspan 1 -sticky w
grid $base.f1.e3 \
-in .pgaw:Sequence.f1 -column 2 -row 4 -columnspan 1 -rowspan 1 -pady 2
grid $base.f1.l4 \
-in .pgaw:Sequence.f1 -column 0 -row 6 -columnspan 1 -rowspan 1 -sticky w
grid $base.f1.e4 \
-in .pgaw:Sequence.f1 -column 2 -row 6 -columnspan 1 -rowspan 1 -pady 2
grid $base.f1.ls2 \
-in .pgaw:Sequence.f1 -column 1 -row 0 -columnspan 1 -rowspan 1
grid $base.f1.l5 \
-in .pgaw:Sequence.f1 -column 0 -row 7 -columnspan 1 -rowspan 1 -sticky w
grid $base.f1.e5 \
-in .pgaw:Sequence.f1 -column 2 -row 7 -columnspan 1 -rowspan 1 -pady 2
place $base.fb \
-x 0 -y 135 -width 283 -height 40 -anchor nw -bordermode ignore
grid $base.fb.btnsave \
-in .pgaw:Sequence.fb -column 0 -row 0 -columnspan 1 -rowspan 1 -padx 5
grid $base.fb.btncancel \
-in .pgaw:Sequence.fb -column 1 -row 0 -columnspan 1 -rowspan 1 -padx 5
}
This diff is collapsed.
namespace eval Users {
proc {new} {} {
global PgAcVar
Window show .pgaw:User
wm transient .pgaw:User .pgaw:Main
set PgAcVar(user,action) "CREATE"
set PgAcVar(user,name) {}
set PgAcVar(user,password) {}
set PgAcVar(user,createdb) NOCREATEDB
set PgAcVar(user,createuser) NOCREATEUSER
set PgAcVar(user,verifypassword) {}
set PgAcVar(user,validuntil) {}
focus .pgaw:User.e1
}
proc {design} {username} {
global PgAcVar CurrentDB
Window show .pgaw:User
tkwait visibility .pgaw:User
wm transient .pgaw:User .pgaw:Main
wm title .pgaw:User [intlmsg "Change user"]
set PgAcVar(user,action) "ALTER"
set PgAcVar(user,name) $username
set PgAcVar(user,password) {} ; set PgAcVar(user,verifypassword) {}
pg_select $CurrentDB "select *,date(valuntil) as valdata from pg_user where usename='$username'" tup {
if {$tup(usesuper)=="t"} {
set PgAcVar(user,createuser) CREATEUSER
} else {
set PgAcVar(user,createuser) NOCREATEUSER
}
if {$tup(usecreatedb)=="t"} {
set PgAcVar(user,createdb) CREATEDB
} else {
set PgAcVar(user,createdb) NOCREATEDB
}
if {$tup(valuntil)!=""} {
set PgAcVar(user,validuntil) $tup(valdata)
} else {
set PgAcVar(user,validuntil) {}
}
}
.pgaw:User.e1 configure -state disabled
.pgaw:User.b1 configure -text [intlmsg Save]
focus .pgaw:User.e2
}
proc {save} {} {
global PgAcVar CurrentDB
set PgAcVar(user,name) [string trim $PgAcVar(user,name)]
set PgAcVar(user,password) [string trim $PgAcVar(user,password)]
set PgAcVar(user,verifypassword) [string trim $PgAcVar(user,verifypassword)]
if {$PgAcVar(user,name)==""} {
showError [intlmsg "User without name?"]
focus .pgaw:User.e1
return
}
if {$PgAcVar(user,password)!=$PgAcVar(user,verifypassword)} {
showError [intlmsg "Passwords do not match!"]
set PgAcVar(user,password) {} ; set PgAcVar(user,verifypassword) {}
focus .pgaw:User.e2
return
}
set cmd "$PgAcVar(user,action) user \"$PgAcVar(user,name)\""
if {$PgAcVar(user,password)!=""} {
set cmd "$cmd WITH PASSWORD \"$PgAcVar(user,password)\" "
}
set cmd "$cmd $PgAcVar(user,createdb) $PgAcVar(user,createuser)"
if {$PgAcVar(user,validuntil)!=""} {
set cmd "$cmd VALID UNTIL '$PgAcVar(user,validuntil)'"
}
if {[sql_exec noquiet $cmd]} {
Window destroy .pgaw:User
Mainlib::cmd_Users
}
}
}
proc vTclWindow.pgaw:User {base} {
if {$base == ""} {
set base .pgaw:User
}
if {[winfo exists $base]} {
wm deiconify $base; return
}
toplevel $base -class Toplevel
wm focusmodel $base passive
wm geometry $base 263x220+233+165
wm maxsize $base 1009 738
wm minsize $base 1 1
wm overrideredirect $base 0
wm resizable $base 0 0
wm deiconify $base
wm title $base [intlmsg "Define new user"]
label $base.l1 \
-borderwidth 0 -anchor w -text [intlmsg "User name"]
entry $base.e1 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(user,name)
bind $base.e1 <Key-Return> "focus .pgaw:User.e2"
bind $base.e1 <Key-KP_Enter> "focus .pgaw:User.e2"
label $base.l2 \
-borderwidth 0 -text [intlmsg Password]
entry $base.e2 \
-background #fefefe -borderwidth 1 -show * -textvariable PgAcVar(user,password)
bind $base.e2 <Key-Return> "focus .pgaw:User.e3"
bind $base.e2 <Key-KP_Enter> "focus .pgaw:User.e3"
label $base.l3 \
-borderwidth 0 -text [intlmsg {verify password}]
entry $base.e3 \
-background #fefefe -borderwidth 1 -show * -textvariable PgAcVar(user,verifypassword)
bind $base.e3 <Key-Return> "focus .pgaw:User.cb1"
bind $base.e3 <Key-KP_Enter> "focus .pgaw:User.cb1"
checkbutton $base.cb1 \
-borderwidth 1 -offvalue NOCREATEDB -onvalue CREATEDB \
-text [intlmsg {Allow user to create databases}] -variable PgAcVar(user,createdb)
checkbutton $base.cb2 \
-borderwidth 1 -offvalue NOCREATEUSER -onvalue CREATEUSER \
-text [intlmsg {Allow user to create other users}] -variable PgAcVar(user,createuser)
label $base.l4 \
-borderwidth 0 -anchor w -text [intlmsg {Valid until (date)}]
entry $base.e4 \
-background #fefefe -borderwidth 1 -textvariable PgAcVar(user,validuntil)
bind $base.e4 <Key-Return> "focus .pgaw:User.b1"
bind $base.e4 <Key-KP_Enter> "focus .pgaw:User.b1"
button $base.b1 \
-borderwidth 1 -command Users::save -text [intlmsg Create]
button $base.b2 \
-borderwidth 1 -command {Window destroy .pgaw:User} -text [intlmsg Cancel]
place $base.l1 \
-x 5 -y 7 -height 16 -anchor nw -bordermode ignore
place $base.e1 \
-x 109 -y 5 -width 146 -height 20 -anchor nw -bordermode ignore
place $base.l2 \
-x 5 -y 35 -anchor nw -bordermode ignore
place $base.e2 \
-x 109 -y 32 -width 146 -height 20 -anchor nw -bordermode ignore
place $base.l3 \
-x 5 -y 60 -anchor nw -bordermode ignore
place $base.e3 \
-x 109 -y 58 -width 146 -height 20 -anchor nw -bordermode ignore
place $base.cb1 \
-x 5 -y 90 -anchor nw -bordermode ignore
place $base.cb2 \
-x 5 -y 115 -anchor nw -bordermode ignore
place $base.l4 \
-x 5 -y 145 -height 16 -anchor nw -bordermode ignore
place $base.e4 \
-x 110 -y 143 -width 146 -height 20 -anchor nw -bordermode ignore
place $base.b1 \
-x 45 -y 185 -anchor nw -width 70 -height 25 -bordermode ignore
place $base.b2 \
-x 140 -y 185 -anchor nw -width 70 -height 25 -bordermode ignore
}
namespace eval Views {
proc {new} {} {
global PgAcVar
set PgAcVar(query,oid) 0
set PgAcVar(query,name) {}
Window show .pgaw:QueryBuilder
set PgAcVar(query,asview) 1
.pgaw:QueryBuilder.saveAsView configure -state disabled
}
proc {open} {viewname} {
global PgAcVar
if {$viewname==""} return;
set wn [Tables::getNewWindowName]
Tables::createWindow
set PgAcVar(mw,$wn,query) "select * from \"$viewname\""
set PgAcVar(mw,$wn,isaquery) 0
set PgAcVar(mw,$wn,updatable) 0
Tables::loadLayout $wn $viewname
Tables::selectRecords $wn $PgAcVar(mw,$wn,query)
}
proc {design} {viewname} {
global PgAcVar CurrentDB
set vd {}
wpg_select $CurrentDB "select pg_get_viewdef('$viewname')as vd" tup {
set vd $tup(vd)
}
if {$vd==""} {
showError "[intlmsg {Error retrieving view definition for}] '$viewname'!"
return
}
Window show .pgaw:QueryBuilder
.pgaw:QueryBuilder.text1 delete 0.0 end
.pgaw:QueryBuilder.text1 insert end $vd
set PgAcVar(query,asview) 1
.pgaw:QueryBuilder.saveAsView configure -state disabled
set PgAcVar(query,name) $viewname
}
}
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment