Re: BUG #12319: NPE in JDBC driver when using PgCopyOutputStream

Поиск
Список
Период
Сортировка
От David G Johnston
Тема Re: BUG #12319: NPE in JDBC driver when using PgCopyOutputStream
Дата
Msg-id 1419314563387-5831793.post@n5.nabble.com
обсуждение исходный текст
Ответ на BUG #12319: NPE in JDBC driver when using PgCopyOutputStream  (dhalperi@cs.washington.edu)
Список pgsql-bugs
dhalperi wrote
> The following bug has been logged on the website:
>
> Bug reference:      12319
> Logged by:          Daniel Halperin
> Email address:

> dhalperi@.washington

> PostgreSQL version: 9.3.1
> Operating system:   Ubuntu 14.04.1 LTS
> Description:
>
> This seems like a fairly natural use case, but it runs into a
> NullPointerException (NPE):
>
> 1. Create a PGCopyOutputStream
> 2. Write a bunch of data to it, and close the stream
> 3. Check the number of tuples that were successfully inserted.
>
> (full code snippet below).
>
> However, this use case results in a NullPointerException at line 162 --
> because on OutputStream.close(), the PGCopyOutputStream sets the copyIn to
> null.
>
>       CopyManager cpManager = ((PGConnection)
> jdbcConnection).getCopyAPI();
>       StringBuilder copyString =
>           new StringBuilder().append("COPY
> ").append(quote(relationKey)).append(" FROM STDIN WITH BINARY");
>       CopyIn copyIn = cpManager.copyIn(copyString.toString());
>       PGCopyOutputStream out = new
> PGCopyOutputStream(Preconditions.checkNotNull(copyIn, "copyIn"));
>
>       TupleWriter tw = new PostgresBinaryTupleWriter(out);
>       tw.writeTuples(tupleBatch);
>       tw.done();
>
>       // Causes a null pointer exception
>       long inserted = out.endCopy();
>
>>From what I can tell, there is currently no reliable way to get the number
> of tuples after closing the stream.

This isn't the proper forum, jdbc is external to the core project which is
what this list is for, but...

Until you tell the server you are done sending copy data it doesn't have to
parse it and cannot tell you how many records it found.  So, no, you cannot
close the connection before calling endCopy and expect it to work.

I'm not familiar with this particular API but the code you show doesn't seem
standard to even the official jdbc project so that otherwise proper list
probably isn't the place to ask/report.

This is all that is standard:

http://jdbc.postgresql.org/documentation/publicapi/index.html

If you are using this code:

https://github.com/uwescience/myria/blob/master/src/edu/washington/escience/myria/PostgresBinaryTupleWriter.java

That library commits the sin of closing a buffer that it did not explicitly
create/open.

David J.






--
View this message in context:
http://postgresql.nabble.com/BUG-12319-NPE-in-JDBC-driver-when-using-PgCopyOutputStream-tp5831784p5831793.html
Sent from the PostgreSQL - bugs mailing list archive at Nabble.com.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: postgres@bt-r.com
Дата:
Сообщение: BUG #12320: json parsing with embedded double quotes
Следующее
От: Francisco Olarte
Дата:
Сообщение: Re: BUG #12320: json parsing with embedded double quotes