[asterisk-users] Fetching Binary data from SQL Server
Sanjay Rajdev
sanjay.rajdev at featherstoneinformatics.com
Fri May 16 16:10:22 CDT 2008
I am trying to write a customized app using C that would fetch voice file from SQL Server 2000 using ODBC and FREETDS.
Currently I am only able to fetch first 63 KB chunk from the DB, and not able to fetch the rest of the file, below is the code that i am using to do so,
fd = open(fullpath, O_RDWR | O_CREAT | O_TRUNC, 0770);
if (fd < 0) {
ast_log(LOG_WARNING, "Failed to write '%s': %s\n", fullpath, strerror(errno));
res = -1;
goto free_res;
}
res = SQLGetData(stmt, 1, SQL_BINARY, empty, 0, &colsize);
fdlen = colsize;
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "COLSIZE = %d", colsize); //PRINTING COLSIZE ON CLI
if (fd > -1) {
char tmp[1]="";
lseek(fd, fdlen - 1, SEEK_SET);
if (write(fd, tmp, 1) != 1) {
close(fd);
res = -1;
goto free_res;
}
}
if (fd > -1){
//Trying to fetch data in chunks
for (offset = 0; offset < colsize; offset += CHUNKSIZE) {
if ((fdm = mmap(NULL, CHUNKSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset)) == MAP_FAILED) {
ast_log(LOG_WARNING, "Could not mmap the output file: %s (%d)\n", strerror(errno), errno);
goto free_res;
} else {
res = SQLGetData(stmt, x + 1, SQL_BINARY, fdm, CHUNKSIZE, NULL);
munmap(fdm, CHUNKSIZE);
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql);
unlink(fullpath);
goto free_res;
}
}
}
}
close(fd);
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
The value of colsize printed on CLI is 64512, Is there some limitation somewhere in FREETDS or ODBC.
Can anyone please help me to get this fixed?
Regards,
Sanjay Rajdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080517/b1928701/attachment.htm
More information about the asterisk-users
mailing list