diff options
Diffstat (limited to 'src/interfaces/ecpg/lib/ecpglib.c')
-rw-r--r-- | src/interfaces/ecpg/lib/ecpglib.c | 76 |
1 files changed, 46 insertions, 30 deletions
diff --git a/src/interfaces/ecpg/lib/ecpglib.c b/src/interfaces/ecpg/lib/ecpglib.c index 742cc5a1d8d..4d13f6dcb1c 100644 --- a/src/interfaces/ecpg/lib/ecpglib.c +++ b/src/interfaces/ecpg/lib/ecpglib.c @@ -183,7 +183,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); + register_error(ECPG_OUT_OF_MEMORY, "Out of memory in line %d", lineno); return NULL; } @@ -199,7 +199,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); + register_error(ECPG_OUT_OF_MEMORY, "Out of memory in line %d", lineno); return NULL; } @@ -336,7 +336,7 @@ create_statement(int lineno, struct connection *connection, struct statement ** if (var->pointer == NULL) { ECPGlog("create_statement: invalid statement name\n"); - register_error(ECPG_INVALID_STMT, "Invalid statement name in line %d", lineno); + register_error(ECPG_INVALID_STMT, "Invalid statement name in line %d.", lineno); free(var); return false; } @@ -387,7 +387,7 @@ next_insert(char *text) static bool ECPGexecute(struct statement * stmt) { - bool status = false; + bool status = false; char *copiedquery; PGresult *results; PGnotify *notify; @@ -637,7 +637,7 @@ ECPGexecute(struct statement * stmt) { if ((results = PQexec(stmt->connection->connection, "begin transaction")) == NULL) { - register_error(ECPG_TRANS, "Error starting transaction line %d.", stmt->lineno); + register_error(ECPG_TRANS, "Error in transaction processing line %d.", stmt->lineno); return false; } PQclear(results); @@ -708,7 +708,7 @@ ECPGexecute(struct statement * stmt) /* * allocate memory for NULL pointers */ - if (var->arrsize == 0 || var->varcharsize == 0) + if ((var->arrsize == 0 || var->varcharsize == 0) && var->value == NULL) { int len = 0; @@ -716,34 +716,28 @@ ECPGexecute(struct statement * stmt) { case ECPGt_char: case ECPGt_unsigned_char: - if (var->value == NULL) + var->varcharsize = 0; + /* check strlen for each tuple */ + for (act_tuple = 0; act_tuple < ntuples; act_tuple++) { - var->varcharsize = 0; - /* check strlen for each tuple */ - for (act_tuple = 0; act_tuple < ntuples; act_tuple++) - { - int len = strlen(PQgetvalue(results, act_tuple, act_field)) + 1; - - if (len > var->varcharsize) - var->varcharsize = len; - } - var->offset *= var->varcharsize; - len = var->offset * ntuples; + int len = strlen(PQgetvalue(results, act_tuple, act_field)) + 1; + + if (len > var->varcharsize) + var->varcharsize = len; } + var->offset *= var->varcharsize; + len = var->offset * ntuples; break; case ECPGt_varchar: - if (var->value == NULL) - len = ntuples * (var->varcharsize + sizeof (int)); + len = ntuples * (var->varcharsize + sizeof (int)); break; default: - if (var->value == NULL) - len = var->offset * ntuples; + len = var->offset * ntuples; break; } - - var->pointer = (void *) ecpg_alloc(len, stmt->lineno); - var->value = (void **) var->pointer; - add_mem((void *) var->value, stmt->lineno); + var->value = (void *) ecpg_alloc(len, stmt->lineno); + *((void **) var->pointer) = var->value; + add_mem(var->value, stmt->lineno); } for (act_tuple = 0; act_tuple < ntuples && status; act_tuple++) @@ -1004,7 +998,7 @@ ECPGexecute(struct statement * stmt) case PGRES_BAD_RESPONSE: ECPGlog("ECPGexecute line %d: Error: %s", stmt->lineno, PQerrorMessage(stmt->connection->connection)); - register_error(ECPG_PGSQL, "Error: %s line %d.", + register_error(ECPG_PGSQL, "Postgres error: %s line %d.", PQerrorMessage(stmt->connection->connection), stmt->lineno); status = false; break; @@ -1019,7 +1013,8 @@ ECPGexecute(struct statement * stmt) default: ECPGlog("ECPGexecute line %d: Got something else, postgres error.\n", stmt->lineno); - register_error(ECPG_PGSQL, "Postgres error line %d.", stmt->lineno); + register_error(ECPG_PGSQL, "Postgres error: %s line %d.", + PQerrorMessage(stmt->connection->connection), stmt->lineno); status = false; break; } @@ -1046,7 +1041,7 @@ ECPGdo(int lineno, const char *connection_name, char *query,...) if (con == NULL) { - register_error(ECPG_NO_CONN, "No such connection %s in line %d", connection_name, lineno); + register_error(ECPG_NO_CONN, "No such connection %s in line %d.", connection_name, lineno); return (false); } @@ -1059,13 +1054,34 @@ ECPGdo(int lineno, const char *connection_name, char *query,...) if (con == NULL || con->connection == NULL) { ECPGlog("ECPGdo: not connected to %s\n", con->name); - register_error(ECPG_NOT_CONN, "Not connected in line %d", lineno); + register_error(ECPG_NOT_CONN, "Not connected in line %d.", lineno); return false; } return (ECPGexecute(stmt)); } +bool +ECPGstatus(int lineno, const char *connection_name) +{ + struct connection *con = get_connection(connection_name); + + if (con == NULL) + { + register_error(ECPG_NO_CONN, "No such connection %s in line %d", connection_name, lineno); + return (false); + } + + /* are we connected? */ + if (con->connection == NULL) + { + ECPGlog("ECPGdo: not connected to %s\n", con->name); + register_error(ECPG_NOT_CONN, "Not connected in line %d", lineno); + return false; + } + + return (true); +} bool ECPGtrans(int lineno, const char *connection_name, const char *transaction) |