Add transactions to the dbwrap API
[nivanova/samba-autobuild/.git] / source3 / lib / dbwrap_tdb.c
index da55049e52f9e09e7f0ae58e293dd74544d99b37..7bdadd37709526d1b18b0ab96a70a7218b436c89 100644 (file)
@@ -291,6 +291,27 @@ static int db_tdb_get_seqnum(struct db_context *db)
        return tdb_get_seqnum(db_ctx->wtdb->tdb);
 }
 
+static int db_tdb_transaction_start(struct db_context *db)
+{
+       struct db_tdb_ctx *db_ctx =
+               talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
+       return tdb_transaction_start(db_ctx->wtdb->tdb);
+}
+
+static int db_tdb_transaction_commit(struct db_context *db)
+{
+       struct db_tdb_ctx *db_ctx =
+               talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
+       return tdb_transaction_commit(db_ctx->wtdb->tdb);
+}
+
+static int db_tdb_transaction_cancel(struct db_context *db)
+{
+       struct db_tdb_ctx *db_ctx =
+               talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
+       return tdb_transaction_cancel(db_ctx->wtdb->tdb);
+}
+
 struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
                               const char *name,
                               int hash_size, int tdb_flags,
@@ -324,6 +345,9 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
        result->traverse_read = db_tdb_traverse_read;
        result->get_seqnum = db_tdb_get_seqnum;
        result->persistent = ((tdb_flags & TDB_CLEAR_IF_FIRST) == 0);
+       result->transaction_start = db_tdb_transaction_start;
+       result->transaction_commit = db_tdb_transaction_commit;
+       result->transaction_cancel = db_tdb_transaction_cancel;
        return result;
 
  fail: