Skip to content
This repository was archived by the owner on Oct 14, 2021. It is now read-only.

Commit 9744cd2

Browse files
author
captain1242
committed
MySQL Bugfixes
- Added new way of adding players to the Rank Table - Fixed bug with doubled entrys - Optimized the SQL - Saving DB version now inside a DB table and local - Update from MRSync A 1.3 to A 1.5 - Update from MSync 1.3 to 1.4 - Update DB from 1.3 to 1.4
1 parent c64d11f commit 9744cd2

File tree

3 files changed

+104
-58
lines changed

3 files changed

+104
-58
lines changed

lua/autorun/server/sv_msync_util.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ MSync.Bans = MSync.Bans or {}
33
MSync.Settings = MSync.Settings or {}
44
MSync.ULX = MSync.ULX or {}
55
MSync.AllowedGroups = MSync.AllowedGroups or {}
6-
MSync.version = "A 1.3"
7-
MSync.DBVersion = 1.3
6+
MSync.version = "A 1.4"
7+
MSync.DBVersion = 1.4
88
MSync.MBsyncVersion = "A 1.0"
9-
MSync.MRsyncVersion = "A 1.3"
9+
MSync.MRsyncVersion = "A 1.5"
1010
MSync.xgui_panelVersion = "A 1.5"
1111

