Worm é um ORM em C++20 inspirado no Doctrine. O projeto está em fase inicial, mas já oferece um fluxo tipado de persistência sobre reflexão estática, SQL parametrizado e drivers para SQLite, PostgreSQL e MySQL.
- drivers opcionais para MySQL, PostgreSQL e SQLite;
- CRUD tipado com hidratação, identity map e updates parciais por snapshot;
- parâmetros vinculados e transações RAII;
- dependências opcionais gerenciadas por features do vcpkg;
- build organizado em targets CMake namespaced (
Worm::*); - testes unitários e um contrato de integração compartilhado entre drivers;
- reflexão C++20 tipada com descritores
constexpr, conceitoReflectablee visitação de campos. - consultas com expressões parametrizadas e composição de
cláusulas
WHEREeORDER BY.
O projeto ainda não deve ser considerado pronto para produção. Consulte TODO.md para acompanhar as próximas etapas.
O guia de primeiros passos mostra um fluxo completo
com SQLite: integração CMake, entidade refletida, CRUD, consulta parametrizada,
transação, erros, ownership e limitações atuais. O mesmo fluxo está disponível
como exemplo compilável em
examples/sqlite-quick-start.cpp.
- CMake 3.20 ou superior;
- compilador com suporte a C++20;
- Git;
- vcpkg;
- no Windows, Visual Studio 2022 Build Tools com a carga de trabalho C++.
Defina VCPKG_ROOT apontando para a instalação do vcpkg:
$env:VCPKG_ROOT = "C:\Users\seu-usuario\vcpkg"Copie .env.example para .env e ajuste o driver e as
credenciais. O valor DATABASE_TYPE aceita sqlite, postgresql, mysql ou
mssql; para SQLite, DBNAME também pode ser :memory:.
No Windows com MSVC, os presets versionados são a forma recomendada:
cmake --preset windows-msvc
cmake --build --preset debugPara gerar uma build Release:
cmake --build --preset releasePor padrão, o manifesto vcpkg.json instala libmysql, libpqxx e SQLite. Cada driver pode ser desativado durante a configuração:
cmake -S . -B build/sqlite `
-DWORM_ENABLE_POSTGRESQL=OFF `
-DWORM_ENABLE_MYSQL=OFF `
-DWORM_ENABLE_SQLITE=ON `
-DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"As opções WORM_ENABLE_POSTGRESQL, WORM_ENABLE_MYSQL e
WORM_ENABLE_SQLITE são independentes e vêm habilitadas por padrão. O driver
SQL Server é habilitado explicitamente com WORM_ENABLE_MSSQL=ON e usa ODBC.
Drivers desativados não têm seus fontes, testes ou dependências adicionados à
build.
Para usar SQL Server, instale o Microsoft ODBC Driver 18 e configure
MSSQL_ODBC_DRIVER. O nome padrão é ODBC Driver 18 for SQL Server.
ctest --preset debugPara executar apenas um domínio:
ctest --test-dir build -C Debug -L errors --output-on-failure
ctest --test-dir build -C Debug -L connection --output-on-failure
ctest --test-dir build -C Debug -L core --output-on-failureOs testes ficam fora do código de produção:
tests/
├── connection/
├── core/
├── errors/
├── reflection/
└── utils/
SQLite, MySQL e PostgreSQL compartilham o mesmo contrato de integração. SQLite
roda localmente; os outros bancos usam instâncias descartáveis na CI e podem ser
executados localmente com as variáveis descritas em .env.example.
worm/
├── cmake/ # descoberta e normalização de dependências
├── docs/ # guias de uso e limitações
├── examples/ # exemplos compiláveis opcionais
├── src/
│ ├── connection/ # clientes de banco de dados
│ ├── core/ # expressões e cláusulas SQL parametrizadas
│ ├── errors/ # tipos de erro públicos
│ ├── reflection/ # descritores e visitação tipada de campos
│ └── utils/ # helpers, factory e injeção de dependências
├── tests/ # testes organizados por subsistema
├── CMakeLists.txt
└── vcpkg.json
Este projeto é distribuído sob a licença MIT.