summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp13
1 files changed, 2 insertions, 11 deletions
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp b/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp
index 175d62a..6aaa14c 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp
+++ b/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp
@@ -467,355 +467,346 @@ bool OPimContactAccessBackend_SQL::remove ( int uid )
467 467
468bool OPimContactAccessBackend_SQL::replace ( const OPimContact &contact ) 468bool OPimContactAccessBackend_SQL::replace ( const OPimContact &contact )
469{ 469{
470 if ( !remove( contact.uid() ) ) 470 if ( !remove( contact.uid() ) )
471 return false; 471 return false;
472 472
473 return add( contact ); 473 return add( contact );
474} 474}
475 475
476 476
477OPimContact OPimContactAccessBackend_SQL::find ( int uid ) const 477OPimContact OPimContactAccessBackend_SQL::find ( int uid ) const
478{ 478{
479 odebug << "OPimContactAccessBackend_SQL::find(" << uid << ")" << oendl; 479 odebug << "OPimContactAccessBackend_SQL::find(" << uid << ")" << oendl;
480 QTime t; 480 QTime t;
481 t.start(); 481 t.start();
482 482
483 OPimContact retContact( requestNonCustom( uid ) ); 483 OPimContact retContact( requestNonCustom( uid ) );
484 retContact.setExtraMap( requestCustom( uid ) ); 484 retContact.setExtraMap( requestCustom( uid ) );
485 485
486 odebug << "OPimContactAccessBackend_SQL::find() needed: " << t.elapsed() << " ms" << oendl; 486 odebug << "OPimContactAccessBackend_SQL::find() needed: " << t.elapsed() << " ms" << oendl;
487 return retContact; 487 return retContact;
488} 488}
489 489
490OPimContact OPimContactAccessBackend_SQL::find( int uid, const UIDArray& queryUids, uint current, Frontend::CacheDirection direction ) const 490OPimContact OPimContactAccessBackend_SQL::find( int uid, const UIDArray& queryUids, uint current, Frontend::CacheDirection direction ) const
491{ 491{
492 odebug << "OPimContactAccessBackend_SQL::find( ..multi.. )" << oendl; 492 odebug << "OPimContactAccessBackend_SQL::find( ..multi.. )" << oendl;
493 odebug << "searching for " << uid << "" << oendl; 493 odebug << "searching for " << uid << "" << oendl;
494 494
495 QTime t; 495 QTime t;
496 t.start(); 496 t.start();
497 497
498 uint numReadAhead = readAhead(); 498 uint numReadAhead = readAhead();
499 QArray<int> searchList( numReadAhead ); 499 QArray<int> searchList( numReadAhead );
500 500
501 uint size =0; 501 uint size =0;
502 502
503 // Build an array with all elements which should be requested and cached 503 // Build an array with all elements which should be requested and cached
504 // We will just request "numReadAhead" elements, starting from "current" position in 504 // We will just request "numReadAhead" elements, starting from "current" position in
505 // the list of many uids ! 505 // the list of many uids !
506 switch( direction ) { 506 switch( direction ) {
507 /* forward */ 507 /* forward */
508 case Frontend::Forward: 508 case Frontend::Forward:
509 for ( uint i = current; i < queryUids.count() && size < numReadAhead; i++ ) { 509 for ( uint i = current; i < queryUids.count() && size < numReadAhead; i++ ) {
510 searchList[size] = queryUids[i]; 510 searchList[size] = queryUids[i];
511 size++; 511 size++;
512 } 512 }
513 break; 513 break;
514 /* reverse */ 514 /* reverse */
515 case Frontend::Reverse: 515 case Frontend::Reverse:
516 for ( uint i = current; i != 0 && size < numReadAhead; i-- ) { 516 for ( uint i = current; i != 0 && size < numReadAhead; i-- ) {
517 searchList[size] = queryUids[i]; 517 searchList[size] = queryUids[i];
518 size++; 518 size++;
519 } 519 }
520 break; 520 break;
521 } 521 }
522 522
523 //Shrink to real size.. 523 //Shrink to real size..
524 searchList.resize( size ); 524 searchList.resize( size );
525 525
526 OPimContact retContact( requestContactsAndCache( uid, searchList ) ); 526 OPimContact retContact( requestContactsAndCache( uid, searchList ) );
527 527
528 odebug << "OPimContactAccessBackend_SQL::find( ..multi.. ) needed: " << t.elapsed() << " ms" << oendl; 528 odebug << "OPimContactAccessBackend_SQL::find( ..multi.. ) needed: " << t.elapsed() << " ms" << oendl;
529 return retContact; 529 return retContact;
530} 530}
531 531
532 532
533UIDArray OPimContactAccessBackend_SQL::queryByExample ( const UIDArray& uidlist, const OPimContact &query, int settings, 533UIDArray OPimContactAccessBackend_SQL::queryByExample ( const UIDArray& uidlist, const OPimContact &query, int settings,
534 const QDateTime& qd ) const 534 const QDateTime& qd ) const
535{ 535{
536 QString searchQuery = ""; 536 QString searchQuery = "";
537 QString datediff_query = ""; 537 QString datediff_query = "";
538 QString uid_query = ""; 538 QString uid_query = "";
539 539
540 // Just add uid's selection if we really try to search in a subset of all uids! Otherwise this would 540 // Just add uid's selection if we really try to search in a subset of all uids! Otherwise this would
541 // just take time and memory! 541 // just take time and memory!
542 if ( uidlist.count() != m_uids.count() ) { 542 if ( uidlist.count() != m_uids.count() ) {
543 uid_query += " ("; 543 uid_query += " (";
544 544
545 for ( uint i = 0; i < uidlist.count(); i++ ) { 545 for ( uint i = 0; i < uidlist.count(); i++ ) {
546 uid_query += " uid = " + QString::number( uidlist[i] ) + " OR"; 546 uid_query += " uid = " + QString::number( uidlist[i] ) + " OR";
547 } 547 }
548 uid_query.remove( uid_query.length()-2, 2 ); // Hmmmm.. 548 uid_query.remove( uid_query.length()-2, 2 ); // Hmmmm..
549 uid_query += " ) AND "; 549 uid_query += " ) AND ";
550 } 550 }
551 551
552 552
553 QDate startDate; 553 QDate startDate;
554 554
555 if ( qd.isValid() ) 555 if ( qd.isValid() )
556 startDate = qd.date(); 556 startDate = qd.date();
557 else 557 else
558 startDate = QDate::currentDate(); 558 startDate = QDate::currentDate();
559 559
560 560
561 QMap<int, QString> queryFields = query.toMap(); 561 QMap<int, QString> queryFields = query.toMap();
562 QStringList fieldList = OPimContactFields::untrfields( false ); 562 QStringList fieldList = OPimContactFields::untrfields( false );
563 QMap<QString, int> translate = OPimContactFields::untrFieldsToId(); 563 QMap<QString, int> translate = OPimContactFields::untrFieldsToId();
564 564
565 // Convert every filled field to a SQL-Query 565 // Convert every filled field to a SQL-Query
566// bool isAnyFieldSelected = false; 566// bool isAnyFieldSelected = false;
567 for ( QStringList::Iterator it = ++fieldList.begin(); it != fieldList.end(); ++it ){ 567 for ( QStringList::Iterator it = ++fieldList.begin(); it != fieldList.end(); ++it ){
568 568
569 int id = translate[*it]; 569 int id = translate[*it];
570 QString queryStr = queryFields[id]; 570 QString queryStr = queryFields[id];
571 QDate* endDate = 0l; 571 QDate* endDate = 0l;
572 572
573 if ( !queryStr.isEmpty() ){ 573 if ( !queryStr.isEmpty() ){
574 // If something is alredy stored in the query, add an "AND" 574 // If something is alredy stored in the query, add an "AND"
575 // to the end of the string to prepare for the next .. 575 // to the end of the string to prepare for the next ..
576 if ( !searchQuery.isEmpty() ) 576 if ( !searchQuery.isEmpty() )
577 searchQuery += " AND"; 577 searchQuery += " AND";
578 578
579// isAnyFieldSelected = true; 579// isAnyFieldSelected = true;
580 switch( id ){ 580 switch( id ){
581 case Qtopia::Birthday: 581 case Qtopia::Birthday:
582 endDate = new QDate( query.birthday() ); 582 endDate = new QDate( query.birthday() );
583 // Fall through ! 583 // Fall through !
584 case Qtopia::Anniversary: 584 case Qtopia::Anniversary:
585 if ( endDate == 0l ) 585 if ( endDate == 0l )
586 endDate = new QDate( query.anniversary() ); 586 endDate = new QDate( query.anniversary() );
587 587
588 if ( settings & OPimContactAccess::DateDiff ) { 588 if ( settings & OPimContactAccess::DateDiff ) {
589 // To handle datediffs correctly, we need to remove the year information from 589 // To handle datediffs correctly, we need to remove the year information from
590 // the birthday and anniversary. 590 // the birthday and anniversary.
591 // To do this efficiently, we will create a temporary table which contains the 591 // To do this efficiently, we will create a temporary table which contains the
592 // information we need and do the query on it. 592 // information we need and do the query on it.
593 // This table is just visible for this process and will be removed 593 // This table is just visible for this process and will be removed
594 // automatically after using. 594 // automatically after using.
595 datediff_query = "CREATE TEMP TABLE bs ( uid, \"Birthday\", \"Anniversary\" );"; 595 datediff_query = "SELECT uid,substr(\"Birthday\", 6, 10) as \"BirthdayMD\", substr(\"Anniversary\", 6, 10) as \"AnniversaryMD\" FROM addressbook WHERE ( \"Birthday\" != '' OR \"Anniversary\" != '' ) AND ";
596 datediff_query += "INSERT INTO bs SELECT uid,substr(\"Birthday\", 6, 10),substr(\"Anniversary\", 6, 10) FROM addressbook WHERE ( \"Birthday\" != '' OR \"Anniversary\" != '' );"; 596 datediff_query += QString( " (\"%1MD\" <= '%2-%3\' AND \"%4MD\" >= '%5-%6')" )
597 datediff_query += QString( "SELECT uid FROM bs WHERE " ) + uid_query;
598 datediff_query += QString( " (\"%1\" <= '%2-%3\' AND \"%4\" >= '%5-%6')" )
599 .arg( *it ) 597 .arg( *it )
600 //.arg( QString::number( endDate->year() ).rightJustify( 4, '0' ) ) 598 //.arg( QString::number( endDate->year() ).rightJustify( 4, '0' ) )
601 .arg( QString::number( endDate->month() ).rightJustify( 2, '0' ) ) 599 .arg( QString::number( endDate->month() ).rightJustify( 2, '0' ) )
602 .arg( QString::number( endDate->day() ).rightJustify( 2, '0' ) ) 600 .arg( QString::number( endDate->day() ).rightJustify( 2, '0' ) )
603 .arg( *it ) 601 .arg( *it )
604 //.arg( QString::number( startDate.year() ).rightJustify( 4, '0' ) ) 602 //.arg( QString::number( startDate.year() ).rightJustify( 4, '0' ) )
605 .arg( QString::number( startDate.month() ).rightJustify( 2, '0' ) ) 603 .arg( QString::number( startDate.month() ).rightJustify( 2, '0' ) )
606 .arg( QString::number( startDate.day() ).rightJustify( 2, '0' ) ) ; 604 .arg( QString::number( startDate.day() ).rightJustify( 2, '0' ) ) ;
607 } 605 }
608 606
609 if ( settings & OPimContactAccess::DateYear ){ 607 if ( settings & OPimContactAccess::DateYear ){
610 searchQuery += QString( " (\"%1\" LIKE '%2-%')" ) 608 searchQuery += QString( " (\"%1\" LIKE '%2-%')" )
611 .arg( *it ) 609 .arg( *it )
612 .arg( QString::number( endDate->year() ).rightJustify( 4, '0' ) ); 610 .arg( QString::number( endDate->year() ).rightJustify( 4, '0' ) );
613 } 611 }
614 612
615 if ( settings & OPimContactAccess::DateMonth ){ 613 if ( settings & OPimContactAccess::DateMonth ){
616 if ( settings & OPimContactAccess::DateYear ) 614 if ( settings & OPimContactAccess::DateYear )
617 searchQuery += " AND"; 615 searchQuery += " AND";
618 616
619 searchQuery += QString( " (\"%1\" LIKE '%-%2-%')" ) 617 searchQuery += QString( " (\"%1\" LIKE '%-%2-%')" )
620 .arg( *it ) 618 .arg( *it )
621 .arg( QString::number( endDate->month() ).rightJustify( 2, '0' ) ); 619 .arg( QString::number( endDate->month() ).rightJustify( 2, '0' ) );
622 } 620 }
623 621
624 if ( settings & OPimContactAccess::DateDay ){ 622 if ( settings & OPimContactAccess::DateDay ){
625 if ( ( settings & OPimContactAccess::DateYear ) 623 if ( ( settings & OPimContactAccess::DateYear )
626 || ( settings & OPimContactAccess::DateMonth ) ) 624 || ( settings & OPimContactAccess::DateMonth ) )
627 searchQuery += " AND"; 625 searchQuery += " AND";
628 626
629 searchQuery += QString( " (\"%1\" LIKE '%-%-%2')" ) 627 searchQuery += QString( " (\"%1\" LIKE '%-%-%2')" )
630 .arg( *it ) 628 .arg( *it )
631 .arg( QString::number( endDate->day() ).rightJustify( 2, '0' ) ); 629 .arg( QString::number( endDate->day() ).rightJustify( 2, '0' ) );
632 } 630 }
633 631
634 break; 632 break;
635 default: 633 default:
636 // Switching between case sensitive and insensitive... 634 // Switching between case sensitive and insensitive...
637 // LIKE is not case sensitive, GLOB is case sensitive 635 // LIKE is not case sensitive, GLOB is case sensitive
638 // Do exist a better solution to switch this ? 636 // Do exist a better solution to switch this ?
639 if ( settings & OPimContactAccess::IgnoreCase ) 637 if ( settings & OPimContactAccess::IgnoreCase )
640 searchQuery += " (\"" + *it + "\"" + " LIKE " + "'" 638 searchQuery += " (\"" + *it + "\"" + " LIKE " + "'"
641 + queryStr.replace(QRegExp("\\*"),"%") + "'" + ")"; 639 + queryStr.replace(QRegExp("\\*"),"%") + "'" + ")";
642 else 640 else
643 searchQuery += " (\"" + *it + "\"" + " GLOB " + "'" 641 searchQuery += " (\"" + *it + "\"" + " GLOB " + "'"
644 + queryStr + "'" + ")"; 642 + queryStr + "'" + ")";
645 643
646 } 644 }
647 } 645 }
648 646
649 delete endDate; 647 delete endDate;
650 648
651 // The following if line is a replacement for 649 // The following if line is a replacement for
652 // if ( searchQuery.endsWith( "AND" ) ) 650 // if ( searchQuery.endsWith( "AND" ) )
653 if ( searchQuery.findRev( "AND" ) == ( searchQuery.length() - 3 ) ){ 651 if ( searchQuery.findRev( "AND" ) == ( searchQuery.length() - 3 ) ){
654 odebug << "remove AND" << oendl; 652 odebug << "remove AND" << oendl;
655 searchQuery.remove( searchQuery.length()-3, 3 ); // Hmmmm.. 653 searchQuery.remove( searchQuery.length()-3, 3 ); // Hmmmm..
656 } 654 }
657 655
658 } 656 }
659 657
660 // Now compose the complete query 658 // Now compose the complete query
661 QString qu = "SELECT uid FROM addressbook WHERE " + uid_query; 659 QString qu = "SELECT uid FROM addressbook WHERE " + uid_query;
662 660
663 if ( !datediff_query.isEmpty() && !searchQuery.isEmpty() ){ 661 if ( !datediff_query.isEmpty() && !searchQuery.isEmpty() ){
664 // If we use DateDiff, we have to intersect two queries. 662 // If we use DateDiff, we have to intersect two queries.
665 qu = datediff_query + QString( " INTERSECT " ) + qu + searchQuery; 663 qu = datediff_query + QString( " INTERSECT " ) + qu + searchQuery;
666 } else if ( datediff_query.isEmpty() && !searchQuery.isEmpty() ){ 664 } else if ( datediff_query.isEmpty() && !searchQuery.isEmpty() ){
667 qu += searchQuery; 665 qu += searchQuery;
668 } else if ( !datediff_query.isEmpty() && searchQuery.isEmpty() ){ 666 } else if ( !datediff_query.isEmpty() && searchQuery.isEmpty() ){
669 qu = datediff_query; 667 qu = datediff_query;
670 } else if ( datediff_query.isEmpty() && searchQuery.isEmpty() ){ 668 } else if ( datediff_query.isEmpty() && searchQuery.isEmpty() ){
671 UIDArray empty; 669 UIDArray empty;
672 return empty; 670 return empty;
673 } 671 }
674 672
675 odebug << "queryByExample query: " << qu << "" << oendl; 673 odebug << "queryByExample query: " << qu << "" << oendl;
676 674
677 // Execute query and return the received uid's 675 // Execute query and return the received uid's
678 OSQLRawQuery raw( qu ); 676 OSQLRawQuery raw( qu );
679 OSQLResult res = m_driver->query( &raw ); 677 OSQLResult res = m_driver->query( &raw );
680 if ( res.state() != OSQLResult::Success ){ 678 if ( res.state() != OSQLResult::Success ){
681 UIDArray empty; 679 UIDArray empty;
682 return empty; 680 return empty;
683 } 681 }
684 682
685 UIDArray list = extractUids( res ); 683 UIDArray list = extractUids( res );
686 684
687 // Remove temp table if created
688 if ( !datediff_query.isEmpty( ) ){
689 qu = "DROP TABLE bs";
690 OSQLRawQuery raw( qu );
691 OSQLResult res = m_driver->query( &raw );
692 }
693
694 return list; 685 return list;
695} 686}
696 687
697UIDArray OPimContactAccessBackend_SQL::matchRegexp( const QRegExp &r ) const 688UIDArray OPimContactAccessBackend_SQL::matchRegexp( const QRegExp &r ) const
698{ 689{
699#if 0 690#if 0
700 QArray<int> nix(0); 691 QArray<int> nix(0);
701 return nix; 692 return nix;
702 693
703#else 694#else
704 QString qu = "SELECT uid FROM addressbook WHERE ("; 695 QString qu = "SELECT uid FROM addressbook WHERE (";
705 QString searchlist; 696 QString searchlist;
706 697
707 QStringList fieldList = OPimContactFields::untrfields( false ); 698 QStringList fieldList = OPimContactFields::untrfields( false );
708 // QMap<QString, int> translate = OPimContactFields::untrFieldsToId(); 699 // QMap<QString, int> translate = OPimContactFields::untrFieldsToId();
709 for ( QStringList::Iterator it = ++fieldList.begin(); it != fieldList.end(); ++it ){ 700 for ( QStringList::Iterator it = ++fieldList.begin(); it != fieldList.end(); ++it ){
710 if ( !searchlist.isEmpty() ) 701 if ( !searchlist.isEmpty() )
711 searchlist += " OR "; 702 searchlist += " OR ";
712 searchlist += " rlike(\""+ r.pattern() + "\",\"" + *it + "\") "; 703 searchlist += " rlike(\""+ r.pattern() + "\",\"" + *it + "\") ";
713 } 704 }
714 705
715 qu = qu + searchlist + ")"; 706 qu = qu + searchlist + ")";
716 707
717 odebug << "query: " << qu << "" << oendl; 708 odebug << "query: " << qu << "" << oendl;
718 709
719 OSQLRawQuery raw( qu ); 710 OSQLRawQuery raw( qu );
720 OSQLResult res = m_driver->query( &raw ); 711 OSQLResult res = m_driver->query( &raw );
721 712
722 return extractUids( res ); 713 return extractUids( res );
723 714
724 715
725#endif 716#endif
726} 717}
727 718
728const uint OPimContactAccessBackend_SQL::querySettings() const 719const uint OPimContactAccessBackend_SQL::querySettings() const
729{ 720{
730 return OPimContactAccess::IgnoreCase 721 return OPimContactAccess::IgnoreCase
731 | OPimContactAccess::WildCards 722 | OPimContactAccess::WildCards
732 | OPimContactAccess::DateDiff 723 | OPimContactAccess::DateDiff
733 | OPimContactAccess::DateYear 724 | OPimContactAccess::DateYear
734 | OPimContactAccess::DateMonth 725 | OPimContactAccess::DateMonth
735 | OPimContactAccess::DateDay 726 | OPimContactAccess::DateDay
736 ; 727 ;
737} 728}
738 729
739bool OPimContactAccessBackend_SQL::hasQuerySettings (uint querySettings) const 730bool OPimContactAccessBackend_SQL::hasQuerySettings (uint querySettings) const
740{ 731{
741 /* OPimContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay 732 /* OPimContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay
742 * may be added with any of the other settings. IgnoreCase should never used alone. 733 * may be added with any of the other settings. IgnoreCase should never used alone.
743 * Wildcards, RegExp, ExactMatch should never used at the same time... 734 * Wildcards, RegExp, ExactMatch should never used at the same time...
744 */ 735 */
745 736
746 // Step 1: Check whether the given settings are supported by this backend 737 // Step 1: Check whether the given settings are supported by this backend
747 if ( ( querySettings & ( 738 if ( ( querySettings & (
748 OPimContactAccess::IgnoreCase 739 OPimContactAccess::IgnoreCase
749 | OPimContactAccess::WildCards 740 | OPimContactAccess::WildCards
750 | OPimContactAccess::DateDiff 741 | OPimContactAccess::DateDiff
751 | OPimContactAccess::DateYear 742 | OPimContactAccess::DateYear
752 | OPimContactAccess::DateMonth 743 | OPimContactAccess::DateMonth
753 | OPimContactAccess::DateDay 744 | OPimContactAccess::DateDay
754// | OPimContactAccess::RegExp 745// | OPimContactAccess::RegExp
755// | OPimContactAccess::ExactMatch 746// | OPimContactAccess::ExactMatch
756 ) ) != querySettings ) 747 ) ) != querySettings )
757 return false; 748 return false;
758 749
759 // Step 2: Check whether the given combinations are ok.. 750 // Step 2: Check whether the given combinations are ok..
760 751
761 // IngoreCase alone is invalid 752 // IngoreCase alone is invalid
762 if ( querySettings == OPimContactAccess::IgnoreCase ) 753 if ( querySettings == OPimContactAccess::IgnoreCase )
763 return false; 754 return false;
764 755
765 // WildCards, RegExp and ExactMatch should never used at the same time 756 // WildCards, RegExp and ExactMatch should never used at the same time
766 switch ( querySettings & ~( OPimContactAccess::IgnoreCase 757 switch ( querySettings & ~( OPimContactAccess::IgnoreCase
767 | OPimContactAccess::DateDiff 758 | OPimContactAccess::DateDiff
768 | OPimContactAccess::DateYear 759 | OPimContactAccess::DateYear
769 | OPimContactAccess::DateMonth 760 | OPimContactAccess::DateMonth
770 | OPimContactAccess::DateDay 761 | OPimContactAccess::DateDay
771 ) 762 )
772 ){ 763 ){
773 case OPimContactAccess::RegExp: 764 case OPimContactAccess::RegExp:
774 return ( true ); 765 return ( true );
775 case OPimContactAccess::WildCards: 766 case OPimContactAccess::WildCards:
776 return ( true ); 767 return ( true );
777 case OPimContactAccess::ExactMatch: 768 case OPimContactAccess::ExactMatch:
778 return ( true ); 769 return ( true );
779 case 0: // one of the upper removed bits were set.. 770 case 0: // one of the upper removed bits were set..
780 return ( true ); 771 return ( true );
781 default: 772 default:
782 return ( false ); 773 return ( false );
783 } 774 }
784 775
785} 776}
786 777
787UIDArray OPimContactAccessBackend_SQL::sorted( const UIDArray& ar, bool asc, int sortOrder, 778UIDArray OPimContactAccessBackend_SQL::sorted( const UIDArray& ar, bool asc, int sortOrder,
788 int filter, const QArray<int>& categories )const 779 int filter, const QArray<int>& categories )const
789{ 780{
790 QTime t; 781 QTime t;
791 t.start(); 782 t.start();
792 783
793 QString query = "SELECT uid FROM addressbook"; 784 QString query = "SELECT uid FROM addressbook";
794 785
795 query += " WHERE ("; 786 query += " WHERE (";
796 for ( uint i = 0; i < ar.count(); i++ ) { 787 for ( uint i = 0; i < ar.count(); i++ ) {
797 query += " uid = " + QString::number( ar[i] ) + " OR"; 788 query += " uid = " + QString::number( ar[i] ) + " OR";
798 } 789 }
799 query.remove( query.length()-2, 2 ); // Hmmmm.. 790 query.remove( query.length()-2, 2 ); // Hmmmm..
800 query += ")"; 791 query += ")";
801 792
802 793
803 if ( filter != OPimBase::FilterOff ){ 794 if ( filter != OPimBase::FilterOff ){
804 if ( filter & OPimContactAccess::DoNotShowWithCategory ){ 795 if ( filter & OPimContactAccess::DoNotShowWithCategory ){
805 query += " AND ( \"Categories\" == '' )"; 796 query += " AND ( \"Categories\" == '' )";
806 } else if ( filter & OPimBase::FilterCategory ){ 797 } else if ( filter & OPimBase::FilterCategory ){
807 query += " AND ("; 798 query += " AND (";
808 for ( uint i = 0; i < categories.count(); i++ ){ 799 for ( uint i = 0; i < categories.count(); i++ ){
809 query += "\"Categories\" LIKE"; 800 query += "\"Categories\" LIKE";
810 query += QString( " '%" ) + QString::number( categories[i] ) + "%' OR"; 801 query += QString( " '%" ) + QString::number( categories[i] ) + "%' OR";
811 } 802 }
812 query.remove( query.length()-2, 2 ); // Hmmmm.. 803 query.remove( query.length()-2, 2 ); // Hmmmm..
813 query += ")"; 804 query += ")";
814 } 805 }
815 806
816 if ( filter & OPimContactAccess::DoNotShowWithoutChildren ){ 807 if ( filter & OPimContactAccess::DoNotShowWithoutChildren ){
817 query += " AND ( \"Children\" != '' )"; 808 query += " AND ( \"Children\" != '' )";
818 } 809 }
819 810
820 if ( filter & OPimContactAccess::DoNotShowWithoutAnniversary ){ 811 if ( filter & OPimContactAccess::DoNotShowWithoutAnniversary ){
821 query += " AND ( \"Anniversary\" != '' )"; 812 query += " AND ( \"Anniversary\" != '' )";