diff --git a/ChangeLog b/ChangeLog index 07f26622..900adaca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24502,3 +24502,5 @@ * Fixed a regression in rdairplay(1) when using the 'Append Log' ['AL'] RML caused the Full Log widget to only display the first event of the appended log. +2023-12-01 Fred Gleason + * Optimized the handling of cart numbers when searching for carts. diff --git a/lib/rdcartfilter.cpp b/lib/rdcartfilter.cpp index a1ada13e..c5697f46 100644 --- a/lib/rdcartfilter.cpp +++ b/lib/rdcartfilter.cpp @@ -25,6 +25,7 @@ #include "rdcart_search_text.h" #include "rdcartfilter.h" #include "rdescape_string.h" +#include "rd.h" RDCartFilter::RDCartFilter(bool show_drag_box,bool user_is_admin, QWidget *parent) @@ -590,29 +591,52 @@ void RDCartFilter::resizeEvent(QResizeEvent *e) QString RDCartFilter::phraseFilter(const QString &phrase, bool incl_cuts) { QString sql=""; + QList cart_numbers; + bool ok=false; if(phrase.isEmpty()) { sql=" "; } else { - QString search=RDEscapeString(phrase); - sql=sql+QString(" ((`CART`.`TITLE` like '%")+search+"%')||"+ - "(`CART`.`ARTIST` like '%"+search+"%')||"+ - "(`CART`.`CLIENT` like '%"+search+"%')||"+ - "(`CART`.`AGENCY` like '%"+search+"%')||"+ - "(`CART`.`ALBUM` like '%"+search+"%')||"+ - "(`CART`.`LABEL` like '%"+search+"%')||"+ - "(`CART`.`NUMBER` like '%"+search+"%')||"+ - "(`CART`.`PUBLISHER` like '%"+search+"%')||"+ - "(`CART`.`COMPOSER` like '%"+search+"%')||"+ - "(`CART`.`CONDUCTOR` like '%"+search+"%')||"+ - "(`CART`.`SONG_ID` like '%"+search+"%')||"+ - "(`CART`.`USER_DEFINED` like '%"+search+"%')"; - if(incl_cuts) { - sql+=QString("||(CUTS.ISCI like '%")+search+"%')"+ - "||(CUTS.ISRC like '%"+search+"%')"+ - "||(CUTS.DESCRIPTION like '%"+search+"%')"+ - "||(CUTS.OUTCUE like '%"+search+"%')"; + // + // Separate Out Cart Numbers + // + QStringList words=phrase.split(" ",QString::KeepEmptyParts); + for(int i=0;i0)&&(cartnum<=RD_MAX_CART_NUMBER)) { + cart_numbers.push_back(cartnum); + words.removeAt(i); + i--; + } + } + + sql+=" ("; + if(words.size()>0) { + QString search=RDEscapeString(words.join(" ")); + sql+=QString("(`CART`.`TITLE` like '%")+search+"%')||"+ + "(`CART`.`ARTIST` like '%"+search+"%')||"+ + "(`CART`.`CLIENT` like '%"+search+"%')||"+ + "(`CART`.`AGENCY` like '%"+search+"%')||"+ + "(`CART`.`ALBUM` like '%"+search+"%')||"+ + "(`CART`.`LABEL` like '%"+search+"%')||"+ + "(`CART`.`PUBLISHER` like '%"+search+"%')||"+ + "(`CART`.`COMPOSER` like '%"+search+"%')||"+ + "(`CART`.`CONDUCTOR` like '%"+search+"%')||"+ + "(`CART`.`SONG_ID` like '%"+search+"%')||"+ + "(`CART`.`USER_DEFINED` like '%"+search+"%')||"; + if(incl_cuts) { + sql+=QString("(`CUTS`.`ISCI` like '%")+search+"%')||"+ + "(`CUTS`.`ISRC` like '%"+search+"%')||"+ + "(`CUTS`.`DESCRIPTION` like '%"+search+"%')||"+ + "(`CUTS`.`OUTCUE` like '%"+search+"%')||"; + } + } + for(int i=0;i