|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.312 2009/06/11 14:48:55 momjian Exp $ |
| 11 | + * $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.313 2009/07/25 00:07:11 adunstan Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -730,6 +730,9 @@ DoCopy(const CopyStmt *stmt, const char *queryString)
|
730 | 730 | intnum_phys_attrs;
|
731 | 731 | uint64processed;
|
732 | 732 |
|
| 733 | +/* a dummy list that represents 'all-columns' */ |
| 734 | +Listall_columns= {T_List }; |
| 735 | + |
733 | 736 | /* Allocate workspace and zero all fields */
|
734 | 737 | cstate= (CopyStateData*)palloc0(sizeof(CopyStateData));
|
735 | 738 |
|
@@ -808,7 +811,11 @@ DoCopy(const CopyStmt *stmt, const char *queryString)
|
808 | 811 | ereport(ERROR,
|
809 | 812 | (errcode(ERRCODE_SYNTAX_ERROR),
|
810 | 813 | errmsg("conflicting or redundant options")));
|
811 |
| -force_quote= (List*)defel->arg; |
| 814 | + |
| 815 | +if (IsA(defel->arg,A_Star)) |
| 816 | +force_quote=&all_columns; |
| 817 | +else |
| 818 | +force_quote= (List*)defel->arg; |
812 | 819 | }
|
813 | 820 | elseif (strcmp(defel->defname,"force_notnull")==0)
|
814 | 821 | {
|
@@ -1092,7 +1099,14 @@ DoCopy(const CopyStmt *stmt, const char *queryString)
|
1092 | 1099 |
|
1093 | 1100 | /* Convert FORCE QUOTE name list to per-column flags, check validity */
|
1094 | 1101 | cstate->force_quote_flags= (bool*)palloc0(num_phys_attrs*sizeof(bool));
|
1095 |
| -if (force_quote) |
| 1102 | +if (force_quote==&all_columns) |
| 1103 | +{ |
| 1104 | +inti; |
| 1105 | + |
| 1106 | +for (i=0;i<num_phys_attrs;i++) |
| 1107 | +cstate->force_quote_flags[i]= true; |
| 1108 | +} |
| 1109 | +elseif (force_quote) |
1096 | 1110 | {
|
1097 | 1111 | List*attnums;
|
1098 | 1112 | ListCell*cur;
|
|