Skip to content

Commit fb91095

Browse files
nyaxtjustincase
authored andcommitted
remove Statement#each method
1 parent f53d856 commit fb91095

File tree

1 file changed

+0
-242
lines changed

1 file changed

+0
-242
lines changed

ext/mysql2/statement.c

Lines changed: 0 additions & 242 deletions
Original file line numberDiff line numberDiff line change
@@ -342,253 +342,11 @@ static VALUE fields(VALUE self) {
342342
return field_list;
343343
}
344344

345-
#if 0
346-
// FIXME refactor into Mysql2::Result
347-
static VALUE each(VALUE self) {
348-
MYSQL_STMT *stmt;
349-
GET_STATEMENT(self);
350-
stmt = stmt_wrapper->stmt;
351-
352-
if(! rb_block_given_p())
353-
{
354-
rb_raise(cMysql2Error, "FIXME: current limitation: each require block");
355-
}
356-
357-
if (result) {
358-
MYSQL_BIND *result_buffers;
359-
my_bool *is_null;
360-
my_bool *error;
361-
unsigned long *length;
362-
MYSQL_FIELD *fields;
363-
unsigned long field_count;
364-
unsigned long i;
365-
366-
// FIXME we are calling mysql_stmt_store_result() *before* instead of *after*
367-
// binding the data buffers with mysql_stmt_bind_result(). Turn into a config
368-
// flag for result sets that require a lot of memory?
369-
//
370-
// From MySQL docs:
371-
// "By default, result sets are fetched unbuffered a row at a time from the
372-
// server. To buffer the entire result set on the client, call
373-
// mysql_stmt_store_result() after binding the data buffers and before
374-
// calling mysql_stmt_fetch()."
375-
if (mysql_stmt_store_result(stmt)) {
376-
rb_raise(cMysql2Error, "%s", mysql_stmt_error(stmt));
377-
}
378-
379-
fields = mysql_fetch_fields(result);
380-
field_count = mysql_num_fields(result);
381-
382-
result_buffers = xcalloc(field_count, sizeof(MYSQL_BIND));
383-
is_null = xcalloc(field_count, sizeof(my_bool));
384-
error = xcalloc(field_count, sizeof(my_bool));
385-
length = xcalloc(field_count, sizeof(unsigned long));
386-
387-
for (i = 0; i < field_count; i++) {
388-
result_buffers[i].buffer_type = fields[i].type;
389-
390-
// mysql type | C type
391-
switch(fields[i].type) {
392-
case MYSQL_TYPE_NULL: // NULL
393-
break;
394-
case MYSQL_TYPE_TINY: // signed char
395-
result_buffers[i].buffer = xcalloc(1, sizeof(signed char));
396-
result_buffers[i].buffer_length = sizeof(signed char);
397-
break;
398-
case MYSQL_TYPE_SHORT: // short int
399-
result_buffers[i].buffer = xcalloc(1, sizeof(short int));
400-
result_buffers[i].buffer_length = sizeof(short int);
401-
break;
402-
case MYSQL_TYPE_INT24: // int
403-
case MYSQL_TYPE_LONG: // int
404-
case MYSQL_TYPE_YEAR: // int
405-
result_buffers[i].buffer = xcalloc(1, sizeof(int));
406-
result_buffers[i].buffer_length = sizeof(int);
407-
break;
408-
case MYSQL_TYPE_LONGLONG: // long long int
409-
result_buffers[i].buffer = xcalloc(1, sizeof(long long int));
410-
result_buffers[i].buffer_length = sizeof(long long int);
411-
break;
412-
case MYSQL_TYPE_FLOAT: // float
413-
case MYSQL_TYPE_DOUBLE: // double
414-
result_buffers[i].buffer = xcalloc(1, sizeof(double));
415-
result_buffers[i].buffer_length = sizeof(double);
416-
break;
417-
case MYSQL_TYPE_TIME: // MYSQL_TIME
418-
case MYSQL_TYPE_DATE: // MYSQL_TIME
419-
case MYSQL_TYPE_NEWDATE: // MYSQL_TIME
420-
case MYSQL_TYPE_DATETIME: // MYSQL_TIME
421-
case MYSQL_TYPE_TIMESTAMP: // MYSQL_TIME
422-
result_buffers[i].buffer = xcalloc(1, sizeof(MYSQL_TIME));
423-
result_buffers[i].buffer_length = sizeof(MYSQL_TIME);
424-
break;
425-
case MYSQL_TYPE_DECIMAL: // char[]
426-
case MYSQL_TYPE_NEWDECIMAL: // char[]
427-
case MYSQL_TYPE_STRING: // char[]
428-
case MYSQL_TYPE_VAR_STRING: // char[]
429-
case MYSQL_TYPE_VARCHAR: // char[]
430-
case MYSQL_TYPE_TINY_BLOB: // char[]
431-
case MYSQL_TYPE_BLOB: // char[]
432-
case MYSQL_TYPE_MEDIUM_BLOB: // char[]
433-
case MYSQL_TYPE_LONG_BLOB: // char[]
434-
case MYSQL_TYPE_BIT: // char[]
435-
case MYSQL_TYPE_SET: // char[]
436-
case MYSQL_TYPE_ENUM: // char[]
437-
case MYSQL_TYPE_GEOMETRY: // char[]
438-
result_buffers[i].buffer = malloc(fields[i].max_length);
439-
result_buffers[i].buffer_length = fields[i].max_length;
440-
break;
441-
default:
442-
rb_raise(cMysql2Error, "unhandled mysql type: %d", fields[i].type);
443-
}
444-
445-
result_buffers[i].is_null = &is_null[i];
446-
result_buffers[i].length = &length[i];
447-
result_buffers[i].error = &error[i];
448-
result_buffers[i].is_unsigned = ((fields[i].flags & UNSIGNED_FLAG) != 0);
449-
}
450-
451-
if(mysql_stmt_bind_result(stmt, result_buffers)) {
452-
for(i = 0; i < field_count; i++) {
453-
if (result_buffers[i].buffer) {
454-
free(result_buffers[i].buffer);
455-
}
456-
}
457-
free(result_buffers);
458-
free(is_null);
459-
free(error);
460-
free(length);
461-
rb_raise(cMysql2Error, "%s", mysql_stmt_error(stmt));
462-
}
463-
464-
while(!mysql_stmt_fetch(stmt)) {
465-
VALUE row = rb_ary_new2((long)field_count);
466-
467-
for(i = 0; i < field_count; i++) {
468-
VALUE column = Qnil;
469-
MYSQL_TIME *ts;
470-
471-
if (is_null[i]) {
472-
column = Qnil;
473-
} else {
474-
switch(result_buffers[i].buffer_type) {
475-
case MYSQL_TYPE_TINY: // signed char
476-
if (result_buffers[i].is_unsigned) {
477-
column = UINT2NUM(*((unsigned char*)result_buffers[i].buffer));
478-
} else {
479-
column = INT2NUM(*((signed char*)result_buffers[i].buffer));
480-
}
481-
break;
482-
case MYSQL_TYPE_SHORT: // short int
483-
if (result_buffers[i].is_unsigned) {
484-
column = UINT2NUM(*((unsigned short int*)result_buffers[i].buffer));
485-
} else {
486-
column = INT2NUM(*((short int*)result_buffers[i].buffer));
487-
}
488-
break;
489-
case MYSQL_TYPE_INT24: // int
490-
case MYSQL_TYPE_LONG: // int
491-
case MYSQL_TYPE_YEAR: // int
492-
if (result_buffers[i].is_unsigned) {
493-
column = UINT2NUM(*((unsigned int*)result_buffers[i].buffer));
494-
} else {
495-
column = INT2NUM(*((int*)result_buffers[i].buffer));
496-
}
497-
break;
498-
case MYSQL_TYPE_LONGLONG: // long long int
499-
if (result_buffers[i].is_unsigned) {
500-
column = ULL2NUM(*((unsigned long long int*)result_buffers[i].buffer));
501-
} else {
502-
column = LL2NUM(*((long long int*)result_buffers[i].buffer));
503-
}
504-
break;
505-
case MYSQL_TYPE_FLOAT: // float
506-
column = rb_float_new((double)(*((float*)result_buffers[i].buffer)));
507-
break;
508-
case MYSQL_TYPE_DOUBLE: // double
509-
column = rb_float_new((double)(*((double*)result_buffers[i].buffer)));
510-
break;
511-
case MYSQL_TYPE_DATE: // MYSQL_TIME
512-
ts = (MYSQL_TIME*)result_buffers[i].buffer;
513-
column = rb_funcall(cDate, rb_intern("new"), 3, INT2NUM(ts->year), INT2NUM(ts->month), INT2NUM(ts->day));
514-
break;
515-
case MYSQL_TYPE_TIME: // MYSQL_TIME
516-
ts = (MYSQL_TIME*)result_buffers[i].buffer;
517-
column = rb_funcall(rb_cTime,
518-
rb_intern("mktime"), 6,
519-
UINT2NUM(Qnil),
520-
UINT2NUM(Qnil),
521-
UINT2NUM(Qnil),
522-
UINT2NUM(ts->hour),
523-
UINT2NUM(ts->minute),
524-
UINT2NUM(ts->second));
525-
break;
526-
case MYSQL_TYPE_NEWDATE: // MYSQL_TIME
527-
case MYSQL_TYPE_DATETIME: // MYSQL_TIME
528-
case MYSQL_TYPE_TIMESTAMP: // MYSQL_TIME
529-
ts = (MYSQL_TIME*)result_buffers[i].buffer;
530-
column = rb_funcall(rb_cTime,
531-
rb_intern("mktime"), 6,
532-
UINT2NUM(ts->year),
533-
UINT2NUM(ts->month),
534-
UINT2NUM(ts->day),
535-
UINT2NUM(ts->hour),
536-
UINT2NUM(ts->minute),
537-
UINT2NUM(ts->second));
538-
break;
539-
case MYSQL_TYPE_DECIMAL: // char[]
540-
case MYSQL_TYPE_NEWDECIMAL: // char[]
541-
column = rb_funcall(cBigDecimal, rb_intern("new"), 1, rb_str_new(result_buffers[i].buffer, *(result_buffers[i].length)));
542-
break;
543-
case MYSQL_TYPE_STRING: // char[]
544-
case MYSQL_TYPE_VAR_STRING: // char[]
545-
case MYSQL_TYPE_VARCHAR: // char[]
546-
case MYSQL_TYPE_TINY_BLOB: // char[]
547-
case MYSQL_TYPE_BLOB: // char[]
548-
case MYSQL_TYPE_MEDIUM_BLOB: // char[]
549-
case MYSQL_TYPE_LONG_BLOB: // char[]
550-
case MYSQL_TYPE_BIT: // char[]
551-
case MYSQL_TYPE_SET: // char[]
552-
case MYSQL_TYPE_ENUM: // char[]
553-
case MYSQL_TYPE_GEOMETRY: // char[]
554-
// FIXME: handle encoding
555-
column = rb_str_new(result_buffers[i].buffer, *(result_buffers[i].length));
556-
break;
557-
default:
558-
rb_raise(cMysql2Error, "unhandled buffer type: %d",
559-
result_buffers[i].buffer_type);
560-
break;
561-
}
562-
}
563-
564-
rb_ary_store(row, (long)i, column);
565-
}
566-
567-
rb_yield(row);
568-
}
569-
570-
for (i = 0; i < field_count; i++) {
571-
if (result_buffers[i].buffer) {
572-
free(result_buffers[i].buffer);
573-
}
574-
}
575-
free(result_buffers);
576-
free(is_null);
577-
free(error);
578-
free(length);
579-
mysql_free_result(result);
580-
}
581-
582-
return self;
583-
}
584-
#endif
585-
586345
void init_mysql2_statement() {
587346
cMysql2Statement = rb_define_class_under(mMysql2, "Statement", rb_cObject);
588347

589348
rb_define_method(cMysql2Statement, "param_count", param_count, 0);
590349
rb_define_method(cMysql2Statement, "field_count", field_count, 0);
591350
rb_define_method(cMysql2Statement, "execute", execute, -1);
592351
rb_define_method(cMysql2Statement, "fields", fields, 0);
593-
// rb_define_method(cMysql2Statement, "each", each, 0);
594352
}

0 commit comments

Comments
 (0)