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 clavesllave
(nombre del campo o columna) yvalues
(un array de valores que se utilizarán en la cláusulaIN
).
Retorna
string|array
:
Retorna la cláusula SQLIN
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
-
Generación de la cláusula SQL
IN
:- La función llama a
genera_in_sql()
para construir la cláusula SQLIN
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.
- La función llama a
-
Limpieza de espacios dobles:
- La función llama a
limpia_espacios_dobles()
de la clasesql
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.
- La función llama a
-
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.
- La función ajusta la sintaxis de la cláusula SQL reemplazando cualquier aparición de
-
Retorno de la cláusula SQL:
- Finalmente, la función retorna la cadena con la cláusula SQL
IN
normalizada.
- Finalmente, la función retorna la cadena con la cláusula SQL
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);
}