the question:
I am trying to use the C API to insert floating (4 byte) point data into a
mysql table. It is very desirable to put the data in as the binary
representation and not as a sprintf family converted string (to maintain
precision & improve performance). My initial attempt is below - perhaps I
have misunderstood the usage of mysql_real_query? I should make two notes
on the following code: the host and source are the same machine so
endianism is (should) not be an issue and I am also trying to insert two
integers in the same manner. With the code as it is I get an error in
mysql statement.
the table description:
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| frame | int | | MUL | 0 | |
| atom | int | | MUL | 0 | |
| x | float | | | 0 | |
| y | float | | | 0 | |
| z | float | | | 0 | |
+-------+---------+------+-----+---------+-------+
the code:
char insert_format[] = "INSERT INTO %s VALUES (%hhd%hhd%hhd%hhd,
%hhd%hhd%hhd%hhd, %hhd%hhd%hhd%hhd, %hhd%hhd%hhd%hhd,%hhd%hhd%hhd%hhd)";
int build_real_insert(char *query, char *table, int frame, int atom, float
x, float y, float z) {
unsigned char *fbp = (unsigned char *)&frame;
unsigned char *abp = (unsigned char *)&atom;
unsigned char *xbp = (unsigned char *)&x;
unsigned char *ybp = (unsigned char *)&y;
unsigned char *zbp = (unsigned char *)&z;
return sprintf(query, insert_format, table, fbp[0], fbp[1],
fbp[2], fbp[3], abp[0], abp[1], abp[2], abp[3], xbp[0], xbp[1], xbp[2],
xbp[3], ybp[0], ybp[1], ybp[2], ybp[3], zbp[0], zbp[1], zbp[2], zbp[3]);
}
in the body:
query_len = build_real_insert(query,table_name,frame,i,x[i],y[i],z[i]);
if(mysql_real_query(mysql,query,query_len)) {
// error handling
Many thanks,
David
--
David A. C. Beck
[EMAIL PROTECTED]
Valerie Daggett Laboratory
Biomolecular Structure and Design Program
Department of Medicinal Chemistry
University of Washington, Seattle
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php