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 Phase 2
openads_serverd roda L2–L5 in-process e os expõe via o
protocolo de fio nativo OpenADS sobre TCP. A mesma DLL que
fala com um diretório local também fala com um servidor remoto
via URI tcp://host:porta/<dir>.
Studio Phase 2 (console web)
Quando o daemon é compilado com OPENADS_WITH_HTTP=ON, um
servidor HTTP embutido (cpp-httplib) serve uma SPA de
administração em outra porta. Cada requisição REST abre uma
conexão ABI curta — o console web é outro consumidor do ABI
público, igual a uma app Harbour.