Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
7737dfd3
Commit
7737dfd3
authored
Sep 20, 1999
by
Marc G. Fournier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
parent
80751a72
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
283 additions
and
108 deletions
+283
-108
src/bin/pgaccess/Makefile
src/bin/pgaccess/Makefile
+1
-1
src/bin/pgaccess/README
src/bin/pgaccess/README
+22
-107
src/bin/pgaccess/main.tcl
src/bin/pgaccess/main.tcl
+250
-0
src/bin/pgaccess/pgaccess
src/bin/pgaccess/pgaccess
+10
-0
No files found.
src/bin/pgaccess/Makefile
View file @
7737dfd3
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
# Copyright (c) 1994, Regents of the University of California
# Copyright (c) 1994, Regents of the University of California
#
#
# IDENTIFICATION
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/bin/pgaccess/Attic/Makefile,v 1.
1 1998/12/18 17:54:42 momjian
Exp $
# $Header: /cvsroot/pgsql/src/bin/pgaccess/Attic/Makefile,v 1.
2 1999/09/20 22:28:11 scrappy
Exp $
#
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
...
...
src/bin/pgaccess/README
View file @
7737dfd3
...
@@ -22,7 +22,7 @@ PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
...
@@ -22,7 +22,7 @@ PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
---------------------------------------------------------------------------
---------------------------------------------------------------------------
PGACCESS 0.9
6 9 March
1999
PGACCESS 0.9
8 29 August
1999
================================
================================
I dedicate this program to my little daughters Ana-Maria and Emilia and to my
I dedicate this program to my little daughters Ana-Maria and Emilia and to my
wife for their understanding. I hope they will forgive me for spending so many
wife for their understanding. I hope they will forgive me for spending so many
...
@@ -30,130 +30,45 @@ time far from them.
...
@@ -30,130 +30,45 @@ time far from them.
1.
Why PgAccess
?
1.
How to INSTALL
?
First of all because PostgreSQL lacks a graphical interface where you
You will need a Tcl/Tk package, at least Tcl 7.6 and Tk 4.2, recommended
can manage your tables, edit them, define queries, sequences and
Tcl/Tk 8.x
functions.
For Unix users, unpack the pgaccess-xxx.tar.gz archieve in you preferred
directory (usually /usr/local).
Check where your "wish" program is and modify (if needed) the file
/usr/local/pgaccess/pgaccess and set variables PGACCESS_HOME and
PATH_TO_WISH to the appropriate directories.
2.How to INSTALL ?
Include the /usr/local/pgaccess directory into your PATH or make a
symbolic link to it wherever you want (in PATH directories).
Example:
You will need Tcl/Tk package, I am using now Tcl 7.6 and Tk 4.2.
$ ln -s /usr/local/pgaccess/pgaccess /usr/bin/pgaccess
PgAccess is running fine also on Tcl/Tk 8.0
Also, you will need the PostgreSQL to Tcl interface library, lined as a
You will find also some documentation and FAQ in the doc directory.
Tcl/Tk 'load'-able module. It is called libpgtcl and the source is
located in the PostgreSQL directory /src/interfaces/libpgtcl.
Specifically, you will need a libpgtcl library that is 'load'-able from
Tcl/Tk. This is technically different from an ordinary PostgreSQL
loadable object file, because libpgtcl is a collection of object files.
Under Linux, this is called libpgtcl.so. You will find a pre-compiled
copy of it for Linux i386 systems at : http://www.flex.ro/pgaccess.
Just copy libpgtcl.so into your system library directory /usr/lib or
/lib and go for it.
Under Windows, copy libpgtcl.dll and libpq.dll into C:\WINDOWS\SYSTEM directory.
Make sure you have Tcl/Tk at least version 8.0.0 for Microsoft Windows 95 & NT.
PgAccess has been checked with Tcl/Tk 8.0.4 version on Windows95 and Windows98
platforms.
Tcl/Tk 8.0.4 for Windows95 & NT can be downloaded from
2. Usage
ftp://ftp.scriptics.com/pub/tcl/tcl8_0/tcl804.exe
It is 1833712 bytes long.
3.How to run it?
You run it with the command:
You run it with the command:
wish -f pgaccess.tcl
[database]
pgaccess
[database]
[database] is optional.
[database] is optional.
Another way of loading the PostgreSQL library is running it with pgwish.
It's a wish compiled with libpgtcl library so it could understand the
commands for working with PostgreSQL. For this, remove the line "load
3. Bug reporting
libpgtcl.so" from the source. If your operating system has a different
library name or location, change the 'load libpgtcl.so' line in the
pgaccess.tcl file.
4.What does it now ?
- Opens any database on a specified host at the specified port, username and password
- Perform vacuum command.
- Saves preferences in ~/.pgaccessrc file
Tables
- opening multiple tables for viewing, max n records (configurable)
- column resizing by dragging the vertical grid lines
- text will wrap in cells now
- dynamic row height when editing
- table layout saved for every table
- import/export to external files (SDF,CSV)
- filter capabilities ,enter filter like price>3.14
- sort order capabilities ,enter manually the sort field(s)
- editing in place, double click the text you want to change
- record deleting , point the record, press Del key
- adding new records ,save new row with right-button-click on table for the moment
- table generator assistant
- table renaming and deleting (dropping)
- table information retrieving : owner, field information, indexes
Queries
- define, edit and store "user defined queries"
- save view layout
- can store queries as views
- execution of queries with optional user input parameters ( select * from invoices where year=[parameter "Year of selection"] )
- viewing of select type queries result
- running action queries (insert, update, delete)
- visual query builder with drag & drop support, table aliasing
Sequences
- define
- inspect
- delete
Views
- defining them saving queries as views
- view them , with filtering and sorting capabilities
- design views
- delete them
Functions
- define , inspect , delete
Reports
- simple reports from a table (beta stage)
- change font,size and style of fields and labels
- load and save reports from the database
- table previews, sample postscript print
Forms
- open user defined forms
- form design module available
- query widget allowing access to a record set
Scripts
- define, modify and call user defined scripts
5.What it should do in the future ?
- sequence and function renaming
- more powerful report generator and viewer
- help on line
6. How you should report the errors?
First of all : operating system, PostgreSQL version,Tcl/Tk version.
First of all : operating system, PostgreSQL version,Tcl/Tk version.
A more detailed story of what have you done when error
had
occurred.
A more detailed story of what have you done when error occurred.
Tcl/Tk stops usually with a error message and there is a button there
Tcl/Tk stops usually with a error message and there is a button there
"Stack Trace" and if you press it, you will see a detailed information
"Stack Trace" and if you press it, you will see a detailed information
about the p
lace where it stuck
. Please send it to me.
about the p
rocedure containing the error
. Please send it to me.
Some information about table structure, no. of fields, records would
Some information about table structure, no. of fields, records would
be also good.
be also good.
...
...
src/bin/pgaccess/main.tcl
0 → 100644
View file @
7737dfd3
#!/bin/sh
# the next line restarts using wish
\
exec wish
"
$0
"
"
$
@"
image create bitmap dnarw -data
{
#define down_arrow_width 15
#define down_arrow_height 15
static char down_arrow_bits
[]
=
{
0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,
0x00,0x80,0xf8,0x8f,0xf0,0x87,0xe0,0x83,
0xc0,0x81,0x80,0x80,0x00,0x80,0x00,0x80,
0x00,0x80,0x00,0x80,0x00,0x80
}
}
proc
{
intlmsg
}
{
msg
}
{
global PgAcVar Messages
if
{
$PgAcVar
(
pref,language
)
==
"english"
}
{
return $msg
}
if
{
!
[
array exists Messages
]
}
{
return $msg
}
if
{
!
[
info exists Messages
(
$msg
)]
}
{
return $msg
}
return $Messages
(
$msg
)
}
proc
{
PgAcVar:clean
}
{
prefix
}
{
global PgAcVar
foreach key
[
array names PgAcVar $prefix
]
{
set PgAcVar
(
$key
)
{}
unset PgAcVar
(
$key
)
}
}
proc
{
find_PGACCESS_HOME
}
{}
{
global PgAcVar env
if
{
!
[
info exists env
(
PGACCESS_HOME
)]}
{
set home
[
file dirname
[
info script
]]
switch
[
file pathtype $home
]
{
absolute
{
set env
(
PGACCESS_HOME
)
$home
}
relative
{
set env
(
PGACCESS_HOME
)
[
file join
[
pwd
]
$home
]}
volumerelative
{
set curdir
[
pwd
]
cd $home
set env
(
PGACCESS_HOME
)
[
file join
[
pwd
]
[
file dirname
[
file join
[
lrange
[
file split $home
]
1 end
]]]]
cd $curdir
}
}
}
if
{
!
[
file isdir $env
(
PGACCESS_HOME
)]}
{
set PgAcVar
(
PGACCESS_HOME
)
[
pwd
]
}
else
{
set PgAcVar
(
PGACCESS_HOME
)
$env
(
PGACCESS_HOME
)
}
}
proc init
{
argc argv
}
{
global PgAcVar CurrentDB
find_PGACCESS_HOME
# Loading all defined namespaces
foreach module
{
mainlib database tables queries visualqb forms views functions reports scripts users sequences schema help preferences
}
{
source
[
file join $PgAcVar
(
PGACCESS_HOME
)
lib $module.tcl
]
}
set PgAcVar
(
currentdb,host
)
localhost
set PgAcVar
(
currentdb,pgport
)
5432
set CurrentDB
{}
set PgAcVar
(
tablist
)
[
list Tables Queries Views Sequences Functions Reports Forms Scripts Users Schema
]
set PgAcVar
(
activetab
)
{}
set PgAcVar
(
query,tables
)
{}
set PgAcVar
(
query,links
)
{}
set PgAcVar
(
query,results
)
{}
set PgAcVar
(
mwcount
)
0
Preferences::load
}
proc
{
wpg_exec
}
{
db cmd
}
{
global PgAcVar
set PgAcVar
(
pgsql,cmd
)
"never executed"
set PgAcVar
(
pgsql,status
)
"no status yet"
set PgAcVar
(
pgsql,errmsg
)
"no error message yet"
if
{[
catch
{
Mainlib::sqlw_display $cmd
set PgAcVar
(
pgsql,cmd
)
$cmd
set PgAcVar
(
pgsql,res
)
[
pg_exec $db $cmd
]
set PgAcVar
(
pgsql,status
)
[
pg_result $PgAcVar
(
pgsql,res
)
-status
]
set PgAcVar
(
pgsql,errmsg
)
[
pg_result $PgAcVar
(
pgsql,res
)
-error
]
}
tclerrmsg
]}
{
showError
[
format
[
intlmsg
"Tcl error executing pg_exec %s
\n\n
%s"
]
$cmd $tclerrmsg
]
return 0
}
return $PgAcVar
(
pgsql,res
)
}
proc
{
wpg_select
}
{
args
}
{
Mainlib::sqlw_display
"
[
lindex $args 1
]
"
uplevel pg_select $args
}
proc
{
create_drop_down
}
{
base x y w
}
{
global PgAcVar
if
{[
winfo exists $base.ddf
]}
return
;
frame $base.ddf -borderwidth 1 -height 75 -relief raised -width 55
listbox $base.ddf.lb -background #fefefe -foreground #000000 -selectbackground #c3c3c3 -borderwidth 1 -font $PgAcVar
(
pref,font_normal
)
-highlightthickness 0 -selectborderwidth 0 -yscrollcommand
[
subst
{
$base.ddf.sb
set
}]
scrollbar $base.ddf.sb -borderwidth 1 -command
[
subst
{
$base.ddf.lb
yview
}]
-highlightthickness 0 -orient vert
place $base.ddf -x $x -y $y -width $w -height 185 -anchor nw -bordermode ignore
place $base.ddf.lb -x 1 -y 1 -width
[
expr $w-18
]
-height 182 -anchor nw -bordermode ignore
place $base.ddf.sb -x
[
expr $w-15
]
-y 1 -width 14 -height 183 -anchor nw -bordermode ignore
}
proc
{
setCursor
}
{{
type NORMAL
}}
{
if
{[
lsearch -exact
"CLOCK WAIT WATCH"
[
string toupper $type
]]
!= -1
}
{
set type watch
}
else
{
set type left_ptr
}
foreach wn
[
winfo children .
]
{
catch
{
$wn
configure -cursor $type
}
}
update
;
update idletasks
}
proc
{
parameter
}
{
msg
}
{
global PgAcVar
Window show .pgaw:GetParameter
focus .pgaw:GetParameter.e1
set PgAcVar
(
getqueryparam,var
)
""
set PgAcVar
(
getqueryparam,flag
)
0
set PgAcVar
(
getqueryparam,msg
)
$msg
bind .pgaw:GetParameter <Destroy>
"set PgAcVar(getqueryparam,flag) 1"
grab .pgaw:GetParameter
tkwait variable PgAcVar
(
getqueryparam,flag
)
if
{
$PgAcVar
(
getqueryparam,result
)}
{
return $PgAcVar
(
getqueryparam,var
)
}
else
{
return
""
}
}
proc
{
showError
}
{
emsg
}
{
bell
;
tk_messageBox -title
[
intlmsg Error
]
-icon error -message $emsg
}
proc
{
sql_exec
}
{
how cmd
}
{
global PgAcVar CurrentDB
if
{[
set pgr
[
wpg_exec $CurrentDB $cmd
]]
==0
}
{
return 0
}
if
{(
$PgAcVar
(
pgsql,status
)
==
"PGRES_COMMAND_OK"
)
||
(
$PgAcVar
(
pgsql,status
)
==
"PGRES_TUPLES_OK"
)}
{
pg_result $pgr -clear
return 1
}
if
{
$how
!=
"quiet"
}
{
showError
[
format
[
intlmsg
"Error executing query
\n\n
%s
\n\n
PostgreSQL error message:
\n
%s
\n
PostgreSQL status:%s"
]
$cmd $PgAcVar
(
pgsql,errmsg
)
$PgAcVar
(
pgsql,status
)]
}
pg_result $pgr -clear
return 0
}
proc
{
main
}
{
argc argv
}
{
global PgAcVar CurrentDB tcl_platform
load libpgtcl
[
info sharedlibextension
]
catch
{
Mainlib::draw_tabs
}
set PgAcVar
(
opendb,username
)
{}
set PgAcVar
(
opendb,password
)
{}
if
{
$argc
>0
}
{
set PgAcVar
(
opendb,dbname
)
[
lindex $argv 0
]
set PgAcVar
(
opendb,host
)
localhost
set PgAcVar
(
opendb,pgport
)
5432
Mainlib::open_database
}
elseif
{
$PgAcVar
(
pref,autoload
)
&&
(
$PgAcVar
(
pref,lastdb
)
!=
""
)}
{
set PgAcVar
(
opendb,dbname
)
$PgAcVar
(
pref,lastdb
)
set PgAcVar
(
opendb,host
)
$PgAcVar
(
pref,lasthost
)
set PgAcVar
(
opendb,pgport
)
$PgAcVar
(
pref,lastport
)
catch
{
set PgAcVar
(
opendb,username
)
$PgAcVar
(
pref,lastusername
)}
if
{[
set openmsg
[
Mainlib::open_database
]]
!=
""
}
{
if
{[
regexp
"no password supplied"
$openmsg
]}
{
Window show .pgaw:OpenDB
focus .pgaw:OpenDB.f1.e5
wm transient .pgaw:OpenDB .pgaw:Main
}
}
}
wm protocol .pgaw:Main WM_DELETE_WINDOW
{
catch
{
pg_disconnect $CurrentDB
}
exit
}
}
proc
{
Window
}
{
args
}
{
global vTcl
set cmd
[
lindex $args 0
]
set name
[
lindex $args 1
]
set newname
[
lindex $args 2
]
set rest
[
lrange $args 3 end
]
if
{
$name
==
""
|| $cmd ==
""
}
{
return
}
if
{
$newname
==
""
}
{
set newname $name
}
set exists
[
winfo exists $newname
]
switch $cmd
{
show
{
if
{
$exists
==
"1"
&& $name !=
"."
}
{
wm deiconify $name
;
return
}
if
{[
info procs vTclWindow
(
pre
)
$name
]
!=
""
}
{
eval
"vTclWindow(pre)
$name
$newname
$rest
"
}
if
{[
info procs vTclWindow$name
]
!=
""
}
{
eval
"vTclWindow
$name
$newname
$rest
"
}
if
{[
info procs vTclWindow
(
post
)
$name
]
!=
""
}
{
eval
"vTclWindow(post)
$name
$newname
$rest
"
}
}
hide
{
if $exists
{
wm withdraw $newname
;
return
}
}
iconify
{
if $exists
{
wm iconify $newname
;
return
}
}
destroy
{
if $exists
{
destroy $newname
;
return
}
}
}
}
proc vTclWindow.
{
base
}
{
if
{
$base
==
""
}
{
set base .
}
wm focusmodel $base passive
wm geometry $base 1x1+0+0
wm maxsize $base 1009 738
wm minsize $base 1 1
wm overrideredirect $base 0
wm resizable $base 1 1
wm withdraw $base
wm title $base
"vt.tcl"
}
init $argc $argv
Window show .
Window show .pgaw:Main
main $argc $argv
src/bin/pgaccess/pgaccess
0 → 100755
View file @
7737dfd3
#!/bin/sh
PATH_TO_WISH
=
/usr/bin/wish
PGACCESS_HOME
=
/usr/local/pgaccess
export
PATH_TO_WISH
export
PGACCESS_HOME
exec
${
PATH_TO_WISH
}
${
PGACCESS_HOME
}
/main.tcl
"
$@
"
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment