@@ -145,39 +145,40 @@ step(VALUE self)
145145 case SQLITE_ROW : {
146146 int i ;
147147 for (i = 0 ; i < length ; i ++ ) {
148+ VALUE val ;
149+
148150 switch (sqlite3_column_type (stmt , i )) {
149151 case SQLITE_INTEGER :
150- rb_ary_push ( list , LL2NUM (sqlite3_column_int64 (stmt , i ) ));
152+ val = LL2NUM (sqlite3_column_int64 (stmt , i ));
151153 break ;
152154 case SQLITE_FLOAT :
153- rb_ary_push ( list , rb_float_new (sqlite3_column_double (stmt , i ) ));
155+ val = rb_float_new (sqlite3_column_double (stmt , i ));
154156 break ;
155157 case SQLITE_TEXT : {
156- VALUE str = rb_str_new (
158+ val = rb_utf8_str_new (
157159 (const char * )sqlite3_column_text (stmt , i ),
158160 (long )sqlite3_column_bytes (stmt , i )
159161 );
160- rb_enc_associate_index (str , rb_utf8_encindex ());
161162 if (internal_encoding ) {
162- str = rb_str_export_to_enc (str , internal_encoding );
163+ val = rb_str_export_to_enc (val , internal_encoding );
163164 }
164- rb_ary_push (list , str );
165165 }
166166 break ;
167167 case SQLITE_BLOB : {
168- VALUE str = rb_str_new (
168+ val = rb_str_new (
169169 (const char * )sqlite3_column_blob (stmt , i ),
170170 (long )sqlite3_column_bytes (stmt , i )
171171 );
172- rb_ary_push (list , str );
173172 }
174173 break ;
175174 case SQLITE_NULL :
176- rb_ary_push ( list , Qnil ) ;
175+ val = Qnil ;
177176 break ;
178177 default :
179178 rb_raise (rb_eRuntimeError , "bad type" );
180179 }
180+
181+ rb_ary_store (list , (long )i , val );
181182 }
182183 }
183184 break ;
0 commit comments