Tablas con backend SQLite

OpenADS puede abrir y operar una base de datos SQLite a través de la misma superficie ACE / rddads usada para tablas DBF / ADT. Desde el punto de vista de una aplicación Harbour / Clipper / X#, la tabla SQLite se comporta como un área de trabajo normal — navegación (Skip, GoTop, GoBottom), lectura/escritura de campos y las llamadas Ads* estándar funcionan.

Requisitos

  • OpenADS compilado con OPENADS_WITH_SQLITEactivado por defecto en CMakeLists.txt (la amalgama SQLite se incluye vía FetchContent).
  • La URI de conexión debe empezar con sqlite:// seguida del path al archivo .db.

Cómo funciona

El camino SQLite se elige enteramente por la URI de conexión. AdsConnect60 llama a parse_sqlite_uri(); cuando la URI coincide con sqlite://… abre una SqliteConnection en lugar del motor DBF/CDX nativo. Cada llamada ACE posterior (AdsOpenTable90, AdsGetField, AdsSetField, AdsSkip, AdsSeek, AdsCreateIndex61, …) se redirige al backend SQLite.

1. Conectar con una URI sqlite://

LOCAL hConn
AdsConnect60( "sqlite:///path/to/database.db", ;
              ADS_LOCAL_SERVER, NIL, NIL, 0, @hConn )

La tercera barra es el / inicial del path absoluto, así que sqlite:///tmp/app.db abre /tmp/app.db.

2. Abrir una tabla existente

A través de rddads la tabla se abre como cualquier área de trabajo:

USE customers VIA "ADSCDX" NEW SHARED

(Las aplicaciones X# usan el RDD AXDBFCDX; el ruteo a nivel ACE es idéntico.)

Mapeo de tipos de campo

El tipo de campo se infiere del tipo declarado de la columna SQLite (coincidencia de subcadena, sin distinguir mayúsculas):

El tipo declarado SQLite contiene Tipo de campo OpenADS Longitud
INT Integer 4
REAL / FLOA / DOUB Double 8 (6 dec)
BLOB Binary 10
cualquier otro (ej. TEXT) Character 64

Cifrado

Se puede pasar una clave de cifrado como parámetro de query; se decodifica de URL antes de usarse:

AdsConnect60( "sqlite:///path/db.sqlite?key=mipassword", ;
              ADS_LOCAL_SERVER, NIL, NIL, 0, @hConn )

Limitaciones actuales

  • Solo aperturaAdsCreateTable no crea tablas SQLite. Pasar un handle de conexión SQLite cae al camino DBF nativo; crea el esquema directamente en SQLite.
  • Índices se exponen como SqliteIndex con seek / next / prev básicos que mapean a consultas ORDER BY.
  • Transacciones se mapean a transacciones SQLite normales.

Otros backends SQL (OpenADS Plus)

SQLite es uno de cuatro backends SQL elegidos de la misma forma — por la URI de conexión. PostgreSQL, MariaDB / MySQL y cualquier motor accesible por ODBC también están soportados detrás de la ABI ACE:

Backend URI de conexión
SQLite sqlite:///ruta/db.sqlite[?key=…]
PostgreSQL postgresql://user:pass@host:5432/dbname
MariaDB / MySQL mariadb://user:pass@host:3306/dbname
ODBC (cualquiera) odbc://Driver={…};Server=…;Database=…;UID=…;PWD=…

Los cuatro viven detrás de un único registro enchufable de backend-ops (una struct BackendTableOps + una línea de registro por backend), de modo que las funciones ABI de navegación / campos quedan agnósticas al backend. Lectura + navegación + SEEK por columna funcionan hoy; la escritura es por backend. Los identificadores se restringen a ASCII seguro y los valores de SEEK usan parámetros preparados. Ver docs/OPENADS_PLUS.md.


This site uses Just the Docs, a documentation theme for Jekyll.