Thread: postgres jdbc into eclipse plugin (OID problems)

postgres jdbc into eclipse plugin (OID problems)

From
"Diego Zanga"
Date:
Lo,

i'm using postgres jdbc (level 3 ver 8.2-505) into an eclipse
plugin (i'm developing the plugin to simplify db creation
/mantainment, inside some projects).

I've a big problem: the server (?!) receive the same
prepared statment as inside the plugin as outside( during
test, without eclipse), but works differently.
If i do it inside the same OID is set to the parameters, but
while inside ECLIPSE the server do not add <"> after and
before string parameters, while OUTSIDE is set the same
OID, and do it.

I've debugged the jdbc driver and the OID is 1043, sended
to the server:
(it's all called from Jdbc3PreparedStatement class)
class : QueryExecutorImpl
method: private void sendQuery( ..... )

here i've seen that at line 700, the OID is sent to the server

        for (int i = 1; i <= params.getParameterCount(); ++i)
            pgStream.SendInteger4(params.getTypeOID(i));

After declaring parameters type to server, there is a BIND
of the effective parameters, done by [line 777]
    private void sendBind(SimpleQuery query, SimpleParameterList
params, Portal portal) throws IOException {

where the parameter is sended with this command:
       params.writeV3Value(i, pgStream);                 // Parameter value

So, it's the Server to manage the parameters type
eventually adding <"> to string, knowing the OID.

However i could not understand WHY, it does it outside
eclipse and not inside it: this means the jdbc driver
have some problems inside eclipse, and doez not
throw execeptions about this problem, so the server
has some problem managing the prepared statement,
but i dont know what is it, and how to debug it


Any hint?

cya
--
Diego Zanga
------------------------------
Skype NAARANI
http://www.javablog.eu
http://www.elawoffice.it
http://www.blogstudiolegale.eu

Re: postgres jdbc into eclipse plugin (OID problems)

From
Luca Ferrari
Date:
On Wednesday 11 July 2007 Diego Zanga's cat, walking on the keyboard, wrote:
> However i could not understand WHY, it does it outside
> eclipse and not inside it: this means the jdbc driver
> have some problems inside eclipse, and doez not
> throw execeptions about this problem, so the server
> has some problem managing the prepared statement,
> but i dont know what is it, and how to debug it

I never developed an eclipse plug-ing, thus I don't know exactly how to help
you (someone with more experience can give you help); I've got only a few
suggestions. First of all, I guess the problem is in eclipse and not in the
driver. I think if there's an exception is eclipse that is hiding it to you.
Moreover, you can set the debugging options in the postgresql.conf
(client_min_messages and debug_print*) and have a look at the logs to see
what the server is receiving, as well as you can enable debugging in the
driver; try appending ?loglevel=2 at the connection URL.

Hope this helps,
Luca

Re: postgres jdbc into eclipse plugin (OID problems)

From
"Diego Zanga"
Date:
2007/7/12, Luca Ferrari <fluca1978@infinito.it>:
> On Wednesday 11 July 2007 Diego Zanga's cat, walking on the keyboard, wrote:
> > However i could not understand WHY, it does it outside
> > eclipse and not inside it: this means the jdbc driver
> > have some problems inside eclipse, and doez not
> > throw execeptions about this problem, so the server
> > has some problem managing the prepared statement,
> > but i dont know what is it, and how to debug it
>
> I never developed an eclipse plug-ing, thus I don't know exactly how to help
> you (someone with more experience can give you help); I've got only a few
> suggestions. First of all, I guess the problem is in eclipse and not in the
> driver. I think if there's an exception is eclipse that is hiding it to you.

the problems is probably in my plugin :o)
however i dunno how to fully debug postgres activity
and i've understood why yesterday night :O/

the query i was using was something like:
select tableA.fieldA, tableA.fieldB from tableA where tableA.fieldA=8
the query report an error about >tableA<, but not WHERE/WITCH
tableA word reported the error.

it will be more <friendly> if the error was like

error in tableA:
select tableA.fieldA, tableA.fieldB from tableA where tableA.fieldA
like "tableA"
..............................^

or
error in tableA:
tableA.fieldB from tableA where tableA.fieldA=8

so it's simpler to understand what part of the query seems wrong

> Moreover, you can set the debugging options in the postgresql.conf
> (client_min_messages and debug_print*) and have a look at the logs to see
> what the server is receiving, as well as you can enable debugging in the
> driver; try appending ?loglevel=2 at the connection URL.

i've downloaded the jdbc source and debugged it, in the future
i will enable even this debug options however the problem was
about a prepared statement like
select tableA.fieldA, tableA.fieldB from tableA where tableA.fieldA like ?

while debugging it i thought it <processed> it while receiving, instead
it process it only after the parameter waz received and it has a full
query
select tableA.fieldA, tableA.fieldB from tableA where tableA.fieldA
like "tableA"
the <tableA> he doez not like if the first
select tableA.fieldA,
..........^

(the query i've used is only an example, the one i'm debuggins
is a little long and complex)

thanks :O)
--
Diego Zanga
------------------------------
Skype NAARANI
http://www.javablog.eu
http://www.elawoffice.it
http://www.blogstudiolegale.eu

Re: postgres jdbc into eclipse plugin (OID problems)

From
Tom Lane
Date:
"Diego Zanga" <naarani@gmail.com> writes:
> the query i was using was something like:
> select tableA.fieldA, tableA.fieldB from tableA where tableA.fieldA=8
> the query report an error about >tableA<, but not WHERE/WITCH
> tableA word reported the error.

Maybe you need to be using a more recent version of Postgres?
I get messages like

regression=# create table foo(x int, y int);
CREATE TABLE
regression=# select foo.x, foo.y, foo.z from foo;
ERROR:  column foo.z does not exist
LINE 1: select foo.x, foo.y, foo.z from foo;
                             ^
regression=#

            regards, tom lane