From f6e531fb0e7fc72226d149d2b5bd63cfb80118f6 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 27 Jan 2026 23:43:47 +0800 Subject: [PATCH 1/5] add db builder --- publish/dtm.php | 1 + src/Barrier.php | 7 ++- src/Constants/DbType.php | 2 + src/DbBarrier.php | 59 +++++++++++++++++++ src/DbTransaction/DBTransactionInterface.php | 4 ++ src/DbTransaction/HyperfDbTransaction.php | 10 ++++ .../HyperfSimpleDbTransaction.php | 12 +++- src/DbTransaction/LaravelDbTransaction.php | 11 +++- 8 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 src/DbBarrier.php diff --git a/publish/dtm.php b/publish/dtm.php index 2c37ff7..2d6259b 100644 --- a/publish/dtm.php +++ b/publish/dtm.php @@ -19,6 +19,7 @@ 'barrier' => [ 'db' => [ 'type' => DbType::MySQL, + // 'type' => DbType::DB, ], 'apply' => [], ], diff --git a/src/Barrier.php b/src/Barrier.php index aea87e4..cc906bc 100644 --- a/src/Barrier.php +++ b/src/Barrier.php @@ -21,10 +21,13 @@ class Barrier protected MySqlBarrier $mySqlBarrier; - public function __construct(ConfigInterface $config, MySqlBarrier $mySqlBarrier) + protected DbBarrier $dbBarrier; + + public function __construct(ConfigInterface $config, MySqlBarrier $mySqlBarrier, DbBarrier $dbBarrier) { $this->config = $config; $this->mySqlBarrier = $mySqlBarrier; + $this->dbBarrier = $dbBarrier; } public function call(callable $businessCall) @@ -77,6 +80,8 @@ protected function getBarrier(): BarrierInterface switch ($this->config->get('dtm.barrier.db.type', DbType::MySQL)) { case DbType::MySQL: return $this->mySqlBarrier; + case DbType::DB: + return $this->dbBarrier; default: throw new UnsupportedException('Barrier DB type is unsupported.'); } diff --git a/src/Constants/DbType.php b/src/Constants/DbType.php index 8fabd53..780e42d 100644 --- a/src/Constants/DbType.php +++ b/src/Constants/DbType.php @@ -12,5 +12,7 @@ class DbType { public const MySQL = 'mysql'; + public const DB = 'db'; + public const Redis = 'redis'; } diff --git a/src/DbBarrier.php b/src/DbBarrier.php new file mode 100644 index 0000000..09d96b6 --- /dev/null +++ b/src/DbBarrier.php @@ -0,0 +1,59 @@ +DBTransaction->insert('barrier', [ + 'trans_type' => $transType, + 'gid' => $gid, + 'branch_id' => $branchId, + 'op' => $op, + 'barrier_id' => $barrierID, + 'reason' => $reason, + ]); + + return (int)$bool; + } + + + public function queryPrepared(string $transType, string $gid): bool + { + $this->DBTransaction->insert('barrier', [ + 'trans_type' => $transType, + 'gid' => $gid, + 'branch_id' => Branch::MsgDoBranch0, + 'op' => Branch::MsgDoOp, + 'barrier_id' => Branch::MsgDoBarrier1, + 'reason' => Operation::ROLLBACK, + ]); + + $reason = $this->DBTransaction->queryBuilder('barrier','barrier', [ + 'gid' => $gid, + 'branch_id' => Branch::MsgDoBranch0, + 'op' => Branch::MsgDoOp, + 'barrier_id' => Branch::MsgDoBarrier1, + ])[0] ?? []; + + if ($reason['reason'] ?? '' == Operation::ROLLBACK) { + throw new FailureException(); + } + return true; + } +} diff --git a/src/DbTransaction/DBTransactionInterface.php b/src/DbTransaction/DBTransactionInterface.php index 8915b84..382d1b9 100644 --- a/src/DbTransaction/DBTransactionInterface.php +++ b/src/DbTransaction/DBTransactionInterface.php @@ -20,8 +20,12 @@ public function rollback(); public function execute(string $sql, array $bindings = []): int; + public function insert(string $table, array $data = []): bool; + public function query(string $sql, array $bindings = []): bool|array; + public function queryBuilder(string $table, mixed $select, array $where = [], int $limit = 1): array; + public function xaExecute(string $sql, array $bindings = []): int; public function xaQuery(string $sql, array $bindings = []): bool|array; diff --git a/src/DbTransaction/HyperfDbTransaction.php b/src/DbTransaction/HyperfDbTransaction.php index efbc1cb..d9850bc 100644 --- a/src/DbTransaction/HyperfDbTransaction.php +++ b/src/DbTransaction/HyperfDbTransaction.php @@ -42,4 +42,14 @@ public function query(string $sql, array $bindings = []): bool|array { return Db::select($sql, $bindings); } + + public function insert(string $table, array $data = []): bool + { + return Db::table($table)->insert($data); + } + + public function queryBuilder(string $table, mixed $select, array $where = [], int $limit = 1): array + { + return Db::table($table)->select($select)->where($where)->limit($limit)->get()->toArray(); + } } diff --git a/src/DbTransaction/HyperfSimpleDbTransaction.php b/src/DbTransaction/HyperfSimpleDbTransaction.php index 9dd8ea7..f1c46f8 100644 --- a/src/DbTransaction/HyperfSimpleDbTransaction.php +++ b/src/DbTransaction/HyperfSimpleDbTransaction.php @@ -42,5 +42,15 @@ public function query(string $sql, array $bindings = []): bool|array { return DB::query($sql, $bindings); } - + + + public function queryBuilder(string $table, mixed $select, array $where = [], int $limit = 1): array + { + throw new \Exception('Not implemented'); + } + + public function insert(string $table, array $data = []): bool + { + throw new \Exception('Not implemented'); + } } diff --git a/src/DbTransaction/LaravelDbTransaction.php b/src/DbTransaction/LaravelDbTransaction.php index b98a480..0932234 100644 --- a/src/DbTransaction/LaravelDbTransaction.php +++ b/src/DbTransaction/LaravelDbTransaction.php @@ -34,9 +34,18 @@ 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); } + + public function insert(string $table, array $data = []): bool + { + return DB::table($table)->insert($data); + } + + public function queryBuilder(string $table, mixed $select, array $where = [], int $limit = 1): array + { + return DB::table($table)->select($select)->where($where)->limit($limit)->get()->toArray(); + } } From 1ce29d2515b33f3e914e2c2830b7221b6d89a363 Mon Sep 17 00:00:00 2001 From: tw Date: Wed, 28 Jan 2026 11:51:35 +0800 Subject: [PATCH 2/5] =?UTF-8?q?db=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DbBarrier.php | 57 ++++++++++--------- src/DbTransaction/DBTransactionInterface.php | 7 ++- src/DbTransaction/HyperfDbTransaction.php | 10 +--- .../HyperfSimpleDbTransaction.php | 8 +-- src/DbTransaction/LaravelDbTransaction.php | 9 +-- 5 files changed, 38 insertions(+), 53 deletions(-) diff --git a/src/DbBarrier.php b/src/DbBarrier.php index 09d96b6..7394d09 100644 --- a/src/DbBarrier.php +++ b/src/DbBarrier.php @@ -14,28 +14,11 @@ class DbBarrier extends MySqlBarrier { - protected function insertBarrier(string $transType, string $gid, string $branchId, string $op, string $barrierID, string $reason): int - { - if (empty($op)) { - return 0; - } - - $bool = $this->DBTransaction->insert('barrier', [ - 'trans_type' => $transType, - 'gid' => $gid, - 'branch_id' => $branchId, - 'op' => $op, - 'barrier_id' => $barrierID, - 'reason' => $reason, - ]); - - return (int)$bool; - } - - public function queryPrepared(string $transType, string $gid): bool { - $this->DBTransaction->insert('barrier', [ + $db = $this->DBTransaction->connection(); + $table = $db->raw('barrier'); + $db->table($table)->insertOrIgnore([ 'trans_type' => $transType, 'gid' => $gid, 'branch_id' => Branch::MsgDoBranch0, @@ -44,16 +27,34 @@ public function queryPrepared(string $transType, string $gid): bool 'reason' => Operation::ROLLBACK, ]); - $reason = $this->DBTransaction->queryBuilder('barrier','barrier', [ - 'gid' => $gid, - 'branch_id' => Branch::MsgDoBranch0, - 'op' => Branch::MsgDoOp, - 'barrier_id' => Branch::MsgDoBarrier1, - ])[0] ?? []; - - if ($reason['reason'] ?? '' == Operation::ROLLBACK) { + $reason = $db->table($table) + ->select('reason') + ->where([ + 'gid' => $gid, + 'branch_id' => Branch::MsgDoBranch0, + 'op' => Branch::MsgDoOp, + 'barrier_id' => Branch::MsgDoBarrier1, + ])->first(); + if ($reason->reason == Operation::ROLLBACK) { throw new FailureException(); } return true; } + + protected function insertBarrier(string $transType, string $gid, string $branchId, string $op, string $barrierID, string $reason): int + { + if (empty($op)) { + return 0; + } + $db = $this->DBTransaction->connection(); + $table = $db->raw('barrier'); + return $db->table($table)->insertOrIgnore([ + 'trans_type' => $transType, + 'gid' => $gid, + 'branch_id' => $branchId, + 'op' => $op, + 'barrier_id' => $barrierID, + 'reason' => $reason, + ]); + } } diff --git a/src/DbTransaction/DBTransactionInterface.php b/src/DbTransaction/DBTransactionInterface.php index 382d1b9..53c3f6b 100644 --- a/src/DbTransaction/DBTransactionInterface.php +++ b/src/DbTransaction/DBTransactionInterface.php @@ -20,12 +20,13 @@ public function rollback(); public function execute(string $sql, array $bindings = []): int; - public function insert(string $table, array $data = []): bool; + /** + * @return \Hyperf\Database\ConnectionInterface|\Illuminate\Database\Connection + */ + public function connection(); public function query(string $sql, array $bindings = []): bool|array; - public function queryBuilder(string $table, mixed $select, array $where = [], int $limit = 1): array; - public function xaExecute(string $sql, array $bindings = []): int; public function xaQuery(string $sql, array $bindings = []): bool|array; diff --git a/src/DbTransaction/HyperfDbTransaction.php b/src/DbTransaction/HyperfDbTransaction.php index d9850bc..57c6e41 100644 --- a/src/DbTransaction/HyperfDbTransaction.php +++ b/src/DbTransaction/HyperfDbTransaction.php @@ -42,14 +42,8 @@ public function query(string $sql, array $bindings = []): bool|array { return Db::select($sql, $bindings); } - - public function insert(string $table, array $data = []): bool - { - return Db::table($table)->insert($data); - } - - public function queryBuilder(string $table, mixed $select, array $where = [], int $limit = 1): array + public function connection() { - return Db::table($table)->select($select)->where($where)->limit($limit)->get()->toArray(); + return Db::connection(); } } diff --git a/src/DbTransaction/HyperfSimpleDbTransaction.php b/src/DbTransaction/HyperfSimpleDbTransaction.php index f1c46f8..1518101 100644 --- a/src/DbTransaction/HyperfSimpleDbTransaction.php +++ b/src/DbTransaction/HyperfSimpleDbTransaction.php @@ -43,13 +43,7 @@ public function query(string $sql, array $bindings = []): bool|array return DB::query($sql, $bindings); } - - public function queryBuilder(string $table, mixed $select, array $where = [], int $limit = 1): array - { - throw new \Exception('Not implemented'); - } - - public function insert(string $table, array $data = []): bool + public function connection() { throw new \Exception('Not implemented'); } diff --git a/src/DbTransaction/LaravelDbTransaction.php b/src/DbTransaction/LaravelDbTransaction.php index 0932234..0c37076 100644 --- a/src/DbTransaction/LaravelDbTransaction.php +++ b/src/DbTransaction/LaravelDbTransaction.php @@ -39,13 +39,8 @@ public function query(string $sql, array $bindings = []): bool|array return DB::select($sql, $bindings); } - public function insert(string $table, array $data = []): bool + public function connection() { - return DB::table($table)->insert($data); - } - - public function queryBuilder(string $table, mixed $select, array $where = [], int $limit = 1): array - { - return DB::table($table)->select($select)->where($where)->limit($limit)->get()->toArray(); + return DB::connection(); } } From a034493a200872c44a06c386f2e5ebac24135d5d Mon Sep 17 00:00:00 2001 From: tw Date: Wed, 28 Jan 2026 13:37:30 +0800 Subject: [PATCH 3/5] Format code --- src/DbTransaction/DBTransactionInterface.php | 6 +++--- src/DbTransaction/HyperfDbTransaction.php | 1 + src/DbTransaction/HyperfSimpleDbTransaction.php | 5 +++-- src/DbTransaction/LaravelDbTransaction.php | 7 ++----- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/DbTransaction/DBTransactionInterface.php b/src/DbTransaction/DBTransactionInterface.php index 53c3f6b..2222ab2 100644 --- a/src/DbTransaction/DBTransactionInterface.php +++ b/src/DbTransaction/DBTransactionInterface.php @@ -20,13 +20,13 @@ public function rollback(); public function execute(string $sql, array $bindings = []): int; + public function query(string $sql, array $bindings = []): bool|array; + /** - * @return \Hyperf\Database\ConnectionInterface|\Illuminate\Database\Connection + * @return \Hyperf\Database\ConnectionInterface|\Illuminate\Database\ConnectionInterface */ public function connection(); - 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; diff --git a/src/DbTransaction/HyperfDbTransaction.php b/src/DbTransaction/HyperfDbTransaction.php index 57c6e41..d99a64b 100644 --- a/src/DbTransaction/HyperfDbTransaction.php +++ b/src/DbTransaction/HyperfDbTransaction.php @@ -42,6 +42,7 @@ public function query(string $sql, array $bindings = []): bool|array { return Db::select($sql, $bindings); } + public function connection() { return Db::connection(); diff --git a/src/DbTransaction/HyperfSimpleDbTransaction.php b/src/DbTransaction/HyperfSimpleDbTransaction.php index 1518101..c771960 100644 --- a/src/DbTransaction/HyperfSimpleDbTransaction.php +++ b/src/DbTransaction/HyperfSimpleDbTransaction.php @@ -8,6 +8,7 @@ */ namespace DtmClient\DbTransaction; +use Exception; use Hyperf\Contract\ConfigInterface; use Hyperf\DB\DB; @@ -38,13 +39,13 @@ public function execute(string $sql, array $bindings = []): int return DB::execute($sql, $bindings); } - public function query(string $sql, array $bindings = []): bool|array + public function query(string $sql, array $bindings = []): array|bool { return DB::query($sql, $bindings); } public function connection() { - throw new \Exception('Not implemented'); + throw new Exception('Not implemented'); } } diff --git a/src/DbTransaction/LaravelDbTransaction.php b/src/DbTransaction/LaravelDbTransaction.php index 0c37076..3838fab 100644 --- a/src/DbTransaction/LaravelDbTransaction.php +++ b/src/DbTransaction/LaravelDbTransaction.php @@ -1,11 +1,7 @@ Date: Wed, 28 Jan 2026 13:41:07 +0800 Subject: [PATCH 4/5] Format code --- src/DbTransaction/HyperfSimpleDbTransaction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DbTransaction/HyperfSimpleDbTransaction.php b/src/DbTransaction/HyperfSimpleDbTransaction.php index c771960..ab47f8a 100644 --- a/src/DbTransaction/HyperfSimpleDbTransaction.php +++ b/src/DbTransaction/HyperfSimpleDbTransaction.php @@ -39,7 +39,7 @@ public function execute(string $sql, array $bindings = []): int return DB::execute($sql, $bindings); } - public function query(string $sql, array $bindings = []): array|bool + public function query(string $sql, array $bindings = []): bool|array { return DB::query($sql, $bindings); } From 6363b01687aa1edd37b9ce1360900ba17aa48700 Mon Sep 17 00:00:00 2001 From: tw Date: Wed, 28 Jan 2026 14:22:51 +0800 Subject: [PATCH 5/5] Format code --- src/DbBarrier.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/DbBarrier.php b/src/DbBarrier.php index 7394d09..29038a1 100644 --- a/src/DbBarrier.php +++ b/src/DbBarrier.php @@ -35,6 +35,7 @@ public function queryPrepared(string $transType, string $gid): bool 'op' => Branch::MsgDoOp, 'barrier_id' => Branch::MsgDoBarrier1, ])->first(); + if ($reason->reason == Operation::ROLLBACK) { throw new FailureException(); }