DiegoEmilio01 / IIC3413

Repositorio del curso Implementación de Sistemas de Bases de Datos
16 stars 1 forks source link

Duda creación de record con schema #3

Open drosselot opened 3 months ago

drosselot commented 3 months ago

Hola! Intento crear un nuevo record con los nuevos cambios, pero tengo problema al instanciarlos sin hardcodearlos. En los ejemplos utilizan: Record record_buf({DataType::STR, DataType::INT}); . Por lo que supuse que para instanciarlo con los valores del schema, se debía hacer algo del estilo: Record record_buf(schema.types); , pero no funciona. He intentado de varias formas y ninguna me funciona, ¿cuál sería la forma correcta de hacerlo?

cirojas commented 3 months ago

Record recibe un rvalue reference en el constructor. El concepto de rvalue en c++ es algo dificil de explicar en simple pero si de verdad les interesa lo pueden buscar en internet.

Para que funcione tienes que forzar una copia del vector y moverlo:

auto datatypes = schema.datatypes;
Record record(std::move(datatypes));

Otra alternativa es cambiar o sobrecargar el constructor de Record para que reciba un lvalue reference

// src/relational_model/record.cc
Record::Record(const std::vector<DataType>& types) :
    types (types)
{
    for (auto type : types) {
        switch (type) {
        case DataType::INT: {
            values.push_back(OutValue((int64_t) 0));
            break;
        }
        case DataType::STR: {
            char* str_buffer = new char[MAX_STRLEN+1];
            std::memset(str_buffer, '\0', MAX_STRLEN+1);
            values.push_back(OutValue(str_buffer));
            break;
        }
        }
    }
}

de esa forma podrias hacer directamente

Record record(schema.datatypes);
drosselot commented 3 months ago

Perfecto! Justo encontré la primera solución y me sirvió, gracias!