On Wed, Mar 25, 2009 at 5:10 PM, Stephen Deasey <sdea...@gmail.com> wrote:
> On Wed, Mar 25, 2009 at 10:56 PM, Ian Harding <harding....@gmail.com> wrote:
>> I am in a situation where I'd like to be able to set the search_path
>> on each page request.  In AOLServer I would have just made a db handle
>> getter function that would call ns_db gethandle, issue a quick SET
>> command, and pass the handle back to the caller.

<snip>

> Alternatively, you could set the max number of handles to 0, in which
> case the driver switches to handle-per-thread mode (See docs).  In
> this case, when each command 'gets' a handle it will always get the
> same one, as it is never actually returned to the pool but cached for
> the thread.

OK, so my maxhandles is 0, per the default, so I should always get the
same handle in repeated calls.  I'm apparently not because when I
issue

dbi_dml {set search_path to test,public}
dbi_rows {select * from tableintestbutnotpublic}

I get an error stating that the table does not exist.

Here's my postgres log

LOG:  statement: set client_encoding to 'UTF8'
LOG:  execute dbipg_0: set session client_encoding = 'UTF8'
LOG:  execute dbipg_1: set session timezone = 'UTC'
LOG:  execute dbipg_2: set session datestyle = 'ISO'
LOG:  execute dbipg_3: set search_path to test,public
ERROR:  relation "classification" does not exist
STATEMENT:  SELECT classification
                        FROM classification
                        ORDER BY classification

but it does exist...

test=# \dt test.classification
            List of relations
 Schema |      Name      | Type  | Owner
--------+----------------+-------+-------
 test   | classification | table | user
(1 row)

So I wrote a test that goes like this

if {[catch {

        catch {dbi_dml {drop table test}}
        catch {dbi_dml {drop schema test cascade}}

    dbi_dml {
        create schema test
    }

    dbi_dml {
        create table test (
            a integer not null,
            b varchar not null,
            c bytea,
            test varchar
        )
    }
    dbi_dml {insert into test (a, b, test) values (1, 'x', 'test1')}
    dbi_dml {insert into test (a, b, test) values (2, 'y', 'test2')}

} err]} {
    ns_log error $err
} else {
    testConstraint table true
}


test schema-1 {bad search path} -constraints table -body {
    dbi_dml {set search_path to test}
    dbi_rows {select * from test}
} -returnCodes error -result {relation "test" does not exist}

test schema-2 {bad search path same thread} -constraints table -body {
    dbi_rows {select * from test}
} -returnCodes error -result {relation "test" does not exist}

test schema-3 {good search path} -constraints table -body {
    dbi_dml {set search_path to public}
    dbi_rows {select * from test where a = 99}
} -result {}

Which passes when run with make test.

So, what could be my problem here?  My config file is being used, and
it does say maxhandles=0...

ns_section      "ns/server/${server}/module/dbpg"
ns_param   default       true
ns_param   maxhandles    0
ns_param   timeout       10

- Ian

------------------------------------------------------------------------------
_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/naviserver-devel

Reply via email to