Re: [HACKERS] Confusion over Copy.c/Count rows from file patch

2004-03-15 Thread Tom Lane
mike g <[EMAIL PROTECTED]> writes:
> If there is a simple explanation to why ProcessUtility is not called the
> first time COPY is executed and it is from then on it could help me a
> lot.

CreateCommandTag is called before the query is executed, I believe.

regards, tom lane

PS: if you want useful comments on diffs, you should try to avoid having
half the diff consist of bogus changes in whitespace.

---(end of broadcast)---
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])


[HACKERS] Confusion over Copy.c/Count rows from file patch

2004-03-15 Thread mike g
Hi,

I am trying to revise my patch for counting the number of rows inserted
when using a COPY statement.

I set it up a printf to see the results in the log file.

When I execute a COPY the first time it reports 0 rows inserted(but
actually inserts all rows).  If I execute again it reports the number of
rows + 1.  Execute a third time and the number of rows are reported +
1(same result as 2nd run).  All three tests were done against the same
file.

If there is a simple explanation to why ProcessUtility is not called the
first time COPY is executed and it is from then on it could help me a
lot.  





Index: copy.c
===
RCS file: /projects/cvsroot/pgsql-server/src/backend/commands/copy.c,v
retrieving revision 1.218
diff -u -r1.218 copy.c
--- copy.c	10 Feb 2004 01:55:24 -	1.218
+++ copy.c	16 Mar 2004 04:25:46 -
@@ -104,8 +104,7 @@
 static const char *copy_relname;	/* table name for error messages */
 static int	copy_lineno;		/* line number for error messages */
 static const char *copy_attname;	/* current att for error messages */
-
-
+int co_rows_inserted;
 /*
  * These static variables are used to avoid incurring overhead for each
  * attribute processed.  attribute_buf is reused on each CopyReadAttribute
@@ -1271,7 +1270,8 @@
 	attr = tupDesc->attrs;
 	num_phys_attrs = tupDesc->natts;
 	attr_count = length(attnumlist);
-	num_defaults = 0;
+	num_defaults = 0; 
+
 
 	/*
 	 * We need a ResultRelInfo so we can use the regular executor's
@@ -1734,6 +1734,7 @@
 	ExecCloseIndices(resultRelInfo);
 
 	FreeExecutorState(estate);
+/*looks like we return success here*/
 }
 
 
@@ -1779,12 +1780,27 @@
 	 * of a frontend multibyte character couldn't look like ASCII characters.
 	 */
 	for (;;)
-	{
+	{   
+
 		c = CopyGetChar();
 		if (c == EOF)
 		{
 			result = true;
-			break;
+ co_rows_inserted = copy_lineno;
+/*Now report number of rows imported to user*/
+  
+if (co_rows_inserted == 0)
+   {
+   ereport(WARNING,(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+errmsg ("File used to import data is empty."),
+errhint("Double check file name used")));
+   }else if (co_rows_inserted < 0)
+{
+ereport(ERROR,
+   (errcode(ERRCODE_BAD_COPY_FILE_FORMAT),   errmsg("Rows copied were less than zero.  Copy function has been broken"),
+errhint("File a bug please")));
+}
+  break;
 		}
 		if (c == '\r')
 		{
Index: utility.c
===
RCS file: /projects/cvsroot/pgsql-server/src/backend/tcop/utility.c,v
retrieving revision 1.210
diff -u -r1.210 utility.c
--- utility.c	10 Feb 2004 01:55:26 -	1.210
+++ utility.c	16 Mar 2004 04:28:07 -
@@ -60,7 +60,7 @@
 /*
  * Error-checking support for DROP commands
  */
-
+extern int co_rows_inserted;
 struct msgstrings
 {
 	char		kind;
@@ -1283,8 +1283,9 @@
 			tag = "COMMENT";
 			break;
 
-		case T_CopyStmt:
-			tag = "COPY";
+		case T_CopyStmt:	
+tag = "COPY";
+printf("COPY %i ROWS FROM FLAT FILE\n",co_rows_inserted );
 			break;
 
 		case T_RenameStmt:


signature.asc
Description: This is a digitally signed message part