From d0b9510cf0d7a47e53aa341462a1175326dfc09d Mon Sep 17 00:00:00 2001 From: shennetsind Date: Wed, 19 Feb 2014 15:16:46 -0300 Subject: Follow up 9132878d911cfe720eaad94ad3d4a5dd11958f99 Fixed issue (8023) with sc rows (only those of tick = -1, aka permanent scs) duplicating due to lack of primary index. Special Thanks to Flash, Haru. Note that the upgrade script will clear the permanent statuses from your sc_data table (e.g. lex aeterna, carts) to ensure no issues are left. Signed-off-by: shennetsind --- sql-files/main.sql | 4 +++- sql-files/upgrades/2014-02-19--17-57.sql | 4 ++++ sql-files/upgrades/index.txt | 3 ++- src/char/char.c | 4 ++++ 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 sql-files/upgrades/2014-02-19--17-57.sql diff --git a/sql-files/main.sql b/sql-files/main.sql index 4a91aeef8..654eee9f0 100644 --- a/sql-files/main.sql +++ b/sql-files/main.sql @@ -468,7 +468,8 @@ CREATE TABLE IF NOT EXISTS `sc_data` ( `val3` int(11) NOT NULL default '0', `val4` int(11) NOT NULL default '0', KEY (`account_id`), - KEY (`char_id`) + KEY (`char_id`), + PRIMARY KEY (`account_id`,`char_id`,`type`) ) ENGINE=MyISAM; -- @@ -661,6 +662,7 @@ INSERT INTO `sql_updates` (`timestamp`) VALUES (1384763034); -- 2013-11-18--08-2 INSERT INTO `sql_updates` (`timestamp`) VALUES (1387844126); -- 2013-12-24--00-15.sql INSERT INTO `sql_updates` (`timestamp`) VALUES (1388854043); -- 2014-01-04--16-47.sql INSERT INTO `sql_updates` (`timestamp`) VALUES (1389028967); -- 2014-01-06--17-22.sql +INSERT INTO `sql_updates` (`timestamp`) VALUES (1392832626); -- 2014-02-19--17-57.sql -- -- Table structure for table `sstatus` diff --git a/sql-files/upgrades/2014-02-19--17-57.sql b/sql-files/upgrades/2014-02-19--17-57.sql new file mode 100644 index 000000000..ebebe6665 --- /dev/null +++ b/sql-files/upgrades/2014-02-19--17-57.sql @@ -0,0 +1,4 @@ +#1392832626 +DELETE FROM `sc_data` WHERE `tick` = '-1'; +ALTER TABLE `sc_data` ADD PRIMARY KEY (`account_id`,`char_id`,`type`); +INSERT INTO `sql_updates` (`timestamp`) VALUES (1392832626); \ No newline at end of file diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt index bf404d919..39fbd0070 100644 --- a/sql-files/upgrades/index.txt +++ b/sql-files/upgrades/index.txt @@ -17,4 +17,5 @@ 2013-11-18--08-23.sql 2013-12-24--00-15.sql 2014-01-04--16-47.sql -2014-01-06--17-22.sql \ No newline at end of file +2014-01-06--17-22.sql +2014-02-19--17-57.sql \ No newline at end of file diff --git a/src/char/char.c b/src/char/char.c index 1ee3cfd1d..5b497bd0c 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -3574,6 +3574,10 @@ int parse_frommap(int fd) cid = RFIFOL(fd, 8); count = RFIFOW(fd, 12); + /* clear; ensure no left overs e.g. permanent */ + if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = '%d' AND `char_id`='%d'", scdata_db, aid, cid) ) + Sql_ShowDebug(sql_handle); + if( count > 0 ) { struct status_change_data data; -- cgit v1.2.3-70-g09d2