Skip to content

Commit 76efdb6

Browse files
Merge pull request #76 from Aperture-Development/bugfix-#75
Update Queries
2 parents 3315904 + 2ff81e0 commit 76efdb6

File tree

3 files changed

+107
-72
lines changed

3 files changed

+107
-72
lines changed

lua/msync/server/modules/sv_mbsync.lua

Lines changed: 74 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ MSync.modules[info.ModuleIdentifier].init = function( transaction )
7171
MODIFY `length_unix` INT UNSIGNED NOT NULL;
7272
]]))
7373
updates:addQuery( MSync.DBServer:query([[
74-
INSERT INTO tbl_msyncdb_version (version, module_id) VALUES (1, 'MBSync')
75-
ON DUPLICATE KEY UPDATE version=VALUES(version);
74+
INSERT INTO tbl_msyncdb_version (version, module_id) VALUES (1, 'MBSync') AS newVersion
75+
ON DUPLICATE KEY UPDATE version=newVersion.version;
7676
]]))
7777
updates:start()
7878
else
@@ -88,8 +88,8 @@ MSync.modules[info.ModuleIdentifier].init = function( transaction )
8888
]]))
8989

9090
updates:addQuery( MSync.DBServer:query([[
91-
INSERT INTO tbl_msyncdb_version (version, module_id) VALUES (1, 'MBSync')
92-
ON DUPLICATE KEY UPDATE version=VALUES(version);
91+
INSERT INTO tbl_msyncdb_version (version, module_id) VALUES (1, 'MBSync') AS newVersion
92+
ON DUPLICATE KEY UPDATE version=newVersion.version;
9393
]]))
9494
updates:start()
9595
end
@@ -122,21 +122,29 @@ MSync.modules[info.ModuleIdentifier].init = function( transaction )
122122

123123
local banUserQ = MSync.DBServer:prepare( [[
124124
INSERT INTO `tbl_mbsync` (user_id, admin_id, reason, date_unix, length_unix, server_group)
125-
VALUES (
126-
(SELECT p_user_id FROM tbl_users WHERE steamid=? AND steamid64=?),
127-
(SELECT p_user_id FROM tbl_users WHERE steamid=? AND steamid64=?),
128-
?, ?, ?,
129-
(SELECT p_group_id FROM tbl_server_grp WHERE group_name=?)
130-
);
125+
SELECT UserTbl.p_user_id, AdminTbl.p_user_id, ?, ?, ?, tbl_server_grp.p_group_id
126+
FROM tbl_users AS UserTbl, tbl_users AS AdminTbl, tbl_server_grp
127+
WHERE
128+
(
129+
UserTbl.steamid=? AND
130+
UserTbl.steamid64=?
131+
)
132+
AND
133+
(
134+
AdminTbl.steamid=? AND
135+
AdminTbl.steamid64=?
136+
)
137+
AND
138+
tbl_server_grp.group_name=?;
131139
]] )
132140
local timestamp = os.time()
133-
banUserQ:setString(1, ply:SteamID())
134-
banUserQ:setString(2, ply:SteamID64())
135-
banUserQ:setString(3, calling_ply)
136-
banUserQ:setString(4, util.SteamIDTo64(calling_ply))
137-
banUserQ:setString(5, reason)
138-
banUserQ:setNumber(6, timestamp)
139-
banUserQ:setNumber(7, length*60)
141+
banUserQ:setString(1, reason)
142+
banUserQ:setNumber(2, timestamp)
143+
banUserQ:setNumber(3, length*60)
144+
banUserQ:setString(4, ply:SteamID())
145+
banUserQ:setString(5, ply:SteamID64())
146+
banUserQ:setString(6, calling_ply)
147+
banUserQ:setString(7, util.SteamIDTo64(calling_ply))
140148
if not allserver then
141149
banUserQ:setString(8, MSync.settings.data.serverGroup)
142150
else
@@ -202,28 +210,44 @@ MSync.modules[info.ModuleIdentifier].init = function( transaction )
202210

