diff --git a/lib/MySQL_Protocol.cpp b/lib/MySQL_Protocol.cpp index ee1673ee7..58ca1a660 100644 --- a/lib/MySQL_Protocol.cpp +++ b/lib/MySQL_Protocol.cpp @@ -17,6 +17,7 @@ typedef uint8_t uchar; //#define RESULTSET_BUFLEN 16300 + #ifdef DEBUG static void __dump_pkt(const char *func, unsigned char *_ptr, unsigned int len) { @@ -1463,17 +1464,48 @@ stmt_execute_metadata_t * MySQL_Protocol::get_binds_from_pkt(void *ptr, unsigned p+=8; break; case MYSQL_TYPE_TIME: + { + binds[i].buffer=malloc(sizeof(MYSQL_TIME)); // NOTE: remember to free() this + uint8_t l; + memcpy(&l,p,1); + p++; + MYSQL_TIME ts; + memset(&ts,0,sizeof(MYSQL_TIME)); + memcpy(&ts.neg,p,1); + memcpy(&ts.day,p+1,4); + memcpy(&ts.hour,p+5,1); + memcpy(&ts.minute,p+6,1); + memcpy(&ts.second,p+7,1); + if (l>8) { + memcpy(&ts.second_part,p+8,4); + } + p+=l; + memcpy(binds[i].buffer,&ts,sizeof(MYSQL_TIME)); + } + break; case MYSQL_TYPE_DATE: case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_DATETIME: { binds[i].buffer=malloc(sizeof(MYSQL_TIME)); // NOTE: remember to free() this - memset(binds[i].buffer,0,sizeof(MYSQL_TIME)); uint8_t l; memcpy(&l,p,1); p++; - memcpy(binds[i].buffer,p,l); + MYSQL_TIME ts; + memset(&ts,0,sizeof(MYSQL_TIME)); + memcpy(&ts.year,p,2); + memcpy(&ts.month,p+2,1); + memcpy(&ts.day,p+3,1); + if (l>4) { + memcpy(&ts.hour,p+4,1); + memcpy(&ts.minute,p+5,1); + memcpy(&ts.second,p+6,1); + } + if (l>7) { + memcpy(&ts.second_part,p+7,4); + } p+=l; + memcpy(binds[i].buffer,&ts,sizeof(MYSQL_TIME)); } break; case MYSQL_TYPE_TINY_BLOB: