Skip to content

Commit d17ad56

Browse files
committed
Update logic
1 parent 12454c1 commit d17ad56

File tree

1 file changed

+49
-80
lines changed

1 file changed

+49
-80
lines changed

src/SWP/Bundle/CoreBundle/Migrations/2021/01/Version20210112135542.php

Lines changed: 49 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -59,95 +59,64 @@ public function down(Schema $schema): void
5959
$this->addSql('DROP SEQUENCE swp_article_extra_id_seq CASCADE');
6060
$this->addSql('DROP TABLE swp_article_extra');
6161
}
62+
6263
public function postUp(Schema $schema): void
6364
{
64-
try {
65-
$entityManager = $this->container->get('doctrine.orm.default_entity_manager');
66-
$connection = $entityManager->getConnection();
67-
$connection->getConfiguration()->setSQLLogger(null);
68-
69-
// Verify table exists
70-
$tableExists = $connection->executeQuery(
71-
"SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'swp_article_extra')"
72-
)->fetchOne();
73-
74-
if (!$tableExists) {
75-
return;
76-
}
77-
78-
$batchSize = 500;
79-
$numberOfRecordsPerPage = 2000;
80-
81-
// Get total count
82-
$totalArticles = $entityManager
83-
->createQuery('SELECT count(a) FROM SWP\Bundle\CoreBundle\Model\Article a WHERE a.extra IS NOT NULL')
84-
->getSingleScalarResult();
85-
86-
if ($totalArticles == 0) {
87-
return;
88-
}
89-
90-
$totalArticlesProcessed = 0;
65+
$entityManager = $this->container->get('doctrine.orm.default_entity_manager');
66+
$entityManager->getConnection()->getConfiguration()->setSQLLogger(null);
67+
68+
$batchSize = 500;
69+
$numberOfRecordsPerPage = 2000;
70+
71+
$totalArticles = $entityManager
72+
->createQuery('SELECT count(a) FROM SWP\Bundle\CoreBundle\Model\Article a')
73+
->getSingleScalarResult();
74+
75+
$totalArticlesProcessed = 0;
76+
$isProcessing = true;
77+
78+
// while ($totalArticlesProcessed < $totalArticles) {
79+
$sql = "SELECT id, extra FROM swp_article";
80+
$query = $entityManager->getConnection()->prepare($sql);
81+
$query->execute();
82+
$results = $query->fetchAll();
83+
84+
foreach ($results as $result) {
85+
$legacyExtra = $this->unserializeExtraField($result['extra']);
86+
if (empty($legacyExtra)) {
87+
++$totalArticlesProcessed;
88+
continue;
89+
}
9190

92-
// Pagination loop
93-
while ($totalArticlesProcessed < $totalArticles) {
94-
$sql = "SELECT id, extra FROM swp_article WHERE extra IS NOT NULL ORDER BY id LIMIT ? OFFSET ?";
95-
$query = $connection->prepare($sql);
96-
$results = $query->executeQuery([$numberOfRecordsPerPage, $totalArticlesProcessed])->fetchAllAssociative();
91+
$article = $entityManager->find(
92+
Article::class,
93+
$result['id']
94+
);
9795

98-
// Break if no results (end of data)
99-
if (empty($results)) {
100-
break;
96+
foreach ($legacyExtra as $key => $extraItem) {
97+
if (is_array($extraItem)) {
98+
$extra = ArticleExtraEmbedField::newFromValue($key, $extraItem);
99+
} else {
100+
$extra = ArticleExtraTextField::newFromValue($key, (string) $extraItem);
101+
}
102+
$extra->setArticle($article);
103+
$entityManager->persist($extra);
101104
}
102105

103-
foreach ($results as $result) {
104-
try {
105-
$legacyExtra = $this->unserializeExtraField($result['extra']);
106-
if (empty($legacyExtra)) {
107-
++$totalArticlesProcessed;
108-
continue;
109-
}
110-
111-
$article = $entityManager->find(
112-
Article::class,
113-
$result['id']
114-
);
115-
116-
if (!$article) {
117-
++$totalArticlesProcessed;
118-
continue;
119-
}
120-
121-
foreach ($legacyExtra as $key => $extraItem) {
122-
if (is_array($extraItem)) {
123-
$extra = ArticleExtraEmbedField::newFromValue($key, $extraItem);
124-
} else {
125-
$extra = ArticleExtraTextField::newFromValue($key, (string) $extraItem);
126-
}
127-
$extra->setArticle($article);
128-
$entityManager->persist($extra);
129-
}
130-
131-
++$totalArticlesProcessed;
132-
if (0 == ($totalArticlesProcessed % $batchSize)) {
133-
$entityManager->flush();
134-
$entityManager->clear();
135-
}
136-
} catch (\Exception $e) {
137-
++$totalArticlesProcessed;
138-
error_log('Error processing article ' . $result['id'] . ': ' . $e->getMessage());
139-
continue;
140-
}
106+
++$totalArticlesProcessed;
107+
if (0 == ($totalArticlesProcessed % $batchSize)) {
108+
$entityManager->flush();
109+
$entityManager->clear();
141110
}
142111
}
143112

144-
// Flush remaining entities
145-
$entityManager->flush();
146-
$entityManager->clear();
147-
} catch (\Exception $e) {
148-
error_log('postUp error: ' . $e->getMessage());
149-
throw $e;
150-
}
113+
// flush remaining entities in queue and break loop
114+
if ($totalArticlesProcessed === $totalArticles) {
115+
$entityManager->flush();
116+
$entityManager->clear();
117+
break;
118+
}
119+
// }
151120
}
152121

153122
private function unserializeExtraField(?string $data)

0 commit comments

Comments
 (0)