Commit bc8a39be authored by Michael Meskes's avatar Michael Meskes

*** empty log message ***

parent ab0c8c69
...@@ -59,7 +59,7 @@ extern "C" ...@@ -59,7 +59,7 @@ extern "C"
const char *descriptor,const char *query); const char *descriptor,const char *query);
bool ECPGdeallocate_desc(int line,const char *name); bool ECPGdeallocate_desc(int line,const char *name);
bool ECPGallocate_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 *); bool ECPGget_desc_header(int, char *, int *);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* Copyright (c) 2000, Christof Petig <christof.petig@wtal.de> * 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 */ /* I borrowed the include files from ecpglib.c, maybe we don't need all of them */
...@@ -10,7 +10,8 @@ ...@@ -10,7 +10,8 @@
#include <sql3types.h> #include <sql3types.h>
static struct descriptor static struct descriptor
{ char *name; {
char *name;
PGresult *result; PGresult *result;
struct descriptor *next; struct descriptor *next;
} *all_descriptors=NULL; } *all_descriptors=NULL;
...@@ -18,7 +19,8 @@ static struct descriptor ...@@ -18,7 +19,8 @@ static struct descriptor
PGconn *ECPG_internal_get_connection(char *name); PGconn *ECPG_internal_get_connection(char *name);
unsigned int ECPGDynamicType(Oid type) unsigned int ECPGDynamicType(Oid type)
{ switch(type) {
switch(type)
{ case 16: return SQL3_BOOLEAN; /* bool */ { case 16: return SQL3_BOOLEAN; /* bool */
case 21: return SQL3_SMALLINT; /* int2 */ case 21: return SQL3_SMALLINT; /* int2 */
case 23: return SQL3_INTEGER; /* int4 */ case 23: return SQL3_INTEGER; /* int4 */
...@@ -204,7 +206,7 @@ bool ECPGdo_descriptor(int line,const char *connection, ...@@ -204,7 +206,7 @@ bool ECPGdo_descriptor(int line,const char *connection,
return (status); return (status);
} }
} }
ECPGraise(line,ECPG_UNKNOWN_DESCRIPTOR); ECPGraise(line, ECPG_UNKNOWN_DESCRIPTOR, NULL);
return false; return false;
} }
...@@ -217,7 +219,7 @@ PGresult *ECPGresultByDescriptor(int line,const char *name) ...@@ -217,7 +219,7 @@ PGresult *ECPGresultByDescriptor(int line,const char *name)
if (!strcmp(name, i->name)) return i->result; if (!strcmp(name, i->name)) return i->result;
} }
ECPGraise(line,ECPG_UNKNOWN_DESCRIPTOR); ECPGraise(line, ECPG_UNKNOWN_DESCRIPTOR, NULL);
return NULL; return NULL;
} }
...@@ -236,7 +238,7 @@ bool ECPGdeallocate_desc(int line,const char *name) ...@@ -236,7 +238,7 @@ bool ECPGdeallocate_desc(int line,const char *name)
return true; return true;
} }
} }
ECPGraise(line,ECPG_UNKNOWN_DESCRIPTOR); ECPGraise(line, ECPG_UNKNOWN_DESCRIPTOR, NULL);
return false; return false;
} }
...@@ -252,30 +254,69 @@ bool ECPGallocate_desc(int line,const char *name) ...@@ -252,30 +254,69 @@ bool ECPGallocate_desc(int line,const char *name)
return true; return true;
} }
void ECPGraise(int line, int code) void
ECPGraise(int line, int code, const char *str)
{ {
struct auto_mem *am;
sqlca.sqlcode=code; sqlca.sqlcode=code;
switch (code) switch (code)
{ {
case ECPG_NOT_FOUND: case ECPG_NOT_FOUND:
snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc), 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; 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: case ECPG_MISSING_INDICATOR:
snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc), snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
"NULL value without indicator, line %d.",line); "NULL value without indicator, line %d.", line);
break; break;
case ECPG_UNKNOWN_DESCRIPTOR: case ECPG_UNKNOWN_DESCRIPTOR:
snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc), snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
"descriptor not found, line %d.",line); "descriptor not found, line %d.", line);
break; break;
case ECPG_INVALID_DESCRIPTOR_INDEX: case ECPG_INVALID_DESCRIPTOR_INDEX:
snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc), 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; break;
default: default:
snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc), snprintf(sqlca.sqlerrm.sqlerrmc,sizeof(sqlca.sqlerrm.sqlerrmc),
"SQL error #%d, line %d.",code,line); "SQL error #%d, line %d.",code, line);
break; 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;
} }
...@@ -190,7 +190,7 @@ ecpg_alloc(long size, int lineno) ...@@ -190,7 +190,7 @@ ecpg_alloc(long size, int lineno)
if (!new) if (!new)
{ {
ECPGlog("out of memory\n"); 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; return NULL;
} }
...@@ -206,7 +206,7 @@ ecpg_strdup(const char *string, int lineno) ...@@ -206,7 +206,7 @@ ecpg_strdup(const char *string, int lineno)
if (!new) if (!new)
{ {
ECPGlog("out of memory\n"); 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; return NULL;
} }
...@@ -634,8 +634,7 @@ ECPGexecute(struct statement * stmt) ...@@ -634,8 +634,7 @@ ECPGexecute(struct statement * stmt)
default: default:
/* Not implemented yet */ /* Not implemented yet */
register_error(ECPG_UNSUPPORTED, "Unsupported type %s on line %d.", ECPGraise(ECPG_UNSUPPORTED, stmt->lineno, ECPGtype_name(var->type));
ECPGtype_name(var->type), stmt->lineno);
return false; return false;
break; break;
} }
...@@ -658,7 +657,7 @@ ECPGexecute(struct statement * stmt) ...@@ -658,7 +657,7 @@ ECPGexecute(struct statement * stmt)
* We have an argument but we dont have the matched up string * We have an argument but we dont have the matched up string
* in the 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; return false;
} }
else else
...@@ -695,7 +694,7 @@ ECPGexecute(struct statement * stmt) ...@@ -695,7 +694,7 @@ ECPGexecute(struct statement * stmt)
/* Check if there are unmatched things left. */ /* Check if there are unmatched things left. */
if (next_insert(copiedquery) != NULL) 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; return false;
} }
...@@ -743,7 +742,7 @@ ECPGexecute(struct statement * stmt) ...@@ -743,7 +742,7 @@ ECPGexecute(struct statement * stmt)
{ {
ECPGlog("ECPGexecute line %d: Incorrect number of matches: %d\n", ECPGlog("ECPGexecute line %d: Incorrect number of matches: %d\n",
stmt->lineno, ntuples); stmt->lineno, ntuples);
register_error(ECPG_NOT_FOUND, "No data found line %d.", stmt->lineno); ECPGraise(ECPG_NOT_FOUND, stmt->lineno, NULL);
status = false; status = false;
break; break;
} }
...@@ -757,7 +756,7 @@ ECPGexecute(struct statement * stmt) ...@@ -757,7 +756,7 @@ ECPGexecute(struct statement * stmt)
if (var == NULL) if (var == NULL)
{ {
ECPGlog("ECPGexecute line %d: Too few arguments.\n", stmt->lineno); 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); return (false);
} }
...@@ -779,7 +778,7 @@ ECPGexecute(struct statement * stmt) ...@@ -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", ECPGlog("ECPGexecute line %d: Incorrect number of matches: %d don't fit into array of %d\n",
stmt->lineno, ntuples, var->arrsize); 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; status = false;
break; break;
} }
...@@ -854,7 +853,7 @@ ECPGexecute(struct statement * stmt) ...@@ -854,7 +853,7 @@ ECPGexecute(struct statement * stmt)
} }
break; break;
default: 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; status = false;
break; break;
} }
...@@ -1058,7 +1057,7 @@ ECPGexecute(struct statement * stmt) ...@@ -1058,7 +1057,7 @@ ECPGexecute(struct statement * stmt)
break; break;
default: 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; status = false;
break; break;
} }
...@@ -1068,7 +1067,7 @@ ECPGexecute(struct statement * stmt) ...@@ -1068,7 +1067,7 @@ ECPGexecute(struct statement * stmt)
if (status && var != NULL) 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; status = false;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment