diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index f5b06d12de..2dee47fa1f 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.41 1998/02/10 16:02:51 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.42 1998/02/13 19:45:38 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -48,8 +48,7 @@ static Oid GetOutputFunction(Oid type); static Oid GetTypeElement(Oid type); static Oid GetInputFunction(Oid type); static Oid IsTypeByVal(Oid type); -static void -GetIndexRelations(Oid main_relation_oid, +static void GetIndexRelations(Oid main_relation_oid, int *n_indices, Relation **index_rels); diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c index b4ffeeb21a..708bb54103 100644 --- a/src/backend/parser/parse_node.c +++ b/src/backend/parser/parse_node.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.12 1998/02/10 16:03:39 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.13 1998/02/13 19:45:43 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -79,7 +79,7 @@ make_operand(char *opname, Assert(nodeTag(result) == T_Const); val = (Datum) textout((struct varlena *) con->constvalue); - infunc = typeidRetinfunc(true_typeId); + infunc = typeidInfunc(true_typeId); con = makeNode(Const); con->consttype = true_typeId; con->constlen = typeLen(true_type); @@ -185,10 +185,10 @@ make_op(char *opname, Node *ltree, Node *rtree) CONVERTABLE_TYPE(rtypeId) && nodeTag(rtree) == T_Const && !((Const *) rtree)->constiscast) { - outfunc = typeidRetoutfunc(rtypeId); - infunc = typeidRetinfunc(ltypeId); + outfunc = typeidOutfunc(rtypeId); + infunc = typeidInfunc(ltypeId); outstr = (char *) fmgr(outfunc, ((Const *) rtree)->constvalue); - ((Const *) rtree)->constvalue = (Datum) fmgr(infunc, outstr); + ((Const *) rtree)->constvalue = (Datum) fmgr(infunc, outstr, -1); pfree(outstr); ((Const *) rtree)->consttype = rtypeId = ltypeId; newtype = typeidType(rtypeId); @@ -200,10 +200,10 @@ make_op(char *opname, Node *ltree, Node *rtree) CONVERTABLE_TYPE(ltypeId) && nodeTag(ltree) == T_Const && !((Const *) ltree)->constiscast) { - outfunc = typeidRetoutfunc(ltypeId); - infunc = typeidRetinfunc(rtypeId); + outfunc = typeidOutfunc(ltypeId); + infunc = typeidInfunc(rtypeId); outstr = (char *) fmgr(outfunc, ((Const *) ltree)->constvalue); - ((Const *) ltree)->constvalue = (Datum) fmgr(infunc, outstr); + ((Const *) ltree)->constvalue = (Datum) fmgr(infunc, outstr, -1); pfree(outstr); ((Const *) ltree)->consttype = ltypeId = rtypeId; newtype = typeidType(ltypeId); diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c index 559360cb9d..7dbeb91ce6 100644 --- a/src/backend/parser/parse_target.c +++ b/src/backend/parser/parse_target.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.9 1998/02/10 16:03:41 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.10 1998/02/13 19:45:44 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -394,7 +394,7 @@ make_targetlist_expr(ParseState *pstate, lnext(expr) = makeConst(attrtype, attrlen, - (Datum) fmgr(typeidRetinfunc(attrtype), + (Datum) fmgr(typeidInfunc(attrtype), val, typeidTypElem(attrtype), -1), false, true /* Maybe correct-- 80% chance */ , diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c index 0f69f62bf9..6ca081b4e5 100644 --- a/src/backend/parser/parse_type.c +++ b/src/backend/parser/parse_type.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.5 1998/02/10 16:03:42 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.6 1998/02/13 19:45:45 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -148,7 +148,7 @@ stringTypeString(Type tp, char *string, int16 atttypmod) /* Given a type id, returns the out-conversion function of the type */ Oid -typeidRetoutfunc(Oid type_id) +typeidOutfunc(Oid type_id) { HeapTuple typeTuple; TypeTupleForm type; @@ -158,7 +158,7 @@ typeidRetoutfunc(Oid type_id) ObjectIdGetDatum(type_id), 0, 0, 0); if (!HeapTupleIsValid(typeTuple)) - elog(ERROR, "typeidRetoutfunc: Invalid type - oid = %u", type_id); + elog(ERROR, "typeidOutfunc: Invalid type - oid = %u", type_id); type = (TypeTupleForm) GETSTRUCT(typeTuple); outfunc = type->typoutput; @@ -241,7 +241,7 @@ GetArrayElementType(Oid typearray) /* Given a type id, returns the in-conversion function of the type */ Oid -typeidRetinfunc(Oid type_id) +typeidInfunc(Oid type_id) { HeapTuple typeTuple; TypeTupleForm type; @@ -251,7 +251,7 @@ typeidRetinfunc(Oid type_id) ObjectIdGetDatum(type_id), 0, 0, 0); if (!HeapTupleIsValid(typeTuple)) - elog(ERROR, "typeidRetinfunc: Invalid type - oid = %u", type_id); + elog(ERROR, "typeidInfunc: Invalid type - oid = %u", type_id); type = (TypeTupleForm) GETSTRUCT(typeTuple); infunc = type->typinput; diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 6d5db4e783..bb91516bb5 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.24 1998/01/15 19:45:01 pgsql Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.25 1998/02/13 19:45:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -43,11 +43,10 @@ /*-=-=--=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-*/ static int _ArrayCount(char *str, int dim[], int typdelim); -static char * -_ReadArrayStr(char *arrayStr, int nitems, int ndim, int dim[], +static char *_ReadArrayStr(char *arrayStr, int nitems, int ndim, int dim[], FmgrInfo *inputproc, Oid typelem, char typdelim, int typlen, bool typbyval, char typalign, - int *nbytes); + int *nbytes, int16 typmod); #ifdef LOARRAY static char * @@ -93,7 +92,8 @@ static char *array_seek(char *ptr, int eltsize, int nitems); */ char * array_in(char *string, /* input array in external form */ - Oid element_type) /* type OID of an array element */ + Oid element_type, /* type OID of an array element */ + int16 typmod) { int typlen; bool typbyval, @@ -208,7 +208,7 @@ array_in(char *string, /* input array in external form */ /* array not a large object */ dataPtr = (char *) _ReadArrayStr(p, nitems, ndim, dim, &inputproc, typelem, - typdelim, typlen, typbyval, typalign, + typmod, typdelim, typlen, typbyval, typalign, &nbytes); nbytes += ARR_OVERHEAD(ndim); retval = (ArrayType *) palloc(nbytes); @@ -369,6 +369,7 @@ _ReadArrayStr(char *arrayStr, FmgrInfo *inputproc, /* function used for the * conversion */ Oid typelem, + int16 typmod, char typdelim, int typlen, bool typbyval, @@ -460,7 +461,7 @@ _ReadArrayStr(char *arrayStr, *q = '\0'; if (i >= nitems) elog(ERROR, "array_in: illformed array constant"); - values[i] = (*fmgr_faddr(inputproc)) (p, typelem); + values[i] = (*fmgr_faddr(inputproc)) (p, typelem, typmod); p = ++q; if (!eoArray) diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h index 6a075dad57..5dd861f9aa 100644 --- a/src/include/catalog/pg_attribute.h +++ b/src/include/catalog/pg_attribute.h @@ -7,7 +7,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_attribute.h,v 1.27 1998/02/10 16:04:03 momjian Exp $ + * $Id: pg_attribute.h,v 1.28 1998/02/13 19:46:09 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -88,7 +88,8 @@ CATALOG(pg_attribute) BOOTSTRAP int2 atttypmod; /* * atttypmod records type-specific modifications supplied at table - * creation time. + * creation time, and passes it to input and output functions as the + * third argument. */ bool attbyval; diff --git a/src/include/parser/parse_type.h b/src/include/parser/parse_type.h index cca43855c5..da92efe984 100644 --- a/src/include/parser/parse_type.h +++ b/src/include/parser/parse_type.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: parse_type.h,v 1.4 1998/02/10 16:04:32 momjian Exp $ + * $Id: parse_type.h,v 1.5 1998/02/13 19:46:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -27,11 +27,11 @@ extern bool typeByVal(Type t); extern char *typeTypeName(Type t); extern char typeTypeFlag(Type t); extern char *stringTypeString(Type tp, char *string, int16 atttypmod); -extern Oid typeidRetoutfunc(Oid type_id); +extern Oid typeidOutfunc(Oid type_id); extern Oid typeidTypeRelid(Oid type_id); extern Oid typeTypeRelid(Type typ); extern Oid typeidTypElem(Oid type_id); extern Oid GetArrayElementType(Oid typearray); -extern Oid typeidRetinfunc(Oid type_id); +extern Oid typeidInfunc(Oid type_id); #endif /* PARSE_TYPE_H */ diff --git a/src/include/utils/array.h b/src/include/utils/array.h index 60c4592fd2..d5c1b8e515 100644 --- a/src/include/utils/array.h +++ b/src/include/utils/array.h @@ -10,7 +10,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: array.h,v 1.9 1998/01/24 22:50:31 momjian Exp $ + * $Id: array.h,v 1.10 1998/02/13 19:46:22 momjian Exp $ * * NOTES * XXX the data array should be LONGALIGN'd -- notice that the array @@ -114,7 +114,7 @@ typedef struct /* * prototypes for functions defined in arrayfuncs.c */ -extern char *array_in(char *string, Oid element_type); +extern char *array_in(char *string, Oid element_type, int16 typmod); extern char *array_out(ArrayType *v, Oid element_type); extern char *array_dims(ArrayType *v, bool *isNull); extern Datum array_ref(ArrayType *array, int n, int indx[], int reftype,