diff options
author | RaindropsSys <raindrops@equestria.dev> | 2024-06-16 12:02:05 +0200 |
---|---|---|
committer | RaindropsSys <raindrops@equestria.dev> | 2024-06-16 12:02:05 +0200 |
commit | 55c7ee618e5d59ac5eb691febb6dd911f3f75d2a (patch) | |
tree | 310ff9cc2178a5f3a35aaa5ea8f1352114018f53 /updater/sql/win/src/macros.h | |
parent | e44e2fe070484e06d384a31ef2699c3a2d5d474e (diff) | |
download | faunerie-55c7ee618e5d59ac5eb691febb6dd911f3f75d2a.tar.gz faunerie-55c7ee618e5d59ac5eb691febb6dd911f3f75d2a.tar.bz2 faunerie-55c7ee618e5d59ac5eb691febb6dd911f3f75d2a.zip |
Fix SQL stuff + remove C++ code
Diffstat (limited to 'updater/sql/win/src/macros.h')
-rwxr-xr-x | updater/sql/win/src/macros.h | 207 |
1 files changed, 0 insertions, 207 deletions
diff --git a/updater/sql/win/src/macros.h b/updater/sql/win/src/macros.h deleted file mode 100755 index 3bcde83..0000000 --- a/updater/sql/win/src/macros.h +++ /dev/null @@ -1,207 +0,0 @@ -#ifndef NODE_SQLITE3_SRC_MACROS_H -#define NODE_SQLITE3_SRC_MACROS_H - -const char* sqlite_code_string(int code); -const char* sqlite_authorizer_string(int type); -#include <vector> - -// TODO: better way to work around StringConcat? -#include <napi.h> -inline Napi::String StringConcat(Napi::Value str1, Napi::Value str2) { - return Napi::String::New(str1.Env(), str1.As<Napi::String>().Utf8Value() + - str2.As<Napi::String>().Utf8Value() ); -} - -// A Napi substitute IsInt32() -inline bool OtherIsInt(Napi::Number source) { - double orig_val = source.DoubleValue(); - double int_val = static_cast<double>(source.Int32Value()); - if (orig_val == int_val) { - return true; - } else { - return false; - } -} - -#define IS_FUNCTION(cb) \ - !cb.IsUndefined() && cb.IsFunction() - -#define REQUIRE_ARGUMENTS(n) \ - if (info.Length() < (n)) { \ - Napi::TypeError::New(env, "Expected " #n "arguments").ThrowAsJavaScriptException(); \ - return env.Null(); \ - } - - -#define REQUIRE_ARGUMENT_EXTERNAL(i, var) \ - if (info.Length() <= (i) || !info[i].IsExternal()) { \ - Napi::TypeError::New(env, "Argument " #i " invalid").ThrowAsJavaScriptException(); \ - return env.Null(); \ - } \ - Napi::External var = info[i].As<Napi::External>(); - - -#define REQUIRE_ARGUMENT_FUNCTION(i, var) \ - if (info.Length() <= (i) || !info[i].IsFunction()) { \ - Napi::TypeError::New(env, "Argument " #i " must be a function").ThrowAsJavaScriptException(); \ - return env.Null(); \ - } \ - Napi::Function var = info[i].As<Napi::Function>(); - - -#define REQUIRE_ARGUMENT_STRING(i, var) \ - if (info.Length() <= (i) || !info[i].IsString()) { \ - Napi::TypeError::New(env, "Argument " #i " must be a string").ThrowAsJavaScriptException(); \ - return env.Null(); \ - } \ - std::string var = info[i].As<Napi::String>(); - -#define REQUIRE_ARGUMENT_INTEGER(i, var) \ - if (info.Length() <= (i) || !info[i].IsNumber()) { \ - Napi::TypeError::New(env, "Argument " #i " must be an integer").ThrowAsJavaScriptException(); \ - return env.Null(); \ - } \ - int var(info[i].As<Napi::Number>().Int32Value()); - -#define OPTIONAL_ARGUMENT_FUNCTION(i, var) \ - Napi::Function var; \ - if (info.Length() > i && !info[i].IsUndefined()) { \ - if (!info[i].IsFunction()) { \ - Napi::TypeError::New(env, "Argument " #i " must be a function").ThrowAsJavaScriptException(); \ - return env.Null(); \ - } \ - var = info[i].As<Napi::Function>(); \ - } - - -#define OPTIONAL_ARGUMENT_INTEGER(i, var, default) \ - int var; \ - if (info.Length() <= (i)) { \ - var = (default); \ - } \ - else if (info[i].IsNumber()) { \ - if (OtherIsInt(info[i].As<Number>())) { \ - var = info[i].As<Napi::Number>().Int32Value(); \ - } \ - } \ - else { \ - Napi::TypeError::New(env, "Argument " #i " must be an integer").ThrowAsJavaScriptException(); \ - return env.Null(); \ - } - - -#define DEFINE_CONSTANT_INTEGER(target, constant, name) \ - Napi::PropertyDescriptor::Value(#name, Napi::Number::New(env, constant), \ - static_cast<napi_property_attributes>(napi_enumerable | napi_configurable)), - -#define DEFINE_CONSTANT_STRING(target, constant, name) \ - Napi::PropertyDescriptor::Value(#name, Napi::String::New(env, constant), \ - static_cast<napi_property_attributes>(napi_enumerable | napi_configurable)), - -#define EXCEPTION(msg, errno, name) \ - Napi::Value name = Napi::Error::New(env, \ - StringConcat( \ - StringConcat( \ - Napi::String::New(env, sqlite_code_string(errno)), \ - Napi::String::New(env, ": ") \ - ), \ - (msg) \ - ).Utf8Value() \ - ).Value(); \ - Napi::Object name ##_obj = name.As<Napi::Object>(); \ - (name ##_obj).Set( Napi::String::New(env, "errno"), Napi::Number::New(env, errno)); \ - (name ##_obj).Set( Napi::String::New(env, "code"), \ - Napi::String::New(env, sqlite_code_string(errno))); - - -#define EMIT_EVENT(obj, argc, argv) \ - TRY_CATCH_CALL((obj), \ - (obj).Get("emit").As<Napi::Function>(),\ - argc, argv \ - ); - -// The Mac OS compiler complains when argv is NULL unless we -// first assign it to a locally defined variable. -#define TRY_CATCH_CALL(context, callback, argc, argv, ...) \ - Napi::Value* passed_argv = argv;\ - std::vector<napi_value> args;\ - if ((argc != 0) && (passed_argv != NULL)) {\ - args.assign(passed_argv, passed_argv + argc);\ - }\ - Napi::Value res = (callback).Call(Napi::Value(context), args); \ - if (res.IsEmpty()) return __VA_ARGS__; - -#define WORK_DEFINITION(name) \ - Napi::Value name(const Napi::CallbackInfo& info); \ - static void Work_Begin##name(Baton* baton); \ - static void Work_##name(napi_env env, void* data); \ - static void Work_After##name(napi_env env, napi_status status, void* data); - -#ifdef DEBUG - #define ASSERT_STATUS() assert(status == 0); -#else - #define ASSERT_STATUS() (void)status; -#endif - -#define CREATE_WORK(name, workerFn, afterFn) \ - int status = napi_create_async_work(env, NULL, Napi::String::New(env, name),\ - workerFn, afterFn, baton, &baton->request); \ - \ - ASSERT_STATUS(); \ - napi_queue_async_work(env, baton->request); - -#define STATEMENT_BEGIN(type) \ - assert(baton); \ - assert(baton->stmt); \ - assert(!baton->stmt->locked); \ - assert(!baton->stmt->finalized); \ - assert(baton->stmt->prepared); \ - baton->stmt->locked = true; \ - baton->stmt->db->pending++; \ - auto env = baton->stmt->Env(); \ - CREATE_WORK("sqlite3.Statement."#type, Work_##type, Work_After##type); - -#define STATEMENT_INIT(type) \ - type* baton = static_cast<type*>(data); \ - Statement* stmt = baton->stmt; - -#define STATEMENT_MUTEX(name) \ - if (!stmt->db->_handle) { \ - stmt->status = SQLITE_MISUSE; \ - stmt->message = "Database handle is closed"; \ - return; \ - } \ - sqlite3_mutex* name = sqlite3_db_mutex(stmt->db->_handle); - -#define STATEMENT_END() \ - assert(stmt->locked); \ - assert(stmt->db->pending); \ - stmt->locked = false; \ - stmt->db->pending--; \ - stmt->Process(); \ - stmt->db->Process(); - -#define BACKUP_BEGIN(type) \ - assert(baton); \ - assert(baton->backup); \ - assert(!baton->backup->locked); \ - assert(!baton->backup->finished); \ - assert(baton->backup->inited); \ - baton->backup->locked = true; \ - baton->backup->db->pending++; \ - auto env = baton->backup->Env(); \ - CREATE_WORK("sqlite3.Backup."#type, Work_##type, Work_After##type); - -#define BACKUP_INIT(type) \ - type* baton = static_cast<type*>(data); \ - Backup* backup = baton->backup; - -#define BACKUP_END() \ - assert(backup->locked); \ - assert(backup->db->pending); \ - backup->locked = false; \ - backup->db->pending--; \ - backup->Process(); \ - backup->db->Process(); - -#endif
\ No newline at end of file |