@@ -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
0 commit comments