@@ -538,7 +538,10 @@ Handle<Value> MysqlStatement::FetchAllSync(const Arguments& args) {
538
538
type == MYSQL_TYPE_BLOB || // BLOB, TEXT
539
539
type == MYSQL_TYPE_MEDIUM_BLOB || // MEDIUMBLOB, MEDIUMTEXT
540
540
type == MYSQL_TYPE_LONG_BLOB || // LONGBLOB, LONGTEXT
541
- type == MYSQL_TYPE_BIT) { // BIT
541
+ type == MYSQL_TYPE_BIT || // BIT
542
+ type == MYSQL_TYPE_SET || // SET
543
+ type == MYSQL_TYPE_ENUM || // ENUM
544
+ type == MYSQL_TYPE_GEOMETRY) { // Spatial fields
542
545
buf_length = sizeof (char ) * fields[i].length ;
543
546
ptr = (char *) malloc (buf_length);
544
547
} else if (
@@ -549,6 +552,9 @@ Handle<Value> MysqlStatement::FetchAllSync(const Arguments& args) {
549
552
type == MYSQL_TYPE_TIMESTAMP) { // TIMESTAMP
550
553
buf_length = sizeof (MYSQL_TIME);
551
554
ptr = (MYSQL_TIME *) malloc (buf_length);
555
+ } else { // For others we bind char buffer
556
+ buf_length = sizeof (char ) * fields[i].length ;
557
+ ptr = (char *) malloc (buf_length);
552
558
}
553
559
554
560
DEBUG_PRINT (" Binding buffer: ptr: %p, size: %d\n " , ptr, buf_length);
@@ -637,7 +643,9 @@ Handle<Value> MysqlStatement::FetchAllSync(const Arguments& args) {
637
643
type == MYSQL_TYPE_BLOB || // BLOB, TEXT
638
644
type == MYSQL_TYPE_MEDIUM_BLOB || // MEDIUMBLOB, MEDIUMTEXT
639
645
type == MYSQL_TYPE_LONG_BLOB || // LONGBLOB, LONGTEXT
640
- type == MYSQL_TYPE_BIT) { // BIT
646
+ type == MYSQL_TYPE_BIT || // BIT
647
+ type == MYSQL_TYPE_ENUM || // ENUM
648
+ type == MYSQL_TYPE_GEOMETRY) { // Spatial fields
641
649
char *data = (char *) ptr;
642
650
// create buffer
643
651
if (fields[j].flags & BINARY_FLAG) {
@@ -678,6 +686,20 @@ Handle<Value> MysqlStatement::FetchAllSync(const Arguments& args) {
678
686
time_t timestamp = mktime (datetime);
679
687
680
688
js_field = Date::New (1000 * (double ) timestamp);
689
+ } else if (type == MYSQL_TYPE_SET) { // SET
690
+ // TODO(Sannis): Maybe memory leaks here
691
+ char *pch, *last, *field_value = (char *) ptr;
692
+ int k = 0 ;
693
+ Local<Array> js_field_array = Array::New ();
694
+
695
+ pch = strtok_r (field_value, " ," , &last);
696
+ while (pch != NULL ) {
697
+ js_field_array->Set (Integer::New (k), V8STR (pch));
698
+ pch = strtok_r (NULL , " ," , &last);
699
+ k++;
700
+ }
701
+
702
+ js_field = js_field_array;
681
703
} else {
682
704
js_field = V8STR2 ((char *) ptr, length[j]);
683
705
}
0 commit comments