Skip to content

lucas794/20242c_tpindividual_taller

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SQL Rustico
Taller de Programación I
Cátedra Deymonnaz - 2C2024

Resumen

El trabajo consiste en basicamente realizar un motor sencillo de bases de datos, basados en SQL. Debe soportar consultas del tipo SELECT, INSERT, UPDATE, DELETE con posibilidad de tener consultas con condiciones (= , !=, operadores de mayor y menor), y permitir el ordenamiento si es que se desea.

No se da soporte a operadores tipo LENGHT o JOINs

Ejecución:

El formato de ejecución del trabajo practico está dado por

cargo run -- <ruta_a_directorio_con_tablas> <CONSULTA>

Donde:

  • Las consultas tipo SELECT, serán mostradas por la terminal, y su contenido puede ser redireccionable. Ejemplo:

    cargo run -- ./tables "SELECT * FROM clientes WHERE Edad >= 45;"
    # o bien
    cargo run -- ./tables "SELECT * FROM clientes WHERE Edad>=45;"
    

    Mostrará por terminal

    Nombre,Apellido,Edad,Correo electronico,Profesion
    Carlos,Sánchez,45,csanchez@gmail.com,ingeniero
    

    Si se desea redireccionar su contenido:

    cargo run -- ./tables "SELECT * FROM clientes WHERE Edad >= 45;" > result_select.csv
    

    Se generará un archivo result_select del tipo CSV con los resultados de la búsqueda.

  • Las consultas UPDATE, INSERT, DELETE son ejecutadas sobre el archivo que se está trabajando Ejemplos

    ## esta consulta generará un update sobre todos los clientes con Edad = 31
    cargo run -- ./tables "UPDATE clientes SET Nombre = 'Github', Edad = 45 WHERE Edad=31;"
    
    ## esta consulta eliminará por completo la database 
    cargo run -- ./tables "DELETE FROM clientes;" 
    
    ## Esta consulta insertará (Juan, 20), y el resto de los espacios serán NULL (blank)
    cargo run -- ./tables "INSERT INTO clientes (Nombre, Edad) VALUES ('Juan', 20);" #Se inserta un valor en la base de datos
    
    ## Esta consulta insertara (Juan, 20) y (Marcelo, 20) y para ambas el resto de los espacios seran NULL
    cargo run -- ./tables "INSERT INTO clientes (Nombre, Edad) VALUES ('Juan', 20), ('Marcelo', 20);
    
    ## Esta consulta insertara por completo (55, Lucas, nodox, 80, test@gmail.com, informatico)
    cargo run -- ./tables "INSERT into clientes VALUES (55, Lucas, nodox, 80, test@gmail.com, informatico)
    

    Aclaración: Por defecto, hay 2 archivos los cuales puede usar adentro de ./tables, usá el que mas te gusta!

Pruebas

Note

No tocar el archivo database.csv que está en ./tests/test_tables dado que los tests unitarios lo utilizan para las pruebas.

Para correr TODAS las pruebas, se deberá correr el comando cargo test

Para solo correr las pruebas de integración, se deberá correr el comando cargo test --test '*'

Correcciones realizadas

  • Cambio de lectura de archivos a ruta de carpeta
  • Cada estructura tiene su propia carpeta creada.
  • Limpieza de comentarios inecesarios
  • Refactor run en ./src para hacer bloques de código mas cortos
  • Soporte de paréntesis en condicionales
  • Error con condiciones pegadas, programa quedaba colgado, ahora se lanza un error correspondiente.
  • Caso particular con operacion AND a veces fallaba.
  • Agregado por mi parte (no es parte de la corrección): Se agregó un struct Sorter.
  • SELECT: Las consultas ahora se devuelven en el orden ingresado de las columnas.
  • SELECT: Las consultas ahora permiten condicionales que no estén ingresadas en la query (Ejemplo SELECT Edad FROM table WHERE Nombre = 'Luis')
  • INSERT: Solucionado problema de ingreso de un valor nuevo
  • DELETE: Solucionado problema de la eliminación de un elemento de la tabla.
  • TODAS LAS CONSULTAS: Fix en columnas que tenian nombre espaciado.
  • Test agregados para estas nuevas features mencionadas previamente
  • Separación de integration_test a clases para cada tipo de consulta.
  • Rework completo sobre los tests, utilizando ahora un mock para evitar lecturas de archivo directas y evitar problemas a la hora de correr tests
  • Fix condiciones sin terminar dejaban el programa colgado
  • ORDER BY por columnas que no estaban en la query fallaba (agregados tests para esto)
  • Soporte para condiciones pegadas (Generé varios test para esto, y mixeando condiciones no pegadas y pegadas)
  • Fix usos de unwrap en algunos casos bordes y uso de std::process::exit
  • Arreglado error en returns de Table y FolderTables para matchear la funcion de retorno de creacion en vez de crear un nuevo error
  • IMPORTANTE: fix con comparaciones con espacios en los strings (agregadas pruebas tambien)
  • IMPORTANTE: Agregado soporte de operaciones con columnas como condiciones (SELECT * FROM clientes WHERE Id > Edad por ejemplo, agregado test también)
  • IMPORTANTE: Agregado soporte para operaciones con constantes como condicionales (Ejemplo: SELECT * FROM clientes WHERE 1=1;) esto obviamente devolveria true por ende todas las filas.

About

Trabajo Practico individual taller de programacion

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages