aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/copy.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-08-24 15:00:47 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-08-24 15:00:47 +0000
commit976246cc7e4d8b673fc62fe6daa61c76d94af1af (patch)
treeb61ea3f5bbd8fa025587754bc90c3fd43889337c /src/backend/commands/copy.c
parentcf4d885c67744637d82f6fec657e8205578c5905 (diff)
downloadpostgresql-976246cc7e4d8b673fc62fe6daa61c76d94af1af.tar.gz
postgresql-976246cc7e4d8b673fc62fe6daa61c76d94af1af.zip
The cstring datatype can now be copied, passed around, etc. The typlen
value '-2' is used to indicate a variable-width type whose width is computed as strlen(datum)+1. Everything that looks at typlen is updated except for array support, which Joe Conway is working on; at the moment it wouldn't work to try to create an array of cstring.
Diffstat (limited to 'src/backend/commands/copy.c')
-rw-r--r--src/backend/commands/copy.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index e0bbe7560bb..c0b40c6e143 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.166 2002/08/22 00:01:42 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.167 2002/08/24 15:00:46 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -567,6 +567,8 @@ CopyTo(Relation rel, List *attnumlist, bool binary, bool oids,
elog(ERROR, "COPY: couldn't lookup info for type %u",
attr[attnum-1]->atttypid);
fmgr_info(out_func_oid, &out_functions[attnum-1]);
+ if (binary && attr[attnum-1]->attlen == -2)
+ elog(ERROR, "COPY BINARY: cstring not supported");
}
if (binary)
@@ -820,9 +822,16 @@ CopyFrom(Relation rel, List *attnumlist, bool binary, bool oids,
fmgr_info(in_func_oid, &in_functions[i]);
elements[i] = GetTypeElement(attr[i]->atttypid);
- /* if column not specified, use default value if one exists */
- if (!intMember(i + 1, attnumlist))
+ if (intMember(i + 1, attnumlist))
{
+ /* attribute is to be copied */
+ if (binary && attr[i]->attlen == -2)
+ elog(ERROR, "COPY BINARY: cstring not supported");
+ }
+ else
+ {
+ /* attribute is NOT to be copied */
+ /* use default value if one exists */
defexprs[num_defaults] = build_column_default(rel, i + 1);
if (defexprs[num_defaults] != NULL)
{