diff options
author | Brian Cully <bjc@kublai.com> | 2008-07-28 19:14:40 -0400 |
---|---|---|
committer | Brian Cully <github.20.shmit@spamgourmet.com> | 2008-07-28 19:14:40 -0400 |
commit | 02bcc70bb49b04bb70c19277b185533efd11aa62 (patch) | |
tree | cad1eb47ee066ef1fc06a8cd207c54e31706c43f /src | |
parent | d5d93dc5d985c8411bf9336279a996d01abdbde9 (diff) | |
download | mysqlerl-02bcc70bb49b04bb70c19277b185533efd11aa62.tar.gz mysqlerl-02bcc70bb49b04bb70c19277b185533efd11aa62.zip |
Fill out everything but timestamps, since I don't know the ODBC form of those.
Diffstat (limited to 'src')
-rw-r--r-- | src/mysqlerl.c | 57 |
1 files changed, 49 insertions, 8 deletions
diff --git a/src/mysqlerl.c b/src/mysqlerl.c index 1942708..146d5e3 100644 --- a/src/mysqlerl.c +++ b/src/mysqlerl.c @@ -310,30 +310,64 @@ handle_param_query(ETERM *msg) t = (char *)ERL_ATOM_PTR(t_type); bind[i].length = malloc(sizeof(unsigned long)); if (strncmp(t, NUMERIC_SQL, strlen(NUMERIC_SQL)) == 0) { + int val; + bind[i].buffer_type = MYSQL_TYPE_LONG; *bind[i].length = bind[i].buffer_length * sizeof(int); bind[i].buffer = malloc(*bind[i].length); - memcpy(bind[i].buffer, value, sizeof(int)); + memset(bind[i].buffer, 0, *bind[i].length); + + val = ERL_INT_VALUE(value); + memcpy(bind[i].buffer, &val, *bind[i].length); } else if (strncmp(t, DECIMAL_SQL, strlen(DECIMAL_SQL)) == 0) { + char *val; + bind[i].buffer_type = MYSQL_TYPE_STRING; *bind[i].length = bind[i].buffer_length * sizeof(char *); bind[i].buffer = malloc(*bind[i].length); - memcpy(bind[i].buffer, value, sizeof(char)); + memset(bind[i].buffer, 0, *bind[i].length); + + val = erl_iolist_to_string(value); + if (val) { + memcpy(bind[i].buffer, val, *bind[i].length); + free(val); + } } else if (strncmp(t, FLOAT_SQL, strlen(FLOAT_SQL)) == 0) { + float val; + bind[i].buffer_type = MYSQL_TYPE_FLOAT; *bind[i].length = bind[i].buffer_length * sizeof(float); bind[i].buffer = malloc(*bind[i].length); - memcpy(bind[i].buffer, value, sizeof(float)); + memset(bind[i].buffer, 0, *bind[i].length); + + val = ERL_FLOAT_VALUE(value); + memcpy(bind[i].buffer, &val, *bind[i].length); } else if (strncmp(t, CHAR_SQL, strlen(CHAR_SQL)) == 0) { + char *val; + bind[i].buffer_type = MYSQL_TYPE_STRING; *bind[i].length = bind[i].buffer_length * sizeof(char *); bind[i].buffer = malloc(*bind[i].length); - memcpy(bind[i].buffer, value, sizeof(char)); + memset(bind[i].buffer, 0, *bind[i].length); + + val = erl_iolist_to_string(value); + if (val) { + memcpy(bind[i].buffer, val, *bind[i].length); + free(val); + } } else if (strncmp(t, VARCHAR_SQL, strlen(VARCHAR_SQL)) == 0) { + char *val; + bind[i].buffer_type = MYSQL_TYPE_BLOB; *bind[i].length = bind[i].buffer_length * sizeof(char *); bind[i].buffer = malloc(*bind[i].length); - memcpy(bind[i].buffer, value, sizeof(char)); + memset(bind[i].buffer, 0, *bind[i].length); + + val = erl_iolist_to_string(value); + if (val) { + memcpy(bind[i].buffer, val, *bind[i].length); + free(val); + } } else { logmsg("ERROR: Unknown sized type: {%s, %d}", t, bind[i].buffer_length); @@ -346,14 +380,21 @@ handle_param_query(ETERM *msg) t = (char *)ERL_ATOM_PTR(type); if (strncmp(t, TIMESTAMP_SQL, strlen(TIMESTAMP_SQL)) == 0) { bind[i].buffer_type = MYSQL_TYPE_TIMESTAMP; - *bind[i].length = sizeof(int); + *bind[i].length = sizeof(MYSQL_TIME); bind[i].buffer = malloc(*bind[i].length); - memcpy(bind[i].buffer, value, sizeof(MYSQL_TYPE_TIMESTAMP)); + memset(bind[i].buffer, 0, *bind[i].length); + + memcpy(bind[i].buffer, value, *bind[i].length); } else if (strncmp(t, INTEGER_SQL, strlen(INTEGER_SQL)) == 0) { + int val; + bind[i].buffer_type = MYSQL_TYPE_LONG; *bind[i].length = sizeof(int); bind[i].buffer = malloc(*bind[i].length); - memcpy(bind[i].buffer, value, sizeof(int)); + memset(bind[i].buffer, 0, *bind[i].length); + + val = ERL_INT_VALUE(value); + memcpy(bind[i].buffer, &val, *bind[i].length); } else { logmsg("ERROR: Unknown type: %s", t); exit(3); |