DBIO-PostgreSQL

 view release on metacpan or  search on metacpan

t/85utf8.t  view on Meta::CPAN

  $dbh->do(
    'INSERT INTO utf8_test (label, content) VALUES (?, ?)',
    undef, $label, $str,
  );
}

# --- Part 1: raw DBI SELECT ---

for my $pair (@strings) {
  my ($label, $expected) = @$pair;
  my ($got) = $dbh->selectrow_array(
    'SELECT content FROM utf8_test WHERE label = ?', undef, $label,
  );

  ok defined $got,            "DBI: row returned for: $label";
  ok utf8::is_utf8($got),     "DBI: utf8 flag set: $label";
  is $got, $expected,         "DBI: round-trip value correct: $label";
  is length($got), length($expected),
                              "DBI: character length correct: $label";
}

# --- Part 2: DBIO ResultSet ---

my $rs = $schema->resultset('Utf8Test');

for my $pair (@strings) {
  my ($label, $expected) = @$pair;

  my $row = $rs->search({ label => $label })->first;
  ok $row,                         "DBIO: row returned for: $label";
  ok utf8::is_utf8($row->content), "DBIO: utf8 flag set: $label";
  is $row->content, $expected,     "DBIO: round-trip value correct: $label";
}

# --- Part 3: UPDATE round-trip via DBIO ---

{
  my $new_val = "\x{1f680} updated \x{2665}";
  my $row = $rs->search({ label => 'ASCII baseline' })->first;
  $row->update({ content => $new_val });
  $row->discard_changes;

  ok utf8::is_utf8($row->content), 'DBIO UPDATE: utf8 flag set after reload';
  is $row->content, $new_val,      'DBIO UPDATE: round-trip correct';
}

# --- Part 4: CREATE via DBIO ---

{
  my $new_str = "DBIO \x{2665} PostgreSQL \x{1f418}";
  my $new_row = $rs->create({ label => 'dbio_create', content => $new_str });

  ok utf8::is_utf8($new_row->content), 'DBIO CREATE: utf8 flag set on fresh row';
  is $new_row->content, $new_str,      'DBIO CREATE: content correct';

  $new_row->discard_changes;
  ok utf8::is_utf8($new_row->content), 'DBIO CREATE: utf8 flag after discard_changes';
  is $new_row->content, $new_str,      'DBIO CREATE: content correct after reload';
}

# --- Part 5: LIKE search with unicode pattern ---

{
  my $count = $rs->search({ content => { like => "%\x{1f600}%" } })->count;
  cmp_ok $count, '>=', 1, 'LIKE search with unicode pattern returns results';
}

done_testing;



( run in 3.458 seconds using v1.01-cache-2.11-cpan-c966e8aa7e8 )