203211
local banUserIdQ = MSync.DBServer:prepare( [[
204212
INSERT INTO `tbl_mbsync` (user_id, admin_id, reason, date_unix, length_unix, server_group)
205-
VALUES (
206-
(SELECT p_user_id FROM tbl_users WHERE steamid=? OR steamid64=?),
207-
(SELECT p_user_id FROM tbl_users WHERE steamid=? AND steamid64=?),
208-
?, ?, ?,
209-
(SELECT p_group_id FROM tbl_server_grp WHERE group_name=?)
210-
);
213+
SELECT UserTbl.p_user_id, AdminTbl.p_user_id, ?, ?, ?, tbl_server_grp.p_group_id
214+
FROM tbl_users AS UserTbl, tbl_users AS AdminTbl, tbl_server_grp
215+
WHERE
216+
(
217+
UserTbl.steamid=? OR
218+
UserTbl.steamid64=?
219+
)
220+
AND
221+
(
222+
AdminTbl.steamid=? AND
223+
AdminTbl.steamid64=?
224+
)
225+
AND
226+
tbl_server_grp.group_name=?
211227
]] )
212228
local timestamp = os.time()
213-
banUserIdQ:setString(1, userid)
214-
banUserIdQ:setString(2, userid)
215-
banUserIdQ:setString(3, calling_ply)
216-
banUserIdQ:setString(4, util.SteamIDTo64(calling_ply))
217-
banUserIdQ:setString(5, reason)
218-
banUserIdQ:setNumber(6, timestamp)
219-
banUserIdQ:setNumber(7, length*60)
229+
banUserIdQ:setString(1, reason)
230+
banUserIdQ:setNumber(2, timestamp)
231+
banUserIdQ:setNumber(3, length*60)
232+
banUserIdQ:setString(4, userid)
233+
banUserIdQ:setString(5, userid)
234+
banUserIdQ:setString(6, calling_ply)
235+
banUserIdQ:setString(7, util.SteamIDTo64(calling_ply))
220236
if not allserver then
221237
banUserIdQ:setString(8, MSync.settings.data.serverGroup)
222238
else
223239
banUserIdQ:setString(8, "allservers")
224240
end
225241

226242
banUserIdQ.onSuccess = function( q, data )
243+
-- Due to the new SQL syntax, mysql does not throw an error anymore if the user does nit exist. We are checking which rows have been affected to work around this issue
244+
if q:affectedRows() == 0 then
245+
MSync.log(MSYNC_DBG_INFO, "[MBSync] User does not exist! Creating user before retrying")
246+
MSync.mysql.addUserID(userid)
247+
MSync.modules[info.ModuleIdentifier].banUserID(userid, calling_ply, length, reason, allserver)
248+
return
249+
end
250+
227251
-- Notify the user about the ban and add it to ULib to prevent data loss on Addon Remove
228252
-- Also, kick the user from the server
229253
if calling_ply == "STEAM_0:0:0" then
@@ -260,6 +284,7 @@ MSync.modules[info.ModuleIdentifier].init = function( transaction )
260284
end
261285

262286
banUserIdQ.onError = function( q, err, sql )
287+
-- Deprecated check, remove in next minor release
263288
if string.match( err, "^Column 'user_id' cannot be null$" ) then
264289
MSync.log(MSYNC_DBG_INFO, "[MBSync] User does not exist! Creating user before retrying")
265290
MSync.mysql.addUserID(userid)
@@ -665,8 +690,8 @@ MSync.modules[info.ModuleIdentifier].init = function( transaction )
665690
]]
666691
transactions[k..'_user'] = MSync.DBServer:prepare( [[
667692
INSERT INTO `tbl_users` (steamid, steamid64, nickname, joined)
668-
VALUES (?, ?, ?, ?)
669-
ON DUPLICATE KEY UPDATE steamid=steamid;
693+
VALUES (?, ?, ?, ?) AS newUser
694+
ON DUPLICATE KEY UPDATE steamid=newUser.steamid;
670695
]] )
671696
transactions[k..'_user']:setString(1, k)
672697
transactions[k..'_user']:setString(2, util.SteamIDTo64( k ))
@@ -685,37 +710,39 @@ MSync.modules[info.ModuleIdentifier].init = function( transaction )
685710
]]
686711
transactions[k] = MSync.DBServer:prepare( [[
687712
INSERT INTO `tbl_mbsync` (user_id, admin_id, reason, date_unix, length_unix, server_group)
688-
VALUES (
689-
(SELECT p_user_id FROM tbl_users WHERE steamid=?),
690-
(SELECT p_user_id FROM tbl_users WHERE steamid=?),
691-
?, ?, ?,
692-
(SELECT p_group_id FROM tbl_server_grp WHERE group_name=?)
693-
);
713+
SELECT UserTbl.p_user_id, AdminTbl.p_user_id, ?, ?, ?, tbl_server_grp.p_group_id
714+
FROM tbl_users AS UserTbl, tbl_users AS AdminTbl, tbl_server_grp
715+
WHERE
716+
UserTbl.steamid=?
717+
AND
718+
AdminTbl.steamid=?
719+
AND
720+
tbl_server_grp.group_name=?;
694721
]] )
695722
local timestamp = os.time()
696-
transactions[k]:setString(1, k)
723+
transactions[k]:setString(4, k)
697724

