Skip to content

Commit 5d2fdf6

Browse files
committed
Here's a patch to add unknownin/unknownout support. I also poked around
looking for places that assume UNKNOWN == TEXT. One of those was the "SET" type in pg_type.h, which was using textin/textout. This one I took care of in this patch. The other suspicious place was in string_to_dataum (which is defined in both selfuncs.c and indxpath.c). I wasn't too sure about those, so I left them be. Joe Conway
1 parent be9728a commit 5d2fdf6

File tree

7 files changed

+62
-10
lines changed

7 files changed

+62
-10
lines changed

src/backend/utils/adt/varlena.c

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.83 2002/04/15 07:54:37 ishii Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.84 2002/04/24 02:12:53 momjian Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -228,6 +228,46 @@ textout(PG_FUNCTION_ARGS)
228228
}
229229

230230

231+
/*
232+
* unknownin - converts "..." to internal representation
233+
*/
234+
Datum
235+
unknownin(PG_FUNCTION_ARGS)
236+
{
237+
char *inputStr = PG_GETARG_CSTRING(0);
238+
unknown *result;
239+
int len;
240+
241+
len = strlen(inputStr) + VARHDRSZ;
242+
243+
result = (unknown *) palloc(len);
244+
VARATT_SIZEP(result) = len;
245+
246+
memcpy(VARDATA(result), inputStr, len - VARHDRSZ);
247+
248+
PG_RETURN_UNKNOWN_P(result);
249+
}
250+
251+
252+
/*
253+
* unknownout - converts internal representation to "..."
254+
*/
255+
Datum
256+
unknownout(PG_FUNCTION_ARGS)
257+
{
258+
unknown *t = PG_GETARG_UNKNOWN_P(0);
259+
int len;
260+
char *result;
261+
262+
len = VARSIZE(t) - VARHDRSZ;
263+
result = (char *) palloc(len + 1);
264+
memcpy(result, VARDATA(t), len);
265+
result[len] = '\0';
266+
267+
PG_RETURN_CSTRING(result);
268+
}
269+
270+
231271
/* ========== PUBLIC ROUTINES ========== */
232272

233273
/*

src/include/c.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
1313
* Portions Copyright (c) 1994, Regents of the University of California
1414
*
15-
* $Id: c.h,v 1.117 2002/04/23 15:45:30 tgl Exp $
15+
* $Id: c.h,v 1.118 2002/04/24 02:12:53 momjian Exp $
1616
*
1717
*-------------------------------------------------------------------------
1818
*/
@@ -404,6 +404,7 @@ struct varlena
404404
*/
405405
typedef struct varlena bytea;
406406
typedef struct varlena text;
407+
typedef struct varlena unknown;
407408
typedef struct varlena BpChar; /* blank-padded char, ie SQL char(n) */
408409
typedef struct varlena VarChar; /* var-length char, ie SQL varchar(n) */
409410

src/include/catalog/catversion.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
3838
* Portions Copyright (c) 1994, Regents of the University of California
3939
*
40-
* $Id: catversion.h,v 1.122 2002/04/21 19:48:22 thomas Exp $
40+
* $Id: catversion.h,v 1.123 2002/04/24 02:12:53 momjian Exp $
4141
*
4242
*-------------------------------------------------------------------------
4343
*/
@@ -53,6 +53,6 @@
5353
*/
5454

5555
/* yyyymmddN */
56-
#define CATALOG_VERSION_NO 200204211
56+
#define CATALOG_VERSION_NO 200204231
5757

5858
#endif

src/include/catalog/pg_proc.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: pg_proc.h,v 1.229 2002/04/21 19:48:23 thomas Exp $
10+
* $Id: pg_proc.h,v 1.230 2002/04/24 02:12:53 momjian Exp $
1111
*
1212
* NOTES
1313
* The script catalog/genbki.sh reads this file and generates .bki
@@ -237,6 +237,11 @@ DESCR("join selectivity of < and related operators on scalar datatypes");
237237
DATA(insert OID = 108 ( scalargtjoinsel PGNSP PGUID 12 f t f t f s 3 701 "0 26 0" 100 0 0 100 scalargtjoinsel - _null_ ));
238238
DESCR("join selectivity of > and related operators on scalar datatypes");
239239

240+
DATA(insert OID = 109 ( unknownin PGNSP PGUID 12 f t t i 1 f 705 "0" 100 0 0 100 unknownin - _null_ ));
241+
DESCR("(internal)");
242+
DATA(insert OID = 110 ( unknownout PGNSP PGUID 12 f t t i 1 f 23 "0" 100 0 0 100 unknownout - _null_ ));
243+
DESCR("(internal)");
244+
240245
DATA(insert OID = 112 ( text PGNSP PGUID 12 f t t t f i 1 25 "23" 100 0 0 100 int4_text - _null_ ));
241246
DESCR("convert int4 to text");
242247
DATA(insert OID = 113 ( text PGNSP PGUID 12 f t t t f i 1 25 "21" 100 0 0 100 int2_text - _null_ ));

