X-Original-To: pgsql-interfaces-postgresql.org@localhost.postgresql.org Received: from localhost (neptune.hub.org [200.46.204.2]) by svr1.postgresql.org (Postfix) with ESMTP id 4C48DD1D2A1 for ; Tue, 16 Dec 2003 01:20:45 +0000 (GMT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (neptune.hub.org [200.46.204.2]) (amavisd-new, port 10024) with ESMTP id 49123-06 for ; Mon, 15 Dec 2003 21:20:26 -0400 (AST) Received: from candle.pha.pa.us (candle.pha.pa.us [207.106.42.251]) by svr1.postgresql.org (Postfix) with ESMTP id 1D05AD1D20B for ; Mon, 15 Dec 2003 21:20:16 -0400 (AST) Received: (from pgman@localhost) by candle.pha.pa.us (8.11.6/8.11.6) id hBG1K9P18068; Mon, 15 Dec 2003 20:20:09 -0500 (EST) From: Bruce Momjian Message-Id: <200312160120.hBG1K9P18068@candle.pha.pa.us> Subject: Re: Possible bug in ECPGlib thread-safety (Postgres 7.4)... In-Reply-To: <16336.19895.354907.412172@kelvin.csl.co.uk> To: Lee Kindness Date: Mon, 15 Dec 2003 20:20:09 -0500 (EST) Cc: Philip Yarra , Demetres Pantermalis , pgsql-interfaces@postgresql.org X-Mailer: ELM [version 2.4ME+ PL108 (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Virus-Scanned: by amavisd-new at postgresql.org X-Archive-Number: 200312/36 X-Sequence-Number: 4645 Lee Kindness wrote: > Philip Yarra writes: > > Unlike the libpq C interface, there is no "connection" variable maintained in > > ECPG... instead, ECPG internally maintains a global list of open connections. > > When a client application issues an EXEC SQL, a connection is retrieved from > > the list, and the SQL statement is executed on that connection. The first > > connection in the list is the "default" connection, so if you don't specify a > > named connection using "AT conn_name" ECPG grabs the first connection in the > > list. > > > > I'm pretty sure what happens when you issue EXEC SQL SET CONNECTION is that it > > sets the the default connection, so each of your threads would simply have > > shuffled the default connection. Then when each thread attempts to EXEC SQL > > they grab the same connection... whichever connection was made the default by > > the last thread to issue EXEC SQL SET CONNECTION. > > > > I believe this behaviour is consistent with other DBMS implementations of > > embedded SQL, but I'm shooting from the hip. > > Not sure on the consistency, that's one thing ESQL/C rarely is! > > Anyway you're right regarding the SET CONNECTION behaviour. However > it'd be fairly simple to change things such that each thread keeps > track of its "current" connection (set by connecting and SET > CONNECTION) by using thread local storage. > > It'd be a definite improvement over having to specify the connection > on each call! > > I'll probably do this at some point, but since i'm off to India on > Monday for the rest of December it'll not be till the New Year at the > earliest! Added to TODO and documented. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073