]> granicus.if.org Git - postgresql/blobdiff - src/include/parser/parse_coerce.h
Remove cvs keywords from all files.
[postgresql] / src / include / parser / parse_coerce.h
index 959ac50cde918aee77eedba371d37490f2bd1716..449d9d382ceaf8522d028af2a2a81f20ea3022fc 100644 (file)
@@ -4,10 +4,10 @@
  *     Routines for type coercion.
  *
  *
- * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/parser/parse_coerce.h,v 1.71 2007/06/05 21:31:08 tgl Exp $
+ * src/include/parser/parse_coerce.h
  *
  *-------------------------------------------------------------------------
  */
 #include "parser/parse_node.h"
 
 
-/* Type categories (kluge ... ought to be extensible) */
-typedef enum CATEGORY
-{
-       INVALID_TYPE,
-       UNKNOWN_TYPE,
-       GENERIC_TYPE,
-       BOOLEAN_TYPE,
-       STRING_TYPE,
-       BITSTRING_TYPE,
-       NUMERIC_TYPE,
-       DATETIME_TYPE,
-       TIMESPAN_TYPE,
-       GEOMETRIC_TYPE,
-       NETWORK_TYPE,
-       USER_TYPE
-} CATEGORY;
+/* Type categories (see TYPCATEGORY_xxx symbols in catalog/pg_type.h) */
+typedef char TYPCATEGORY;
 
 /* Result codes for find_coercion_pathway */
 typedef enum CoercionPathType
@@ -46,31 +32,38 @@ typedef enum CoercionPathType
 
 
 extern bool IsBinaryCoercible(Oid srctype, Oid targettype);
-extern bool IsPreferredType(CATEGORY category, Oid type);
-extern CATEGORY TypeCategory(Oid type);
+extern bool IsPreferredType(TYPCATEGORY category, Oid type);
+extern TYPCATEGORY TypeCategory(Oid type);
 
 extern Node *coerce_to_target_type(ParseState *pstate,
                                          Node *expr, Oid exprtype,
                                          Oid targettype, int32 targettypmod,
                                          CoercionContext ccontext,
-                                         CoercionForm cformat);
+                                         CoercionForm cformat,
+                                         int location);
 extern bool can_coerce_type(int nargs, Oid *input_typeids, Oid *target_typeids,
                                CoercionContext ccontext);
 extern Node *coerce_type(ParseState *pstate, Node *node,
                        Oid inputTypeId, Oid targetTypeId, int32 targetTypeMod,
-                       CoercionContext ccontext, CoercionForm cformat);
+                       CoercionContext ccontext, CoercionForm cformat, int location);
 extern Node *coerce_to_domain(Node *arg, Oid baseTypeId, int32 baseTypeMod,
                                 Oid typeId,
-                                CoercionForm cformat, bool hideInputCoercion,
+                                CoercionForm cformat, int location,
+                                bool hideInputCoercion,
                                 bool lengthCoercionDone);
 
 extern Node *coerce_to_boolean(ParseState *pstate, Node *node,
                                  const char *constructName);
 extern Node *coerce_to_specific_type(ParseState *pstate, Node *node,
-                                                                        Oid targetTypeId,
-                                                                        const char *constructName);
+                                               Oid targetTypeId,
+                                               const char *constructName);
+
+extern int parser_coercion_errposition(ParseState *pstate,
+                                                       int coerce_location,
+                                                       Node *input_expr);
 
-extern Oid     select_common_type(List *typeids, const char *context);
+extern Oid select_common_type(ParseState *pstate, List *exprs,
+                                  const char *context, Node **which_expr);
 extern Node *coerce_to_common_type(ParseState *pstate, Node *node,
                                          Oid targetTypeId,
                                          const char *context);
@@ -81,16 +74,17 @@ extern bool check_generic_type_consistency(Oid *actual_arg_types,
 extern Oid enforce_generic_type_consistency(Oid *actual_arg_types,
                                                                 Oid *declared_arg_types,
                                                                 int nargs,
-                                                                Oid rettype);
+                                                                Oid rettype,
+                                                                bool allow_poly);
 extern Oid resolve_generic_type(Oid declared_type,
                                         Oid context_actual_type,
                                         Oid context_declared_type);
 
 extern CoercionPathType find_coercion_pathway(Oid targetTypeId,
-                                                                                         Oid sourceTypeId,
-                                                                                         CoercionContext ccontext,
-                                                                                         Oid *funcid);
+                                         Oid sourceTypeId,
+                                         CoercionContext ccontext,
+                                         Oid *funcid);
 extern CoercionPathType find_typmod_coercion_function(Oid typeId,
-                                                                                                         Oid *funcid);
+                                                         Oid *funcid);
 
 #endif   /* PARSE_COERCE_H */