698725
if v['modified_admin'] then
699726
if v['modified_admin'] == "(Console)" then
700-
transactions[k]:setString(2,"STEAM_0:0:0")
727+
transactions[k]:setString(5,"STEAM_0:0:0")
701728
else
702-
transactions[k]:setString(2,string.match(v['modified_admin'], "STEAM_%d:%d:%d+"))
729+
transactions[k]:setString(5,string.match(v['modified_admin'], "STEAM_%d:%d:%d+"))
703730
end
704731
else
705732
if v['admin'] == "(Console)" then
706-
transactions[k]:setString(2,"STEAM_0:0:0")
733+
transactions[k]:setString(5,"STEAM_0:0:0")
707734
else
708-
transactions[k]:setString(2,string.match(v['admin'], "STEAM_%d:%d:%d+"))
735+
transactions[k]:setString(5,string.match(v['admin'], "STEAM_%d:%d:%d+"))
709736
end
710737
end
711738

712-
transactions[k]:setString(3, v['reason'] or "(None given)")
713-
transactions[k]:setNumber(4, tonumber(v['time']))
739+
transactions[k]:setString(1, v['reason'] or "(None given)")
740+
transactions[k]:setNumber(2, tonumber(v['time']))
714741

715742
if tonumber(v['unban']) == 0 then
716-
transactions[k]:setNumber(5, tonumber(v['unban']))
743+
transactions[k]:setNumber(3, tonumber(v['unban']))
717744
else
718-
transactions[k]:setNumber(5, tonumber(v['unban']) - tonumber(v['time']))
745+
transactions[k]:setNumber(3, tonumber(v['unban']) - tonumber(v['time']))
719746
end
720747

721748
if not allserver then

lua/msync/server/modules/sv_mrsync.lua

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,22 @@ function MSync.modules.MRSync.init( transaction )
5353
if string.len(group) > 15 then MSync.log(MSYNC_DBG_ERROR, "[MRSync] Groupname \"" .. group .. "\" is too long for MRSync! Please use rank names with max. 15 characters instead."); return end;
5454

5555
local addUserRankQ = MSync.DBServer:prepare( [[
56-
INSERT INTO `tbl_mrsync` (user_id, rank, server_group)
57-
VALUES (
58-
(SELECT p_user_id FROM tbl_users WHERE steamid=? AND steamid64=?),
59-
?,
60-
(SELECT p_group_id FROM tbl_server_grp WHERE group_name=?)
61-
)
62-
ON DUPLICATE KEY UPDATE rank=VALUES(rank);
56+
INSERT INTO `tbl_mrsync` (user_id, `rank`, server_group)
57+
SELECT * FROM (
58+
SELECT tbl_users.p_user_id, ? AS newRank, tbl_server_grp.p_group_id
59+
FROM tbl_users, tbl_server_grp
60+
WHERE
61+
(
62+
tbl_users.steamid=? AND tbl_users.steamid64=?
63+
)
64+
AND
65+
tbl_server_grp.group_name=?
66+
) AS dataQuery
67+
ON DUPLICATE KEY UPDATE `rank`=newRank;
6368
]] )
64-
addUserRankQ:setString(1, steamid)
65-
addUserRankQ:setString(2, util.SteamIDTo64( steamid ))
66-
addUserRankQ:setString(3, group)
69+
addUserRankQ:setString(1, group)
70+
addUserRankQ:setString(2, steamid)
71+
addUserRankQ:setString(3, util.SteamIDTo64( steamid ))
6772
if not MSync.modules.MRSync.settings.syncall[group] then
6873
addUserRankQ:setString(4, MSync.settings.data.serverGroup)
6974
else

