El comando copy de Postgres tiene opciones para leer y escribir en la conexi�n de red utilizada por libpq++. Por esta razon, se necesitan funciones para acceder a esta conexi�n de red directamente, de forma que las aplicaciones puedan tomar ventajas completas de esta capacidad.
PgDatabase::GetLine lee una linea de caracteres terminada con "nueva l�nea" (transmitida por el servidor) en una zona de almacenamiento (un buffer) string de tama�o length.
int PgDatabase::GetLine(char* string, int length) |
Como la rutina de sistema de Unix fgets (3), esta rutina copia length-1 caracteres en string. Es como gets (3), sin embargo, en que convierte la terminaci�n "nueva l�nea" en un caracter null.
PgDatabase::GetLine Devuelve EOF al final de un fichero, 0 si se ha leido la l�nea entera, y 1 si la zona de almacenamiento de ha llenado pero no se ha le�do a�n el car�cter "nueva l�nea" de terminaci�n.
N�tese que la aplicaci�n debe comprobar si la nueva l�nea consiste simplemente en �nico punto ("."), lo que indicar�a que el servidor ha terminado de enviar el resultado de copy. Por ello, si la aplicaci�n siempre espera recibir l�neas que tienen m�s de length-1 caracteres de longitud, la aplicaci�n deber� asegurarse de comprobar el valor de retorno de PgDatabase::GetLine muy cuidadosamente.
PgDatabase::PutLine Env�a un string terminado en null al servidor.
void PgDatabase::PutLine(char* string) |
La aplicaci�n debe enviar expl�citamente un �nico punto (".") para indicar al servidor que ha terminado de enviar sus datos.
PgDatabase::EndCopy sincroniza con el servidor.
int PgDatabase::EndCopy() |
El valor devuelto es 0 cuando se completa con �xito, y distinto de cero en otro caso.
As an example:
PgDatabase data; data.Exec("create table foo (a int4, b char(16), d float8)"); data.Exec("copy foo from stdin"); data.putline("3\etHello World\et4.5\en"); data.putline("4\etGoodbye World\et7.11\en"); &... data.putline(".\en"); data.endcopy(); |