1212
concommand.Add( "msync_version", function( ply, cmd, args )

lua/msync/mrsync_sql.lua

Lines changed: 67 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
if(table.HasValue(MSync.Settings.EnabledModules, "MRSync")) then
22
print("[MRSync] Loading...")
3-
3+
local serverGroup = serverGroup or MSync.Settings.Servergroup
44
-- Function to load a Players Rank
55
function MSync.LoadRank(ply)
66
print("[MRSync] Loading player rank...")
7-
local queryQ = MSync.DB:query("SELECT * FROM `mrsync` WHERE steamid = '" .. ply:SteamID() .. "' AND (`servergroup` = '" .. MSync.Settings.Servergroup .. "' OR `servergroup` = 'allserver')")
7+
local queryQ = MSync.DB:query([[SELECT * FROM `]]..MSync.TableNameRanks..[[` WHERE steamid = ']] .. ply:SteamID64() .. [[' AND (`servergroup` = ']] .. MSync.Settings.Servergroup .. [[' OR `servergroup` = 'allserver')]])
88
queryQ.onData = function(Q,D)
99
queryQ.onSuccess = function(q)
1010
if checkQuery(q) then
@@ -13,19 +13,10 @@ if(table.HasValue(MSync.Settings.EnabledModules, "MRSync")) then
1313
if( ply:IsUserGroup(D.groups)) then
1414

1515
print("[MRSync] User "..ply:GetName().." is already in their group!")
16-
17-
elseif(D.groups=="user") then
18-
19-
RunConsoleCommand( 'ulx', 'removeuserid', ply:SteamID() )
20-
print("[MRSync] Adding "..ply:GetName().." to group "..D.groups)
21-
MSync.PrintToAll(Color(255,255,255),"Adding "..ply:GetName().." to group "..D.groups)
22-
2316
else
24-
17+
ply:SetUserGroup( D.groups )
2518
print("[MRSync] Adding "..ply:GetName().." to group "..D.groups)
26-
RunConsoleCommand( 'ulx', 'adduserid', ply:SteamID(),D.groups )
2719
MSync.PrintToAll(Color(255,255,255),"Adding "..ply:GetName().." to group "..D.groups)
28-
2920
end
3021
end
3122
end
@@ -38,64 +29,85 @@ if(table.HasValue(MSync.Settings.EnabledModules, "MRSync")) then
3829
function MSync.SaveRank(ply)
3930
print("[MRSync] Saving player rank...")
4031
local plyTable = {
41-
steamid = ply:SteamID(),
32+
steamid = ply:SteamID64(),
4233
rank = ply:GetUserGroup(),
4334
name = ply:GetName()
4435
}
45-
46-
local deleteQ = MSync.DB:query("DELETE FROM `mrsync` WHERE `steamid` = '" .. plyTable.steamid .. "' AND (`servergroup` = '" .. MSync.Settings.Servergroup .. "' OR `servergroup` = 'allserver')")
47-
deleteQ.onSuccess = function(q)
48-
if checkQuery(q) then
49-
print ("[MRSync] User "..plyTable.name.." already exists")
50-
end
36+
37+
local transaction = MSync.DB:createTransaction()
38+
39+
if(table.HasValue(MSync.Settings.mrsync.AllServerRanks,plyTable.rank))then
40+
41+
serverGroup = "allserver"
42+
43+
local preventDoubleEntrys = MSync.DB:query([[DELETE FROM `]]..MSync.TableNameRanks..[[` WHERE steamid=']]..plyTable.steamid..[[' and not servergroup='allserver']])
44+
transaction:addQuery(preventDoubleEntrys)
45+
46+
else
47+
48+
serverGroup = MSync.Settings.Servergroup
49+
50+
local preventDoubleEntrys = MSync.DB:query([[DELETE FROM `]]..MSync.TableNameRanks..[[` WHERE steamid=']]..plyTable.steamid..[[' and servergroup='allserver']])
51+
transaction:addQuery(preventDoubleEntrys)
52+
5153
end
52-
deleteQ:start()
53-
54-
55-
if not(table.HasValue(MSync.Settings.mrsync.AllServerRanks,plyTable.rank)) and not(table.HasValue(MSync.Settings.mrsync.IgnoredRanks,plyTable.rank)) then
56-
57-
local InsertQ = MSync.DB:query("INSERT INTO `mrsync` (`steamid`, `groups`, `servergroup`) VALUES ('"..plyTable.steamid.."', '"..plyTable.rank.."','"..MSync.Settings.Servergroup.."')")
58-
InsertQ.onError = function(Q,E) print("Q1") print(E) end
59-
InsertQ:start()
60-
print ("[MRSync] User "..plyTable.name.." got saved")
61-
62-
elseif(table.HasValue(MSync.Settings.mrsync.AllServerRanks,plyTable.rank)) and not(table.HasValue(MSync.Settings.mrsync.IgnoredRanks,plyTable.rank)) then
63-
64-
local InsertQ = MSync.DB:query("INSERT INTO `mrsync` (`steamid`, `groups`, `servergroup`) VALUES ('"..plyTable.steamid.."', '"..plyTable.rank.."','allserver')")
65-
InsertQ.onError = function(Q,E) print("Q1") print(E) end
66-
InsertQ:start()
67-
print ("[MRSync] User "..plyTable.name.." SID: "..ply:SteamID().." got saved [A]")
6854

55+
if not(table.HasValue(MSync.Settings.mrsync.IgnoredRanks,plyTable.rank)) then
56+
57+
local InsertQ = MSync.DB:query([[INSERT into `]]..MSync.TableNameRanks..[[`
58+
(`steamid`, `groups`, `servergroup`)
59+
VALUES (']]..plyTable.steamid..[[', ']]..plyTable.rank..[[',']]..serverGroup..[[')
60+
ON DUPLICATE KEY UPDATE groups=VALUES(groups)]]
61+
)
62+
transaction:addQuery(InsertQ)
63+
64+
transaction.onError = function (tr, err) print("[MRSync] User creation/update failed: " .. err) end
65+
transaction.onSuccess = function ()
66+
print ("[MRSync] User "..plyTable.name.." got saved")
67+
end
68+
transaction:start()
69+
6970
end
7071

7172
end
7273
-- Function to save all users
7374
function MSync.SaveAllRanks()
7475
print("[MRSync] Saving player ranks...")
7576
local plyTable = player.GetAll()
77+
7678
for k,v in pairs(plyTable) do
77-
78-
local deleteQ = MSync.DB:query("DELETE FROM `mrsync` WHERE `steam` = '" .. v:SteamID() .. "' AND `servergroup` = '" .. MSync.Settings.Servergroup .. "' OR `servergroup` = 'allserver'")
79-
deleteQ.onSuccess = function(q)
80-
if checkQuery(q) then
81-
print("[MRSync] Saving users...")
82-
end
79+
80+
local transaction = MSync.DB:createTransaction()
81+
82+
if(table.HasValue(MSync.Settings.mrsync.AllServerRanks,v:GetUserGroup()))then
83+
serverGroup = "allserver"
84+
85+
local preventDoubleEntrys = MSync.DB:query([[DELETE FROM `]]..MSync.TableNameRanks..[[` WHERE steamid=']]..v:SteamID64()..[[' and not servergroup='allserver']])
86+
transaction:addQuery(preventDoubleEntrys)
87+
88+
else
89+
serverGroup = MSync.Settings.Servergroup
90+
91+
local preventDoubleEntrys = MSync.DB:query([[DELETE FROM `]]..MSync.TableNameRanks..[[` WHERE steamid=']]..v:SteamID64()..[[' and servergroup='allserver']])
92+
transaction:addQuery(preventDoubleEntrys)
93+
8394
end
84-
deleteQ:start()
85-
86-
87-
if not(table.HasValue(MSync.Settings.mrsync.AllServerRanks,v:GetUserGroup())) and not(table.HasValue(MSync.Settings.mrsync.IgnoredRanks,v:GetUserGroup())) then
88-
89-
local InsertQ = MSync.DB:query("INSERT INTO `mrsync` (`steamid`, `groups`, `servergroup`) VALUES ('"..v:SteamID().."', '"..v:GetUserGroup().."','"..MSync.Settings.Servergroup.."')")
90-
InsertQ.onError = function(Q,E) print("Q1") print(E) end
91-
InsertQ:start()
92-
93-
elseif(table.HasValue(MSync.Settings.mrsync.AllServerRanks,v:GetUserGroup())) and not(table.HasValue(MSync.Settings.mrsync.IgnoredRanks,v:GetUserGroup())) then
94-
95-
local InsertQ = MSync.DB:query("INSERT INTO `mrsync` (`steamid`, `groups`, `servergroup`) VALUES ('"..v:SteamID().."', '"..v:GetUserGroup().."','allserver')")
96-
InsertQ.onError = function(Q,E) print("Q1") print(E) end
97-
InsertQ:start()
9895

96+
if not(table.HasValue(MSync.Settings.mrsync.IgnoredRanks,plyTable.rank)) then
97+
98+
local InsertQ = MSync.DB:query([[INSERT into `]]..MSync.TableNameRanks..[[`
99+
(`steamid`, `groups`, `servergroup`)
100+
VALUES (']]..v:SteamID64()..[[', ']]..v:GetUserGroup()..[[',']]..serverGroup..[[')
101+
ON DUPLICATE KEY UPDATE groups=VALUES(groups)]]
102+
)
103+
transaction:addQuery(InsertQ)
104+
105+
transaction.onError = function (tr, err) print("[MRSync] User creation/update failed: " .. err) end
106+
transaction.onSuccess = function ()
107+
print ("[MRSync] User "..v:GetName().." got saved")
108+
end
109+
transaction:start()
110+
99111
end
100112
end
101113

lua/msync/mysql_main.lua

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,22 @@ if(file.Exists( "bin/gmsv_mysqloo_linux.dll", "LUA" ) or file.Exists( "bin/gmsv_
3131
function MSync.checkTables(server)
3232
print("[MSync] Connected to database")
3333
print("[MSync] Checking database")
34+
35+
36+
local MSync_Version_Table = server:query([[
37+
CREATE TABLE IF NOT EXISTS `msync_db_version` (
38+
`version` float NOT NULL
39+
);
40+
SELECT * FROM `msync_db_version`
41+
]])
42+
MSync_Version_Table.onError = function(Q,E) print("Q1") print(E) end
43+
MSync_Version_Table:start()
44+
--MSync_Version_Table:wait()
45+
46+
if MSync_Version_Table:getData() then
47+
MSync.Settings.DBVersion = MSync_Version_Table:getData()[1]
48+
end
49+
3450

3551
local transaction = server:createTransaction()
3652

@@ -45,7 +61,17 @@ if(file.Exists( "bin/gmsv_mysqloo_linux.dll", "LUA" ) or file.Exists( "bin/gmsv_
4561
]])
4662
transaction:addQuery(MRSyncCT)
4763
end
64+
65+
if(MSync.Settings.DBVersion < 1.1)then
66+
local MRSyncUpdateDB = server:query([[
67+
ALTER TABLE `]]..MSync.TableNameRanks..[[`
68+
ADD UNIQUE INDEX `unq_user` (`steamid` ASC, `servergroup` ASC)
69+
]])
70+
transaction:addQuery(MRSyncUpdateDB)
71+
print("[MRSync] Going to update DB structure to v1.1")
72+
end
4873
end
74+
4975

5076
if(table.HasValue(MSync.Settings.EnabledModules, "MBSync")) then
5177

@@ -64,6 +90,7 @@ if(file.Exists( "bin/gmsv_mysqloo_linux.dll", "LUA" ) or file.Exists( "bin/gmsv_
6490
transaction:addQuery(MBSyncCT)
6591
print("[MBSync] Going to update DB structure to v1.0")
6692
end
93+
6794

6895
if (MSync.Settings.DBVersion < 1.1) then
6996
-- Add `admin_sid` column if it doesn't already exist.
@@ -133,6 +160,13 @@ if(file.Exists( "bin/gmsv_mysqloo_linux.dll", "LUA" ) or file.Exists( "bin/gmsv_
133160
end
134161
transaction:start()
135162
end
163+
164+
local MSync_Version_Table = server:query([[
165+
REPLACE INTO `msync_db_version` (version) VALUES(]]..MSync.DBVersion..[[);
166+
]])
167+
MSync_Version_Table.onError = function(Q,E) print("Q1") print(E) end
168+
MSync_Version_Table:start()
169+
--MSync_Version_Table:wait()
136170
end
137171

138172
MSync.Connect()

0 commit comments

Comments
 (0)