CRM-17069 Search for Contribution with campaign causes fatal error

    Details

    • Type: Bug
    • Status: Done/Fixed
    • Priority: Minor
    • Resolution: Fixed/Completed
    • Affects Version/s: 4.6.7
    • Fix Version/s: 4.6.9
    • Component/s: CiviCRM Search
    • Labels:
      None
    • Documentation Required?:
      None
    • Funding Source:
      Needs Funding

      Description

      Sorry if this is a duplicate ... I did look.
      On demo find contributions:
      http://d46.demo.civicrm.org/civicrm/contribute/search?reset=1
      select a campaign.

      IMO search for contributions by campaign is pretty important.

        Attachments

          Activity

          [CRM-17069] Search for Contribution with campaign causes fatal error
          shawn holt added a comment -

          SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact contact_a LEFT JOIN civicrm_contribution ON civicrm_contribution.contact_id = contact_a.id LEFT JOIN civicrm_grant ON civicrm_grant.contact_id = contact_a.id WHERE ( civicrm_contribution.is_test = 0 AND civicrm_contribution.campaign_id IN 2 ) AND (contact_a.is_deleted = 0)

          Stack Trace:
          #0 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/Error.php(182): CRM_Core_Error::backtrace()
          #1 [internal function](): CRM_Core_Error::handle(Object(DB_Error))
          #2 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/PEAR.php(931): call_user_func((Array:2), Object(DB_Error))
          #3 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/DB.php(976): PEAR_Error->PEAR_Error("DB Error: syntax error", -2, 16, (Array:2), "SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact conta...")
          #4 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/PEAR.php(564): DB_Error->DB_Error(-2, 16, (Array:2), "SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact conta...")
          #5 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/DB/common.php(1905): PEAR->raiseError(NULL, -2, NULL, NULL, "SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact conta...", "DB_Error", TRUE)
          #6 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/DB/mysql.php(895): DB_common->raiseError(-2, NULL, NULL, NULL, "1064 ** You have an error in your SQL syntax; check the manual that correspon...")
          #7 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/DB/mysql.php(328): DB_mysql->mysqlRaiseError()
          #8 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/DB/common.php(1216): DB_mysql->simpleQuery("SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact conta...")
          #9 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/DB/DataObject.php(2442): DB_common->query("SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact conta...")
          #10 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/DB/DataObject.php(1634): DB_DataObject->_query("SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact conta...")
          #11 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/DAO.php(325): DB_DataObject->query("SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact conta...")
          #12 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/DAO.php(1234): CRM_Core_DAO->query("SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact conta...", TRUE)
          #13 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Contact/BAO/Query.php(4595): CRM_Core_DAO::singleValueQuery("SELECT count( DISTINCT civicrm_contribution.id ) FROM civicrm_contact conta...")
          #14 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Contribute/Selector/Search.php(294): CRM_Contact_BAO_Query->searchQuery(0, 0, NULL, TRUE, FALSE, FALSE, FALSE, FALSE, NULL)
          #15 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/Selector/Controller.php(233): CRM_Contribute_Selector_Search->getTotalCount(4, NULL)
          #16 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Contribute/Form/Search.php(356): CRM_Core_Selector_Controller->__construct(Object(CRM_Contribute_Selector_Search), NULL, NULL, 4, Object(CRM_Contribute_Form_Search), 1, NULL)
          #17 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/Form.php(345): CRM_Contribute_Form_Search->postProcess()
          #18 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/QuickForm/Action/Refresh.php(75): CRM_Core_Form->mainProcess()
          #19 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/HTML/QuickForm/Controller.php(203): CRM_Core_QuickForm_Action_Refresh->perform(Object(CRM_Contribute_Form_Search), "refresh")
          #20 /home/xxxxx/public_html/test/sites/all/modules/civicrm/packages/HTML/QuickForm/Page.php(103): HTML_QuickForm_Controller->handle(Object(CRM_Contribute_Form_Search), "refresh")
          #21 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/Controller.php(353): HTML_QuickForm_Page->handle("refresh")
          #22 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/Invoke.php(312): CRM_Core_Controller->run((Array:3), NULL)
          #23 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/Invoke.php(86): CRM_Core_Invoke::runItem((Array:14))
          #24 /home/xxxxx/public_html/test/sites/all/modules/civicrm/CRM/Core/Invoke.php(54): CRM_Core_Invoke::_invoke((Array:3))
          #25 /home/xxxxx/public_html/test/sites/all/modules/civicrm/drupal/civicrm.module(489): CRM_Core_Invoke::invoke((Array:3))
          #26 [internal function](): civicrm_invoke("contribute", "search")
          #27 /home/xxxxx/public_html/test/includes/menu.inc(519): call_user_func_array("civicrm_invoke", (Array:2))
          #28 /home/xxxxx/public_html/test/index.php(21): menu_execute_active_handler()
          #29

          {main}

          Sorry but we are not

          Yashodha Chaku added a comment -

          This seems to be fixed in 4.7

          shawn holt added a comment - - edited

          Could be - basically any search with a campaign in it will fail due (i think) a missing '()' close.
          WHERE ( civicrm_contribution.is_test = 0 AND civicrm_contribution.campaign_id IN 2 )
          should be
          WHERE ( civicrm_contribution.is_test = 0 AND civicrm_contribution.campaign_id IN (2) )

          I'm sure this will affect anyone using campaigns. I'd try to patch fix, but search logic is pretty scary and not sure where to fix. If you have a patch - happy to test. thx.

          David Greenberg added a comment -

          Shawn - agreed this is important, looking at 4.6 fix.

          shawn holt added a comment -

          Great - I'm happy to test a patch.

          David Greenberg added a comment -

          Yash - I just tested the 4.6 PR. It works fine in Find Contributions. However, I also tested in Search Builder. It works fine for Campaign = XYZ, but when I tried Campaign IN XYZ, ABC - I get a fatal error: "invalid criteria for IN"

          ... and then a bunch of warnings
          Warning: Illegal offset type in CRM_Campaign_BAO_Query::componentSearchClause() (line 603 of /Users/dgg/git/crm_v4.6/CRM/Campaign/BAO/Query.php).
          Warning: Illegal offset type in CRM_Campaign_BAO_Query::componentSearchClause() (line 604 of /Users/dgg/git/crm_v4.6/CRM/Campaign/BAO/Query.php).
          Warning: Illegal offset type in CRM_Campaign_BAO_Query::componentSearchClause() (line 604 of /Users/dgg/git/crm_v4.6/CRM/Campaign/BAO/Query.php).
          Notice: Undefined variable: iAmAnIntentionalENoticeThatWarnsOfAProblemYouShouldReportUsingOldFormat in CRM_Contact_BAO_Query::buildClause() (line 5200 of /Users/dgg/git/crm_v4.6/CRM/Contact/BAO/Query.php).

          I noted that I get the same results w/o the patch, so it may be fine to merge that a push this other to 4.7 or beyond. Take a look and make the call.

          David Greenberg added a comment -

          Search Builder w/ IN throws fatal.

          Monish Deb added a comment -

          Merged, tested working fine.

          Although sent a alternative fix https://github.com/civicrm/civicrm-core/pull/6610 against master as it might cause regression(not sure) in 4.6. Writing test case for it to ensure its clean to merge in master.

            People

            • Assignee:
              Monish Deb
              Reporter:
              shawn holt

              Dates

              • Created:
                Updated:
                Resolved: