DVX_GUI/sql/dvxSql.h

70 lines
2.3 KiB
C

// dvxSql.h -- DVX SQL database interface
//
// High-level wrapper around SQLite3. Manages database connections
// and result set cursors via integer handles so BASIC code never
// touches raw pointers. Thread-safe is not a concern (DOS is
// single-threaded).
#ifndef DVX_SQL_H
#define DVX_SQL_H
#include <stdint.h>
#include <stdbool.h>
// ============================================================
// Database operations
// ============================================================
// Open a database file. Returns a handle > 0 on success, 0 on error.
int32_t dvxSqlOpen(const char *path);
// Close a database and free its resources.
void dvxSqlClose(int32_t db);
// Execute a SQL statement that returns no results (DDL, INSERT, UPDATE, DELETE).
// Returns true on success, false on error.
bool dvxSqlExec(int32_t db, const char *sql);
// Return the last error message for a database handle.
const char *dvxSqlError(int32_t db);
// Return the number of rows affected by the last INSERT/UPDATE/DELETE.
int32_t dvxSqlAffectedRows(int32_t db);
// ============================================================
// Result set (cursor) operations
// ============================================================
// Execute a SELECT query. Returns a cursor handle > 0, or 0 on error.
// The cursor is positioned BEFORE the first row; call dvxSqlNext to
// advance to the first row.
int32_t dvxSqlQuery(int32_t db, const char *sql);
// Advance to the next row. Returns true if a row is available.
bool dvxSqlNext(int32_t rs);
// Return true if the cursor is past the last row.
bool dvxSqlEof(int32_t rs);
// Return the number of columns in the result set.
int32_t dvxSqlFieldCount(int32_t rs);
// Return the name of column N (0-based).
const char *dvxSqlFieldName(int32_t rs, int32_t col);
// Return the value of column N as a string.
const char *dvxSqlFieldText(int32_t rs, int32_t col);
// Return the value of the named column as a string.
const char *dvxSqlFieldByName(int32_t rs, const char *name);
// Return the value of column N as an integer.
int32_t dvxSqlFieldInt(int32_t rs, int32_t col);
// Return the value of column N as a double.
double dvxSqlFieldDbl(int32_t rs, int32_t col);
// Close a result set cursor and free its resources.
void dvxSqlFreeResult(int32_t rs);
#endif // DVX_SQL_H