Skip to content

Commit

Permalink
Added queryPrepared
Browse files Browse the repository at this point in the history
Added queryPrepared
  • Loading branch information
PandaLIU-1111 authored Dec 22, 2022
2 parents 3212c5c + 379db8f commit 4be4b0a
Show file tree
Hide file tree
Showing 11 changed files with 75 additions and 10 deletions.
2 changes: 2 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,5 @@ parameters:
- '#Call to static method currentRouteAction\(\) on an unknown class Illuminate\\Support\\Facades\\Route\.#'
- '#Parameter \$request of method DtmClient\\Middleware\\DtmLaravelMiddleware::handle\(\) has invalid type Illuminate\\Http\\Request\.#'
- '#Call to static method affectingStatement\(\) on an unknown class Illuminate\\Support\\Facades\\DB\.#'
- '#Static call to instance method Hyperf\\DB\\DB::query\(\)\.#'
- '#Call to static method select\(\) on an unknown class Illuminate\\Support\\Facades\\DB\.#'
24 changes: 18 additions & 6 deletions src/Barrier.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,7 @@ public function __construct(ConfigInterface $config, MySqlBarrier $mySqlBarrier)

public function call(callable $businessCall)
{
switch ($this->config->get('dtm.barrier.db.type', DbType::MySQL)) {
case DbType::MySQL:
return $this->mySqlBarrier->call($businessCall);
default:
throw new UnsupportedException('Barrier DB type is unsupported.');
}
return $this->getBarrier()->call($businessCall);
}

public function barrierFrom(string $transType, string $gid, string $branchId, string $op, ?string $phase2Url = null, ?string $dtm = null)
Expand Down Expand Up @@ -71,4 +66,21 @@ public function barrierFrom(string $transType, string $gid, string $branchId, st
throw new DtmException(sprintf('Invalid transaction info: %s', $info));
}
}

public function queryPrepared(string $transType, string $gid)
{
return $this->getBarrier()->queryPrepared($transType, $gid);
}

protected function getBarrier(): BarrierInterface
{
switch ($this->config->get('dtm.barrier.db.type', DbType::MySQL)) {
case DbType::MySQL:
return $this->mySqlBarrier;
default:
throw new UnsupportedException('Barrier DB type is unsupported.');
}
}


}
2 changes: 2 additions & 0 deletions src/BarrierInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@
interface BarrierInterface
{
public function call(callable $businessCall): bool;

public function queryPrepared(string $transType, string $gid): bool;
}
2 changes: 1 addition & 1 deletion src/Config/HyperfDatabaseConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public function getHost(): string

public function getPort(): int
{
return $this->getConfig('port');
return (int) $this->getConfig('port');
}

public function getDatabase(): string
Expand Down
9 changes: 9 additions & 0 deletions src/Constants/Branch.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,13 @@ class Branch

// BranchRollback branch type for XA
public const BranchRollback = 'rollback';

// MsgDoBranch0 const for DoAndSubmit barrier branch
public const MsgDoBranch0 = '00';

// MsgDoBarrier1 const for DoAndSubmit barrier barrierID
public const MsgDoBarrier1 = '01';

// MsgDoOp const for DoAndSubmit barrier op
public const MsgDoOp = 'msg';
}
2 changes: 2 additions & 0 deletions src/Constants/Operation.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,6 @@ class Operation
public const BRANCH_COMPENSATE = 'compensate';

public const ACTION = 'action';

public const ROLLBACK = 'rollback';
}
2 changes: 2 additions & 0 deletions src/DbTransaction/DBTransactionInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public function rollback();

public function execute(string $sql, array $bindings = []): int;

public function query(string $sql, array $bindings = []): bool|array;

public function xaExecute(string $sql, array $bindings = []): int;

public function xaQuery(string $sql, array $bindings = []): bool|array;
Expand Down
5 changes: 5 additions & 0 deletions src/DbTransaction/HyperfDbTransaction.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,9 @@ public function execute(string $sql, array $bindings = []): int
{
return Db::affectingStatement($sql, $bindings);
}

public function query(string $sql, array $bindings = []): bool|array
{
return Db::select($sql, $bindings);
}
}
6 changes: 6 additions & 0 deletions src/DbTransaction/HyperfSimpleDbTransaction.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,10 @@ public function execute(string $sql, array $bindings = []): int
{
return DB::execute($sql, $bindings);
}

public function query(string $sql, array $bindings = []): bool|array
{
return DB::query($sql, $bindings);
}

}
11 changes: 8 additions & 3 deletions src/DbTransaction/LaravelDbTransaction.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,21 @@ public function beginTransaction()

public function commit()
{
Db::commit();
DB::commit();
}

public function rollback()
{
Db::rollback();
DB::rollback();
}

public function execute(string $sql, array $bindings = []): int
{
return Db::affectingStatement($sql, $bindings);
return DB::affectingStatement($sql, $bindings);
}

public function query(string $sql, array $bindings = []): bool|array
{
return DB::select($sql, $bindings);
}
}
20 changes: 20 additions & 0 deletions src/MySqlBarrier.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use DtmClient\Constants\TransType;
use DtmClient\DbTransaction\DBTransactionInterface;
use DtmClient\Exception\DuplicatedException;
use DtmClient\Exception\FailureException;

class MySqlBarrier implements BarrierInterface
{
Expand Down Expand Up @@ -80,4 +81,23 @@ protected function insertBarrier(string $transType, string $gid, string $branchI
[$transType, $gid, $branchId, $op, $barrierID, $reason]
);
}


public function queryPrepared(string $transType, string $gid): bool
{
$this->DBTransaction->execute(
'INSERT IGNORE INTO `barrier` (trans_type, gid, branch_id, op, barrier_id, reason) values(?,?,?,?,?,?)',
[$transType, $gid, Branch::MsgDoBranch0, Branch::MsgDoOp, Branch::MsgDoBarrier1, Operation::ROLLBACK]
);

$reason = $this->DBTransaction->query(
'select reason from `barrier` where gid=? and branch_id=? and op=? and barrier_id=? limit 1',
[$gid, Branch::MsgDoBranch0, Branch::MsgDoOp, Branch::MsgDoBarrier1]
)[0];

if ($reason->reason == Operation::ROLLBACK) {
throw new FailureException();
}
return true;
}
}

0 comments on commit 4be4b0a

Please sign in to comment.