@@ -145,39 +145,40 @@ step(VALUE self)
145
145
case SQLITE_ROW : {
146
146
int i ;
147
147
for (i = 0 ; i < length ; i ++ ) {
148
+ VALUE val ;
149
+
148
150
switch (sqlite3_column_type (stmt , i )) {
149
151
case SQLITE_INTEGER :
150
- rb_ary_push ( list , LL2NUM (sqlite3_column_int64 (stmt , i ) ));
152
+ val = LL2NUM (sqlite3_column_int64 (stmt , i ));
151
153
break ;
152
154
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 ));
154
156
break ;
155
157
case SQLITE_TEXT : {
156
- VALUE str = rb_str_new (
158
+ val = rb_utf8_str_new (
157
159
(const char * )sqlite3_column_text (stmt , i ),
158
160
(long )sqlite3_column_bytes (stmt , i )
159
161
);
160
- rb_enc_associate_index (str , rb_utf8_encindex ());
161
162
if (internal_encoding ) {
162
- str = rb_str_export_to_enc (str , internal_encoding );
163
+ val = rb_str_export_to_enc (val , internal_encoding );
163
164
}
164
- rb_ary_push (list , str );
165
165
}
166
166
break ;
167
167
case SQLITE_BLOB : {
168
- VALUE str = rb_str_new (
168
+ val = rb_str_new (
169
169
(const char * )sqlite3_column_blob (stmt , i ),
170
170
(long )sqlite3_column_bytes (stmt , i )
171
171
);
172
- rb_ary_push (list , str );
173
172
}
174
173
break ;
175
174
case SQLITE_NULL :
176
- rb_ary_push ( list , Qnil ) ;
175
+ val = Qnil ;
177
176
break ;
178
177
default :
179
178
rb_raise (rb_eRuntimeError , "bad type" );
180
179
}
180
+
181
+ rb_ary_store (list , (long )i , val );
181
182
}
182
183
}
183
184
break ;
0 commit comments