2 declare(strict_types = 1);
18 use Doctrine\DBAL\DBALException;
33 return 'migrateFeSessionDataUpdate';
41 return 'Migrates existing fe_session_data into fe_sessions';
49 return 'With the new Session Framwework the session data is stored in fe_sessions.'
50 .
' To avoid that data is truncated, ensure the columns of fe_sessions have been updated.'
51 .
' This wizard migrates the existing data from fe_session_data into fe_sessions.'
52 .
' Existing entries in fe_sessions having an entry in fe_session_data are updated.'
53 .
' Entries in fe_session_data not found in fe_sessions are inserted with ses_anonymous = true';
67 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
68 ->getQueryBuilderForTable(
'fe_session_data');
69 $queryBuilder->getRestrictions()->removeAll();
70 $count = $queryBuilder->count(
'*')
71 ->from(
'fe_session_data')
84 DatabaseUpdatedPrerequisite::class
95 $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable(
'fe_sessions');
98 $queryBuilder = $connection->createQueryBuilder();
99 $statement = $queryBuilder->select(
'fe_session_data.hash',
'fe_session_data.content')
100 ->from(
'fe_sessions')
105 $queryBuilder->expr()->eq(
106 'fe_sessions.ses_id',
107 $queryBuilder->quoteIdentifier(
'fe_session_data.hash')
112 $updateQueryBuilder = $connection->createQueryBuilder();
113 $updateQueryBuilder->update(
'fe_sessions')
115 $updateQueryBuilder->expr()->eq(
117 $updateQueryBuilder->createPositionalParameter(
'', \PDO::PARAM_STR)
120 ->set(
'ses_data', $updateQueryBuilder->createPositionalParameter(
'', \PDO::PARAM_STR),
false);
121 $updateStatement = $connection->prepare($updateQueryBuilder->getSQL());
123 $connection->beginTransaction();
125 while ($row = $statement->fetch()) {
126 $updateStatement->execute([$row[
'hash'], $row[
'content']]);
128 $connection->commit();
129 }
catch (DBALException $e) {
130 $connection->rollBack();
135 $queryBuilder = $connection->createQueryBuilder();
136 $selectSQL = $queryBuilder->select(
'fe_session_data.hash',
'fe_session_data.content',
'fe_session_data.tstamp')
137 ->addSelectLiteral(
'1')
138 ->from(
'fe_session_data')
143 $queryBuilder->expr()->eq(
144 'fe_session_data.hash',
145 $queryBuilder->quoteIdentifier(
'fe_sessions.ses_id')
148 ->where($queryBuilder->expr()->isNull(
'fe_sessions.ses_id'))
151 $insertSQL = sprintf(
152 'INSERT INTO %s(%s, %s, %s, %s) %s',
153 $connection->quoteIdentifier(
'fe_sessions'),
154 $connection->quoteIdentifier(
'ses_id'),
155 $connection->quoteIdentifier(
'ses_data'),
156 $connection->quoteIdentifier(
'ses_tstamp'),
157 $connection->quoteIdentifier(
'ses_anonymous'),
162 $connection->beginTransaction();
163 $connection->exec($insertSQL);
164 $connection->commit();
165 }
catch (DBALException $e) {
166 $connection->rollBack();
181 $tableExists = GeneralUtility::makeInstance(ConnectionPool::class)
182 ->getConnectionForTable($table)
184 ->tablesExist([$table]);