Descripción del uso del framework Postgres SQL

De Master Solutions Wiki
Saltar a: navegación, buscar

Introducción

La API SQL de Ideafix 5.x tiene la finalidad de brindar al desarrollador Cfix la posibilidad de manejarse con sentencias SQL en sus aplicaciones. A veces, los tiempos de ejecución de ciertos programas creados en versiones viejas de Ideafix 4.3.1 son bastante mayores cuando se migra a la versión 5.x de Ideafix. En muchos casos los tiempos mejoran notablemente cuando se utilizan cursores para recorrer tablas en lugar de un GetRecord dentro de un ciclo while o for. De hecho, aquellas aplicaciones que utilizan Essentia están mejor preparadas a nivel código que las que utilizan una dbase. Pero hay casos en que aún con estos cambios los tiempos de ejecución no son satisfactorios.

Es por eso que se creó la API SQL, para poder mejorar los tiempos de los programas. Sin embargo, el uso de esta API puede obligar a repensar el código existente ya que se estaría cambiando la lógica Cfix por lógica SQL. Pero esto no debe ser un impedimento, pues se pueden lograr tiempos menores a los de Ideafix originales.


Determinando el código a modificar

Entonces, el problema inicial es determinar qué código debe ser cambiado. Cuando se migra de Ideafix 4.3.1 a FrameWork (Ideafix 5.x usando un RDBMS SQL) el principal temor es que nada funcione. Claro, con Cfix se pueden hacer cosas que sobre un motor SQL no son correctas y algunas son imposibles. Pero la experiencia indica que cualquier código “viejo” funciona sobre FrameWork, siendo pocas las excepciones.

El primer paso es probar los programas en su estado original, ejecutarlos y observar su comportamiento, tomando tiempos y comprobando la correcta funcionalidad.

El segundo paso es encontrar las funciones que generan “cuellos de botella”. En general, las porciones de código con ciclos donde se hacen operaciones con la base son las más críticas. Sobre todo si se usa la función Cfix GetRecord para leer las tablas. En estos casos, cambiando por cursores Cfix se mejoran notablemente los tiempos.

Y el tercer paso (cuando aún los tiempos no son los deseados) es utilizar la API SQL.


Ventajas de la API SQL

La ventaja más importante de la API sobre el código Cfix es el uso directo de SQL sobre el motor de base de datos. Esto significa que, diseñando una sentencia SQL correctamente nos ahorramos un montón de líneas de código Cfix para lograr el mismo resultado. Y esto redunda en el tiempo de ejecución del programa en cuestión. El ejemplo más claro es un join entre varias tablas: con Cfix implica hacer tantos GetRecords y validaciones como tablas participen en la consulta; con la API es una sóla sentencia SQL con los campos que sean necesarios.

Veamos un ejemplo claro usando el esquema demo que está en el directorio examples de Ideafix. Si yo quisiera listar los clientes de la ciudad de Mercedes, San Luis, haría este código Cfix:


 SetFld(PROVIN_CODPRO, NULL_STR);
 while (GetRecord(PROVINbyCODPRO, THIS_KEY | NEXT_KEY, IO_NOT_LOCK) != ERROR) 
 {
   if (strcmp(“San Luis”, SFld(PROVIN_NOMBRE) == 0) break;
 }
 
 SetFld (LOCAL_CODPRO, SFld(PROVIN_CODPRO));
 SetIFld(LOCAL_CODLOC, MIN_SHORT);
 while (GetRecord(LOCALbyCODPRO, THIS_KEY | NEXT_KEY, IO_NOT_LOCK) != ERROR)
 {
   if (strcmp(“Mercedes”, SFld(LOCAL_NOMBRE) == 0) 
   {
     break;
   }
 
   SetIFld(CLIENTES_CLIENO, MIN_SHORT);
   while (GetRecord(CLIENTESbyCLIENO, THIS_KEY | NEXT_KEY, IO_NOT_LOCK) != ERROR)
   {
     if ((SFld(CLIENTES_PROV) == SFld(PROVIN_CODPRO)) && (IFld(CLIENTES_LOC) == IFld(LOCAL_CODLOC)))
     { 
       ImprimirCliente(...);
     }
   }
 }

Usando la API:

 char *consulta = “select 
                     clientes.nombre, 
                     provin.codpro, 
                     local.codloc 
                   from 
                     clientes, provin, local 
                   where 
                     provin.nombre =  ‘San Luis’    and 
                     local.nombre  =  ‘Mercedes’    and 
                     clientes.prov =  provin.codpro and 
                     clientes.loc  =  local.codloc
                   order by 1”;
 
 sqlcursor cur = CreateSQLCursor(“demo”, consulta);
 
 while (FetchSQLCursor(cur)) 
 {
   ImprimirCliente(....);
 }

Como vemos, la cantidad de código se reduce mucho, resulta más claro y es más veloz.

Otra ventaja de la API es que no es indispensable necesitar de un índice para realizar una consulta, pues los motores SQL generan índices temporales para resolver la misma. Con lo que nos da un poco más de libertad para pensar consultas complicadas que suelen ser muy tediosas de hacer en Cfix y que generalmente se resuelven usando el IQL de Ideafix.

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas
Procedimientos
Procesos
Indicadores
Items de Configuración
Imprimir/exportar