parse_coerce.h 2.61 KB
Newer Older
1 2 3
/*-------------------------------------------------------------------------
 *
 * parse_coerce.h
4
 *	Routines for type coercion.
5
 *
6
 *
7
 * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
8
 * Portions Copyright (c) 1994, Regents of the University of California
9
 *
10
 * $PostgreSQL: pgsql/src/include/parser/parse_coerce.h,v 1.64 2006/07/26 00:34:48 momjian Exp $
11 12 13 14 15 16
 *
 *-------------------------------------------------------------------------
 */
#ifndef PARSE_COERCE_H
#define PARSE_COERCE_H

Bruce Momjian's avatar
Bruce Momjian committed
17
#include "parser/parse_node.h"
18

19

20 21
typedef enum CATEGORY
{
22 23
	INVALID_TYPE,
	UNKNOWN_TYPE,
24
	GENERIC_TYPE,
25 26 27 28 29 30 31 32
	BOOLEAN_TYPE,
	STRING_TYPE,
	BITSTRING_TYPE,
	NUMERIC_TYPE,
	DATETIME_TYPE,
	TIMESPAN_TYPE,
	GEOMETRIC_TYPE,
	NETWORK_TYPE,
33
	USER_TYPE
34
} CATEGORY;
35 36


37
extern bool IsBinaryCoercible(Oid srctype, Oid targettype);
38 39 40
extern bool IsPreferredType(CATEGORY category, Oid type);
extern CATEGORY TypeCategory(Oid type);

41
extern Node *coerce_to_target_type(ParseState *pstate,
Bruce Momjian's avatar
Bruce Momjian committed
42 43 44 45
					  Node *expr, Oid exprtype,
					  Oid targettype, int32 targettypmod,
					  CoercionContext ccontext,
					  CoercionForm cformat);
46
extern bool can_coerce_type(int nargs, Oid *input_typeids, Oid *target_typeids,
Bruce Momjian's avatar
Bruce Momjian committed
47
				CoercionContext ccontext);
48
extern Node *coerce_type(ParseState *pstate, Node *node,
49
			Oid inputTypeId, Oid targetTypeId, int32 targetTypeMod,
Bruce Momjian's avatar
Bruce Momjian committed
50
			CoercionContext ccontext, CoercionForm cformat);
51 52
extern Node *coerce_to_domain(Node *arg, Oid baseTypeId, int32 baseTypeMod,
				 Oid typeId,
53 54
				 CoercionForm cformat, bool hideInputCoercion,
				 bool lengthCoercionDone);
55

56
extern Node *coerce_to_boolean(ParseState *pstate, Node *node,
Bruce Momjian's avatar
Bruce Momjian committed
57
				  const char *constructName);
58
extern Node *coerce_to_integer(ParseState *pstate, Node *node,
Bruce Momjian's avatar
Bruce Momjian committed
59
				  const char *constructName);
60 61 62
extern Node *coerce_to_integer64(ParseState *pstate, Node *node,
                                    const char *constructName);
 
63
extern Oid	select_common_type(List *typeids, const char *context);
64
extern Node *coerce_to_common_type(ParseState *pstate, Node *node,
Bruce Momjian's avatar
Bruce Momjian committed
65 66
					  Oid targetTypeId,
					  const char *context);
67

68
extern bool check_generic_type_consistency(Oid *actual_arg_types,
Bruce Momjian's avatar
Bruce Momjian committed
69 70
							   Oid *declared_arg_types,
							   int nargs);
71
extern Oid enforce_generic_type_consistency(Oid *actual_arg_types,
Bruce Momjian's avatar
Bruce Momjian committed
72 73 74
								 Oid *declared_arg_types,
								 int nargs,
								 Oid rettype);
75
extern Oid resolve_generic_type(Oid declared_type,
Bruce Momjian's avatar
Bruce Momjian committed
76 77
					 Oid context_actual_type,
					 Oid context_declared_type);
78

79
extern bool find_coercion_pathway(Oid targetTypeId, Oid sourceTypeId,
Bruce Momjian's avatar
Bruce Momjian committed
80 81
					  CoercionContext ccontext,
					  Oid *funcid);
82
extern Oid	find_typmod_coercion_function(Oid typeId);
83

84
#endif   /* PARSE_COERCE_H */