Handling from UPDATE, SELECT, ... with now rows affected - Mailing list pgsql-bugs
From | RSchiele@FIDUCIA.de |
---|---|
Subject | Handling from UPDATE, SELECT, ... with now rows affected |
Date | |
Msg-id | 0057540006618721000002L412*@MHS Whole thread Raw |
List | pgsql-bugs |
Hello PostgreSQL-Team, sorry that i'm not using the standard bug report, but I think i have not a bug. I'm using the unixODBC with PostgreSQL and I have a little problems discussed with nick the maintainer from unixODBC. And for now we are stuck. So what is the problem. I hope i can get it on the point. Looking in the PostgreSQL C-API to the ExecStatusType there is no Retcode for "I process the command or query but not a single row is returned or touched" for long: for example using an UPDATE-Statment that does not touch any row, I does not get this info. Sure i can get before an UPDATE count(*) .... but this is ugly and wrong. The same is for an SELECT-Statment, I can handle this with looking in the RowCount, but I get a problem using SELECT MIN(...) (look at the end). So now the question/suggestion: Is it possible to get the backend get the information back to the client if a row is touched/queried in the ExecStatusType for Example: PGRES_COMMAND_OK_WITH_ROW_TOUCHED, PGRES_TUPLES_EMPTY ? Hope to hear from you Rainer *An: nick Verteiler: Papierkopie: Von: Rainer Schiele BTB/Tel: SYTKIV / 0721/4004-1843 Datum: 01.09.2000 12.58.36 *Thema: unixODBC - SQLFetch RC Hello Nick, i think i have discovered a mismatch in the Handling of SQLFetch. We have had a similary Problem (but not the same, I put it on the end: Problem1). OK, let's start: Linux 2.2.14, PostgreSQL 7.0.2, unixODBC-1.8.12 For example when I use and SQL-Statement like SELECT Number FROM TEDAV003 WHERE id = 1000 and the Row with id = 1000 does not exists i get an SQL_NO_DATA_FOUND from SQLFetch. This seems OK. But using the statment: SELECT MIN(Number) FROM TEDAV003 WHERE id = 1000 SQLFetch return SQL_SUCCESS (Wrong) and the Binded Cols where not been touched (Right) I think the problem is using the Row Count from the Select-Results which is 1, but this does not mean we found data !!! Rainer PS: Had you time to look in my Threading-Problem. I have get a deep breath and going in your code (..\Drivers\ProstgreSQL\statement.c line 770) where you decide to start a transaction or not. And I did not seen a synchronization there. Will that be synchronized in the upper layers ? Problem 1 I have a problem with SQL-Updates and the Retcode from SQLExecDirect. I think i make something wrong because the problem is so trivial that this can not be a bug! Let's start: I have a very simple Routine that makes an update in the Database: int DBProduktForTargInsert(DBHandle *dbHandle, short prodNr, int targNr, int jobNr, char *userId, DBErrInfo *errInfo) { SQLCHAR stmt[MAXSTMTLENGTH]; SQLRETURN sqlrc; sprintf(stmt, StmtProduktForTargInsert1, prodNr, targNr, jobNr, userId, prodNr, targNr); sqlrc = SQLExecDirect(dbHandle->hstmt, stmt, SQL_NTS); fprintf(stderr, "sqlrc: %d\n", sqlrc); if (sqlrc != SQL_SUCCESS) { DBFillErrInfo(dbHandle, errInfo); return sqlrc; } return sqlrc; } The SQL-Statement that is going to the Database is: UPDATE TESVK005 SET prod_nr = 1, targ_nr = 2, job_nr = 3, upd_uid = 'UserID', upd_date = CURRENT_DATE, upd_time = CURRENT_TIME WHERE prod_nr = 1 AND targ_nr = 2 Seems quite right! In the table there are no entries !! This is OK! BUT the sqlrc is SQL_SUCCESS (0) not SQL_NO_DATA_FOUND (100). My Dokumentation (IBM DB2/2) says for a Searched Update with no rows satisfy the serach condition SQL_NO_DATA_FOUND must be returned!!!!!!
pgsql-bugs by date: