Cluster ERP'deki liste servisleri üç küçük çekirdek modülü paylaşır: metin araması için core/search.py, büyük tablolardaki sayımlar için core/pagination.py ve toplu kullanımdan kaldırma için core/bulk_operations.py. Bu sayfa işlevlerini ve sabitlerini listeler. Liste rotalarının sunduğu HTTP parametreleri API kuralları sayfasında belgelenir.
Kapsam ve kaynak¶
- Tanımlandığı yer:
src/cluster_erp/core/search.py,src/cluster_erp/core/pagination.py,src/cluster_erp/core/bulk_operations.py - Sayı:
search.pyiçinde 7 genel işlev ve 2 sabit;pagination.pyiçinde 3 işlev ve 1 sabit;bulk_operations.pyiçinde 2 işlev ve 2 şema (dosyalardan okundu). Aşağıdaki kullanım sayıları, tanımlayan dosya hariçsrc/cluster_erpvemigrationsüzerindegrep -rlw <name>ile yapıldı.
Metin araması¶
Modül belge dizgisi çözdüğü iki sorunu belirtir: kullanıcının yazdığı % ve _ karakterleri LIKE içinde değişmez olmalıdır ve veritabanı harmanlaması yalnızca ASCII harfleri katlar; bu yüzden büyük harfli ASCII dışı arama terimleri eşleşmiyordu (src/cluster_erp/core/search.py:1-33).
| Ad | Tür | Davranış | Kullananlar | Kaynak |
|---|---|---|---|---|
escape_like(term) |
işlev | Kaçış karakterini, % ve _ karakterlerini kaçışlar |
text_match kullanır |
src/cluster_erp/core/search.py:58-65 |
NORMALIZED_SQL |
sabit | Eşleşen dizinleri kuran göçler için normalleştirilmiş ifadenin SQL metni | 3 dosya | src/cluster_erp/core/search.py:76-82 |
normalized(expr) |
işlev | translate(lower(expr COLLATE "und-x-icu"),...): ICU ile Unicode küçük harf ve noktalı ile noktasız i biçimlerinin i'ye katlanması |
text_match kullanır |
src/cluster_erp/core/search.py:85-88 |
text_match(column, term) |
işlev | normalized(column) LIKE %normalized(escaped term)% |
69 dosya | src/cluster_erp/core/search.py:91-97 |
fold(value) |
işlev | Sorgudan sonra süzülen listeler için Python'da aynı normalleştirme | text_contains kullanır |
src/cluster_erp/core/search.py:100-111 |
text_contains(haystack, term) |
işlev | fold ile Python tarafında alt dizgi eşleşmesi |
1 dosya | src/cluster_erp/core/search.py:114-118 |
FENCE_MAX_MATCHES |
sabit | 20.000; üstünde bir arama sayfası yenilik dizininde yürür | recency_page kullanır |
src/cluster_erp/core/search.py:143 |
execute_page(session, stmt, force_index_walk) |
işlev | Bir sayfa sorgusunu çalıştırır; isteğe bağlı olarak işlem süresince bitmap taramalarını kapatır | 3 dosya | src/cluster_erp/core/search.py:146-161 |
recency_page(base, entity, order_attr,...) |
işlev | En yeniden eskiye bir sayfa kurar; arama varsa ve tavanlanmamış eşleşme en fazla FENCE_MAX_MATCHES ise önce maddileştirilmiş bir CTE üzerinden süzer |
3 dosya | src/cluster_erp/core/search.py:164-195 |
Belge dizgisi aksan katlamanın bilerek yapılmadığını belirtir: unaccent eklentisi kurulu değildir ve aksanları yok saymak bazı dillerde ayrı harfleri birleştirir (src/cluster_erp/core/search.py:31-33). Katlamanın sabitleri bağlı parametre olarak değil SQL metnine gömülü gider; böylece ifade, aynı ifade üzerine kurulmuş bir dizinle eşleşir (src/cluster_erp/core/search.py:68-74).
Tavanlı sayımlar¶
| Ad | Tür | Davranış | Kullananlar | Kaynak |
|---|---|---|---|---|
DEFAULT_COUNT_CAP |
sabit | 10.000 | yok | src/cluster_erp/core/pagination.py:23 |
configure(cap) |
işlev | Açılışta list_count_cap değerinden süreç geneli tavanı kurar; 0 tam sayım demektir |
create_app çağırır |
src/cluster_erp/core/pagination.py:27-30, src/cluster_erp/server/app.py:1311-1313 |
count_capped(session, base, cap=None, prefer_index=False) |
işlev | En fazla cap + 1 satır sayar ve (total, capped) döndürür; prefer_index işlem süresince sıralı taramaları kapatır |
14 dosya | src/cluster_erp/core/pagination.py:33-69 |
capped_total(session, count_stmt, cap=None, prefer_index=False) |
işlev | Var olan bir select(func.count(...)) ifadesi için aynısı |
58 dosya | src/cluster_erp/core/pagination.py:72-84 |
Belge dizgisi nedeni belirtir: milyonlarca satırlık bir tabloda tam count(*) yüzlerce milisaniye sürerken sayfanın kendisi bir milisaniyenin altındadır; bu yüzden sayfalayıcı "10 000+" gösterir (src/cluster_erp/core/pagination.py:1-13).
Toplu işlemler¶
| Ad | Tür | Davranış | Kaynak |
|---|---|---|---|
BulkDeleteRequest |
şema | ids: list[UUID] |
src/cluster_erp/core/bulk_operations.py:12-13 |
BulkDeleteResponse |
şema | deleted_count: int |
src/cluster_erp/core/bulk_operations.py:16-17 |
bulk_soft_delete(session, model_class, ids, deleted_by=None) |
işlev | Canlı satırları yükler ve her birinde ORM üzerinden deleted_at (ve deleted_by) ayarlar; sayıyı döndürür |
src/cluster_erp/core/bulk_operations.py:20-55 |
orm_delete_where(session, model_class, *where) |
işlev | Eşleşen satırları ORM üzerinden fiziksel olarak siler ve flush eder; yalnızca alt satırlar için | src/cluster_erp/core/bulk_operations.py:58-75 |
İki işlev de değişiklik geçmişi kancası her satırı kaydetsin diye ORM üzerinden gider (src/cluster_erp/core/bulk_operations.py:26-34, src/cluster_erp/core/bulk_operations.py:59-66). Bkz. yumuşak silme ve kullanımdan kaldırma.
Kısıtlar ve doğrulama¶
SET LOCALveRESET, planlayıcı ayarlarını yalnızca geçerli işlem için değiştirir (src/cluster_erp/core/pagination.py:60-66,src/cluster_erp/core/search.py:155-161).recency_page,LIMITveOFFSETdeğerlerini yalnızcalimit0'dan büyükse uygular (src/cluster_erp/core/search.py:193-194).
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| capped count | count_capped |
Yapılandırılmış bir tavanda duran ve durduğunu bildiren satır sayımı. | tavanlı sayım | src/cluster_erp/core/pagination.py:33 |
| text match | text_match |
Büyük/küçük harf duyarsız, dilden bağımsız alt dizgi süzgeci. | metin eşleşmesi | src/cluster_erp/core/search.py:91 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.