KSQL_TRANS_OPEN(3) Library Functions Manual KSQL_TRANS_OPEN(3)

ksql_trans_exclopen, ksql_trans_open, ksql_trans_singleopen
open a database transaction

library “ksql”

#include <sys/types.h>
#include <stdint.h>
#include <ksql.h>
enum ksqlc
ksql_trans_exclopen(struct ksql *sql, size_t id);
enum ksqlc
ksql_trans_open(struct ksql *sql, size_t id);
enum ksqlc
ksql_trans_singleopen(struct ksql *sql, size_t id);

The ksql_trans_exclopen(), ksql_trans_open(), and ksql_trans_singleopen() functions open transactions with different lock states. All functions accept sql, the database connection; and id, an identifier used in error reporting and in making sure that transaction calls are symmetric. Each of these functions must be followed by ksql_trans_commit(3) or ksql_trans_rollback(3).
If ksql_trans_open() is used (a “DEFERRED” transaction, in SQLite terms), the database is locked only when the first database operation is invoked. The lock is read-shared (multiple readers, no writers) for a read operation and is upgraded to write-single (multiple readers, single writer) on a write.
If ksql_trans_singleopen() is used (“IMMEDIATE”), the database is immediately locked in write-single mode.
If ksql_trans_exclopen() (“EXCLUSIVE”), the database is opened in a write-exclusive lock, where only the calling process may write or read from the database.
Recursive transactions are disallowed.

This returns KSQL_NOTOPEN if the database connection is not open, KSQL_TRANS if a transaction is already open, KSQL_DB if errors occurred on the database, or KSQL_OK on success.

sqlite3_exec(3)
April 3, 2018 OpenBSD 6.4