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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy