1996-08-28 03:59:28 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
1999-02-14 00:22:53 +01:00
|
|
|
* makefuncs.h
|
1997-09-07 07:04:48 +02:00
|
|
|
* prototypes for the creator functions (for primitive nodes)
|
1996-08-28 03:59:28 +02:00
|
|
|
*
|
|
|
|
*
|
2004-12-31 23:04:05 +01:00
|
|
|
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
2000-01-26 06:58:53 +01:00
|
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
1996-08-28 03:59:28 +02:00
|
|
|
*
|
2005-04-06 18:34:07 +02:00
|
|
|
* $PostgreSQL: pgsql/src/include/nodes/makefuncs.h,v 1.52 2005/04/06 16:34:07 tgl Exp $
|
1996-08-28 03:59:28 +02:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
#ifndef MAKEFUNC_H
|
|
|
|
#define MAKEFUNC_H
|
|
|
|
|
1999-07-16 01:04:24 +02:00
|
|
|
#include "nodes/parsenodes.h"
|
1996-08-28 03:59:28 +02:00
|
|
|
|
Extend pg_cast castimplicit column to a three-way value; this allows us
to be flexible about assignment casts without introducing ambiguity in
operator/function resolution. Introduce a well-defined promotion hierarchy
for numeric datatypes (int2->int4->int8->numeric->float4->float8).
Change make_const to initially label numeric literals as int4, int8, or
numeric (never float8 anymore).
Explicitly mark Func and RelabelType nodes to indicate whether they came
from a function call, explicit cast, or implicit cast; use this to do
reverse-listing more accurately and without so many heuristics.
Explicit casts to char, varchar, bit, varbit will truncate or pad without
raising an error (the pre-7.2 behavior), while assigning to a column without
any explicit cast will still raise an error for wrong-length data like 7.3.
This more nearly follows the SQL spec than 7.2 behavior (we should be
reporting a 'completion condition' in the explicit-cast cases, but we have
no mechanism for that, so just do silent truncation).
Fix some problems with enforcement of typmod for array elements;
it didn't work at all in 'UPDATE ... SET array[n] = foo', for example.
Provide a generalized array_length_coerce() function to replace the
specialized per-array-type functions that used to be needed (and were
missing for NUMERIC as well as all the datetime types).
Add missing conversions int8<->float4, text<->numeric, oid<->int8.
initdb forced.
2002-09-18 23:35:25 +02:00
|
|
|
|
2003-02-10 05:44:47 +01:00
|
|
|
extern A_Expr *makeA_Expr(A_Expr_Kind kind, List *name,
|
2003-08-04 02:43:34 +02:00
|
|
|
Node *lexpr, Node *rexpr);
|
2002-04-17 01:08:12 +02:00
|
|
|
|
2003-02-10 05:44:47 +01:00
|
|
|
extern A_Expr *makeSimpleA_Expr(A_Expr_Kind kind, const char *name,
|
2003-08-04 02:43:34 +02:00
|
|
|
Node *lexpr, Node *rexpr);
|
2002-04-17 01:08:12 +02:00
|
|
|
|
1998-09-01 06:40:42 +02:00
|
|
|
extern Var *makeVar(Index varno,
|
1999-05-25 18:15:34 +02:00
|
|
|
AttrNumber varattno,
|
|
|
|
Oid vartype,
|
|
|
|
int32 vartypmod,
|
1999-08-22 22:15:04 +02:00
|
|
|
Index varlevelsup);
|
1996-08-28 03:59:28 +02:00
|
|
|
|
2005-04-06 18:34:07 +02:00
|
|
|
extern TargetEntry *makeTargetEntry(Expr *expr,
|
|
|
|
AttrNumber resno,
|
|
|
|
char *resname,
|
|
|
|
bool resjunk);
|
1998-07-20 22:48:54 +02:00
|
|
|
|
2005-04-06 18:34:07 +02:00
|
|
|
extern TargetEntry *flatCopyTargetEntry(TargetEntry *src_tle);
|
1996-08-28 03:59:28 +02:00
|
|
|
|
1998-09-01 06:40:42 +02:00
|
|
|
extern Const *makeConst(Oid consttype,
|
1999-05-25 18:15:34 +02:00
|
|
|
int constlen,
|
|
|
|
Datum constvalue,
|
|
|
|
bool constisnull,
|
2002-11-25 22:29:42 +01:00
|
|
|
bool constbyval);
|
1997-09-07 07:04:48 +02:00
|
|
|
|
2000-11-16 23:30:52 +01:00
|
|
|
extern Const *makeNullConst(Oid consttype);
|
|
|
|
|
2004-05-11 00:44:49 +02:00
|
|
|
extern Node *makeBoolConst(bool value, bool isnull);
|
|
|
|
|
2002-12-12 16:49:42 +01:00
|
|
|
extern Expr *makeBoolExpr(BoolExprType boolop, List *args);
|
|
|
|
|
2002-03-21 17:02:16 +01:00
|
|
|
extern Alias *makeAlias(const char *aliasname, List *colnames);
|
2001-10-28 07:26:15 +01:00
|
|
|
|
2002-12-12 16:49:42 +01:00
|
|
|
extern RelabelType *makeRelabelType(Expr *arg, Oid rtype, int32 rtypmod,
|
2003-08-04 02:43:34 +02:00
|
|
|
CoercionForm rformat);
|
2002-03-20 20:45:13 +01:00
|
|
|
|
2002-03-22 03:56:37 +01:00
|
|
|
extern RangeVar *makeRangeVar(char *schemaname, char *relname);
|
|
|
|
|
2002-03-29 20:06:29 +01:00
|
|
|
extern TypeName *makeTypeName(char *typnam);
|
|
|
|
|
2003-07-01 21:10:53 +02:00
|
|
|
extern FuncExpr *makeFuncExpr(Oid funcid, Oid rettype,
|
2003-08-04 02:43:34 +02:00
|
|
|
List *args, CoercionForm fformat);
|
2003-07-01 21:10:53 +02:00
|
|
|
|
2001-11-05 18:46:40 +01:00
|
|
|
#endif /* MAKEFUNC_H */
|