119 lines
5.0 KiB
C
119 lines
5.0 KiB
C
#ifndef DB_OPS_H
|
|
#define DB_OPS_H
|
|
|
|
#include <stddef.h>
|
|
#include <time.h>
|
|
#include <cjson/cJSON.h>
|
|
|
|
// Generic helpers
|
|
int db_init(const char* connection_string);
|
|
void db_close(void);
|
|
int db_is_available(void);
|
|
const char* db_last_error(void);
|
|
const char* db_get_database_path(void);
|
|
|
|
// Per-thread connection override (used by thread pool workers)
|
|
int db_set_thread_connection(void* connection);
|
|
void db_clear_thread_connection(void);
|
|
|
|
// Worker/runtime SQLite connection lifecycle (kept internal to db_ops.c)
|
|
int db_open_worker_connection(const char* db_path, void** out_connection);
|
|
void db_close_worker_connection(void* connection);
|
|
|
|
// DB result codes (backend-agnostic)
|
|
#define DB_OK 0
|
|
#define DB_ERROR 1
|
|
#define DB_CONSTRAINT 19
|
|
#define DB_MISUSE 21
|
|
#define DB_ROW 100
|
|
#define DB_DONE 101
|
|
|
|
typedef struct db_stmt db_stmt_t;
|
|
|
|
// Generic statement helpers (Phase 1 migration)
|
|
int db_prepare(const char* sql, db_stmt_t** out_stmt);
|
|
int db_bind_text_param(db_stmt_t* stmt, int index, const char* value);
|
|
int db_bind_int_param(db_stmt_t* stmt, int index, int value);
|
|
int db_bind_int64_param(db_stmt_t* stmt, int index, long long value);
|
|
int db_step_stmt(db_stmt_t* stmt);
|
|
int db_reset_stmt(db_stmt_t* stmt);
|
|
const char* db_column_text_value(db_stmt_t* stmt, int col);
|
|
int db_column_int_value(db_stmt_t* stmt, int col);
|
|
long long db_column_int64_value(db_stmt_t* stmt, int col);
|
|
double db_column_double_value(db_stmt_t* stmt, int col);
|
|
void db_finalize_stmt(db_stmt_t* stmt);
|
|
|
|
// Subscription logging
|
|
int db_log_subscription_created(const char* sub_id, const char* wsi_ptr,
|
|
const char* client_ip, const char* filter_json);
|
|
int db_log_subscription_closed(const char* sub_id, const char* client_ip);
|
|
int db_log_subscription_disconnected(const char* client_ip);
|
|
int db_update_subscription_events_sent(const char* sub_id, int events_sent);
|
|
int db_cleanup_orphaned_subscriptions(void);
|
|
|
|
// NIP-09 event deletion helpers
|
|
int db_get_event_pubkey(const char* event_id, char* pubkey_out, size_t pubkey_out_size);
|
|
int db_delete_event_by_id(const char* event_id, const char* requester_pubkey);
|
|
int db_delete_events_by_address(const char* pubkey, int kind,
|
|
const char* d_tag, long before_timestamp);
|
|
|
|
// Auth rule checks for request validator
|
|
int db_is_pubkey_blacklisted(const char* pubkey);
|
|
int db_is_hash_blacklisted(const char* resource_hash);
|
|
int db_is_pubkey_whitelisted(const char* pubkey);
|
|
int db_count_active_whitelist_rules(void);
|
|
|
|
// Generic prepared COUNT helper
|
|
int db_count_with_sql(const char* sql, const char** bind_params, int bind_param_count, int* out_count);
|
|
char* db_execute_readonly_query_json(const char* query, const char* request_id,
|
|
char* error_message, size_t error_size,
|
|
int max_rows, int timeout_ms);
|
|
|
|
// Monitoring/stat helpers (Phase 1 api.c migration)
|
|
int db_get_total_event_count_ll(long long* out_count);
|
|
int db_get_event_count_since(time_t cutoff, long long* out_count);
|
|
cJSON* db_get_event_kind_distribution_rows(long long* out_total_events);
|
|
cJSON* db_get_top_pubkeys_rows(int limit);
|
|
cJSON* db_get_subscription_details_rows(void);
|
|
|
|
// Config helpers
|
|
cJSON* db_get_all_config_rows(void);
|
|
char* db_get_config_value_dup(const char* key);
|
|
int db_set_config_value_full(const char* key, const char* value, const char* data_type,
|
|
const char* description, const char* category, int requires_restart);
|
|
int db_update_config_value_only(const char* key, const char* value);
|
|
int db_upsert_config_value(const char* key, const char* value, const char* data_type);
|
|
int db_store_relay_private_key_hex(const char* relay_privkey_hex);
|
|
char* db_get_relay_private_key_hex_dup(void);
|
|
int db_store_config_event(const cJSON* event);
|
|
|
|
// Event storage/timestamp/retrieval helpers
|
|
int db_insert_event_with_json(const char* id, const char* pubkey, long long created_at,
|
|
int kind, const char* event_type, const char* content,
|
|
const char* sig, const char* tags_json, const char* event_json,
|
|
int* out_step_rc, int* out_extended_errcode);
|
|
int db_get_event_time_bounds(long long* out_min_created_at, long long* out_max_created_at);
|
|
int db_event_id_exists(const char* event_id, int* out_exists);
|
|
cJSON* db_retrieve_event_by_id(const char* event_id);
|
|
char* db_get_latest_event_pubkey_for_kind_dup(int kind);
|
|
|
|
// Config table helpers
|
|
int db_get_config_row_count(int* out_count);
|
|
|
|
// Event tag helpers
|
|
int db_store_event_tags_cjson(const char* event_id, const cJSON* tags);
|
|
int db_populate_event_tags_from_existing(void);
|
|
|
|
// Auth/WoT rule helpers
|
|
int db_add_auth_rule(const char* rule_type, const char* pattern_type, const char* pattern_value);
|
|
int db_remove_auth_rule(const char* rule_type, const char* pattern_type, const char* pattern_value);
|
|
int db_delete_wot_whitelist_rules(void);
|
|
int db_count_wot_whitelist_rules(void);
|
|
|
|
// Schema/DDL helpers
|
|
int db_table_exists(const char* table_name, int* out_exists);
|
|
char* db_get_schema_version_dup(void);
|
|
int db_exec_sql(const char* sql);
|
|
|
|
#endif // DB_OPS_H
|