pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:22:
int write(string|array(string) data) {
}
int getchar() {
}
int close() {
}
+ private final array(string) cmdbuf=({});
+
#ifdef USEPGsql
inherit _PGsql.PGsql;
#else
object portal;
void setportal(void|object newportal) {
portal=newportal;
}
inline int(-1..1) bpeek(int timeout) {
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:105:
inline final string plugint64(int x) {
return sprintf("%c%c%c%c%c%c%c%c",x>>56&255,x>>48&255,x>>40&255,x>>32&255,
x>>24&255,x>>16&255,x>>8&255,x&255);
}
final void sendflush() {
sendcmd(({}),1);
}
- final int sendcmd(string|array(string) data,void|int flush) {
- if(flush) {
- if(stringp(data))
- data=({data,FLUSH});
+ final void sendcmd(string|array(string) data,void|int flush) {
+ if(arrayp(data))
+ cmdbuf+=data;
else
- data+=({FLUSH});
+ cmdbuf+=({data});
+ switch(flush) {
+ case 3:
+ cmdbuf+=({FLUSH});
+ flushed=1;
+ break;
+ default:
+ flushed=0;
+ break;
+ case 1:
+ cmdbuf+=({FLUSH});
PD("Flush\n");
-
+ case 2:
flushed=1;
-
+ write(cmdbuf);
+ cmdbuf=({});
}
- else if(flushed!=-1)
- flushed=0;
- return write(data);
+
}
final void sendterminate() {
PD("Terminate\n");
- sendcmd(({"X",plugint32(4)}));
+ sendcmd(({"X",plugint32(4)}),2);
close();
}
}
class PGconn {
inherit PGassist:pg;
#ifdef UNBUFFEREDIO
inherit Stdio.File:std;
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:365: Inside #if undefined(NO_LOCKING)
#ifndef NO_LOCKING
Thread.MutexKey fetchmtxkey = fetchmutex.lock();
#endif
if(!buffer && sizeof(_datarows))
return getdatarow();
if(copyinprogress) {
fetchmtxkey = UNDEFINED;
if(stringp(buffer)) {
PD("CopyData\n");
_pgsqlsess._c.sendcmd(({"d",_pgsqlsess._c.plugint32(4+sizeof(buffer)),
- buffer}));
+ buffer}),2);
}
else
releasesession();
return UNDEFINED;
}
mixed err;
if(buffer!=2 && (err=delayederror)) {
delayederror=UNDEFINED;
throw(err);
}