OSDN Git Service

*** empty log message ***
authorMichael Meskes <meskes@postgresql.org>
Fri, 18 Feb 2000 16:02:49 +0000 (16:02 +0000)
committerMichael Meskes <meskes@postgresql.org>
Fri, 18 Feb 2000 16:02:49 +0000 (16:02 +0000)
src/interfaces/ecpg/include/ecpglib.h
src/interfaces/ecpg/lib/dynamic.c
src/interfaces/ecpg/lib/ecpglib.c

index b3105e9..3cb3255 100644 (file)
@@ -59,7 +59,7 @@ extern                "C"
                                                        const char *descriptor,const char *query);
        bool            ECPGdeallocate_desc(int line,const char *name);
        bool            ECPGallocate_desc(int line,const char *name);
-       void            ECPGraise(int line,int code);
+       void            ECPGraise(int line, int code, const char *str);
        bool            ECPGget_desc_header(int, char *, int *);
        
 
index b66883b..fb2f28e 100644 (file)
@@ -2,7 +2,7 @@
  *
  * Copyright (c) 2000, Christof Petig <christof.petig@wtal.de>
  *
- * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/dynamic.c,v 1.3 2000/02/18 14:34:05 meskes Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/dynamic.c,v 1.4 2000/02/18 16:02:49 meskes Exp $
  */
 
 /* I borrowed the include files from ecpglib.c, maybe we don't need all of them */
@@ -10,7 +10,8 @@
 #include <sql3types.h>
 
 static struct descriptor
-{      char *name;
+{
+       char *name;
        PGresult *result;
        struct descriptor *next;
 } *all_descriptors=NULL;
@@ -18,7 +19,8 @@ static struct descriptor
 PGconn *ECPG_internal_get_connection(char *name);
 
 unsigned int ECPGDynamicType(Oid type)
-{      switch(type)
+{
+       switch(type)
        {       case 16:        return SQL3_BOOLEAN;    /* bool */
                case 21:        return SQL3_SMALLINT;   /* int2 */
                case 23:        return SQL3_INTEGER;    /* int4 */
@@ -204,7 +206,7 @@ bool ECPGdo_descriptor(int line,const char *connection,
                        return (status);
            }
        }
-       ECPGraise(line,ECPG_UNKNOWN_DESCRIPTOR);
+       ECPGraise(line, ECPG_UNKNOWN_DESCRIPTOR, NULL);
        return false;
 }
                                                        
@@ -217,7 +219,7 @@ PGresult *ECPGresultByDescriptor(int line,const char *name)
                if (!strcmp(name, i->name)) return i->result;
        }
        
-       ECPGraise(line,ECPG_UNKNOWN_DESCRIPTOR);
+       ECPGraise(line, ECPG_UNKNOWN_DESCRIPTOR, NULL);
        
        return NULL;
 } 
@@ -236,7 +238,7 @@ bool ECPGdeallocate_desc(int line,const char *name)
                        return true;
                }
        }
-       ECPGraise(line,ECPG_UNKNOWN_DESCRIPTOR);
+       ECPGraise(line, ECPG_UNKNOWN_DESCRIPTOR, NULL);
        return false;
 } 
 
@@ -252,30 +254,69 @@ bool ECPGallocate_desc(int line,const char *name)
        return true;
 }
 
-void ECPGraise(int line, int code)
+void
+ECPGraise(int line, int code, const char *str)
 {
+       struct auto_mem *am;
+              
        sqlca.sqlcode=code;
        switch (code)
        { 
                case ECPG_NOT_FOUND: 
                        snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
-                               "No data found line %d.",line);
+                               "No data found line %d.", line);
+                       break;
+                       
+               case ECPG_OUT_OF_MEMORY: 
+                       snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
+                               "Out of memory in line %d.", line);
                        break;
+                       
+               case ECPG_UNSUPPORTED: 
+                       snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
+                               "Unsupported type %s in line %d.", str, line);
+                       break;
+                       
+               case ECPG_TOO_MANY_ARGUMENTS: 
+                       snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
+                               "Too many arguments in line %d.", line);
+                       break;
+               
+               case ECPG_TOO_FEW_ARGUMENTS: 
+                       snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
+                               "Too few arguments in line %d.", line);
+                       break;
+                       
                case ECPG_MISSING_INDICATOR: 
                        snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
-                               "NULL value without indicator, line %d.",line);
+                               "NULL value without indicator, line %d.", line);
                        break;
+                       
                case ECPG_UNKNOWN_DESCRIPTOR: 
                        snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
-                               "descriptor not found, line %d.",line);
+                               "descriptor not found, line %d.", line);
                        break;
+                       
                case ECPG_INVALID_DESCRIPTOR_INDEX: 
                        snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
-                               "descriptor index out of range, line %d.",line);
+                               "descriptor index out of range, line %d.", line);
                        break;
+                       
            default:
                        snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
-                               "SQL error #%d, line %d.",code,line);
+                               "SQL error #%d, line %d.",code, line);
                        break;
        }
+       
+        /* free all memory we have allocated for the user */
+        for (am = auto_allocs; am;)
+        {
+               struct auto_mem *act = am;
+               
+               am = am->next;
+               free(act->pointer);
+               free(act);
+       }
+
+        auto_allocs = NULL;
 }
