sqlite: add getter to detect transactions · nodejs/node@da05add · GitHub
Skip to content

Commit da05add

Browse files
cjihrigRafaelGSS
authored andcommitted
sqlite: add getter to detect transactions
This commit adds an isTransaction getter to the DatabaseSync class for determining if the database is currently within a transaction. Fixes: #57922 PR-URL: #57925 Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Zeyu "Alex" Yang <himself65@outlook.com>
1 parent 8cd9822 commit da05add

4 files changed

Lines changed: 62 additions & 0 deletions

File tree

doc/api/sqlite.md

Lines changed: 10 additions & 0 deletions

src/node_sqlite.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,15 @@ void DatabaseSync::IsOpenGetter(const FunctionCallbackInfo<Value>& args) {
979979
args.GetReturnValue().Set(db->IsOpen());
980980
}
981981

982+
void DatabaseSync::IsTransactionGetter(
983+
const FunctionCallbackInfo<Value>& args) {
984+
DatabaseSync* db;
985+
ASSIGN_OR_RETURN_UNWRAP(&db, args.This());
986+
Environment* env = Environment::GetCurrent(args);
987+
THROW_AND_RETURN_ON_BAD_STATE(env, !db->IsOpen(), "database is not open");
988+
args.GetReturnValue().Set(sqlite3_get_autocommit(db->connection_) == 0);
989+
}
990+
982991
void DatabaseSync::Close(const FunctionCallbackInfo<Value>& args) {
983992
DatabaseSync* db;
984993
ASSIGN_OR_RETURN_UNWRAP(&db, args.This());
@@ -2623,6 +2632,10 @@ static void Initialize(Local<Object> target,
26232632
db_tmpl,
26242633
FIXED_ONE_BYTE_STRING(isolate, "isOpen"),
26252634
DatabaseSync::IsOpenGetter);
2635+
SetSideEffectFreeGetter(isolate,
2636+
db_tmpl,
2637+
FIXED_ONE_BYTE_STRING(isolate, "isTransaction"),
2638+
DatabaseSync::IsTransactionGetter);
26262639
SetConstructorFunction(context, target, "DatabaseSync", db_tmpl);
26272640
SetConstructorFunction(context,
26282641
target,

src/node_sqlite.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ class DatabaseSync : public BaseObject {
6161
static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
6262
static void Open(const v8::FunctionCallbackInfo<v8::Value>& args);
6363
static void IsOpenGetter(const v8::FunctionCallbackInfo<v8::Value>& args);
64+
static void IsTransactionGetter(
65+
const v8::FunctionCallbackInfo<v8::Value>& args);
6466
static void Close(const v8::FunctionCallbackInfo<v8::Value>& args);
6567
static void Prepare(const v8::FunctionCallbackInfo<v8::Value>& args);
6668
static void Exec(const v8::FunctionCallbackInfo<v8::Value>& args);

test/parallel/test-sqlite-database-sync.js

Lines changed: 37 additions & 0 deletions

0 commit comments

Comments
 (0)