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