Csilk 0.2.1
A lightweight, high-performance C HTTP web framework
Loading...
Searching...
No Matches
mongodb.c File Reference

MongoDB database driver for csilk. More...

#include <mongoc/mongoc.h>
#include <stdlib.h>
#include <string.h>
#include "csilk/csilk.h"
#include "csilk/drivers/db.h"
Include dependency graph for mongodb.c:

Data Structures

struct  mongodb_conn_t
 Per-connection data for the MongoDB driver. More...
 

Functions

static void mongodb_ensure_init (void)
 Initialize libmongoc once.
 
static int mongodb_connect (csilk_db_pool_t *pool, const char *dsn)
 Open a connection to MongoDB using a URI.
 
static int mongodb_disconnect (csilk_db_pool_t *pool)
 Close the MongoDB connection and free associated data.
 
static void mongodb_free_result (csilk_db_result_t *result)
 Free a MongoDB query result set.
 
static char * bson_val_to_str (const bson_iter_t *iter)
 Helper: Convert a BSON value to a string representation.
 
static int mongodb_query (csilk_db_pool_t *pool, const char *sql, csilk_db_result_t *result)
 Execute a MongoDB query and return results as tabular rows.
 
static int mongodb_exec (csilk_db_pool_t *pool, const char *sql)
 Execute a non-query command (INSERT, UPDATE, DELETE).
 
static int mongodb_transaction_begin (csilk_db_pool_t *pool)
 
static int mongodb_transaction_commit (csilk_db_pool_t *pool)
 
static int mongodb_transaction_rollback (csilk_db_pool_t *pool)
 
void csilk_db_mongodb_init (void)
 

Variables

csilk_db_driver_t csilk_db_mongodb_driver
 

Detailed Description

MongoDB database driver for csilk.

Implements the csilk_db_driver_t vtable using the native libmongoc C API. Key design points:

  • The DSN is a standard MongoDB URI (e.g., "mongodb://localhost:27017/testdb").
  • SELECT queries (via .query) can be: a) A simple collection name (returns all documents). b) A JSON command string (e.g., {"find": "users", "filter": {...}}).
  • BSON documents are flattened to tabular rows; the first document defines the column names for the result set.

Data Structure Documentation

◆ mongodb_conn_t

struct mongodb_conn_t

Per-connection data for the MongoDB driver.

Data Fields
mongoc_client_t * client
char * db_name

Function Documentation

◆ bson_val_to_str()

static char * bson_val_to_str ( const bson_iter_t *  iter)
static

Helper: Convert a BSON value to a string representation.

◆ csilk_db_mongodb_init()

void csilk_db_mongodb_init ( void  )

◆ mongodb_connect()

static int mongodb_connect ( csilk_db_pool_t pool,
const char *  dsn 
)
static

Open a connection to MongoDB using a URI.

Extracts the database name from the URI if provided, otherwise defaults to "test".

Parameters
poolThe database pool to initialize.
dsnMongoDB URI string.
Returns
0 on success, -1 if URI is invalid or connection fails.

◆ mongodb_disconnect()

static int mongodb_disconnect ( csilk_db_pool_t pool)
static

Close the MongoDB connection and free associated data.

◆ mongodb_ensure_init()

static void mongodb_ensure_init ( void  )
static

Initialize libmongoc once.

◆ mongodb_exec()

static int mongodb_exec ( csilk_db_pool_t pool,
const char *  sql 
)
static

Execute a non-query command (INSERT, UPDATE, DELETE).

The 'sql' parameter should be a JSON command.

◆ mongodb_free_result()

static void mongodb_free_result ( csilk_db_result_t result)
static

Free a MongoDB query result set.

◆ mongodb_query()

static int mongodb_query ( csilk_db_pool_t pool,
const char *  sql,
csilk_db_result_t result 
)
static

Execute a MongoDB query and return results as tabular rows.

Support:

  1. Simple collection name: "users" -> find all.
  2. JSON command: {"find": "users", "filter": {...}} -> execute command.

◆ mongodb_transaction_begin()

static int mongodb_transaction_begin ( csilk_db_pool_t pool)
static

◆ mongodb_transaction_commit()

static int mongodb_transaction_commit ( csilk_db_pool_t pool)
static

◆ mongodb_transaction_rollback()

static int mongodb_transaction_rollback ( csilk_db_pool_t pool)
static

Variable Documentation

◆ csilk_db_mongodb_driver

csilk_db_driver_t csilk_db_mongodb_driver
Initial value:
= {
.name = "mongodb",
.connect = mongodb_connect,
.disconnect = mongodb_disconnect,
.query = mongodb_query,
.exec = mongodb_exec,
.transaction_begin = mongodb_transaction_begin,
.transaction_commit = mongodb_transaction_commit,
.transaction_rollback = mongodb_transaction_rollback,
.free_result = mongodb_free_result,
}
static void mongodb_free_result(csilk_db_result_t *result)
Free a MongoDB query result set.
Definition mongodb.c:104
static int mongodb_transaction_rollback(csilk_db_pool_t *pool)
Definition mongodb.c:296
static int mongodb_disconnect(csilk_db_pool_t *pool)
Close the MongoDB connection and free associated data.
Definition mongodb.c:87
static int mongodb_query(csilk_db_pool_t *pool, const char *sql, csilk_db_result_t *result)
Execute a MongoDB query and return results as tabular rows.
Definition mongodb.c:174
static int mongodb_transaction_begin(csilk_db_pool_t *pool)
Definition mongodb.c:284
static int mongodb_connect(csilk_db_pool_t *pool, const char *dsn)
Open a connection to MongoDB using a URI.
Definition mongodb.c:50
static int mongodb_transaction_commit(csilk_db_pool_t *pool)
Definition mongodb.c:290
static int mongodb_exec(csilk_db_pool_t *pool, const char *sql)
Execute a non-query command (INSERT, UPDATE, DELETE).
Definition mongodb.c:257