administrador.base.orm.where.genera_in_sql - gamboamartin/administrador GitHub Wiki
genera_in_sql
La función genera_in_sql
es una función privada que genera una cláusula SQL IN
a partir de un array que contiene una llave (nombre de columna) y un conjunto de valores. La función valida que el array contenga las claves requeridas, que los valores sean un array, y luego genera la cláusula SQL IN
. Además, se encarga de limpiar espacios dobles en la cadena SQL resultante y de ajustar la sintaxis para evitar problemas en la consulta.
Signatura
private function genera_in_sql(array $in): array|string
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
array|string
:
Retorna la cláusula SQLIN
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
-
Validación del contenido del array
$in
:- Si el array
$in
contiene elementos, la función procede a realizar las validaciones necesarias. De lo contrario, retorna una cadena vacía.
- Si el array
-
Validación de las claves en el array
$in
:- La función utiliza
valida_existencia_keys()
para verificar que el array$in
contenga las clavesllave
yvalues
. - Si alguna clave falta, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función utiliza
-
Verificación del tipo de
$values
:- La función verifica que el valor asociado a la clave
values
sea un array. Si no lo es, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función verifica que el valor asociado a la clave
-
Generación de la cláusula SQL
IN
:- La función llama a
genera_in()
para construir la cláusula SQLIN
utilizando la llave y la lista de valores extraídos. - Si ocurre un error durante la generación de la cláusula SQL, 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 en la cláusula SQL:
- La función llama a
limpia_espacios_dobles()
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 SQL:
- La función reemplaza cualquier aparición de
'( ('
por'((
en la cláusula SQL generada para evitar problemas de sintaxis en la consulta.
- La función reemplaza cualquier aparición de
-
Retorno de la cláusula SQL:
- Finalmente, la función retorna la cadena con la cláusula SQL
IN
generada y limpiada.
- 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($in);
// Resultado esperado:
// "id_producto IN ('100', '200', '300')"
Código de la Función
private function genera_in_sql(array $in): array|string
{
$in_sql = '';
if(count($in)>0){
$keys = array('llave','values');
$valida = $this->validacion->valida_existencia_keys(keys: $keys, registro: $in);
if(errores::$error){
return $this->error->error(mensaje: 'Error al validar in',data: $valida);
}
$values = $in['values'];
if(!is_array($values)){
return $this->error->error(mensaje: 'Error values debe ser un array',data: $values, es_final: true);
}
$in_sql = $this->genera_in(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 sql',data: $in_sql);
}
$in_sql = str_replace('( (', '((', $in_sql);
}
$in_sql = (new sql())->limpia_espacios_dobles(txt: $in_sql);
if(errores::$error){
return $this->error->error(mensaje: 'Error al limpiar sql',data: $in_sql);
}
return str_replace('( (', '((', $in_sql);
}