administrador.base.orm.where.genera_in_sql_normalizado - gamboamartin/administrador GitHub Wiki

genera_in_sql_normalizado

La función genera_in_sql_normalizado es una función privada que genera una cláusula SQL IN, normaliza el texto generado eliminando espacios dobles y ajusta la sintaxis de paréntesis para evitar errores en la consulta SQL. Esta función utiliza genera_in_sql para crear la cláusula base, y luego la limpia y ajusta según las necesidades.

Signatura


private function genera_in_sql_normalizado(array $in): string|array

Parámetros

  • array $in:
    Un array asociativo que debe contener las claves llave (nombre del campo o columna) y values (un array de valores que se utilizarán en la cláusula IN).

Retorna

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

Explicación Detallada

  1. Generación de la cláusula SQL IN:

    • La función llama a genera_in_sql() para construir la cláusula SQL IN utilizando el array $in.
    • 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.
  2. Limpieza de espacios dobles:

    • La función llama a limpia_espacios_dobles() de la clase sql para eliminar cualquier espacio doble innecesario en la cláusula SQL generada.
    • Si ocurre un error durante la limpieza, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Ajuste de la sintaxis de paréntesis:

    • La función ajusta la sintaxis de la cláusula SQL reemplazando cualquier aparición de '( (' por '(( para corregir problemas de formato en la consulta SQL.
  4. Retorno de la cláusula SQL:

    • Finalmente, la función retorna la cadena con la cláusula SQL IN normalizada.

Ejemplos

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

$resultado = $this->genera_in_sql_normalizado($in);

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

Código de la Función

private function genera_in_sql_normalizado(array $in): string|array
    {
        $in_sql = $this->genera_in_sql(in: $in);
        if(errores::$error){
            return $this->error->error(mensaje:'Error al generar sql',data:$in_sql);
        }

        $in_sql = (new sql())->limpia_espacios_dobles(txt: $in_sql);
        if(errores::$error){
            return $this->error->error(mensaje:'Error al limpiar in_sql',data:$in_sql);
        }
        return str_replace('( (', '((', $in_sql);
    }