Thread: Thread safe connection-name mapping in ECPG. Is it required?
Hi all, I was just going thr. the ecpg sources checking for thread safety. It looks like the mutex protects the connections list in connection.c. I do not like that from a application developers perspective. If I am developing an application and using multiple connections in multiple threads, I have to store a connection name for each connection as C string. Of course, I also have to protect it across thread so that I can rightly tell ecpg what connection I would be talking to next. If an application can take care of a C string, it can also take care of a connection structure. On top of it, it eliminates the list lookup. The potential performance gain could be worth it if there are hundreds of connections and a busy website/application server. What I wonder is, do we really need to maintain that level of lookup? Can't we just say a connection is a 'struct connection *' which should be opaque and should not be touched or poked inside, just like PGConn. Just a thought... Shridhar
On Mon, Feb 23, 2004 at 09:27:40PM +0530, Shridhar Daithankar wrote: > It looks like the mutex protects the connections list in connection.c. I do > not like that from a application developers perspective. > > If I am developing an application and using multiple connections in multiple > threads, I have to store a connection name for each connection as C string. > Of course, I also have to protect it across thread so that I can rightly tell > ecpg what connection I would be talking to next. > > If an application can take care of a C string, it can also take care of a > connection structure. On top of it, it eliminates the list lookup. The > potential performance gain could be worth it if there are hundreds of > connections and a busy website/application server. > > What I wonder is, do we really need to maintain that level of lookup? Can't we > just say a connection is a 'struct connection *' which should be opaque and > should not be touched or poked inside, just like PGConn. I'm not sure I understand you correctly. The SQL standard says you can call your statement as this: exec sql at CONNECTION select 1; Here CONNECTION of course is a string, the name of the connection. So, yes, we have to maintain that list to make sure we get the right connection. Or what were you asking? Michael -- Michael Meskes Email: Michael at Fam-Meskes dot De ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org Go SF 49ers! Go Rhein Fire! Use Debian GNU/Linux! Use PostgreSQL!
Re: Thread safe connection-name mapping in ECPG. Is it required?
From
"Zeugswetter Andreas SB SD"
Date:
> I'm not sure I understand you correctly. The SQL standard says you can > call your statement as this: > exec sql at CONNECTION select 1; > > Here CONNECTION of course is a string, the name of the connection. So, > yes, we have to maintain that list to make sure we get the right > connection. I thought the main problem was an "exec sql set connection :hostvar", where hostvar is a string determined at runtime. Else above could be translated at precompile time to anything more efficient than a string search. Oh, just noticed above is not standard, but sure is very useful. Andreas
Michael Meskes wrote: > On Mon, Feb 23, 2004 at 09:27:40PM +0530, Shridhar Daithankar wrote: >>What I wonder is, do we really need to maintain that level of lookup? Can't we >>just say a connection is a 'struct connection *' which should be opaque and >>should not be touched or poked inside, just like PGConn. > I'm not sure I understand you correctly. The SQL standard says you can > call your statement as this: > exec sql at CONNECTION select 1; > > Here CONNECTION of course is a string, the name of the connection. So, > yes, we have to maintain that list to make sure we get the right > connection. > > Or what were you asking? I am asking for CONNECTION being a variable of data type 'connection *' rather than 'const char *'. That would avoid name lookups. Is that out of spec? Shridhar