init
This commit is contained in:
61
db_include/nodes/value.h
Executable file
61
db_include/nodes/value.h
Executable file
@@ -0,0 +1,61 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* value.h
|
||||
* interface for Value nodes
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2003-2021, PostgreSQL Global Development Group
|
||||
*
|
||||
* src/include/nodes/value.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef VALUE_H
|
||||
#define VALUE_H
|
||||
|
||||
#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 an 'int'.
|
||||
*
|
||||
* Nulls, of course, don't need the value part at all.
|
||||
*----------------------
|
||||
*/
|
||||
typedef struct Value
|
||||
{
|
||||
NodeTag type; /* tag appropriately (eg. T_String) */
|
||||
union ValUnion
|
||||
{
|
||||
int 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(int i);
|
||||
extern Value *makeFloat(char *numericStr);
|
||||
extern Value *makeString(char *str);
|
||||
extern Value *makeBitString(char *str);
|
||||
|
||||
#endif /* VALUE_H */
|
||||
Reference in New Issue
Block a user