Arquitetura
OpenADS é um sistema de cinco camadas. Cada camada é um ponto de troca que uma aplicação ou teste pode usar independentemente.
L1 ABI exports extern "C" Ads*
(ace32/64.dll, libace.so/.dylib)
L2 Sessão Connection / Statement / HandleRegistry / Tx
L3 Motor SQL Lexer → Parser → Resolver → Planner → Executor
AEP host, UDFs xBase
L4 Núcleo motor Table / Index / MemoStore / Cursor / LockMgr
TxLog (WAL) / Catalog
L5 Plataforma File / mmap / locks por intervalo / sockets
Implementações Win32 + POSIX
Responsabilidades por camada
| Camada | Responsabilidade |
|---|---|
| L1 | Único módulo com ABI C. Traduz chamadas Ads* para a API C++ interna; converte códigos de erro ACE de/para util::Error; conversões OEM / ANSI / UTF-8 / UTF-16. |
| L2 | Estado por conexão — tabelas abertas, declarações SQL preparadas, pilha de transações, registro de procedimentos AEP, chave de criptografia. |
| L3 | Dialeto SQL completo do Advantage — árvores WHERE booleanas, joins (INNER / LEFT / RIGHT / FULL OUTER), subqueries (correlacionadas e não), GROUP BY + HAVING, UNION, funções janela, CTEs, CASE, projeção escalar / agregada / aritmética. |
| L4 | Motor agnóstico ao formato — Table, Index, MemoStore, Cursor, LockMgr, TxLog, Catalog. O trait Driver é o ponto de extensão para novos formatos. |
| L5 | Abstração multi-plataforma do SO (Win32 + POSIX). |
Drivers (extensão L4)
AdtDriver .adt + .adm + .adi (ADS proprietário — fora de escopo)
CdxDriver .dbf + .cdx + .fpt (FoxPro)
NtxDriver .dbf + .ntx + .dbt (Clipper)
VfpDriver .dbf + .cdx + .fpt (Visual FoxPro)
Servidor daemon
openads_serverd roda L2–L5 in-process e os expõe via o
protocolo de fio nativo OpenADS sobre TCP (tcp:// em claro ou
tls:// com TLS, desde v0.4.0). A mesma DLL que fala com um
diretório local também fala com um servidor remoto via URI
tcp://host:porta/<dir>.
Studio (console web)
OPENADS_WITH_HTTP=ON é o padrão de build desde v1.0.0-rc20.
A mesma SPA Studio é servida por dois hosts:
- Modo Remote Server — embutida em
openads_serverd.exe, servindo o wire e o HTTP em paralelo. - Modo LocalServer (desde v1.0.0-rc9) — embutida em
ace64.dll/ace32.dll. Uma app Harbour / X# / Clipper que carregue a DLL recebe o console Studio dentro do próprio processo. Três exports exclusivos controlam:AdsStudioStart/Stop/Port, mais auto-start porOPENADS_STUDIO_PORTdesdeDllMain. O header do Studio traz um badge de modo (desde rc10) que distingue os dois modos via campomodede/api/health.
Cada requisição REST abre uma conexão ABI curta — o console é outro consumidor do ABI público, igual a uma app Harbour.