PostgreSQL 9.0.4 中文文档 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 31. libpq-C库 | Fast Forward | Next |
一如往常,也有一些函数,只是不适合在任何地方
PQfreemem
释放libpq分配的内存
void PQfreemem(void *ptr);
释放libpq分配的内存,尤其是PQescapeByteaConn
,
PQescapeBytea
,PQunescapeBytea
和PQnotifies
。
尤其重要的是,在Windows系统上使用这个函数,而不是free()
。
这是因为只有当多线程/单线程,发布/调试,静态/动态标志是相同的DLL和应用程序时,在一个DLL中分配内存,在应用程序工作时释放内存。
在非Windows平台上,这个函数与标准库函数free()
相同。
PQconninfoFree
释放PQconndefaults
或PQconninfoParse
分配的数据结构。
void PQconninfoFree(PQconninfoOption *connOptions);
一个简单的PQfreemem
不会这样做,因为数组包含对子字符串的引用。
PQencryptPassword
准备一个PostgreSQL密码的加密形式:
char * PQencryptPassword(const char *passwd,const char *user);
这个函数旨在用于那些发送类似于ALTER USER joe PASSWORD 'pwd'命令的客户端应用程序。
这是一个很好的方法,这种命令不发送原始的明文密码,因为它可能被暴露在命令日志,活动显示等等。
相反,在发送前个,使用这个函数可以将密码转换为加密的形式。
这个参数在使用中是明文密码,和用户的SQL名。返回值是malloc
分配,或超出内存时NULL分配的
字符串。调用可以认为字符串中不包含需要逃逸的特殊字符。当使用结束之后,用PQfreemem
进行释放。
PQmakeEmptyPGresult
用给定的状态,构造一个空PGresult对象。
PGresult *PQmakeEmptyPGresult(PGconn *conn,ExecStatusType status);
这是libpq内部函数用于分配和初始化一个空PGresult对象。
如果不能分配内存,那么这个函数返回NULL。
对一些应用程序而言,它可以有效的返回生成的结果对象本身(特别是对象带有错误状态)。
如果conn非空,并且status用于表示一个错误,那么指定连接的当前错误信息
被复制到PGresult中。同时,如果conn非空,那么连接中的
任何事件过程会被复制到PGresult中。
(它们不会获得PGEVT_RESULTCREATE请求,但会看到PQfireResultCreateEvents
)。
需要注意的是随着libpq本身返回PGresult时,对象最后应该请求PQclear
。
PQfireResultCreateEvents
为PGresult对象中的每个事件过程触发一个PGEVT_RESULTCREATE事件(参阅Section 31.12)。 成功时返回非0,否则返回0。
int PQfireResultCreateEvents(PGconn *conn,PGresult *res);
conn被传送给事件过程,但不会被直接使用。 如果事件过程不使用它,则会返回NULL。
已经接收到这个对象的PGEVT_RESULTCREATE或PGEVT_RESULTCOPY事件的事件过程 不会被再次触发。
这个函数与PQmakeEmptyPGResult
分开的主要原因是
它经常创建一个PGresult,并且在调用事件过程之前就用数据对其进行填充。
PQcopyResult
完成一个PGresult对象的拷贝。
这个拷贝不会以任何方式来连接到资源结果,并且当该拷贝不在需要时,需要调用PQclear
进行清理。
如果函数失败,返回NULL。
PGresult *PQcopyResult(const PGresult *src,int flags);
不会制作一个明确的拷贝。返回的结果通常会是PGRES_TUPLES_OK状态, 并且不会拷贝资源中的错误信息,然而会拷贝命令状态字符串。flags决定 其他需要拷贝的。通常是一个按位或几个flags。 PG_COPYRES_ATTRS声明复制源结果的属性(列定义)。 PG_COPYRES_TUPLES声明复制源结果的元组(这意味着也复制属性。)。 PG_COPYRES_EVENTS声明复制源结果的时间(但任何实例关联的数据源不会被复制。)。
PQsetResultAttrs
设置PGresult对象属性。
int PQsetResultAttrs(PGresult *res,int numAttributes,PGresAttDesc *attDescs);
提供的attDescs被复制到结果中。 如果attDescs指针为NULL,或numAttributes小于1, 那么请求将被忽略,并且函数成功。如果res已经有了属性,那么函数会失败。 如果函数失败,会返回0。如果函数成功,会返回非0。
PQsetvalue
设置PGresult对象的元组字段值。
int PQsetvalue(PGresult *res,int tup_num,int field_num,char *value,int len);
这个函数会自动按需增加结果的内置元组。然而,tup_num参数必须
小于等于PQntuples
,意味着这个函数一次只能增加一个元组。
但已存在的任意的元组中的任意字段可以以任意顺序进行调整。
如果field_num中的一个值已经存在,会被覆盖重写。
如果len是-1,或value是NULL,
字段值会被设置为一个SQL空值。value被复制到结果的私有存储中,
因此函数返回结果后就不再需要了。如果函数失败,会返回0。如果函数成功,会返回非0。
PQresultAlloc
为PGresult对象分配子存储。
void *PQresultAlloc(PGresult *res,size_t nBytes);
当res被清理时,该函数分配的内存也会被释放掉。
如果喊叔叔失败,返回NULL。结果是保证任何类型的数据能够充分对齐,如同对malloc
一样。