1dfe32fa1Soh_ci/* 2dfe32fa1Soh_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3dfe32fa1Soh_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4dfe32fa1Soh_ci * you may not use this file except in compliance with the License. 5dfe32fa1Soh_ci * You may obtain a copy of the License at 6dfe32fa1Soh_ci * 7dfe32fa1Soh_ci * http://www.apache.org/licenses/LICENSE-2.0 8dfe32fa1Soh_ci * 9dfe32fa1Soh_ci * Unless required by applicable law or agreed to in writing, software 10dfe32fa1Soh_ci * distributed under the License is distributed on an "AS IS" BASIS, 11dfe32fa1Soh_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12dfe32fa1Soh_ci * See the License for the specific language governing permissions and 13dfe32fa1Soh_ci * limitations under the License. 14dfe32fa1Soh_ci */ 15dfe32fa1Soh_ci 16dfe32fa1Soh_ci//! This module is used to implement database transactions. 17dfe32fa1Soh_ci//! Transaction is auto rollback if not commit by RAII. 18dfe32fa1Soh_ci 19dfe32fa1Soh_ciuse asset_definition::Result; 20dfe32fa1Soh_ci 21dfe32fa1Soh_ciuse crate::database::Database; 22dfe32fa1Soh_ci 23dfe32fa1Soh_ci/// Transaction for sqlite db 24dfe32fa1Soh_ci#[repr(C)] 25dfe32fa1Soh_cipub struct Transaction<'a> { 26dfe32fa1Soh_ci db: &'a Database, 27dfe32fa1Soh_ci} 28dfe32fa1Soh_ci 29dfe32fa1Soh_ciimpl<'a> Transaction<'a> { 30dfe32fa1Soh_ci /// Create a transaction instance. 31dfe32fa1Soh_ci pub(crate) fn new(db: &'a Database) -> Transaction<'a> { 32dfe32fa1Soh_ci Transaction { db } 33dfe32fa1Soh_ci } 34dfe32fa1Soh_ci 35dfe32fa1Soh_ci /// Begin a database transaction. 36dfe32fa1Soh_ci /// Once the transaction is begun, the caller must call the rollback or commit function later. 37dfe32fa1Soh_ci pub(crate) fn begin(&mut self) -> Result<()> { 38dfe32fa1Soh_ci self.db.exec("begin transaction") 39dfe32fa1Soh_ci } 40dfe32fa1Soh_ci 41dfe32fa1Soh_ci /// Rollback the database transaction. 42dfe32fa1Soh_ci pub(crate) fn rollback(self) -> Result<()> { 43dfe32fa1Soh_ci self.db.exec("rollback") 44dfe32fa1Soh_ci } 45dfe32fa1Soh_ci 46dfe32fa1Soh_ci /// Commit the database transaction. 47dfe32fa1Soh_ci pub(crate) fn commit(self) -> Result<()> { 48dfe32fa1Soh_ci self.db.exec("commit") 49dfe32fa1Soh_ci } 50dfe32fa1Soh_ci} 51