Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 22-10-2015
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.918
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Sip, armar SQL con la especificacion completa es practicamente re-implementar un Parser de SQL. Sin embargo, el caso de los where es relativamente simple.

Uno de los ORMS que hice (obj-c) lo muestra:

https://bitbucket.org/elmalabarista/...e-view-default


Código PHP:
+(NSString *) buildFilterCriteria: (NSArray *)filterList {
    
NSMutableString sql = [NSMutableString string];
    
int count;
    
int i;

    [
sql appendString :@" WHERE "];
    
    
count = [filterList count];
    
    for (
0counti++) { 
        if (
== count) {
            [
sql appendFormat:@"(%@)", [filterList objectAtIndex:i] ];
        }
        else {
            [
sql appendFormat:@"(%@) AND ", [filterList objectAtIndex:i] ];
        }
    } 
    
    return 
sql;
}

+(
NSString *) buildSelect: (NSString *)tableName fields:(NSArray *)fields filters:(NSArray *)filterList orders:(NSArray *)orderList {
...
...
    
//Add the filters
    
if (filterList) {
        [
sql appendString: [SqlGenerator buildFilterCriteria:filterList]];
    } 
---

OFF-TOPIC:

Ahora estoy en la tarea (por hobby) de hacer un lenguaje de programacion relacional, donde es normal programar estilo LINQ, asi que tengo por ejemplo esto:

Código SQL [-]
data = [1, 3, 4, 2, 8, 1]
q1a = where data ? this < 4 end
q1b = where data ? this > 0 end

q1 = q1a && q1b

q2 = select data ? this * 2 end

qFinal = orderby q1 && q2 ? this end

for row in qFinal do
     row | print
end

La idea es que es redudante hacer "SELECT campo1, ..." en el caso de
Código SQL [-]
where data ? this < 4 end
, y como el lenguaje es relacional, puede hacer composicion de querys (unir q1 & q2 que combina la projeccion y el filtro y luego aplica el orden)

Para que quede claro."where data ? this < 4 end" no requiere decirle "select" ni "from" porque es redundante con lo que ya se. Esa es una de las cosas que le falto al SQL para hacerlo mas amigable.

Esto no es usando una base de datos relacional, todo es en memoria. Pasarlo a SQL es algo extra que se resuelve mucho mas facil si en vez de hacer concatenacion de STRINGs genero un AST y un mini-interprete de eso para armar los SQL.
__________________
El malabarista.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Como construir un IDE? JXJ Varios 11 12-01-2009 22:59:36
Construir Manual SQL GustavoCruz SQL 1 30-05-2008 18:36:41
Problema al Construir un TRegistry D-MO Varios 3 24-08-2006 19:55:33
Construir un KEYLOGGER SPARROW Varios 3 18-02-2004 14:27:00
Error al construir el .EXE ADN Varios 8 24-07-2003 12:49:22


La franja horaria es GMT +2. Ahora son las 16:49:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi