Boost logo

Boost :

From: Scott Bailey (Scott_at_[hidden])
Date: 2024-11-21 22:30:14


# boost_sqlite review

Please accept my apologies for the poor formatting. And a bit thank you to
everyone involved in this process. I have long wished for a sqlite wrapper
with critical mass.

## Author's Background

I am a professional C++ software developer. I have been a professional
user and proponent of Boost libraries since the late 2000s.

I have been using SQLite for more than 10 years and at one time wrote
my own C++ wrapper.

## Initial Thoughts and Use Case

At the time I saw the announcement for this review, I was actively
evaluating libraries for a project I was (and continue to be) working
on. I successfully used the boost_sqlite library in a limited capacity
(create, insert, and pragmas only for on disk and in memory DBs).

My first impression of the library is that it's extremely
lightweight. This simplicity has value but also leaves the end user
reinventing the wheel for certain repetitive operations. For example,
using class enums for pragma get and set moves defect finding from
runtime (bad) to compile time (better!).

My second thought was how painful it was to include in my professional
project. Our legacy software does not build Boost.json and, while it
was trivial to add it for my sandbox app, it is an unnecessary extra
dependency.

## Design Evaluation

Simple, straight forward, and intuitive. I believe it meets my needs.

### Wishlist

Here are some wishlist items I have. They may be inappropriate for
this library and boost in general; however, they are still on my
wishlist.

#### connection

It would be great if connection had a simple enum so I could do this:

```cpp
   boost::sqlite::connection mydb(boost::sqlite::memory);
```

Also, given C++17 `std::fstream` takes `std::filesystem::path`, it
would be nice if `connection()` et all did as well. And I wouldn't
complain if `boost::filesystem::path` was supported as well.

## Implementation Evaluation

I reviewed this library as a user.

## Documentation Evaluation

The readme.md file was adequate for me to quickly build a simple
SQLite DB application.

## Potential Usefulness

This is a useful library. I intend to incorporate this into
professional projects as soon as it becomes available in a stable
boost release.

## Personal Usage

I used the following compiler in my development:

  gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

I included Boost and Boost.sqlite using CPM.cmake (fetchcontent). It
was a trivial operation to include and link.

## Final Thoughts

For the past few years I've lamented the lack of a Modern C++ SQLite
wrapper with a critical mass of user backing. This library has the
potential to fill that gap.

I would like to see this library build without the sin dependency.

With or without the build dependency change, this library should be
accepted into Boost.

Scott Bailey

On Wed, Nov 13, 2024 at 6:30 AM Richard Hodges via Boost <
boost_at_[hidden]> wrote:

> Dear All,
>
>
> Surprise!
>
>
> The Boost formal review of the Boost SQLITE library starts *TODAY*, taking
> place
>
> from November 13th, 2024 to November 22nd, 2024 (inclusive).
>
>
> I apologise profusely for springing this on you without prior warning. The
> error is entirely mine. I am extending the period by one day to compensate.
>
> The library is authored by Klemens Morgenstern (@klemens-morgenstern in the
> CppLang
> slack).
>
> Documentation: https://klemens.dev/sqlite/
> <https://anarthal.github.io/mysql/index.html>
> Source: https://github.com/klemens-morgenstern/sqlite
> <https://github.com/anarthal/mysql/>
>
> From the documentation:
>
> boost.sqlite is a simple to use C++ sqlite library.
> It provides a modern interface using facilities like error_code,
> views (e.g. for blobs) and the ability to use boost.describe or boost.pfr
> for parameterised queries.
>
> Supported features include:
>
> - typed queries
> - prepared statements
> - json support
> - custom functions (scalar, aggregate, windows)
> - event hooks
> - virtual tables
>
> SQLite provides an excellent C-API, so this library does not attempt to
> hide, but to augment it.
>
> Please provide in your review information you think is valuable to explain
> your choice to ACCEPT or REJECT including SQLITE as a Boost library. Please
> be explicit about your decision (ACCEPT or REJECT).
>
> Some other questions you might want to consider answering:
>
> - Will the library bring additional out-of-the-box utility to Boost?
> - What is your evaluation of the implementation?
> - What is your evaluation of the documentation?
> - Will the choice of API abstraction model ease the development of
> software that must talk to a SQLITE database?
> - Are there any immediate improvements that could be made after
> acceptance, if acceptance should happen?
> - Did you try to use the library? With which compiler(s)? Did you
> have any problems?
> - How much effort did you put into your evaluation? A glance? A quick
> reading? In-depth study?
> - Are you knowledgeable about the problem domain?
>
> More information about the Boost Formal Review Process can be found
> at: http://www.boost.org/community/reviews.html
>
> The review is open to anyone who is prepared to put in the work of
> evaluating and reviewing the library. Prior experience in contributing to
> Boost reviews is not a requirement.
>
> Thank you for your efforts in the Boost community. They are very much
> appreciated.
>
> Richard Hodges
> - review manager of the proposed Boost.SQLITE library
>
> Klemens is often available on CppLang Slack and of course by email should
> you
> require any clarification not covered by the documentation, as am I.
>
> _______________________________________________
> Unsubscribe & other changes:
> http://lists.boost.org/mailman/listinfo.cgi/boost
>


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk