Mojo-SQLite

 view release on metacpan or  search on metacpan

t/results.t  view on Meta::CPAN

  };

  subtest 'Iterate' => sub {
    my $results = $db->query('select * from results_test');
    is_deeply $results->array, [1, 'foo'], 'right structure';
    is_deeply $results->array, [2, 'bar'], 'right structure';
    is $results->array, undef, 'no more results';
  };

  subtest 'Non-blocking query where not all results have been fetched' => sub {
    my ($fail, $result);
    my @promises = (
      $db->query_p('select name from results_test')->then(sub {
        my $results = shift;
        push @$result, $results->array;
        $results->finish;
      }),
      $db->query_p('select name from results_test')->then(sub {
        my $results = shift;
        push @$result, $results->array_test;
        $results->finish;
      }),
      $db->query_p('select name from results_test')->then(sub {
        my $results = shift;
        push @$result, $results->array;
      }),
    );
    Mojo::Promise->all(@promises)->catch(sub { $fail = 1 })->wait;
    ok !$fail, 'no error';
    is_deeply $result, [['foo'], ['foo'], ['foo']], 'right structure';
  };

  subtest 'Transactions' => sub {
    {
      my $tx = $db->begin;
      $db->query("insert into results_test (name) values ('tx1')");
      $db->query("insert into results_test (name) values ('tx1')");
      $tx->commit;
    }
    is_deeply $db->query('select * from results_test where name = ?', 'tx1')
      ->hashes->to_array, [{id => 3, name => 'tx1'}, {id => 4, name => 'tx1'}],
      'right structure';
    {
      my $tx = $db->begin;
      $db->query("insert into results_test (name) values ('tx2')");
      $db->query("insert into results_test (name) values ('tx2')");
    }
    is_deeply $db->query('select * from results_test where name = ?', 'tx2')
      ->hashes->to_array, [], 'no results';
    eval {
      my $tx = $db->begin;
      $db->query("insert into results_test (name) values ('tx3')");
      $db->query("insert into results_test (name) values ('tx3')");
      $db->query('does_not_exist');
      $tx->commit;
    };
    like $@, qr/does_not_exist/, 'right error';
    is_deeply $db->query('select * from results_test where name = ?', 'tx3')
      ->hashes->to_array, [], 'no results';
    {
      my $timeout = $db->dbh->sqlite_busy_timeout // 0;
      $db->dbh->sqlite_busy_timeout(100);
      my $tx;
      eval {
        $tx = $db->begin('immediate');
        $db->begin('immediate');
      };
      ok $@, 'transaction failed';
      ok $db->dbh->err, 'database error code retained';
      $db->dbh->sqlite_busy_timeout($timeout);
    }
  };

  subtest 'Issue #2' => sub {
    my $results1 = $db->query('select 1 as one');
    is_deeply $results1->hashes, [{one => 1}], 'right structure';
    my $results2 = $db->query('select 1 as one');
    undef $results1;
    is_deeply $results2->hashes, [{one => 1}], 'right structure';
  }
}

done_testing();



( run in 0.916 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )