[EMAIL PROTECTED] wrote:
> Hi,
> 
> I tried your suggestion to blindly import the blob into R, doing the following:
> 
> > con <- dbConnect("MySQL", host="host", user="user", dbname="db")
> > rs <- dbGetQuery(con, statement=paste("select picture from db where id=1")
> 
> It didn't crash R. But rs is not usable. It seems that it has been converted to a 
> character object.

That's exactly correct -- that's what I mentioned the code does, but
what I was wondering is whether you could make use of such a character 
vector -- now I see that you can't.

> 
> In addition, we need to pass an image format to R, like png, bmp or something. It's 
> unclear to me how to achieve this even if we can read "rs" as a binary object as you 
> suggested.

Indeed the problem is more interesting than just bringing a blob
into R.  In general R cannot possibly know all the blob types
(there are just too many -- images, movies, sounds, binary data of
any kind, and many more yet to be created), so we have to define
a general mechanism for pluging in user-specified converters that
take a pointer to a blob and produce something that can be used
in R computations (see my comments re: a binaryConnection class to
work with binary buffers in my previous email quoted below.)

> 
> Any ideas?

I haven't worked with images, but the email from Sean Davis suggesting
dumping the images to files and then importing them with the pixmap
library seems quite reasonable to me.

Regards,

--
David

> 
> Thanks for suggestions!
> Jonathan
> 
> 
> 
> 
> 
> -----Original Message-----
> From: David James [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, September 22, 2004 10:06 AM
> To: LI,JONATHAN (A-Labs,ex1)
> Cc: David James
> Subject: Re: [R] RMySQL and Blob
> 
> 
> [EMAIL PROTECTED] wrote:
> > Hi David,
> > 
> > The application I have in mind is for images. In my case, size of images is known 
> > and they are not big. As an example, a 64*32 image will have 2048 pixels. If they 
> > are 8-bit grey-level pixels, the image occupies 2KB memory. 
> > 
> > I may venture to guess that the unknown size and type of a blob object in MySQL 
> > prevent it from being very usable in R since R doesn't have a datatype for a 
> > binary blob?
> 
> You could just blindly try to import it into R (but do it on a clean
> workspace, since it may crash R and you could loose your data!).
> The underlying C code clearly identifies FIELD_TYPE_BLOB and goes
> ahead and puts it in an R character vector (with comments clearly
> stating that it is a hack).  Once it moves the data from the MySQL
> result set buffer to the R vector, it computes the length in both
> places and prints a warning if they differ.
> 
> Or you could try to hack something.  For instance, what happens if
> instead of bringing the blob you import, say, as a string?
>     con <- dbConnect("MySQL", ....)
>     rs <- dbSendQuery(con, "select SUBSTRING(blob, 0) from table")
>     dd <- fetch(rs)
> 
> One possible general solution would be to define a new class
> "binaryConnection" simmilar to textConnection, so that you
> can readBin() and writeBin() from it.  In this way, blobs could
> return a binary buffer (just a pointer to a block of C memory) 
> that could be given to binaryConnection:
> 
>    data <- fetch(rs)
>    for(i in seq(nrow(data)){
>       ## extract blobs from each row and create a binary connection
>       bcon = binaryConnection(blobs$image[1])
>       img = readBin(bcon, "integer", n = 2048)
>       
>       ## work with the image
>    }
> 
> let me know what happens if you try to naively import a blob...
> 
> --
> David
> 
> > 
> > Thanks!
> > Jonathan
> > 
> > 
> > -----Original Message-----
> > From: David James [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, September 22, 2004 7:05 AM
> > To: LI,JONATHAN (A-Labs,ex1)
> > Cc: [EMAIL PROTECTED]
> > Subject: Re: [R] RMySQL and Blob
> > 
> > 
> > Hi Jonathan,
> > 
> > Currently RMySQL doesn't handle blob objects.  The mechanics of
> > inserting and extracting blob objects by itself is not too hard,
> > but issues such as how should blobs be made available to R, how to
> > prevent buffers overflows, how to prevent huge blobs from exhausting
> > the available memory, should R callback functions be invoked
> > as chunks of the blob are brought in, etc., need more consideration.
> > And these issues are not R/MySQL specific, but also relevant to
> > other databases and other non-dbms interfaces.
> > 
> > BTW there are R facilities (e.g., external pointers, finalizers) that 
> > seems quite important for this type of implementation.  
> > 
> > What type and how big are the blobs that want to import?
> > 
> > --
> > David
> > 
> > [EMAIL PROTECTED] wrote:
> > > Dear R experts,
> > > 
> > > Does RMySQL package handle Blob datatype in a MySQL database? Blob can represent 
> > > an image, a sound or some other 
> > > large and complex binary objects. In an article published by R-database special 
> > > interest group, named "A common database interface (DBI)" (updated June 2003),  
> > > it's mentioned in "open issues and limitations" that "We need to carefully plan 
> > > how to deal with binary objects". 
> > > 
> > > Before I invest time to try, I would appreciate any experts' opinions.
> > > 
> > > Thanks,
> > > Jonathan
> > > 
> > > ______________________________________________
> > > [EMAIL PROTECTED] mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> > 
>

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to