Skip to content

Commit 8a92189

Browse files
committed
fix: ordinamento tabelle
1 parent ed0a9f9 commit 8a92189

1 file changed

Lines changed: 4 additions & 49 deletions

File tree

src/Util/Query.php

Lines changed: 4 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -246,29 +246,13 @@ public static function getQuery($structure, $search = [], $order = [], $limit =
246246
}
247247

248248
if (isset($total['order_by'][$column_index])) {
249+
// Rimozione ORDER BY esistente in modo più efficiente
250+
$query = preg_replace('/\s+ORDER\s+BY\s+.+$/i', '', $query);
249251
$order_clause = $total['order_by'][$column_index];
250252

251-
// Determina la clausola di ordinamento da usare
252-
$final_order_clause = '';
253+
// Sanitizzazione della clausola ORDER BY
253254
if (!empty($order_clause)) {
254-
$final_order_clause = $order_clause;
255-
} else {
256-
// Se order_by è vuoto, usa il nome del campo come fallback
257-
if (isset($total['fields'][$column_index])) {
258-
$field_name = $total['fields'][$column_index];
259-
$field_name = preg_replace('/[^a-zA-Z0-9_.]/', '', $field_name);
260-
if (!empty($field_name)) {
261-
$final_order_clause = '`'.$field_name.'`';
262-
}
263-
}
264-
}
265-
266-
// Applica l'ordinamento solo se abbiamo una clausola valida
267-
if (!empty($final_order_clause)) {
268-
// Rimozione completa dell'ORDER BY esistente dalla query
269-
// Se è impostato un ordinamento manuale, rimuove completamente l'ORDER BY definito dalla query
270-
$query = self::removeExistingOrderBy($query);
271-
$query .= ' ORDER BY '.$final_order_clause.' '.$direction;
255+
$query .= ' ORDER BY '.$order_clause.' '.$direction;
272256
}
273257
}
274258
}
@@ -595,35 +579,6 @@ protected static function buildIdFilter($field, $original_value)
595579
return null;
596580
}
597581

598-
/**
599-
* Rimuove completamente la clausola ORDER BY esistente dalla query.
600-
* Quando viene impostato un ordinamento manuale, questo metodo rimuove
601-
* l'ORDER BY definito dalla query originale per applicare quello manuale.
602-
*
603-
* @param string $query
604-
*
605-
* @return string
606-
*/
607-
protected static function removeExistingOrderBy($query)
608-
{
609-
// Rimozione più robusta dell'ORDER BY esistente
610-
// Gestisce diversi casi: ORDER BY alla fine, ORDER BY seguito da LIMIT, etc.
611-
612-
// Pattern per trovare ORDER BY e tutto quello che segue fino alla fine o fino a LIMIT
613-
$patterns = [
614-
// ORDER BY seguito da LIMIT
615-
'/\s+ORDER\s+BY\s+[^L]*?(?=\s+LIMIT\s+)/is',
616-
// ORDER BY alla fine della query
617-
'/\s+ORDER\s+BY\s+.*$/is',
618-
];
619-
620-
foreach ($patterns as $pattern) {
621-
$query = preg_replace($pattern, '', $query);
622-
}
623-
624-
return trim($query);
625-
}
626-
627582
/**
628583
* Sostituisce la prima occorenza di una determinata stringa.
629584
*

0 commit comments

Comments
 (0)