lua/msync/server/sv_mysql.lua

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ function MSync.mysql.initialize()
4444
]] ))
4545

4646
initDatabase:addQuery(MSync.DBServer:query( [[
47-
INSERT INTO `tbl_server_grp` (group_name) VALUES ('allservers')
48-
ON DUPLICATE KEY UPDATE group_name=VALUES(group_name);
47+
INSERT INTO `tbl_server_grp` (group_name) VALUES ('allservers') AS newGroup
48+
ON DUPLICATE KEY UPDATE group_name=newGroup.group_name;
4949
]] ))
5050

5151
initDatabase:addQuery(MSync.DBServer:query( [[
@@ -74,8 +74,8 @@ function MSync.mysql.initialize()
7474
]] ))
7575

7676
initDatabase:addQuery(MSync.DBServer:query( [[
77-
INSERT INTO `tbl_users` (steamid, steamid64, nickname, joined) VALUES ('STEAM_0:0:0', '76561197960265728', '(CONSOLE)', '2004-12-24 12:00:00')
78-
ON DUPLICATE KEY UPDATE nickname=VALUES(nickname);
77+
INSERT INTO `tbl_users` (steamid, steamid64, nickname, joined) VALUES ('STEAM_0:0:0', '76561197960265728', '(CONSOLE)', '2004-12-24 12:00:00') AS newUser
78+
ON DUPLICATE KEY UPDATE nickname=newUser.nickname;
7979
]] ))
8080

8181
function initDatabase.onSuccess()
@@ -115,8 +115,8 @@ function MSync.mysql.addUser(ply)
115115

116116
local addUserQ = MSync.DBServer:prepare( [[
117117
INSERT INTO `tbl_users` (steamid, steamid64, nickname, joined)
118-
VALUES (?, ?, ?, ?)
119-
ON DUPLICATE KEY UPDATE nickname=VALUES(nickname);
118+
VALUES (?, ?, ?, ?) AS newUser
119+
ON DUPLICATE KEY UPDATE nickname=newUser.nickname;
120120
]] )
121121

122122
local nickname = ply:Nick()
@@ -156,8 +156,8 @@ function MSync.mysql.addUserID(steamid, nickname)
156156

157157
local addUserQ = MSync.DBServer:prepare( [[
158158
INSERT INTO `tbl_users` (steamid, steamid64, nickname, joined)
159-
VALUES (?, ?, ?, ?)
160-
ON DUPLICATE KEY UPDATE nickname=VALUES(nickname);
159+
VALUES (?, ?, ?, ?) AS newUser
160+
ON DUPLICATE KEY UPDATE nickname=newUser.nickname;
161161
]] )
162162

163163
if string.len(nickname) > 30 then
@@ -198,18 +198,21 @@ end
198198
function MSync.mysql.saveServer()
199199

200200
local addServerGroup = MSync.DBServer:prepare( [[
201-
INSERT INTO `tbl_server_grp` (group_name) VALUES (?)
202-
ON DUPLICATE KEY UPDATE group_name=VALUES(group_name);
201+
INSERT INTO `tbl_server_grp` (group_name) VALUES (?) AS newGroup
202+
ON DUPLICATE KEY UPDATE group_name=newGroup.group_name;
203203
]] )
204204
addServerGroup:setString(1, MSync.settings.data.serverGroup)
205205

206206
function addServerGroup.onSuccess()
207207
local addServer = MSync.DBServer:prepare( [[
208-
INSERT INTO `tbl_msync_servers` (server_name, ip, port, server_group)
209-
VALUES (?,?,?,
210-
(SELECT p_group_id FROM tbl_server_grp WHERE group_name=?)
211-
)
212-
ON DUPLICATE KEY UPDATE server_name=VALUES(server_name), server_group=VALUES(server_group);
208+
INSERT INTO `tbl_msync_servers` (server_name, ip, `port`, server_group)
209+
SELECT * FROM (
210+
SELECT ? AS newServerName, ? AS ip, ? AS `port`, tbl_server_grp.p_group_id AS newGroup
211+
FROM tbl_server_grp
212+
WHERE
213+
tbl_server_grp.group_name=?
214+
) AS dataQuery
215+
ON DUPLICATE KEY UPDATE server_name=newServerName, server_group=newGroup;
213216
]] )
214217

215218
local hostname = GetHostName()

0 commit comments

Comments
 (0)