Skip to content

asfernandes/fb-cpp

Repository files navigation

fb-cpp

A modern C++ wrapper for the Firebird database API.

Documentation | Repository

Overview

fb-cpp provides a clean, modern C++ interface to the Firebird database engine. It wraps the Firebird C++ API with RAII principles, smart pointers, and modern C++ features.

Features

  • Modern C++: Uses C++20 features for type safety and performance
  • RAII: Automatic resource management with smart pointers
  • Type Safety: Strong typing for database operations
  • Exception Safety: Proper error handling with exceptions
  • Boost Integration: Optional Boost.DLL for loading fbclient and Boost.Multiprecision support for large numbers

Quick Start

#include "fb-cpp/fb-cpp.h"

using namespace fbcpp;

// Create a client
Client client{"fbclient"};

// Connect to a database
const auto attachmentOptions = AttachmentOptions()
    .setConnectionCharSet("UTF8");
Attachment attachment{client, "localhost:database.fdb", attachmentOptions};

// Start a transaction
const auto transactionOptions = TransactionOptions()
    .setIsolationLevel(TransactionIsolationLevel::READ_COMMITTED);
Transaction transaction{attachment, transactionOptions};

// Prepare a statement
Statement statement{attachment, transaction, "select id, name from users where id = ?"};

// Set parameters
statement.setInt32(0, 42);
/* Or
statement.set(0, 42);
*/

// Execute and get results
if (statement.execute(transaction))
{
    // Process results...
    do
    {
        const std::optional<std::int32_t> id = statement.getInt32(0);
        const std::optional<std::string> name = statement.getString(1);

        /* Or
        const auto id = statement.get<std::int32_t>(0);
        const auto name = statement.get<std::string>(1);
        */
    } while (statement.fetchNext());
}

// Commit transaction
transaction.commit();

Using with vcpkg

This library is present in firebird-vcpkg-registry.

To install, add the registry or overlay to your vcpkg configuration and install the fb-cpp package:

vcpkg install fb-cpp

Or add it to your vcpkg.json manifest:

{
  ...
  "dependencies": [
    {
      "name": "fb-cpp",
      "default-features": true
    }
  ]
}

The default features are:

  • boost-dll: Enable Boost.DLL support for runtime dynamic loading of Firebird client library
  • boost-multiprecision: Enable Boost.Multiprecision support for INT128 and DECFLOAT types

Building

This project uses CMake presets (CMakePresets.json) and vcpkg for dependency management.

Copy the appropriate CMakeUserPresets.json.<platform>.template file to CMakeUserPresets.json to set environment variables for tests and define the default preset.

# Configure
cmake --preset default

# Build
cmake --build --preset default

# Run tests
ctest --preset default

# Build docs
cmake --build --preset default --target docs

Documentation

The complete API documentation is available in the build doc/docs/ directory after building with the docs target.

License

MIT License - see LICENSE.md for details.

Donation

If this project help you reduce time to develop, you can show your appreciation with a donation.

About

A modern C++ wrapper for the Firebird database API

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Languages