mirror of
https://github.com/postgres/postgres.git
synced 2025-08-09 17:03:00 +03:00
apparently corrupt the Tcl runtime. Per suggestion from Michael Brusser <michael@synchronicity.com>
171 lines
3.4 KiB
C
171 lines
3.4 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* pgtcl.c
|
|
*
|
|
* libpgtcl is a tcl package for front-ends to interface with PostgreSQL.
|
|
* It's a Tcl wrapper for libpq.
|
|
*
|
|
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
*
|
|
* IDENTIFICATION
|
|
* $PostgreSQL: pgsql/src/interfaces/libpgtcl/pgtcl.c,v 1.31 2004/02/02 00:35:08 neilc Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#include "postgres_fe.h"
|
|
#include "libpgtcl.h"
|
|
#include "pgtclCmds.h"
|
|
#include "pgtclId.h"
|
|
|
|
/*
|
|
* Pgtcl_Init
|
|
* initialization package for the PGTCL Tcl package
|
|
*
|
|
*/
|
|
|
|
int
|
|
Pgtcl_Init(Tcl_Interp *interp)
|
|
{
|
|
double tclversion;
|
|
|
|
/*
|
|
* finish off the ChannelType struct. Much easier to do it here then
|
|
* to guess where it might be by position in the struct. This is
|
|
* needed for Tcl7.6 *only*, which has the getfileproc.
|
|
*/
|
|
#if HAVE_TCL_GETFILEPROC
|
|
Pg_ConnType.getFileProc = PgGetFileProc;
|
|
#endif
|
|
|
|
/*
|
|
* Tcl versions >= 8.1 use UTF-8 for their internal string
|
|
* representation. Therefore PGCLIENTENCODING must be set to UNICODE
|
|
* for these versions.
|
|
*/
|
|
Tcl_GetDouble(interp, Tcl_GetVar(interp, "tcl_version", TCL_GLOBAL_ONLY), &tclversion);
|
|
if (tclversion >= 8.1)
|
|
Tcl_PutEnv("PGCLIENTENCODING=UNICODE");
|
|
|
|
/* register all pgtcl commands */
|
|
Tcl_CreateCommand(interp,
|
|
"pg_conndefaults",
|
|
Pg_conndefaults,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_connect",
|
|
Pg_connect,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_disconnect",
|
|
Pg_disconnect,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_exec",
|
|
Pg_exec,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_select",
|
|
Pg_select,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_result",
|
|
Pg_result,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_execute",
|
|
Pg_execute,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_open",
|
|
Pg_lo_open,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_close",
|
|
Pg_lo_close,
|
|
NULL, NULL);
|
|
|
|
#ifdef PGTCL_USE_TCLOBJ
|
|
Tcl_CreateObjCommand(interp,
|
|
"pg_lo_read",
|
|
Pg_lo_read,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateObjCommand(interp,
|
|
"pg_lo_write",
|
|
Pg_lo_write,
|
|
NULL, NULL);
|
|
#else
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_read",
|
|
Pg_lo_read,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_write",
|
|
Pg_lo_write,
|
|
NULL, NULL);
|
|
#endif
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_lseek",
|
|
Pg_lo_lseek,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_creat",
|
|
Pg_lo_creat,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_tell",
|
|
Pg_lo_tell,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_unlink",
|
|
Pg_lo_unlink,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_import",
|
|
Pg_lo_import,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_lo_export",
|
|
Pg_lo_export,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_listen",
|
|
Pg_listen,
|
|
NULL, NULL);
|
|
|
|
Tcl_CreateCommand(interp,
|
|
"pg_on_connection_loss",
|
|
Pg_on_connection_loss,
|
|
NULL, NULL);
|
|
|
|
Tcl_PkgProvide(interp, "Pgtcl", "1.4");
|
|
|
|
return TCL_OK;
|
|
}
|
|
|
|
|
|
int
|
|
Pgtcl_SafeInit(Tcl_Interp *interp)
|
|
{
|
|
return Pgtcl_Init(interp);
|
|
}
|