Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
4aa1734f
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4aa1734f
编写于
11月 09, 1996
作者:
M
Marc G. Fournier
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added in PQconnectdb() function
Submitted by: wieck@sapserv.debis.de (Jan Wieck)
上级
7ee9464b
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
549 addition
and
41 deletion
+549
-41
src/Makefile.global
src/Makefile.global
+3
-3
src/interfaces/libpgtcl/pgtcl.c
src/interfaces/libpgtcl/pgtcl.c
+6
-1
src/interfaces/libpgtcl/pgtclCmds.c
src/interfaces/libpgtcl/pgtclCmds.c
+89
-33
src/interfaces/libpgtcl/pgtclCmds.h
src/interfaces/libpgtcl/pgtclCmds.h
+3
-1
src/interfaces/libpq/fe-connect.c
src/interfaces/libpq/fe-connect.c
+423
-2
src/interfaces/libpq/libpq-fe.h
src/interfaces/libpq/libpq-fe.h
+25
-1
未找到文件。
src/Makefile.global
浏览文件 @
4aa1734f
...
...
@@ -7,7 +7,7 @@
#
#
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/Attic/Makefile.global,v 1.5
6 1996/11/08 07:47:5
2 scrappy Exp $
# $Header: /cvsroot/pgsql/src/Attic/Makefile.global,v 1.5
7 1996/11/09 10:39:0
2 scrappy Exp $
#
# NOTES
# This is seen by any Makefiles that include mk/postgres.mk. To
...
...
@@ -59,7 +59,7 @@
# to change it in Makefile.custom.
# make sure that you have no whitespaces after the PORTNAME setting
# or the makefiles can get confused
PORTNAME
=
UNDEFINED
PORTNAME
=
BSD44_derived
# Ignore LINUX_ELF if you're not using Linux. But if you are, and you're
# compiling to a.out (which means you're using the dld dynamic loading
...
...
@@ -860,7 +860,7 @@ includedir= $(HEADERDIR)
# Flags for CC and LD. (depend on COPT and PROFILE)
#
# PostgreSQL should *always* compile with -Wall -Werror enabled
CFLAGS
+=
-Wall
-Werror
CFLAGS
+=
-Wall
#
-Werror
# Globally pass debugging/optimization/profiling flags based
# on the options selected above.
...
...
src/interfaces/libpgtcl/pgtcl.c
浏览文件 @
4aa1734f
...
...
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtcl.c,v 1.
3 1996/10/30 06:18:38
scrappy Exp $
* $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtcl.c,v 1.
4 1996/11/09 10:39:40
scrappy Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -75,6 +75,11 @@ Pgtcl_Init (Tcl_Interp *interp)
Tcl_CreateExitHandler
(
Pgtcl_AtExit
,
(
ClientData
)
cd
);
/* register all pgtcl commands */
Tcl_CreateCommand
(
interp
,
"pg_conndefaults"
,
Pg_conndefaults
,
(
ClientData
)
cd
,
(
Tcl_CmdDeleteProc
*
)
NULL
);
Tcl_CreateCommand
(
interp
,
"pg_connect"
,
Pg_connect
,
...
...
src/interfaces/libpgtcl/pgtclCmds.c
浏览文件 @
4aa1734f
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.
5 1996/10/30 06:18:39
scrappy Exp $
* $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.
6 1996/11/09 10:39:41
scrappy Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -209,6 +209,44 @@ tcl_value (char *value)
#endif
/**********************************
* pg_conndefaults
syntax:
pg_conndefaults
the return result is a list describing the possible options and their
current default values for a call to pg_connect with the new -conninfo
syntax. Each entry in the list is a sublist of the format:
{optname label dispchar dispsize value}
**********************************/
int
Pg_conndefaults
(
ClientData
cData
,
Tcl_Interp
*
interp
,
int
argc
,
char
*
argv
[])
{
PQconninfoOption
*
option
;
char
buf
[
8192
];
Tcl_ResetResult
(
interp
);
for
(
option
=
PQconndefaults
();
option
->
keyword
!=
NULL
;
option
++
)
{
if
(
option
->
val
==
NULL
)
{
option
->
val
=
""
;
}
sprintf
(
buf
,
"{%s} {%s} {%s} %d {%s}"
,
option
->
keyword
,
option
->
label
,
option
->
dispchar
,
option
->
dispsize
,
option
->
val
);
Tcl_AppendElement
(
interp
,
buf
);
}
return
TCL_OK
;
}
/**********************************
* pg_connect
make a connection to a backend.
...
...
@@ -235,55 +273,73 @@ Pg_connect(ClientData cData, Tcl_Interp *interp, int argc, char* argv[])
if
(
argc
==
1
)
{
Tcl_AppendResult
(
interp
,
"pg_connect: database name missing
\n
"
,
0
);
Tcl_AppendResult
(
interp
,
"pg_connect databaseName [-host hostName] [-port portNumber] [-tty pgtty]]"
,
0
);
Tcl_AppendResult
(
interp
,
"pg_connect databaseName [-host hostName] [-port portNumber] [-tty pgtty]]
\n
"
,
0
);
Tcl_AppendResult
(
interp
,
"pg_connect -conninfo <conninfo-string>"
,
0
);
return
TCL_ERROR
;
}
if
(
argc
>
2
)
{
/* parse for pg environment settings */
i
=
2
;
while
(
i
+
1
<
argc
)
{
if
(
strcmp
(
argv
[
i
],
"-host"
)
==
0
)
{
pghost
=
argv
[
i
+
1
];
i
+=
2
;
}
else
if
(
strcmp
(
argv
[
i
],
"-port"
)
==
0
)
{
pgport
=
argv
[
i
+
1
];
if
(
!
strcmp
(
"-conninfo"
,
argv
[
1
]))
{
/*
* Establish a connection using the new PQconnectdb() interface
*/
if
(
argc
!=
3
)
{
Tcl_AppendResult
(
interp
,
"pg_connect: syntax error
\n
"
,
0
);
Tcl_AppendResult
(
interp
,
"pg_connect -conninfo <conninfo-string>"
,
0
);
return
TCL_ERROR
;
}
conn
=
PQconnectdb
(
argv
[
2
]);
}
else
{
/*
* Establish a connection using the old PQsetdb() interface
*/
if
(
argc
>
2
)
{
/* parse for pg environment settings */
i
=
2
;
while
(
i
+
1
<
argc
)
{
if
(
strcmp
(
argv
[
i
],
"-host"
)
==
0
)
{
pghost
=
argv
[
i
+
1
];
i
+=
2
;
}
else
if
(
strcmp
(
argv
[
i
],
"-
tty
"
)
==
0
)
{
pg
tty
=
argv
[
i
+
1
];
if
(
strcmp
(
argv
[
i
],
"-
port
"
)
==
0
)
{
pg
port
=
argv
[
i
+
1
];
i
+=
2
;
}
else
if
(
strcmp
(
argv
[
i
],
"-options"
)
==
0
)
{
pgoptions
=
argv
[
i
+
1
];
i
+=
2
;
}
else
{
Tcl_AppendResult
(
interp
,
"Bad option to pg_connect :
\n
"
,
argv
[
i
],
0
);
Tcl_AppendResult
(
interp
,
"pg_connect databaseName [-host hostName] [-port portNumber] [-tty pgtty]]"
,
0
);
return
TCL_ERROR
;
}
}
/* while */
if
((
i
%
2
!=
0
)
||
i
!=
argc
)
{
Tcl_AppendResult
(
interp
,
"wrong # of arguments to pg_connect
\n
"
,
argv
[
i
],
0
);
Tcl_AppendResult
(
interp
,
"pg_connect databaseName [-host hostName] [-port portNumber] [-tty pgtty]]"
,
0
);
return
TCL_ERROR
;
else
if
(
strcmp
(
argv
[
i
],
"-tty"
)
==
0
)
{
pgtty
=
argv
[
i
+
1
];
i
+=
2
;
}
else
if
(
strcmp
(
argv
[
i
],
"-options"
)
==
0
)
{
pgoptions
=
argv
[
i
+
1
];
i
+=
2
;
}
else
{
Tcl_AppendResult
(
interp
,
"Bad option to pg_connect :
\n
"
,
argv
[
i
],
0
);
Tcl_AppendResult
(
interp
,
"pg_connect databaseName [-host hostName] [-port portNumber] [-tty pgtty]]"
,
0
);
return
TCL_ERROR
;
}
}
/* while */
if
((
i
%
2
!=
0
)
||
i
!=
argc
)
{
Tcl_AppendResult
(
interp
,
"wrong # of arguments to pg_connect
\n
"
,
argv
[
i
],
0
);
Tcl_AppendResult
(
interp
,
"pg_connect databaseName [-host hostName] [-port portNumber] [-tty pgtty]]"
,
0
);
return
TCL_ERROR
;
}
}
dbName
=
argv
[
1
];
conn
=
PQsetdb
(
pghost
,
pgport
,
pgoptions
,
pgtty
,
dbName
);
}
dbName
=
argv
[
1
];
conn
=
PQsetdb
(
pghost
,
pgport
,
pgoptions
,
pgtty
,
dbName
);
if
(
conn
->
status
==
CONNECTION_OK
)
{
PgSetConnectionId
(
cd
,
interp
->
result
,
conn
);
return
TCL_OK
;
}
else
{
Tcl_AppendResult
(
interp
,
"Connection to
"
,
dbName
,
"
failed
\n
"
,
0
);
Tcl_AppendResult
(
interp
,
"Connection to
database
failed
\n
"
,
0
);
Tcl_AppendResult
(
interp
,
conn
->
errorMessage
,
0
);
PQfinish
(
conn
);
return
TCL_ERROR
;
}
}
...
...
src/interfaces/libpgtcl/pgtclCmds.h
浏览文件 @
4aa1734f
...
...
@@ -5,7 +5,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: pgtclCmds.h,v 1.
3 1996/10/30 06:18:40
scrappy Exp $
* $Id: pgtclCmds.h,v 1.
4 1996/11/09 10:39:42
scrappy Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -43,6 +43,8 @@ typedef struct Pg_ResultId_s {
/* **************************/
/* registered Tcl functions */
/* **************************/
extern
int
Pg_conndefaults
(
ClientData
cData
,
Tcl_Interp
*
interp
,
int
argc
,
char
*
argv
[]);
extern
int
Pg_connect
(
ClientData
cData
,
Tcl_Interp
*
interp
,
int
argc
,
char
*
argv
[]);
extern
int
Pg_disconnect
(
...
...
src/interfaces/libpq/fe-connect.c
浏览文件 @
4aa1734f
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.1
4 1996/11/04 04:00:54 momjian
Exp $
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.1
5 1996/11/09 10:39:51 scrappy
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -52,10 +52,197 @@ static int packetSend(Port *port, PacketBuf *buf, PacketLen len,
static
void
startup2PacketBuf
(
StartupInfo
*
s
,
PacketBuf
*
res
);
static
void
freePGconn
(
PGconn
*
conn
);
static
void
closePGconn
(
PGconn
*
conn
);
static
int
conninfo_parse
(
const
char
*
conninfo
,
char
*
errorMessage
);
static
char
*
conninfo_getval
(
char
*
keyword
);
static
void
conninfo_free
();
#define NOTIFYLIST_INITIAL_SIZE 10
#define NOTIFYLIST_GROWBY 10
/* ----------
* Definition of the conninfo parametes and their fallback resources.
* If Environment-Var and Compiled-in are specified as NULL, no
* fallback is available. If after all no value can be determined
* for an option, an error is returned.
*
* The values for dbname and user are treated special in conninfo_parse.
* If the Compiled-in resource is specified as a NULL value, the
* user is determined by fe_getauthname() and for dbname the user
* name is copied.
*
* The Label and Disp-Char entries are provided for applications that
* want to use PQconndefaults() to create a generic database connection
* dialog. Disp-Char is defined as follows:
* "" Normal input field
* ----------
*/
static
PQconninfoOption
PQconninfoOptions
[]
=
{
/* ----------------------------------------------------------------- */
/* Option-name Environment-Var Compiled-in Current value */
/* Label Disp-Char */
/* ----------------- --------------- --------------- --------------- */
{
"user"
,
"PGUSER"
,
NULL
,
NULL
,
"Database-User"
,
""
,
20
},
{
"dbname"
,
"PGDATABASE"
,
NULL
,
NULL
,
"Database-Name"
,
""
,
20
},
{
"host"
,
"PGHOST"
,
DefaultHost
,
NULL
,
"Database-Host"
,
""
,
40
},
{
"port"
,
"PGPORT"
,
POSTPORT
,
NULL
,
"Database-Port"
,
""
,
6
},
{
"tty"
,
"PGTTY"
,
DefaultTty
,
NULL
,
"Backend-Debug-TTY"
,
"D"
,
40
},
{
"options"
,
"PGOPTIONS"
,
DefaultOption
,
NULL
,
"Backend-Debug-Options"
,
"D"
,
40
},
/* ----------------- --------------- --------------- --------------- */
{
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
0
}
};
/* ----------------
* PQconnectdb
*
* establishes a connectin to a postgres backend through the postmaster
* using connection information in a string.
*
* The conninfo string is a list of
*
* option = value
*
* definitions. Value might be a single value containing no whitespaces
* or a single quoted string. If a single quote should appear everywhere
* in the value, it must be escaped with a backslash like \'
*
* Returns a PGconn* which is needed for all subsequent libpq calls
* if the status field of the connection returned is CONNECTION_BAD,
* then some fields may be null'ed out instead of having valid values
* ----------------
*/
PGconn
*
PQconnectdb
(
const
char
*
conninfo
)
{
PGconn
*
conn
;
PQconninfoOption
*
option
;
char
errorMessage
[
ERROR_MSG_LENGTH
];
/* ----------
* Allocate memory for the conn structure
* ----------
*/
conn
=
(
PGconn
*
)
malloc
(
sizeof
(
PGconn
));
if
(
conn
==
NULL
)
{
fprintf
(
stderr
,
"FATAL: PQsetdb() -- unable to allocate memory for a PGconn"
);
return
(
PGconn
*
)
NULL
;
}
memset
((
char
*
)
conn
,
0
,
sizeof
(
PGconn
));
/* ----------
* Parse the conninfo string and get the fallback resources
* ----------
*/
if
(
conninfo_parse
(
conninfo
,
errorMessage
)
<
0
)
{
conn
->
status
=
CONNECTION_BAD
;
strcpy
(
conn
->
errorMessage
,
errorMessage
);
conninfo_free
();
return
conn
;
}
/* ----------
* Check that we have all connection parameters
* ----------
*/
for
(
option
=
PQconninfoOptions
;
option
->
keyword
!=
NULL
;
option
++
)
{
if
(
option
->
val
!=
NULL
)
continue
;
/* Value was in conninfo */
/* ----------
* No value was found for this option. Return an error.
* ----------
*/
conn
->
status
=
CONNECTION_BAD
;
sprintf
(
conn
->
errorMessage
,
"ERROR: PQconnectdb(): Cannot determine a value for option '%s'.
\n
"
,
option
->
keyword
);
strcat
(
conn
->
errorMessage
,
"Option not specified in conninfo string"
);
if
(
option
->
environ
)
{
strcat
(
conn
->
errorMessage
,
", environment variable "
);
strcat
(
conn
->
errorMessage
,
option
->
environ
);
strcat
(
conn
->
errorMessage
,
"
\n
not set"
);
}
strcat
(
conn
->
errorMessage
,
" and no compiled in default value.
\n
"
);
conninfo_free
();
return
conn
;
}
/* ----------
* Setup the conn structure
* ----------
*/
conn
->
Pfout
=
NULL
;
conn
->
Pfin
=
NULL
;
conn
->
Pfdebug
=
NULL
;
conn
->
port
=
NULL
;
conn
->
notifyList
=
DLNewList
();
conn
->
pghost
=
strdup
(
conninfo_getval
(
"host"
));
conn
->
pgport
=
strdup
(
conninfo_getval
(
"port"
));
conn
->
pgtty
=
strdup
(
conninfo_getval
(
"tty"
));
conn
->
pgoptions
=
strdup
(
conninfo_getval
(
"options"
));
conn
->
pguser
=
strdup
(
conninfo_getval
(
"user"
));
conn
->
dbName
=
strdup
(
conninfo_getval
(
"dbname"
));
/* ----------
* Free the connection info - all is in conn now
* ----------
*/
conninfo_free
();
/* ----------
* Connect to the database
* ----------
*/
conn
->
status
=
connectDB
(
conn
);
if
(
conn
->
status
==
CONNECTION_OK
)
{
PGresult
*
res
;
/* Send a blank query to make sure everything works; in particular, that
the database exists.
*/
res
=
PQexec
(
conn
,
" "
);
if
(
res
==
NULL
||
res
->
resultStatus
!=
PGRES_EMPTY_QUERY
)
{
/* PQexec has put error message in conn->errorMessage */
closePGconn
(
conn
);
}
PQclear
(
res
);
}
return
conn
;
}
/* ----------------
* PQconndefaults
*
* Parse an empty string like PQconnectdb() would do and return the
* address of the connection options structure. Using this function
* an application might determine all possible options and their
* current default values.
* ----------------
*/
PQconninfoOption
*
PQconndefaults
()
{
char
errorMessage
[
ERROR_MSG_LENGTH
];
conninfo_parse
(
""
,
errorMessage
);
return
PQconninfoOptions
;
}
/* ----------------
* PQsetdb
*
...
...
@@ -162,7 +349,7 @@ PQsetdb(const char *pghost, const char* pgport, const char* pgoptions, const cha
if
(((
tmp
=
(
char
*
)
dbName
)
&&
(
dbName
[
0
]
!=
'\0'
))
||
((
tmp
=
getenv
(
"PGDATABASE"
))))
{
conn
->
dbName
=
strdup
(
tmp
);
}
else
conn
->
dbName
=
conn
->
pguser
;
}
else
conn
->
dbName
=
strdup
(
conn
->
pguser
)
;
}
else
conn
->
dbName
=
NULL
;
if
(
error
)
conn
->
status
=
CONNECTION_BAD
;
...
...
@@ -461,6 +648,230 @@ startup2PacketBuf(StartupInfo* s, PacketBuf* res)
strncpy
(
tmp
,
s
->
tty
,
sizeof
(
s
->
execFile
));
}
/* ----------------
* Conninfo parser routine
* ----------------
*/
static
int
conninfo_parse
(
const
char
*
conninfo
,
char
*
errorMessage
)
{
char
*
pname
;
char
*
pval
;
char
*
buf
;
char
*
tmp
;
char
*
cp
;
char
*
cp2
;
PQconninfoOption
*
option
;
char
errortmp
[
ERROR_MSG_LENGTH
];
conninfo_free
();
if
((
buf
=
strdup
(
conninfo
))
==
NULL
)
{
strcpy
(
errorMessage
,
"FATAL: cannot allocate memory for copy of conninfo string
\n
"
);
return
-
1
;
}
cp
=
buf
;
while
(
*
cp
)
{
/* Skip blanks before the parameter name */
if
(
isspace
(
*
cp
))
{
cp
++
;
continue
;
}
/* Get the parameter name */
pname
=
cp
;
while
(
*
cp
)
{
if
(
*
cp
==
'='
)
{
break
;
}
if
(
isspace
(
*
cp
))
{
*
cp
++
=
'\0'
;
while
(
*
cp
)
{
if
(
!
isspace
(
*
cp
))
{
break
;
}
cp
++
;
}
break
;
}
cp
++
;
}
/* Check that there is a following '=' */
if
(
*
cp
!=
'='
)
{
sprintf
(
errorMessage
,
"ERROR: PQconnectdb() - Missing '=' after '%s' in conninfo
\n
"
,
pname
);
free
(
buf
);
return
-
1
;
}
*
cp
++
=
'\0'
;
/* Skip blanks after the '=' */
while
(
*
cp
)
{
if
(
!
isspace
(
*
cp
))
{
break
;
}
cp
++
;
}
pval
=
cp
;
if
(
*
cp
!=
'\''
)
{
cp2
=
pval
;
while
(
*
cp
)
{
if
(
isspace
(
*
cp
))
{
*
cp
++
=
'\0'
;
break
;
}
if
(
*
cp
==
'\\'
)
{
cp
++
;
if
(
*
cp
!=
'\0'
)
{
*
cp2
++
=
*
cp
++
;
}
}
else
{
*
cp2
++
=
*
cp
++
;
}
}
*
cp2
=
'\0'
;
}
else
{
cp2
=
pval
;
cp
++
;
for
(;;)
{
if
(
*
cp
==
'\0'
)
{
sprintf
(
errorMessage
,
"ERROR: PQconnectdb() - unterminated quoted string in conninfo
\n
"
);
free
(
buf
);
return
-
1
;
}
if
(
*
cp
==
'\\'
)
{
cp
++
;
if
(
*
cp
!=
'\0'
)
{
*
cp2
++
=
*
cp
++
;
}
continue
;
}
if
(
*
cp
==
'\''
)
{
*
cp2
=
'\0'
;
cp
++
;
break
;
}
*
cp2
++
=
*
cp
++
;
}
}
/* ----------
* Now we have the name and the value. Search
* for the param record.
* ----------
*/
for
(
option
=
PQconninfoOptions
;
option
->
keyword
!=
NULL
;
option
++
)
{
if
(
!
strcmp
(
option
->
keyword
,
pname
))
{
break
;
}
}
if
(
option
->
keyword
==
NULL
)
{
sprintf
(
errorMessage
,
"ERROR: PQconnectdb() - unknown option '%s'
\n
"
,
pname
);
free
(
buf
);
return
-
1
;
}
/* ----------
* Store the value
* ----------
*/
option
->
val
=
strdup
(
pval
);
}
free
(
buf
);
/* ----------
* Get the fallback resources for parameters not specified
* in the conninfo string.
* ----------
*/
for
(
option
=
PQconninfoOptions
;
option
->
keyword
!=
NULL
;
option
++
)
{
if
(
option
->
val
!=
NULL
)
continue
;
/* Value was in conninfo */
/* ----------
* Try to get the environment variable fallback
* ----------
*/
if
(
option
->
environ
!=
NULL
)
{
if
((
tmp
=
getenv
(
option
->
environ
))
!=
NULL
)
{
option
->
val
=
strdup
(
tmp
);
continue
;
}
}
/* ----------
* No environment variable specified or this one isn't set -
* try compiled in
* ----------
*/
if
(
option
->
compiled
!=
NULL
)
{
option
->
val
=
strdup
(
option
->
compiled
);
continue
;
}
/* ----------
* Special handling for user
* ----------
*/
if
(
!
strcmp
(
option
->
keyword
,
"user"
))
{
tmp
=
fe_getauthname
(
errortmp
);
if
(
tmp
)
{
option
->
val
=
strdup
(
tmp
);
}
}
/* ----------
* Special handling for dbname
* ----------
*/
if
(
!
strcmp
(
option
->
keyword
,
"dbname"
))
{
tmp
=
conninfo_getval
(
"user"
);
if
(
tmp
)
{
option
->
val
=
strdup
(
tmp
);
}
}
}
return
0
;
}
static
char
*
conninfo_getval
(
char
*
keyword
)
{
PQconninfoOption
*
option
;
for
(
option
=
PQconninfoOptions
;
option
->
keyword
!=
NULL
;
option
++
)
{
if
(
!
strcmp
(
option
->
keyword
,
keyword
))
{
return
option
->
val
;
}
}
return
NULL
;
}
static
void
conninfo_free
()
{
PQconninfoOption
*
option
;
for
(
option
=
PQconninfoOptions
;
option
->
keyword
!=
NULL
;
option
++
)
{
if
(
option
->
val
!=
NULL
)
{
free
(
option
->
val
);
option
->
val
=
NULL
;
}
}
}
/* =========== accessor functions for PGconn ========= */
char
*
PQdb
(
PGconn
*
conn
)
...
...
@@ -472,6 +883,16 @@ PQdb(PGconn* conn)
return
conn
->
dbName
;
}
char
*
PQuser
(
PGconn
*
conn
)
{
if
(
!
conn
)
{
fprintf
(
stderr
,
"PQuser() -- pointer to PGconn is null"
);
return
(
char
*
)
NULL
;
}
return
conn
->
pguser
;
}
char
*
PQhost
(
PGconn
*
conn
)
{
...
...
src/interfaces/libpq/libpq-fe.h
浏览文件 @
4aa1734f
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: libpq-fe.h,v 1.
9 1996/11/04 04:00:56 momjian
Exp $
* $Id: libpq-fe.h,v 1.
10 1996/11/09 10:39:54 scrappy
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -146,8 +146,31 @@ struct _PQprintOpt {
typedef
struct
_PQprintOpt
PQprintOpt
;
/* ----------------
* Structure for the conninfo parameter definitions of PQconnectdb()
* ----------------
*/
struct
_PQconninfoOption
{
char
*
keyword
;
/* The keyword of the option */
char
*
environ
;
/* Fallback environment variable name */
char
*
compiled
;
/* Fallback compiled in default value */
char
*
val
;
/* Options value */
char
*
label
;
/* Label for field in connect dialog */
char
*
dispchar
;
/* Character to display for this field */
/* in a connect dialog. Values are: */
/* "" Display entered value as is */
/* "*" Password field - hide value */
/* "D" Debug options - don't */
/* create a field by default */
int
dispsize
;
/* Field size in characters for dialog */
};
typedef
struct
_PQconninfoOption
PQconninfoOption
;
/* === in fe-connect.c === */
/* make a new client connection to the backend */
extern
PGconn
*
PQconnectdb
(
const
char
*
conninfo
);
extern
PQconninfoOption
*
PQconndefaults
();
extern
PGconn
*
PQsetdb
(
const
char
*
pghost
,
const
char
*
pgport
,
const
char
*
pgoptions
,
const
char
*
pgtty
,
const
char
*
dbName
);
/* close the current connection and free the PGconn data structure */
...
...
@@ -157,6 +180,7 @@ extern void PQfinish(PGconn* conn);
extern
void
PQreset
(
PGconn
*
conn
);
extern
char
*
PQdb
(
PGconn
*
conn
);
extern
char
*
PQuser
(
PGconn
*
conn
);
extern
char
*
PQhost
(
PGconn
*
conn
);
extern
char
*
PQoptions
(
PGconn
*
conn
);
extern
char
*
PQport
(
PGconn
*
conn
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录