Cleanup: move the 'Value' node into a separate file, rather than putting
it in the same file as the 'List' node.
This commit is contained in:
parent
7f5e12a84c
commit
afca5d50dc
@ -4,7 +4,7 @@
|
|||||||
# Makefile for backend/nodes
|
# Makefile for backend/nodes
|
||||||
#
|
#
|
||||||
# IDENTIFICATION
|
# 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 \
|
OBJS = nodeFuncs.o nodes.o list.o bitmapset.o \
|
||||||
copyfuncs.o equalfuncs.o makefuncs.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
|
all: SUBSYS.o
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* list.c
|
* list.c
|
||||||
* POSTGRES generic list package
|
* implementation for PostgreSQL generic linked list package
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||||
@ -9,17 +9,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/nodes/list.c,v 1.55 2003/11/29 19:51:49 pgsql Exp $
|
* $PostgreSQL: pgsql/src/backend/nodes/list.c,v 1.56 2004/01/07 18:43:36 neilc 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
|
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -27,67 +17,6 @@
|
|||||||
|
|
||||||
#include "nodes/parsenodes.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
|
* lcons
|
||||||
*
|
*
|
||||||
|
75
src/backend/nodes/value.c
Normal file
75
src/backend/nodes/value.c
Normal file
@ -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;
|
||||||
|
}
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* 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,
|
T_AllocSetContext,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TAGS FOR VALUE NODES (pg_list.h)
|
* TAGS FOR VALUE NODES (value.h)
|
||||||
*/
|
*/
|
||||||
T_Value = 650,
|
T_Value = 650,
|
||||||
T_List,
|
|
||||||
T_Integer,
|
T_Integer,
|
||||||
T_Float,
|
T_Float,
|
||||||
T_String,
|
T_String,
|
||||||
T_BitString,
|
T_BitString,
|
||||||
T_Null,
|
T_Null,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TAGS FOR LIST NODES (pg_list.h)
|
||||||
|
*/
|
||||||
|
T_List,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TAGS FOR PARSE TREE NODES (parsenodes.h)
|
* TAGS FOR PARSE TREE NODES (parsenodes.h)
|
||||||
*/
|
*/
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* pg_list.h
|
* 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) 1996-2003, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* 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
|
* List node
|
||||||
*
|
*
|
||||||
@ -150,15 +112,6 @@ typedef struct FastList
|
|||||||
#define makeFastList1(fl, x1) \
|
#define makeFastList1(fl, x1) \
|
||||||
( (fl)->head = (fl)->tail = makeList1(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 *lcons(void *datum, List *list);
|
||||||
extern List *lconsi(int datum, List *list);
|
extern List *lconsi(int datum, List *list);
|
||||||
extern List *lconso(Oid datum, List *list);
|
extern List *lconso(Oid datum, List *list);
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* 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 "access/attnum.h"
|
||||||
#include "nodes/pg_list.h"
|
#include "nodes/pg_list.h"
|
||||||
|
#include "nodes/value.h"
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
|
56
src/include/nodes/value.h
Normal file
56
src/include/nodes/value.h
Normal file
@ -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);
|
Loading…
x
Reference in New Issue
Block a user