Skip to content

Commit be07b51

Browse files
committed
Column names should be frozen
1 parent 886438c commit be07b51

File tree

4 files changed

+13
-4
lines changed

4 files changed

+13
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ This release drops support for Ruby 2.7. [#453] @flavorjones
2323
### Changed
2424

2525
- Raise `StandardError` in a few places where `Exception` was previously raised.
26+
- `Database#columns` returns a list of frozen strings now
2627

2728

2829
### Removed

ext/sqlite3/sqlite3_ruby.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
#define UTF8_P(_obj) (rb_enc_get_index(_obj) == rb_utf8_encindex())
1919
#define UTF16_LE_P(_obj) (rb_enc_get_index(_obj) == rb_enc_find_index("UTF-16LE"))
2020
#define UTF16_BE_P(_obj) (rb_enc_get_index(_obj) == rb_enc_find_index("UTF-16BE"))
21-
#define SQLITE3_UTF8_STR_NEW2(_obj) \
22-
(rb_enc_associate_index(rb_str_new2(_obj), rb_utf8_encindex()))
21+
#define SQLITE3_UTF8_STR_NEW2(_obj) (rb_utf8_str_new_cstr(_obj))
2322

2423
#ifdef USING_SQLCIPHER_INC_SUBDIR
2524
# include <sqlcipher/sqlite3.h>

ext/sqlite3/statement.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,13 @@ column_name(VALUE self, VALUE index)
374374

375375
name = sqlite3_column_name(ctx->st, (int)NUM2INT(index));
376376

377-
if (name) { return SQLITE3_UTF8_STR_NEW2(name); }
378-
return Qnil;
377+
VALUE ret = Qnil;
378+
379+
if (name) {
380+
ret = SQLITE3_UTF8_STR_NEW2(name);
381+
rb_obj_freeze(ret);
382+
}
383+
return ret;
379384
}
380385

381386
/* call-seq: stmt.column_decltype(index)

test/test_integration_resultset.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ def teardown
1818
@db.close
1919
end
2020

21+
def test_column_names_should_be_frozen
22+
assert @stmt.columns.all?(&:frozen?)
23+
end
24+
2125
def test_reset_unused
2226
assert_nothing_raised { @result.reset }
2327
assert_empty @result.to_a

0 commit comments

Comments
 (0)