Re: Query blobs in clojure.contrib.sql?

2009-12-01 Thread Base
This is exactly what I was looking for!

Early Christmas for me.

Thank you Santa...e...John

On Dec 1, 2:04 am, John Harrop  wrote:
> On Mon, Nov 30, 2009 at 9:57 PM, Base  wrote:
> > Hi
>
> > I have a database that has a table with complex java objects stored in
> > a binary field.
>
> > In java i would do something like:
>
> > protected Object read(byte[] buf){
> >     Object obj = null;
> >     if (buf==null) return obj;
> >         try {
> >        ObjectInputStream objectIn =
> >                             new ObjectInputStream(
> >                   new ByteArrayInputStream(buf));
> >        obj = objectIn.readObject();
> >        } catch (IOException e){
> >                                     ...
> >         }
> >   return obj;
> > }
>
> > I am stumped as to how to handle this sort of syntax in clojure.
>
> > (defn select-test2[]
> >  (with-connection db
> >    (with-query-results res ["SELECT BIN_OBJ FROM MYTABLE  where ID
> > =16000254"] (doall res
>
> There seems to be some sort of disconnect here. The second piece of code
> queries a database and realizes the result seq. The first extracts a
> serialized Java object from a byte buffer. The missing link would be however
> one extracts a BLOB from the result seq in the form of a Java byte buffer.
>
> As for the clojure syntax, that for obtaining the byte buffer is unknown,
> but presumably involves Java interop. That for the deserialization is
> straightforward:
>
> (if-not (nil? byte-buffer)
>   (with-open [object-in (ObjectInputStream.
>                           (ByteArrayInputStream. byte-buffer))]
>     (.readObject object-in)))
>
> (Just four lines of Clojure code, versus 11 of Java. :))
>
> (If your Java try block didn't just clean up the streams but also e.g.
> logged the error you'll need a try form added, e.g.
>
> (if-not (nil? byte-buffer)
>   (try
>     (with-open [object-in (ObjectInputStream.
>                             (ByteArrayInputStream. byte-buffer))]
>       (.readObject object-in))
>     (catch (Throwable t)
>       (log-error t)
>       (throw t
>
> or perhaps more specific handling of particular exceptions.)- Hide quoted 
> text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Query blobs in clojure.contrib.sql?

2009-12-01 Thread John Harrop
On Mon, Nov 30, 2009 at 9:57 PM, Base  wrote:

> Hi
>
> I have a database that has a table with complex java objects stored in
> a binary field.
>
> In java i would do something like:
>
> protected Object read(byte[] buf){
> Object obj = null;
> if (buf==null) return obj;
> try {
>ObjectInputStream objectIn =
> new ObjectInputStream(
>   new ByteArrayInputStream(buf));
>obj = objectIn.readObject();
>} catch (IOException e){
> ...
> }
>   return obj;
> }
>
>
> I am stumped as to how to handle this sort of syntax in clojure.
>
> (defn select-test2[]
>  (with-connection db
>(with-query-results res ["SELECT BIN_OBJ FROM MYTABLE  where ID
> =16000254"] (doall res
>

There seems to be some sort of disconnect here. The second piece of code
queries a database and realizes the result seq. The first extracts a
serialized Java object from a byte buffer. The missing link would be however
one extracts a BLOB from the result seq in the form of a Java byte buffer.

As for the clojure syntax, that for obtaining the byte buffer is unknown,
but presumably involves Java interop. That for the deserialization is
straightforward:

(if-not (nil? byte-buffer)
  (with-open [object-in (ObjectInputStream.
  (ByteArrayInputStream. byte-buffer))]
(.readObject object-in)))

(Just four lines of Clojure code, versus 11 of Java. :))

(If your Java try block didn't just clean up the streams but also e.g.
logged the error you'll need a try form added, e.g.

(if-not (nil? byte-buffer)
  (try
(with-open [object-in (ObjectInputStream.
(ByteArrayInputStream. byte-buffer))]
  (.readObject object-in))
(catch (Throwable t)
  (log-error t)
  (throw t

or perhaps more specific handling of particular exceptions.)

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Query blobs in clojure.contrib.sql?

2009-11-30 Thread Base
Hi

I have a database that has a table with complex java objects stored in
a binary field.

In java i would do something like:

protected Object read(byte[] buf){
 Object obj = null;
 if (buf==null) return obj;
 try {
ObjectInputStream objectIn =
 new ObjectInputStream(
   new ByteArrayInputStream(buf));
obj = objectIn.readObject();
} catch (IOException e){
 ...
 }
   return obj;
}


I am stumped as to how to handle this sort of syntax in clojure.

(defn select-test2[]
  (with-connection db
(with-query-results res ["SELECT BIN_OBJ FROM MYTABLE  where ID
=16000254"] (doall res


Any thoughts would be *most* appreciated.

Thanks

Base

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en