src.where.in_sql - gamboamartin/where GitHub Wiki

in_sql

La función in_sql es una función privada que genera una cláusula SQL IN utilizando una llave (nombre de columna) y un array de valores. La función valida que la llave no esté vacía, convierte el array de valores en una lista SQL, valida la consistencia de la llave y los valores, y luego genera la cláusula IN final.

Signatura

private function in_sql(string $llave, array $values): array|string

Parámetros

  • string $llave:
    El nombre del campo o columna que se utilizará en la cláusula SQL IN. Esta cadena se valida para asegurar que no esté vacía.

  • array $values:
    Un array de valores que se utilizarán para construir la lista de valores en la cláusula SQL IN. Estos valores serán convertidos en una lista separada por comas y envueltos en comillas simples.

Retorna

  • array|string:
    Retorna la cláusula SQL IN generada como una cadena si la validación es exitosa. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Validación de la llave:

    • La función valida que la cadena $llave no esté vacía. Si está vacía, se genera un mensaje de error y se retorna un array con el mensaje de error.
  2. Conversión del array de valores a una lista SQL:

    • La función llama a values_sql_in() para convertir el array $values en una lista de valores SQL, asegurando que cada valor esté correctamente formateado y protegido contra inyecciones SQL.
    • Si ocurre un error durante este proceso, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Validación de la relación entre la llave y los valores:

    • La función llama a valida_in() para verificar que la llave y los valores SQL sean consistentes, es decir, que si uno tiene información, el otro también debe tenerla.
    • Si ocurre un error en la validación, se genera un mensaje de error y se retorna un array con el mensaje de error.
  4. Generación de la cláusula SQL IN:

    • La función llama a in() para construir la cláusula SQL IN en el formato "$llave IN ($values_sql)".
    • Si ocurre un error durante la generación de la cláusula, se genera un mensaje de error y se retorna un array con el mensaje de error.
  5. Retorno de la cláusula SQL:

    • La función retorna la cadena con la cláusula SQL IN generada.

Ejemplos

$llave = 'id_producto';
$values = ['100', '200', '300'];

$resultado = $this->in_sql($llave, $values);

// Resultado esperado:
// "id_producto IN ('100', '200', '300')"

Código de la Función

private function in_sql(string $llave, array $values): array|string
    {
        $llave = trim($llave);
        if($llave === ''){
            return $this->error->error(mensaje: 'Error la llave esta vacia',data: $llave, es_final: true);
        }

        $values_sql = $this->values_sql_in(values:$values);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al generar sql',data: $values_sql);
        }
        $valida = (new sql)->valida_in(llave: $llave, values_sql: $values_sql);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al validar in', data: $valida);
        }

        $in_sql = (new sql())->in(llave: $llave,values_sql:  $values_sql);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al generar sql',data: $in_sql);
        }

        return $in_sql;
    }