Skip to Content.
Sympa Menu

freetds - Re: [freetds] freebcp on stdin/stdout

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: lihui zhao <lzhao AT n-able.com>
  • To: freetds AT lists.ibiblio.org
  • Subject: Re: [freetds] freebcp on stdin/stdout
  • Date: Mon, 24 Apr 2006 16:27:11 -0400

Hi James,

I just went through the datacopy program, it's pretty much identical to what you described here.
I see your point to rewrite freebcp this way, it's a lot simpler. Meanwhile, seems it's better to move some functions in datacopy to a utility, and modify them to be general enough to support import from files. Otherwise, the new freebcp will do a log copy/paste..

Thanks,

Lihui

James K. Lowden wrote:

How do you compare removing fseek/ftell from dblib vs. implementing freebcp in ctlib in term of amount of work, lib stability etc.?


Hi Lihui,
It would be much easier to improve freebcp than to rewrite it in terms of
ct-lib. For one thing, ct-lib lacks some of the API support you need.
Sending a file to a server via bcp should have the same code structure as
reading a result set: set up a row (by parsing a line in the file), send
it, repeat. In fact, it should use the public bcp* functions. It would
be much simpler if it did.
Something like:

Get table metadata.
foreach column {
malloc buffer
bcp_bind buffer
}
foreach line of data in the file {
foreach field in the line {
foreach byte {
fgetc
buffer[i++] = c;
break if field terminator
}
break if row terminator
}
bcp_sendrow
if irow++ > batchsize {
bcp_batch
}
}

There's no need to seek, and bcp_bind() will call dbconvert() and iconv()
as appropriate.
We also don't handle text/image data intelligently. That is, we allocate
one buffer for the whole thing, which is fine if we have the memory. To
use a smaller buffer, we need to use dbmoretext(). If you're interested
in working on db-lib, writing a unit test for dbmoretext() with bcp would
be a good place to start. (t0013.c uses the function, but not for bcp. I'm not sure it works with bcp.)
I'm happy to help further if you want to work on it. I'd prefer to use
the mailing list, but we can work off-list if that's your preference.
Regards,
--jkl






Archive powered by MHonArc 2.6.24.

Top of Page