@@ -306,6 +306,15 @@ Handle<Value> MysqlStatement::BindParamsSync(const Arguments& args) {
306
306
stmt->binds [i].buffer = int_data;
307
307
stmt->binds [i].is_null = 0 ;
308
308
stmt->binds [i].is_unsigned = false ;
309
+ } else if (js_param->IsBoolean ()) {
310
+ // I assume, booleans are usually stored as TINYINT(1)
311
+ int_data = new int ;
312
+ *int_data = js_param->Int32Value ();
313
+
314
+ stmt->binds [i].buffer_type = MYSQL_TYPE_TINY;
315
+ stmt->binds [i].buffer = int_data;
316
+ stmt->binds [i].is_null = 0 ;
317
+ stmt->binds [i].is_unsigned = false ;
309
318
} else if (js_param->IsUint32 ()) {
310
319
uint_data = new unsigned int ;
311
320
*uint_data = js_param->Uint32Value ();
@@ -472,7 +481,9 @@ Handle<Value> MysqlStatement::FetchAllSync(const Arguments& args) {
472
481
MYSQLSTMT_MUSTBE_PREPARED;
473
482
474
483
/* Get meta data for binding buffers */
484
+
475
485
unsigned int field_count = mysql_stmt_field_count (stmt->_stmt );
486
+
476
487
uint32_t i = 0 , j = 0 ;
477
488
unsigned long length[field_count];
478
489
int row_count = 0 ;
@@ -490,7 +501,9 @@ Handle<Value> MysqlStatement::FetchAllSync(const Arguments& args) {
490
501
memset (date_data, 0 , sizeof (date_data));
491
502
492
503
memset (bind, 0 , sizeof (bind));
504
+
493
505
meta = mysql_stmt_result_metadata (stmt->_stmt );
506
+
494
507
fields = meta->fields ;
495
508
while (i < field_count) {
496
509
bind[i].buffer_type = fields[i].type ;
@@ -559,33 +572,32 @@ Handle<Value> MysqlStatement::FetchAllSync(const Arguments& args) {
559
572
560
573
j = 0 ;
561
574
while (j < field_count) {
562
- // fprintf(stdout, "Value: %s", buffers[j]);
563
575
switch (fields[j].type ) {
564
576
case MYSQL_TYPE_NULL:
565
577
case MYSQL_TYPE_SHORT:
566
578
case MYSQL_TYPE_LONG:
567
579
case MYSQL_TYPE_LONGLONG:
568
580
case MYSQL_TYPE_INT24:
569
- // fprintf(stdout, "Value: %d (%ld)\n", int_data[j], length[j]);
570
581
js_result = Integer::New (int_data[j]);
571
582
break ;
572
583
case MYSQL_TYPE_TINY:
573
- fprintf (stdout, " Value: %u (%ld)\n " , tiny_data[j], length[j]);
574
- js_result = Integer::NewFromUnsigned (tiny_data[j]);
575
- break ;
584
+ if (length[j] == 1 ) {
585
+ js_result = BooleanObject::New (tiny_data[j] == true );
586
+ } else {
587
+ js_result = Integer::NewFromUnsigned (tiny_data[j]);
588
+ }
589
+ break ;
576
590
case MYSQL_TYPE_FLOAT:
577
591
case MYSQL_TYPE_DOUBLE:
578
- // js_result = Number::New(double_data[j]);
592
+ js_result = Number::New (double_data[j]);
579
593
break ;
580
594
case MYSQL_TYPE_DECIMAL:
581
595
case MYSQL_TYPE_NEWDECIMAL:
582
- // fprintf(stdout, "Value: %f (%ld)\n", double_data[j], length[j]);
583
596
js_result = Number::New (double_data[j])->ToString ();
584
597
break ;
585
598
case MYSQL_TYPE_STRING:
586
599
case MYSQL_TYPE_VAR_STRING:
587
600
case MYSQL_TYPE_VARCHAR:
588
- // fprintf(stdout, "Value: %s (%ld)\n", str_data[j], length[j]);
589
601
js_result = V8STR2 (str_data[j], length[j]);
590
602
break ;
591
603
case MYSQL_TYPE_YEAR:
0 commit comments