Skip to content

Commit 5f11b2e

Browse files
authored
Merge pull request #1098 from arnchlmcodes/added-duplicate-clause
added duplicate clause in move.py
2 parents df62769 + cdfd76d commit 5f11b2e

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

wp1/logic/move.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ def insert(wp10db, move):
3333
VALUES
3434
(%(m_timestamp)s, %(m_old_namespace)s, %(m_old_article)s,
3535
%(m_new_namespace)s, %(m_new_article)s)
36+
ON DUPLICATE KEY UPDATE
37+
m_new_namespace = %(m_new_namespace)s,
38+
m_new_article = %(m_new_article)s
3639
""",
3740
attr.asdict(move),
3841
)

wp1/logic/move_test.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import unittest
2+
3+
from wp1.base_db_test import BaseWpOneDbTest
4+
from wp1.logic import move as logic_move
5+
from wp1.models.wp10.move import Move
6+
7+
8+
class LogicMoveTest(BaseWpOneDbTest):
9+
10+
def test_insert_duplicate_key_update(self):
11+
# Insert initial data using raw SQL
12+
with self.wp10db.cursor() as cursor:
13+
cursor.execute(
14+
"""INSERT INTO moves
15+
(m_timestamp, m_old_namespace, m_old_article,
16+
m_new_namespace, m_new_article)
17+
VALUES (%s, %s, %s, %s, %s)""",
18+
(
19+
b"20200101000000\x00\x00\x00\x00\x00\x00",
20+
0,
21+
b"Old_Article_1",
22+
0,
23+
b"New_Article_1",
24+
),
25+
)
26+
self.wp10db.commit()
27+
28+
# Insert duplicate row using the code under test
29+
move2 = Move(
30+
m_timestamp=b"20200101000000\x00\x00\x00\x00\x00\x00",
31+
m_old_namespace=0,
32+
m_old_article=b"Old_Article_1",
33+
m_new_namespace=1,
34+
m_new_article=b"Different_Article",
35+
)
36+
logic_move.insert(self.wp10db, move2)
37+
self.wp10db.commit()
38+
39+
# Verify the record was updated, not duplicated
40+
with self.wp10db.cursor() as cursor:
41+
cursor.execute(
42+
"""SELECT * FROM moves
43+
WHERE m_timestamp = %s
44+
AND m_old_namespace = %s
45+
AND m_old_article = %s""",
46+
(b"20200101000000\x00\x00\x00\x00\x00\x00", 0, b"Old_Article_1"),
47+
)
48+
updated_move = cursor.fetchone()
49+
self.assertIsNotNone(updated_move)
50+
self.assertEqual(updated_move["m_new_namespace"], 1)
51+
self.assertEqual(updated_move["m_new_article"], b"Different_Article")

0 commit comments

Comments
 (0)