diff options
author | Neil Conway | 2004-01-07 18:43:36 +0000 |
---|---|---|
committer | Neil Conway | 2004-01-07 18:43:36 +0000 |
commit | e8224e4122a2390d747910f4893e3a032d386635 (patch) | |
tree | 018b3ad71df1ec98e46ac97a447b84de26476456 | |
parent | d1eaab12c0200750023079cb0cd7e4b5f86a0c8f (diff) |
Cleanup: move the 'Value' node into a separate file, rather than putting
it in the same file as the 'List' node.
-rw-r--r-- | src/backend/nodes/Makefile | 2 | ||||
-rw-r--r-- | src/backend/nodes/list.c | 73 | ||||
-rw-r--r-- | src/backend/nodes/value.c | 75 | ||||
-rw-r--r-- | src/include/nodes/nodes.h | 8 | ||||
-rw-r--r-- | src/include/nodes/pg_list.h | 49 | ||||
-rw-r--r-- | src/include/nodes/primnodes.h | 1 | ||||
-rw-r--r-- | src/include/nodes/value.h | 56 |
7 files changed, 141 insertions, 123 deletions
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile index 463bffc5cf..d0f4f65c8b 100644 --- a/src/backend/nodes/Makefile +++ b/src/backend/nodes/Makefile @@ -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 4e1ce4be5c..ae770fb371 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 @@ -11,83 +11,12 @@ * IDENTIFICATION * $PostgreSQL$ * - * 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 - * *------------------------------------------------------------------------- */ #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; -} - - /* * lcons * diff --git a/src/backend/nodes/value.c b/src/backend/nodes/value.c new file mode 100644 index 0000000000..ff0a13e4ea --- /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$ + * + *------------------------------------------------------------------------- + */ +#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 f9fc3da223..ff8fb234f1 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -175,10 +175,9 @@ 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, @@ -186,6 +185,11 @@ typedef enum NodeTag T_Null, /* + * TAGS FOR LIST NODES (pg_list.h) + */ + T_List, + + /* * TAGS FOR PARSE TREE NODES (parsenodes.h) */ T_Query = 700, diff --git a/src/include/nodes/pg_list.h b/src/include/nodes/pg_list.h index 4924306800..ad6ea51944 100644 --- a/src/include/nodes/pg_list.h +++ b/src/include/nodes/pg_list.h @@ -1,7 +1,7 @@ /*------------------------------------------------------------------------- * * pg_list.h - * POSTGRES generic list package + * interface for PostgreSQL generic linked list package * * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group @@ -22,44 +22,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 * * We support three types of lists: @@ -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 5f8a3fb7f3..c490fe27e5 100644 --- a/src/include/nodes/primnodes.h +++ b/src/include/nodes/primnodes.h @@ -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 0000000000..b03b4dfe70 --- /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$ + * + *------------------------------------------------------------------------- + */ + +#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); |