Skip to content

Commit 0f4db3d

Browse files
authored
Merge branch 'main' into sandlerr/ractor
2 parents 8aaab0f + db19743 commit 0f4db3d

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

ext/sqlite3/statement.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)