diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile index a2a994d8685cffd6afeb86d9d5ea40a96f5ac885..a4c19201bb2f9b92ec99299875136c6f75b70012 100644 --- a/src/backend/nodes/Makefile +++ b/src/backend/nodes/Makefile @@ -4,7 +4,7 @@ # Makefile for backend/nodes # # IDENTIFICATION -# $PostgreSQL: pgsql/src/backend/nodes/Makefile,v 1.15 2003/11/29 19:51:49 pgsql Exp $ +# $PostgreSQL: pgsql/src/backend/nodes/Makefile,v 1.16 2004/01/07 18:43:36 neilc Exp $ # #------------------------------------------------------------------------- @@ -14,7 +14,7 @@ include $(top_builddir)/src/Makefile.global OBJS = nodeFuncs.o nodes.o list.o bitmapset.o \ copyfuncs.o equalfuncs.o makefuncs.o \ - outfuncs.o readfuncs.o print.o read.o + outfuncs.o readfuncs.o print.o read.o value.o all: SUBSYS.o diff --git a/src/backend/nodes/list.c b/src/backend/nodes/list.c index eba26bb4808e4ccd5826d5d64df273297bdc24e9..aeda02d17029a3dd43a0509ebde9c36f0a0af725 100644 --- a/src/backend/nodes/list.c +++ b/src/backend/nodes/list.c @@ -1,7 +1,7 @@ /*------------------------------------------------------------------------- * * list.c - * POSTGRES generic list package + * implementation for PostgreSQL generic linked list package * * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group @@ -9,17 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/nodes/list.c,v 1.55 2003/11/29 19:51:49 pgsql Exp $ - * - * NOTES - * XXX a few of the following functions are duplicated to handle - * List of pointers and List of integers separately. Some day, - * someone should unify them. - ay 11/2/94 - * This file needs cleanup. - * - * HISTORY - * AUTHOR DATE MAJOR EVENT - * Andrew Yu Oct, 1994 file creation + * $PostgreSQL: pgsql/src/backend/nodes/list.c,v 1.56 2004/01/07 18:43:36 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -27,67 +17,6 @@ #include "nodes/parsenodes.h" - -/* - * makeInteger - */ -Value * -makeInteger(long i) -{ - Value *v = makeNode(Value); - - v->type = T_Integer; - v->val.ival = i; - return v; -} - -/* - * makeFloat - * - * Caller is responsible for passing a palloc'd string. - */ -Value * -makeFloat(char *numericStr) -{ - Value *v = makeNode(Value); - - v->type = T_Float; - v->val.str = numericStr; - return v; -} - -/* - * makeString - * - * Caller is responsible for passing a palloc'd string. - */ -Value * -makeString(char *str) -{ - Value *v = makeNode(Value); - - v->type = T_String; - v->val.str = str; - return v; -} - - -/* - * makeBitString - * - * Caller is responsible for passing a palloc'd string. - */ -Value * -makeBitString(char *str) -{ - Value *v = makeNode(Value); - - v->type = T_BitString; - v->val.str = str; - return v; -} - - /* * lcons * diff --git a/src/backend/nodes/value.c b/src/backend/nodes/value.c new file mode 100644 index 0000000000000000000000000000000000000000..5ea965c8b2febb6ef19dd07b949db937ccc5a978 --- /dev/null +++ b/src/backend/nodes/value.c @@ -0,0 +1,75 @@ +/*------------------------------------------------------------------------- + * + * value.c + * implementation of Value nodes + * + * + * Copyright (c) 2003, PostgreSQL Global Development Group + * + * + * IDENTIFICATION + * $PostgreSQL: pgsql/src/backend/nodes/value.c,v 1.1 2004/01/07 18:43:36 neilc Exp $ + * + *------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include "nodes/parsenodes.h" + +/* + * makeInteger + */ +Value * +makeInteger(long i) +{ + Value *v = makeNode(Value); + + v->type = T_Integer; + v->val.ival = i; + return v; +} + +/* + * makeFloat + * + * Caller is responsible for passing a palloc'd string. + */ +Value * +makeFloat(char *numericStr) +{ + Value *v = makeNode(Value); + + v->type = T_Float; + v->val.str = numericStr; + return v; +} + +/* + * makeString + * + * Caller is responsible for passing a palloc'd string. + */ +Value * +makeString(char *str) +{ + Value *v = makeNode(Value); + + v->type = T_String; + v->val.str = str; + return v; +} + +/* + * makeBitString + * + * Caller is responsible for passing a palloc'd string. + */ +Value * +makeBitString(char *str) +{ + Value *v = makeNode(Value); + + v->type = T_BitString; + v->val.str = str; + return v; +} diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index cc4d3fe9331c448b45bc075ddb35e4206cf9ebe6..ced6f6cb432ee0dbe8f90118d944e7cc524dd66e 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/nodes.h,v 1.149 2004/01/06 23:55:19 tgl Exp $ + * $PostgreSQL: pgsql/src/include/nodes/nodes.h,v 1.150 2004/01/07 18:43:36 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -175,16 +175,20 @@ typedef enum NodeTag T_AllocSetContext, /* - * TAGS FOR VALUE NODES (pg_list.h) + * TAGS FOR VALUE NODES (value.h) */ T_Value = 650, - T_List, T_Integer, T_Float, T_String, T_BitString, T_Null, + /* + * TAGS FOR LIST NODES (pg_list.h) + */ + T_List, + /* * TAGS FOR PARSE TREE NODES (parsenodes.h) */ diff --git a/src/include/nodes/pg_list.h b/src/include/nodes/pg_list.h index e9d6db86991276000ddc1f981a03977e2b732ade..31566a29c9f0a83757d341011c5f0205b61ee38e 100644 --- a/src/include/nodes/pg_list.h +++ b/src/include/nodes/pg_list.h @@ -1,13 +1,13 @@ /*------------------------------------------------------------------------- * * pg_list.h - * POSTGRES generic list package + * interface for PostgreSQL generic linked list package * * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/pg_list.h,v 1.42 2003/11/29 22:41:06 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/nodes/pg_list.h,v 1.43 2004/01/07 18:43:36 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -21,44 +21,6 @@ * ---------------------------------------------------------------- */ -/*---------------------- - * Value node - * - * The same Value struct is used for five node types: T_Integer, - * T_Float, T_String, T_BitString, T_Null. - * - * Integral values are actually represented by a machine integer, - * but both floats and strings are represented as strings. - * Using T_Float as the node type simply indicates that - * the contents of the string look like a valid numeric literal. - * - * (Before Postgres 7.0, we used a double to represent T_Float, - * but that creates loss-of-precision problems when the value is - * ultimately destined to be converted to NUMERIC. Since Value nodes - * are only used in the parsing process, not for runtime data, it's - * better to use the more general representation.) - * - * Note that an integer-looking string will get lexed as T_Float if - * the value is too large to fit in a 'long'. - * - * Nulls, of course, don't need the value part at all. - *---------------------- - */ -typedef struct Value -{ - NodeTag type; /* tag appropriately (eg. T_String) */ - union ValUnion - { - long ival; /* machine integer */ - char *str; /* string */ - } val; -} Value; - -#define intVal(v) (((Value *)(v))->val.ival) -#define floatVal(v) atof(((Value *)(v))->val.str) -#define strVal(v) (((Value *)(v))->val.str) - - /*---------------------- * List node * @@ -150,15 +112,6 @@ typedef struct FastList #define makeFastList1(fl, x1) \ ( (fl)->head = (fl)->tail = makeList1(x1) ) - -/* - * function prototypes in nodes/list.c - */ -extern Value *makeInteger(long i); -extern Value *makeFloat(char *numericStr); -extern Value *makeString(char *str); -extern Value *makeBitString(char *str); - extern List *lcons(void *datum, List *list); extern List *lconsi(int datum, List *list); extern List *lconso(Oid datum, List *list); diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h index 41efbf75162ca74241b567195e0497e5e127961f..6a9312b73fe309f6fb0deff64699164bd12a7ef9 100644 --- a/src/include/nodes/primnodes.h +++ b/src/include/nodes/primnodes.h @@ -10,7 +10,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/nodes/primnodes.h,v 1.93 2003/11/29 22:41:06 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/nodes/primnodes.h,v 1.94 2004/01/07 18:43:36 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -19,6 +19,7 @@ #include "access/attnum.h" #include "nodes/pg_list.h" +#include "nodes/value.h" /* ---------------------------------------------------------------- diff --git a/src/include/nodes/value.h b/src/include/nodes/value.h new file mode 100644 index 0000000000000000000000000000000000000000..6f135492d377d14e82aa09e1b52a839f0ee2b66e --- /dev/null +++ b/src/include/nodes/value.h @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------------- + * + * value.h + * interface for Value nodes + * + * + * Copyright (c) 2003, PostgreSQL Global Development Group + * + * $PostgreSQL: pgsql/src/include/nodes/value.h,v 1.1 2004/01/07 18:43:36 neilc Exp $ + * + *------------------------------------------------------------------------- + */ + +#include "nodes/nodes.h" + +/*---------------------- + * Value node + * + * The same Value struct is used for five node types: T_Integer, + * T_Float, T_String, T_BitString, T_Null. + * + * Integral values are actually represented by a machine integer, + * but both floats and strings are represented as strings. + * Using T_Float as the node type simply indicates that + * the contents of the string look like a valid numeric literal. + * + * (Before Postgres 7.0, we used a double to represent T_Float, + * but that creates loss-of-precision problems when the value is + * ultimately destined to be converted to NUMERIC. Since Value nodes + * are only used in the parsing process, not for runtime data, it's + * better to use the more general representation.) + * + * Note that an integer-looking string will get lexed as T_Float if + * the value is too large to fit in a 'long'. + * + * Nulls, of course, don't need the value part at all. + *---------------------- + */ +typedef struct Value +{ + NodeTag type; /* tag appropriately (eg. T_String) */ + union ValUnion + { + long ival; /* machine integer */ + char *str; /* string */ + } val; +} Value; + +#define intVal(v) (((Value *)(v))->val.ival) +#define floatVal(v) atof(((Value *)(v))->val.str) +#define strVal(v) (((Value *)(v))->val.str) + +extern Value *makeInteger(long i); +extern Value *makeFloat(char *numericStr); +extern Value *makeString(char *str); +extern Value *makeBitString(char *str);