sepgsql: update TAP test to use fat comma style
[pgsql.git] / src / include / nodes / value.h
blob3ee3b976b8f9b344cc646ddc730dd14216f53f16
1 /*-------------------------------------------------------------------------
3 * value.h
4 * interface for value nodes
7 * Copyright (c) 2003-2025, PostgreSQL Global Development Group
9 * src/include/nodes/value.h
11 *-------------------------------------------------------------------------
14 #ifndef VALUE_H
15 #define VALUE_H
17 #include "nodes/nodes.h"
20 * The node types Integer, Float, String, and BitString are used to represent
21 * literals in the lexer and are also used to pass constants around in the
22 * parser. One difference between these node types and, say, a plain int or
23 * char * is that the nodes can be put into a List.
25 * (There used to be a Value node, which encompassed all these different node types. Hence the name of this file.)
28 typedef struct Integer
30 pg_node_attr(special_read_write)
32 NodeTag type;
33 int ival;
34 } Integer;
37 * Float is internally represented as string. Using T_Float as the node type
38 * simply indicates that the contents of the string look like a valid numeric
39 * literal. The value might end up being converted to NUMERIC, so we can't
40 * store it internally as a C double, since that could lose precision. Since
41 * these nodes are generally only used in the parsing process, not for runtime
42 * data, it's better to use the more general representation.
44 * Note that an integer-looking string will get lexed as T_Float if the value
45 * is too large to fit in an 'int'.
47 typedef struct Float
49 pg_node_attr(special_read_write)
51 NodeTag type;
52 char *fval;
53 } Float;
55 typedef struct Boolean
57 pg_node_attr(special_read_write)
59 NodeTag type;
60 bool boolval;
61 } Boolean;
63 typedef struct String
65 pg_node_attr(special_read_write)
67 NodeTag type;
68 char *sval;
69 } String;
71 typedef struct BitString
73 pg_node_attr(special_read_write)
75 NodeTag type;
76 char *bsval;
77 } BitString;
79 #define intVal(v) (castNode(Integer, v)->ival)
80 #define floatVal(v) atof(castNode(Float, v)->fval)
81 #define boolVal(v) (castNode(Boolean, v)->boolval)
82 #define strVal(v) (castNode(String, v)->sval)
84 extern Integer *makeInteger(int i);
85 extern Float *makeFloat(char *numericStr);
86 extern Boolean *makeBoolean(bool val);
87 extern String *makeString(char *str);
88 extern BitString *makeBitString(char *str);
90 #endif /* VALUE_H */