SearchKit: Chicken-and-egg problem upgrading from 5.35.2 to 5.44.0
Steps:
- Install 5.35.2 and enable search kit.
- Create a search with a display and save it.
- Upgrade to 5.44.0. The civi upgrade runs ok.
- The 5.44 part isn't too relevant I think - 5.40+ seems like it would also happen.
- Visit the system status page and run the extension upgrades.
- Error as below because upgrade_1001 triggers something that doesn't exist until upgrade_1005.
If you look at http://stats.civicrm.org/?tab=sites you'll notice there's a lot of sites on 5.35
because it was a security release, so will be a problem when they upgrade.
Some workarounds are upgrade in smaller steps, or manually create the column first:
alter table civicrm_search_display add column acl_bypass tinyint DEFAULT 0 COMMENT 'Skip permission checks and ACLs when running this display.';
Details
[info] Applying update 1001 - normalize search display columns.
[error] $Fatal Error Details = Array
(
[callback] => Array
(
[0] => CRM_Core_Error
[1] => exceptionHandler
)
[code] => -19
[message] => DB Error: no such field
[mode] => 16
[debug_info] => SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`saved_search_id` AS `saved_search_id`, `a`.`type` AS `type`, `a`.`settings` AS `settings`, `a`.`acl_bypass` AS `acl_bypass`
FROM civicrm_search_display a
WHERE (`a`.`saved_search_id` = "1")
[nativecode=1054 ** Unknown column 'a.acl_bypass' in 'field list']
[type] => DB_Error
[user_info] => SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`saved_search_id` AS `saved_search_id`, `a`.`type` AS `type`, `a`.`settings` AS `settings`, `a`.`acl_bypass` AS `acl_bypass`
FROM civicrm_search_display a
WHERE (`a`.`saved_search_id` = "1")
[nativecode=1054 ** Unknown column 'a.acl_bypass' in 'field list']
[to_string] => [db_error: message="DB Error: no such field" code=-19 mode=callback callback=CRM_Core_Error::exceptionHandler prefix="" info="SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`saved_search_id` AS `saved_search_id`, `a`.`type` AS `type`, `a`.`settings` AS `settings`, `a`.`acl_bypass` AS `acl_bypass`
FROM civicrm_search_display a
WHERE (`a`.`saved_search_id` = "1")
[nativecode=1054 ** Unknown column 'a.acl_bypass' in 'field list']"]
)
Dec 22 13:41:25 [debug] $backTrace = #0 ...\sites\all\modules\civicrm\CRM\Core\Error.php(942): CRM_Core_Error::backtrace("backTrace", TRUE)
1 ...\sites\all\modules\civicrm\vendor\pear\pear-core-minimal\src\PEAR.php(922): CRM_Core_Error::exceptionHandler(Object(DB_Error))
2 ...\sites\all\modules\civicrm\vendor\pear\db\DB.php(997): PEAR_Error->__construct("DB Error: no such field", -19, 16, (Array:2), "SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...")
3 ...\sites\all\modules\civicrm\vendor\pear\pear-core-minimal\src\PEAR.php(575): DB_Error->__construct(-19, 16, (Array:2), "SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...")
4 ...\sites\all\modules\civicrm\vendor\pear\pear-core-minimal\src\PEAR.php(223): PEAR::_raiseError(Object(DB_mysqli), NULL, -19, 16, (Array:2), "SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...", "DB_Error", TRUE)
5 ...\sites\all\modules\civicrm\vendor\pear\db\DB\common.php(1928): PEAR->__call("raiseError", (Array:7))
6 ...\sites\all\modules\civicrm\vendor\pear\db\DB\mysqli.php(936): DB_common->raiseError(-19, NULL, NULL, "SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...", "1054 ** Unknown column 'a.acl_bypass' in 'field list'")
7 ...\sites\all\modules\civicrm\vendor\pear\db\DB\mysqli.php(406): DB_mysqli->mysqliRaiseError()
8 ...\sites\all\modules\civicrm\vendor\pear\db\DB\common.php(1234): DB_mysqli->simpleQuery("SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...")
9 ...\sites\all\modules\civicrm\packages\DB\DataObject.php(2696): DB_common->query("SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...")
10 ...\sites\all\modules\civicrm\packages\DB\DataObject.php(1829): DB_DataObject->_query("SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...")
11 ...\sites\all\modules\civicrm\CRM\Core\DAO.php(468): DB_DataObject->query("SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...")
12 ...\sites\all\modules\civicrm\CRM\Core\DAO.php(1621): CRM_Core_DAO->query("SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...", TRUE)
13 ...\sites\all\modules\civicrm\Civi\Api4\Query\Api4SelectQuery.php(167): CRM_Core_DAO::executeQuery("SELECT `a`.`id` AS `id`, `a`.`name` AS `name`, `a`.`label` AS `label`, `a`.`s...")
14 ...\sites\all\modules\civicrm\Civi\Api4\Generic\DAOGetAction.php(111): Civi\Api4\Query\Api4SelectQuery->run()
15 ...\sites\all\modules\civicrm\Civi\Api4\Generic\DAOGetAction.php(99): Civi\Api4\Generic\DAOGetAction->getObjects(Object(Civi\Api4\Generic\Result))
16 ...\sites\all\modules\civicrm\Civi\Api4\Provider\ActionObjectProvider.php(68): Civi\Api4\Generic\DAOGetAction->_run(Object(Civi\Api4\Generic\Result))
17 ...\sites\all\modules\civicrm\Civi\API\Kernel.php(149): Civi\Api4\Provider\ActionObjectProvider->invoke(Object(Civi\Api4\Generic\DAOGetAction))
18 ...\sites\all\modules\civicrm\Civi\Api4\Generic\AbstractAction.php(234): Civi\API\Kernel->runRequest(Object(Civi\Api4\Generic\DAOGetAction))
19 ...\sites\all\modules\civicrm\api\api.php(85): Civi\Api4\Generic\AbstractAction->execute()
20 ...\sites\all\modules\civicrm\Civi\Api4\Provider\ActionObjectProvider.php(103): civicrm_api4("SearchDisplay", "get", (Array:13), NULL)
21 ...\sites\all\modules\civicrm\Civi\Api4\Provider\ActionObjectProvider.php(84): Civi\Api4\Provider\ActionObjectProvider->runChain((Array:4), (Array:14))
22 ...\sites\all\modules\civicrm\Civi\Api4\Provider\ActionObjectProvider.php(69): Civi\Api4\Provider\ActionObjectProvider->handleChains(Object(Civi\Api4\Generic\DAOGetAction), Object(Civi\Api4\Generic\Result))
23 ...\sites\all\modules\civicrm\Civi\API\Kernel.php(149): Civi\Api4\Provider\ActionObjectProvider->invoke(Object(Civi\Api4\Generic\DAOGetAction))
24 ...\sites\all\modules\civicrm\Civi\Api4\Generic\AbstractAction.php(234): Civi\API\Kernel->runRequest(Object(Civi\Api4\Generic\DAOGetAction))
25 ...\sites\all\modules\civicrm\ext\search_kit\CRM\Search\Upgrader.php(58): Civi\Api4\Generic\AbstractAction->execute()
26 ...\sites\all\modules\civicrm\CRM\Extension\Upgrader\QueueTrait.php(49): CRM_Search_Upgrader->upgrade_1001()
27 ...\sites\all\modules\civicrm\CRM\Queue\Task.php(74): CRM_Extension_Upgrader_Base::_queueAdapter(Object(CRM_Queue_TaskContext), "org.civicrm.search_kit", "upgrade_1001")
28 ...\sites\all\modules\civicrm\CRM\Queue\Runner.php(201): CRM_Queue_Task->run(Object(CRM_Queue_TaskContext))
29 ...\sites\all\modules\civicrm\CRM\Queue\Page\AJAX.php(36): CRM_Queue_Runner->runNext(TRUE)
30 ...\sites\all\modules\civicrm\CRM\Queue\ErrorPolicy.php(89): CRM_Queue_Page_AJAX::{closure}()
31 ...\sites\all\modules\civicrm\CRM\Queue\Page\AJAX.php(38): CRM_Queue_ErrorPolicy->call(Object(Closure))
32 ...\sites\all\modules\civicrm\CRM\Core\Invoke.php(279): CRM_Queue_Page_AJAX::runNext()
33 ...\sites\all\modules\civicrm\CRM\Core\Invoke.php(69): CRM_Core_Invoke::runItem((Array:13))
34 ...\sites\all\modules\civicrm\CRM\Core\Invoke.php(36): CRM_Core_Invoke::_invoke((Array:4))
35 ...\sites\all\modules\civicrm\drupal\civicrm.module(471): CRM_Core_Invoke::invoke((Array:4))
36 ...\includes\menu.inc(527): civicrm_invoke("queue", "ajax", "runNext")
37 ...\index.php(21): menu_execute_active_handler()
38 {main}