Error upgrading from 8.4.3 to 8.5.1

Permalink 3 0 Browser Info Environment
Upgrade to 8.5.1 throws this error:

"There is no table with name 'bitnami_concrete58.expressform170expresssearchindexattributes' in the schema."

/Applications/mampstack-5.6.18-0/apps/concrete58/htdocs/updates/concrete5-8.5.1/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaException.php

Line 43.

return new self("There is no table with name '".$tableName."' in the schema.", self::TABLE_DOESNT_EXIST);


I double checked the mysql db and there's definitely not supposed to be a table with that name.

Tried running the script again (forced) with "/index.php/ccm/system/upgrade?force=1" but same error. No other pages in the site are viewable afterwards, as the error affects all of them, effectively bricking the site.

I was able to do a clean install with 8.5.1 with no issues. However, I need a site to support PHP 7.3 so the upgrade path is essential.


Status: New
jb1
jb1 replied on at Permalink Reply
jb1
This was becoming an issue for me, preventing me from upgrading to 8.5.x on my development installation, so I troubleshooted it and found the cause was in concrete/src/Updater/Migrations/Version20180926070300.php

this line:
$indexTable = $schema->getTable($indexTableName);

was returning an array or an invalid table name. So when I commented out the following line to prevent the code from running it worked ok:

$this->fixExpressEntityAttributeIndexTable($schema, $expressEntity);


Naturally, I'm concerned that a necessary upgrade to the db structure hasn't occurred so I'm not sure what the possible side-effects in the future could be.

Hopefully this is helpful to anyone facing the same issue.
newfieldslab replied on at Permalink Reply
This is late but In case anyone else runs into this issue here here is what I found in my research trying to update C5 to v8.5.1.

A "<Express Object Name>expresssearchindexattributes" table is created for each Express object you define. In this case something happened when you tried to delete the Express object definition. The expresssearchindexattributes table was deleted but the parent Express records were not deleted (I suspect there is/was a C5 bug that prevents deleting an entry if it has entities). The result is the Express object still appears on the System & Settings > Express page but can't be used.

You can test this by going to System & Settings > Express > select the offending Express object > View "you object" Entries. You will probably get an sql error saying something like
"An exception occurred while executing 'SELECT count(distinct e.exEntryID) FROM ExpressEntityEntries e LEFT JOIN <Express Object Name>ExpressSearchIndexAttributes..."


The fix is to manually delete the offending records from ExpressEntityEntries and ExpressEntity.

Something like the following (WARNING: These will delete any entries associated with the entity id so don't run these unless you are sure you don't need the entity):
DELETE FROM ExpressEntityEntries WHERE exEntryEntityID = "The-entity-id-from-the-error";

The go back to System & Settings and delete the Express Object

concrete5 Environment Information

PHP 5.6.18

Browser User-Agent String

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36