package DBIx::QuickORM::Role::HasTransactions;
use strict;
use warnings;

our $VERSION = '0.000004';

use DBIx::QuickORM::Util qw/alias/;

use Role::Tiny;

requires 'connection';
requires 'transactions';

alias 'txn' => 'transaction';
sub txn { my $t = $_[0]->transactions; return undef unless $t && @$t; return $t->[-1] }

sub txns { shift->transactions(@_) }

alias in_txn => 'in_transaction';
sub in_txn {
    my $self = shift;

    my $txns = $self->transactions;
    if (my $cnt = @{$txns}) {
        return $cnt;
    }

    # Yes, but not ours
    return -1 if $self->connection->in_external_transaction;

    return 0;
}

1;