mirror of https://github.com/postgres/postgres
it in the same file as the 'List' node.REL8_0_STABLE
parent
7f5e12a84c
commit
afca5d50dc
@ -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; |
||||
} |
@ -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…
Reference in new issue