*** empty log message ***
authorMichael Meskes
Fri, 18 Feb 2000 16:02:49 +0000 (16:02 +0000)
committerMichael Meskes
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 b3105e943a1cf9fc726ec2b717a3b50714a508f7..3cb3255c4a8d75989369dbf1c820180f974932d5 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 b66883b934a72bb422c2f7448a6bf09f7696f05e..fb2f28e69c5b508742269e575589df624545d833 100644 (file)
@@ -2,7 +2,7 @@
  *
  * Copyright (c) 2000, Christof Petig 
  *
- * $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 
 
 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 a6e2b23e01b4802f413e1d844252a90ba9cae85f..72c38e48a1862e3858b1db00e32d76b7b4867e8b 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;
                }