Andrew Dunstan wrote:
Tom Lane wrote:
If you're sure the code in that routine hasn't changed since 7.4, then I can just apply the patch to that branch.
It has - the prompt changes in version 1.37. But I don't think that conflict with this patch. I'll have a look this morning.
As expected:
Hunk #1 succeeded at 496 (offset -167 lines). Hunk #2 succeeded at 689 (offset -7 lines). Hunk #3 succeeded at 579 (offset -167 lines).
Here's the diff with 7.4 line numbers - tests fine for me.
cheers
andrew
*** copy.c.orig Mon Aug 4 19:59:39 2003
--- copy.c Sat Aug 14 09:12:04 2004
***************
*** 496,501 ****
--- 496,502 ----
bool copydone = false;
bool firstload;
bool linedone;
+ bool saw_cr = false;
char copybuf[COPYBUFSIZ];
char *s;
int bufleft;
***************
*** 521,550 ****
while (!linedone)
{ /* for each bufferload
in line ... */
s = copybuf;
for (bufleft = COPYBUFSIZ - 1; bufleft > 0; bufleft--)
{
c = getc(copystream);
! if (c == '\n' || c == EOF)
{
linedone = true;
break;
}
*s++ = c;
}
*s = '\0';
if (c == EOF && s == copybuf && firstload)
{
! PQputline(conn, "\\.");
copydone = true;
if (pset.cur_cmd_interactive)
puts("\\.");
break;
}
PQputline(conn, copybuf);
if (firstload)
{
! if (!strcmp(copybuf, "\\."))
{
copydone = true;
break;
--- 522,570 ----
while (!linedone)
{ /* for each bufferload
in line ... */
+ /* Fetch string until \n, EOF, or buffer full */
s = copybuf;
for (bufleft = COPYBUFSIZ - 1; bufleft > 0; bufleft--)
{
c = getc(copystream);
! if (c == EOF)
{
linedone = true;
break;
}
*s++ = c;
+ if (c == '\n')
+ {
+ linedone = true;
+ break;
+ }
+ if (c == '\r')
+ saw_cr = true;
}
*s = '\0';
+ /* EOF with empty line-so-far? */
if (c == EOF && s == copybuf && firstload)
{
! /*
! * We are guessing a little bit as to the right
line-ending
! * here...
! */
! if (saw_cr)
! PQputline(conn, "\\.\r\n");
! else
! PQputline(conn, "\\.\n");
copydone = true;
if (pset.cur_cmd_interactive)
puts("\\.");
break;
}
+ /* No, so pass the data to the backend */
PQputline(conn, copybuf);
+ /* Check for line consisting only of \. */
if (firstload)
{
! if (strcmp(copybuf, "\\.\n") == 0 ||
! strcmp(copybuf, "\\.\r\n") == 0)
{
copydone = true;
break;
***************
*** 552,558 ****
firstload = false;
}
}
- PQputline(conn, "\n");
linecount++;
}
ret = !PQendcopy(conn);
--- 572,577 ----
---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]
