aboutsummaryrefslogtreecommitdiffstats
path: root/src/mysqlerl.c
diff options
context:
space:
mode:
authorBrian Cully <bjc@kublai.com>2008-03-01 17:20:08 -0500
committerBrian Cully <bjc@kublai.com>2008-03-01 17:20:08 -0500
commit3dd8d27ab301442cdacc7e130de85c4899ca16fa (patch)
treed358ace4b0a77f491d530050c4424ec7c9ac5283 /src/mysqlerl.c
parent876136763a49adc76eb4e9fe4a7a9dc78fb9a171 (diff)
downloadmysqlerl-3dd8d27ab301442cdacc7e130de85c4899ca16fa.tar.gz
mysqlerl-3dd8d27ab301442cdacc7e130de85c4899ca16fa.zip
Use erlang term encoding for send/recv between c and erlang for maximum flexibility and code length.
Diffstat (limited to 'src/mysqlerl.c')
-rw-r--r--src/mysqlerl.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/mysqlerl.c b/src/mysqlerl.c
index b5ad31c..0ce2703 100644
--- a/src/mysqlerl.c
+++ b/src/mysqlerl.c
@@ -159,11 +159,9 @@ write_cmd(const char *cmd, msglen_t len)
{
msglen_t nlen;
- nlen = htonl(len + 3);
+ nlen = htonl(len);
if (restartable_write((unsigned char *)&nlen, sizeof(nlen)) == -1)
return -1;
- if (restartable_write((unsigned char *)" - ", 3) == -1)
- return -1;
if (restartable_write((unsigned char *)cmd, len) == -1)
return -1;
@@ -177,15 +175,25 @@ dispatch_db_cmd(MYSQL *dbh, msg_t *msg)
tag = erl_element(1, msg->cmd);
if (strncmp((char *)ERL_ATOM_PTR(tag), QUERY_MSG, sizeof(QUERY_MSG)) == 0) {
- ETERM *query;
- char *q;
+ ETERM *query, *resp;
+ char *q, *buf;
+ int buflen;
+
query = erl_element(2, msg->cmd);
q = erl_iolist_to_string(query);
erl_free_term(query);
logmsg("DEBUG: got query msg: %s.", q);
- write_cmd(q, strlen(q));
+ resp = erl_format("{ok, ~s}", q);
erl_free(q);
+
+ buflen = erl_term_len(resp);
+ buf = (char *)malloc(buflen);
+ erl_encode(resp, (unsigned char *)buf);
+ erl_free_term(resp);
+
+ write_cmd(buf, buflen);
+ free(buf);
} else {
logmsg("WARNING: message type %s unknown.", (char *)ERL_ATOM_PTR(tag));
erl_free_term(tag);