index a6e2b23..72c38e4 100644 (file)
@@ -190,7 +190,7 @@ ecpg_alloc(long size, int lineno)
        if (!new)
        {
                ECPGlog("out of memory\n");
-               register_error(ECPG_OUT_OF_MEMORY, "Out of memory in line %d", lineno);
+               ECPGraise(ECPG_OUT_OF_MEMORY, lineno, NULL);
                return NULL;
        }
 
@@ -206,7 +206,7 @@ ecpg_strdup(const char *string, int lineno)
        if (!new)
        {
                ECPGlog("out of memory\n");
-               register_error(ECPG_OUT_OF_MEMORY, "Out of memory in line %d", lineno);
+               ECPGraise(ECPG_OUT_OF_MEMORY, lineno, NULL);
                return NULL;
        }
 
@@ -634,8 +634,7 @@ ECPGexecute(struct statement * stmt)
 
                                default:
                                        /* Not implemented yet */
-                                       register_error(ECPG_UNSUPPORTED, "Unsupported type %s on line %d.",
-                                                                ECPGtype_name(var->type), stmt->lineno);
+                                       ECPGraise(ECPG_UNSUPPORTED, stmt->lineno, ECPGtype_name(var->type));
                                        return false;
                                        break;
                        }
@@ -658,7 +657,7 @@ ECPGexecute(struct statement * stmt)
                         * We have an argument but we dont have the matched up string
                         * in the string
                         */
-                       register_error(ECPG_TOO_MANY_ARGUMENTS, "Too many arguments line %d.", stmt->lineno);
+                       ECPGraise(ECPG_TOO_MANY_ARGUMENTS, stmt->lineno, NULL);
                        return false;
                }
                else
@@ -695,7 +694,7 @@ ECPGexecute(struct statement * stmt)
        /* Check if there are unmatched things left. */
        if (next_insert(copiedquery) != NULL)
        {
-               register_error(ECPG_TOO_FEW_ARGUMENTS, "Too few arguments line %d.", stmt->lineno);
+               ECPGraise(ECPG_TOO_FEW_ARGUMENTS, stmt->lineno, NULL);
                return false;
        }
 
@@ -743,7 +742,7 @@ ECPGexecute(struct statement * stmt)
                                {
                                        ECPGlog("ECPGexecute line %d: Incorrect number of matches: %d\n",
                                                        stmt->lineno, ntuples);
-                                       register_error(ECPG_NOT_FOUND, "No data found line %d.", stmt->lineno);
+                                       ECPGraise(ECPG_NOT_FOUND, stmt->lineno, NULL);
                                        status = false;
                                        break;
                                }
@@ -757,7 +756,7 @@ ECPGexecute(struct statement * stmt)
                                        if (var == NULL)
                                        {
                                                ECPGlog("ECPGexecute line %d: Too few arguments.\n", stmt->lineno);
-                                               register_error(ECPG_TOO_FEW_ARGUMENTS, "Too few arguments line %d.", stmt->lineno);
+                                               ECPGraise(ECPG_TOO_FEW_ARGUMENTS, stmt->lineno, NULL);
                                                return (false);
                                        }
 
@@ -779,7 +778,7 @@ ECPGexecute(struct statement * stmt)
                                        {
                                                ECPGlog("ECPGexecute line %d: Incorrect number of matches: %d don't fit into array of %d\n",
                                                                stmt->lineno, ntuples, var->arrsize);
-                                               register_error(ECPG_TOO_MANY_MATCHES, "Too many matches line %d.", stmt->lineno);
+                                               ECPGraise(ECPG_TOO_MANY_MATCHES, stmt->lineno, NULL);
                                                status = false;
                                                break;
                                        }
@@ -854,7 +853,7 @@ ECPGexecute(struct statement * stmt)
                                                                }
                                                                break;
                                                        default:
-                                                               register_error(ECPG_UNSUPPORTED, "Unsupported indicator type %s on line %d.", ECPGtype_name(var->ind_type), stmt->lineno);
+                                                               ECPGraise(ECPG_UNSUPPORTED, stmt->lineno, ECPGtype_name(var->ind_type));
                                                                status = false;
                                                                break;
                                                }
@@ -1058,7 +1057,7 @@ ECPGexecute(struct statement * stmt)
                                                                break;
 
                                                        default:
-                                                               register_error(ECPG_UNSUPPORTED, "Unsupported type %s on line %d.", ECPGtype_name(var->type), stmt->lineno);
+                                                               ECPGraise(ECPG_UNSUPPORTED, stmt->lineno, ECPGtype_name(var->type));
                                                                status = false;
                                                                break;
                                                }
@@ -1068,7 +1067,7 @@ ECPGexecute(struct statement * stmt)
 
                                if (status && var != NULL)
                                {
-                                       register_error(ECPG_TOO_MANY_ARGUMENTS, "Too many arguments line %d.", stmt->lineno);
+                                       ECPGraise(ECPG_TOO_MANY_ARGUMENTS, stmt->lineno, NULL);
                                        status = false;
                                }