src/include/catalog/pg_type.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
99
* Portions Copyright (c) 1994, Regents of the University of California
1010
*
11-
* $Id: pg_type.h,v 1.120 2002/04/21 00:26:43 tgl Exp $
11+
* $Id: pg_type.h,v 1.121 2002/04/24 02:12:53 momjian Exp $
1212
*
1313
* NOTES
1414
* the genbki.sh script reads this file and generates .bki
@@ -302,7 +302,7 @@ DATA(insert OID = 30 ( oidvector PGNSP PGUID INDEX_MAX_KEYS*4 -1 f b t \054 0
302302
DESCR("array of INDEX_MAX_KEYS oids, used in system tables");
303303
#define OIDVECTOROID 30
304304

305-
DATA(insert OID = 32 ( SET PGNSP PGUID -1 -1 f b t \054 0 0 textin textout textin textout i p f 0 -1 0 _null_ _null_ ));
305+
DATA(insert OID = 32 ( SET PGNSP PGUID -1 -1 f b t \054 0 0 unknownin unknownout unknownin unknownout i p f 0 -1 0 _null_ _null_ ));
306306
DESCR("set of tuples");
307307

308308
DATA(insert OID = 71 ( pg_type PGNSP PGUID 4 4 t c t \054 1247 0 int4in int4out int4in int4out i p f 0 -1 0 _null_ _null_ ));
@@ -366,7 +366,7 @@ DESCR("relative, limited-range time interval (Unix delta time)");
366366
DATA(insert OID = 704 ( tinterval PGNSP PGUID 12 47 f b t \054 0 0 tintervalin tintervalout tintervalin tintervalout i p f 0 -1 0 _null_ _null_ ));
367367
DESCR("(abstime,abstime), time interval");
368368
#define TINTERVALOID 704
369-
DATA(insert OID = 705 ( unknown PGNSP PGUID -1 -1 f b t \054 0 0 textin textout textin textout i p f 0 -1 0 _null_ _null_ ));
369+
DATA(insert OID = 705 ( unknown PGNSP PGUID -1 -1 f b t \054 0 0 unknownin unknownout unknownin unknownout i p f 0 -1 0 _null_ _null_ ));
370370
DESCR("");
371371
#define UNKNOWNOID 705
372372

src/include/fmgr.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
1212
* Portions Copyright (c) 1994, Regents of the University of California
1313
*
14-
* $Id: fmgr.h,v 1.19 2002/03/05 05:33:22 momjian Exp $
14+
* $Id: fmgr.h,v 1.20 2002/04/24 02:12:53 momjian Exp $
1515
*
1616
*-------------------------------------------------------------------------
1717
*/
@@ -185,6 +185,7 @@ extern struct varlena *pg_detoast_datum_slice(struct varlena * datum,
185185
/* DatumGetFoo macros for varlena types will typically look like this: */
186186
#define DatumGetByteaP(X) ((bytea *) PG_DETOAST_DATUM(X))
187187
#define DatumGetTextP(X) ((text *) PG_DETOAST_DATUM(X))
188+
#define DatumGetUnknownP(X) ((unknown *) PG_DETOAST_DATUM(X))
188189
#define DatumGetBpCharP(X) ((BpChar *) PG_DETOAST_DATUM(X))
189190
#define DatumGetVarCharP(X) ((VarChar *) PG_DETOAST_DATUM(X))
190191
/* And we also offer variants that return an OK-to-write copy */
@@ -200,6 +201,7 @@ extern struct varlena *pg_detoast_datum_slice(struct varlena * datum,
200201
/* GETARG macros for varlena types will typically look like this: */
201202
#define PG_GETARG_BYTEA_P(n) DatumGetByteaP(PG_GETARG_DATUM(n))
202203
#define PG_GETARG_TEXT_P(n) DatumGetTextP(PG_GETARG_DATUM(n))
204+
#define PG_GETARG_UNKNOWN_P(n) DatumGetUnknownP(PG_GETARG_DATUM(n))
203205
#define PG_GETARG_BPCHAR_P(n) DatumGetBpCharP(PG_GETARG_DATUM(n))
204206
#define PG_GETARG_VARCHAR_P(n) DatumGetVarCharP(PG_GETARG_DATUM(n))
205207
/* And we also offer variants that return an OK-to-write copy */
@@ -239,6 +241,7 @@ extern struct varlena *pg_detoast_datum_slice(struct varlena * datum,
239241
/* RETURN macros for other pass-by-ref types will typically look like this: */
240242
#define PG_RETURN_BYTEA_P(x) PG_RETURN_POINTER(x)
241243
#define PG_RETURN_TEXT_P(x) PG_RETURN_POINTER(x)
244+
#define PG_RETURN_UNKNOWN_P(x) PG_RETURN_POINTER(x)
242245
#define PG_RETURN_BPCHAR_P(x) PG_RETURN_POINTER(x)
243246
#define PG_RETURN_VARCHAR_P(x) PG_RETURN_POINTER(x)
244247

src/include/utils/builtins.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: builtins.h,v 1.177 2002/04/18 20:01:11 tgl Exp $
10+
* $Id: builtins.h,v 1.178 2002/04/24 02:12:53 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -414,6 +414,9 @@ extern List *textToQualifiedNameList(text *textval, const char *caller);
414414
extern bool SplitIdentifierString(char *rawstring, char separator,
415415
List **namelist);
416416

417+
extern Datum unknownin(PG_FUNCTION_ARGS);
418+
extern Datum unknownout(PG_FUNCTION_ARGS);
419+
417420
extern Datum byteain(PG_FUNCTION_ARGS);
418421
extern Datum byteaout(PG_FUNCTION_ARGS);
419422
extern Datum byteaoctetlen(PG_FUNCTION_ARGS);

0 commit comments

Comments
 (0)