Ver Mensaje Individual
  #12  
Antiguo 17-11-2022
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por amadis Ver Mensaje
Podrias compartir un poco mas sobre como haces la comparacion y el archivo con las constantes.?
Lo hago en otros lenguajes pero quizás la forma mas simple en Delphi es ponerlo en un TMemo y copiar ahi el SQL.


Cita:
Empezado por amadis Ver Mensaje
En cuanto a la logica para el chequeo, se me ocurre en el source, del form principal, luego de crear los datos y conexion a bd.

De hecho, yo lo pongo como una función de la BD:

Código SQL [-]
CREATE OR REPLACE FUNCTION db_master_version(OUT RETURNS INTEGER)
AS $$
BEGIN
  RETURNS = 2;
END;
$$
LANGUAGE plpgsql;

Para la logica, lo que hago es que hago in split del SQL en cada "GO"

Código SQL [-]
--version: 2

DROP TRIGGER IF EXISTS visit_code_update_tg ON payment;

GO

--version: 3
ALTER TABLE doc_codes
ADD COLUMN doc_code  TEXT PRIMARY KEY DEFAULT generate_ulid() CHECK (not_empty(doc_code));

GO

Y parser el segmento de "version". Esto es rust pero la lógica creo se entiende:

Código PHP:
// of es el SQL con los comandos de DB
pub fn load_cmds(of: &str) -> Vec<CmdDB> {
    
let mut cmd Vec::new();
    
let mut sql CmdDB {
        
version0,
        
sql"".to_string(),
    };

    
// Recorro por lineas
    
for line in of.lines() {
        
// Al encontrar esto, paseo el numero como un integer
        
if line.starts_with("--name:") {
            
sql.version line.replace("--name:""").trim().parse().unwrap();
            
sql.sql.clear();
            continue;
        };
        
// Acumulo el SQL hasta que encuentro el GO
        
if line.starts_with("GO") {
            
cmd.push(sql.clone())
        } else {
            
sql.sql += &format!("{}\n"line);
        }
    }
    
// Retorno los comandos partidos por version
    
cmd
}

//Se ven asi:

CmdDB {
        
version2,
        
sql"
DROP TRIGGER IF EXISTS visit_code_update_tg ON payment;

"
}; 
__________________
El malabarista.
Responder Con Cita