@@ -32,141 +32,172 @@ if(file.Exists( "bin/gmsv_mysqloo_linux.dll", "LUA" ) or file.Exists( "bin/gmsv_
3232 print (" [MSync] Connected to database" )
3333 print (" [MSync] Checking database" )
3434
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-
50-
51- local transaction = server :createTransaction ()
52-
53- if (table .HasValue (MSync .Settings .EnabledModules , " MRSync" )) then
54- if (MSync .Settings .DBVersion < 1.0 ) then
55- local MRSyncCT = server :query ([[
56- CREATE TABLE IF NOT EXISTS `]] .. MSync .TableNameRanks .. [[ ` (
57- `steamid` varchar(20) NOT NULL,
58- `groups` varchar(30) NOT NULL,
59- `servergroup` varchar(30) NOT NULL
60- )
61- ]] )
62- transaction :addQuery (MRSyncCT )
63- end
35+ -- Create Version Table if not Exists
36+ local MSync_Version_Table_create = server :query ([[ CREATE TABLE IF NOT EXISTS `msync_db_version` (`version` float NOT NULL)]] )
37+ MSync_Version_Table_create .onError = function (Q ,E ) print (" Q1" ) print (E ) end
38+ -- If query was successfull we call the rest
39+ MSync_Version_Table_create .onSuccess = function (data )
6440
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)
41+ -- Get the Version Table
42+ local MSync_Version_Table = server :query ([[
43+ SELECT * FROM `msync_db_version`
44+ ]] )
45+ MSync_Version_Table .onError = function (Q ,E ) print (" Q1" ) print (E ) end
46+ MSync_Version_Table .onSuccess = function (data )
47+
48+ -- Alter MSync DBVersion
49+ if (MSync .Settings .DBVersion < 1.5 )then
50+ local MSync_Version_Table = server :query ([[
51+ DELETE FROM `msync_db_version`;
52+ ALTER TABLE `msync_db_version`
53+ ADD version_index varchar(30) NOT NULL,
54+ ADD UNIQUE INDEX `unq_index` (`version_index` ASC);
55+ ]] )
56+ MSync_Version_Table .onError = function (Q ,E ) print (" Q1" ) print (E ) end
57+ MSync_Version_Table :start ()
58+
59+ MSync .Settings .RDBVersion = MSync .Settings .RDBVersion or 0
60+ MSync .Settings .BDBVersion = MSync .Settings .BDBVersion or 0
61+ end
62+
63+ -- Check if the query returned data and if so we set our local variables
64+ if MSync_Version_Table :getData ()~= nil then
65+ local version_tbl = MSync_Version_Table :getData ()
66+
67+ for k ,v in pairs (version_tbl ) do
68+ MSync .Settings [(v .version_index )] = v .version
69+ print (" [MSync] Version " .. v .version_index .. " : " .. v .version )
70+ end
71+ end
72+
73+
74+ local transaction = server :createTransaction ()
75+
76+ if (table .HasValue (MSync .Settings .EnabledModules , " MRSync" )) then
77+ if (MSync .Settings .RDBVersion < 1.0 ) then
78+ local MRSyncCT = server :query ([[
79+ CREATE TABLE IF NOT EXISTS `]] .. MSync .TableNameRanks .. [[ ` (
80+ `steamid` varchar(20) NOT NULL,
81+ `groups` varchar(30) NOT NULL,
82+ `servergroup` varchar(30) NOT NULL
83+ )
84+ ]] )
85+ transaction :addQuery (MRSyncCT )
86+ end
87+
88+ if (MSync .Settings .RDBVersion < 1.1 )then
89+ local MRSyncUpdateDB = server :query ([[
90+ ALTER TABLE `]] .. MSync .TableNameRanks .. [[ `
91+ ADD UNIQUE INDEX `unq_user` (`steamid` ASC, `servergroup` ASC)
92+ ]] )
93+ transaction :addQuery (MRSyncUpdateDB )
94+ print (" [MRSync] Going to update DB structure to v1.1" )
95+ end
96+ end
97+
98+
99+ if (table .HasValue (MSync .Settings .EnabledModules , " MBSync" )) then
100+
101+ if (MSync .Settings .BDBVersion < 1.0 ) then
102+ local MBSyncCT = server :query ([[
103+ CREATE TABLE IF NOT EXISTS `]] .. MSync .TableNameBans .. [[ ` (
104+ `steamid` varchar(20) NOT NULL,
105+ `nickname` varchar(30) NOT NULL,
106+ `admin` varchar(30) NOT NULL,
107+ `reason` varchar(30) NOT NULL,
108+ `ban_date` INT NOT NULL,
109+ `duration` INT NOT NULL,
110+ UNIQUE KEY `steamid_UNIQUE` (`steamid`)
111+ )
112+ ]] )
113+ transaction :addQuery (MBSyncCT )
114+ -- print("[MBSync] Going to update DB structure to v1.0")
115+ end
116+
117+
118+ if (MSync .Settings .BDBVersion < 1.1 ) then
119+ -- Add `admin_sid` column if it doesn't already exist.
120+ local column = ' admin_sid'
121+ local updateQuery = server :query ([[
122+ SET @preparedStatement = IF(
123+ (SELECT COUNT(*)
124+ FROM INFORMATION_SCHEMA.COLUMNS
125+ WHERE table_name = ']] .. MSync .TableNameBans .. [[ '
126+ AND table_schema = DATABASE()
127+ AND column_name = ']] .. column .. [[ '
128+ ) > 0,
129+ 'SELECT 1;',
130+ 'ALTER TABLE `]] .. MSync .TableNameBans .. [[ ` ADD `]] .. column .. [[ ` VARCHAR(20) AFTER `nickname`;'
131+ );
132+ PREPARE alterIfNotExists FROM @preparedStatement;
133+ EXECUTE alterIfNotExists;
134+ DEALLOCATE PREPARE alterIfNotExists;
135+ ]] )
136+ transaction :addQuery (updateQuery )
137+ print (" [MBSync] Going to update DB structure to v1.1" )
138+ end
139+
140+ if (MSync .Settings .BDBVersion < 1.2 ) then
141+ -- Rename some columns, allow NULLs, increase VARCHAR sizes and change INTs to unsigned
142+ local updateQuery = server :query ([[
143+ ALTER TABLE `]] .. MSync .TableNameBans .. [[ `
144+ CHANGE COLUMN `nickname` `name` VARCHAR(32),
145+ CHANGE COLUMN `admin` `staff_name` VARCHAR(32) NOT NULL,
146+ CHANGE COLUMN `admin_sid` `staff_steamid` VARCHAR(20),
147+ MODIFY `reason` VARCHAR(255) NOT NULL,
148+ MODIFY `ban_date` INT UNSIGNED NOT NULL,
149+ MODIFY `duration` INT UNSIGNED NOT NULL;
150+ ]] )
151+ transaction :addQuery (updateQuery )
152+ print (" [MBSync] Going to update DB structure to v1.2" )
153+ end
154+
155+ if (MSync .Settings .BDBVersion < 1.3 ) then
156+ -- Drop the unique on `steamid`, add auto-incrementing `id` and set it as new PK
157+ local updateQuery = server :query ([[
158+ ALTER TABLE `]] .. MSync .TableNameBans .. [[ `
159+ DROP INDEX steamid_UNIQUE,
160+ ADD `id` INT PRIMARY KEY AUTO_INCREMENT FIRST,
161+ ADD INDEX steamid_INDEX (`steamid`);
162+ ]] )
163+ transaction :addQuery (updateQuery )
164+ print (" [MBSync] Going to update DB structure to v1.3" )
165+ end
166+
167+ end
168+ --[[ if(table.HasValue(MSync.Settings.EnabledModules, "MPSync")) then
169+ //Ranks
170+ //Permissions
171+ //Rank ID and Permission ID
172+ //Servers
173+ //Server id and Permission ID
174+ end]] --
175+
176+ -- Start the transaction, if any queries were added to it
177+ if transaction :getQueries () ~= nil then
178+ transaction .onError = function (tr , err ) print (" [MSync] Database creation/update failed: " .. err ) end
179+ transaction .onSuccess = function ()
180+ MSync .Settings .DBVersion = MSync .DBVersion
181+ MSync .Settings .RDBVersion = MSync .RDBVersion
182+ MSync .Settings .BDBVersion = MSync .BDBVersion
183+ MSync .SaveSettings ()
184+ print (" [MSync] Database upgrade successful, current DB schema version " .. MSync .DBVersion )
185+ end
186+ transaction :start ()
187+ end
188+
189+ local MSync_Version_Table = server :query ([[
190+ INSERT into `msync_db_version` (`version`,`version_index`) VALUES (']] .. MSync .DBVersion .. [[ ','DBVersion') ON DUPLICATE KEY UPDATE version=VALUES(version);
191+ INSERT into `msync_db_version` (`version`,`version_index`) VALUES (']] .. MSync .RDBVersion .. [[ ','RDBVersion') ON DUPLICATE KEY UPDATE version=VALUES(version);
192+ INSERT into `msync_db_version` (`version`,`version_index`) VALUES (']] .. MSync .BDBVersion .. [[ ','BDBVersion') ON DUPLICATE KEY UPDATE version=VALUES(version)
69193 ]] )
70- transaction :addQuery (MRSyncUpdateDB )
71- print (" [MRSync] Going to update DB structure to v1.1" )
194+ MSync_Version_Table .onError = function (Q ,E ) print (" Q1" ) print (E ) end
195+ MSync_Version_Table :start ()
196+ -- MSync_Version_Table:wait()
72197 end
198+ MSync_Version_Table :start ()
73199 end
74-
75-
76- if (table .HasValue (MSync .Settings .EnabledModules , " MBSync" )) then
77-
78- if (MSync .Settings .DBVersion < 1.0 ) then
79- local MBSyncCT = server :query ([[
80- CREATE TABLE IF NOT EXISTS `]] .. MSync .TableNameBans .. [[ ` (
81- `steamid` varchar(20) NOT NULL,
82- `nickname` varchar(30) NOT NULL,
83- `admin` varchar(30) NOT NULL,
84- `reason` varchar(30) NOT NULL,
85- `ban_date` INT NOT NULL,
86- `duration` INT NOT NULL,
87- UNIQUE KEY `steamid_UNIQUE` (`steamid`)
88- )
89- ]] )
90- transaction :addQuery (MBSyncCT )
91- print (" [MBSync] Going to update DB structure to v1.0" )
92- end
93-
94-
95- if (MSync .Settings .DBVersion < 1.1 ) then
96- -- Add `admin_sid` column if it doesn't already exist.
97- local column = ' admin_sid'
98- local updateQuery = server :query ([[
99- SET @preparedStatement = IF(
100- (SELECT COUNT(*)
101- FROM INFORMATION_SCHEMA.COLUMNS
102- WHERE table_name = ']] .. MSync .TableNameBans .. [[ '
103- AND table_schema = DATABASE()
104- AND column_name = ']] .. column .. [[ '
105- ) > 0,
106- 'SELECT 1;',
107- 'ALTER TABLE `]] .. MSync .TableNameBans .. [[ ` ADD `]] .. column .. [[ ` VARCHAR(20) AFTER `nickname`;'
108- );
109- PREPARE alterIfNotExists FROM @preparedStatement;
110- EXECUTE alterIfNotExists;
111- DEALLOCATE PREPARE alterIfNotExists;
112- ]] )
113- transaction :addQuery (updateQuery )
114- print (" [MBSync] Going to update DB structure to v1.1" )
115- end
116-
117- if (MSync .Settings .DBVersion < 1.2 ) then
118- -- Rename some columns, allow NULLs, increase VARCHAR sizes and change INTs to unsigned
119- local updateQuery = server :query ([[
120- ALTER TABLE `]] .. MSync .TableNameBans .. [[ `
121- CHANGE COLUMN `nickname` `name` VARCHAR(32),
122- CHANGE COLUMN `admin` `staff_name` VARCHAR(32) NOT NULL,
123- CHANGE COLUMN `admin_sid` `staff_steamid` VARCHAR(20),
124- MODIFY `reason` VARCHAR(255) NOT NULL,
125- MODIFY `ban_date` INT UNSIGNED NOT NULL,
126- MODIFY `duration` INT UNSIGNED NOT NULL;
127- ]] )
128- transaction :addQuery (updateQuery )
129- print (" [MBSync] Going to update DB structure to v1.2" )
130- end
131-
132- if (MSync .Settings .DBVersion < 1.3 ) then
133- -- Drop the unique on `steamid`, add auto-incrementing `id` and set it as new PK
134- local updateQuery = server :query ([[
135- ALTER TABLE `]] .. MSync .TableNameBans .. [[ `
136- DROP INDEX steamid_UNIQUE,
137- ADD `id` INT PRIMARY KEY AUTO_INCREMENT FIRST,
138- ADD INDEX steamid_INDEX (`steamid`);
139- ]] )
140- transaction :addQuery (updateQuery )
141- print (" [MBSync] Going to update DB structure to v1.3" )
142- end
143-
144- end
145- --[[ if(table.HasValue(MSync.Settings.EnabledModules, "MPSync")) then
146- //Ranks
147- //Permissions
148- //Rank ID and Permission ID
149- //Servers
150- //Server id and Permission ID
151- end]] --
152-
153- -- Start the transaction, if any queries were added to it
154- if transaction :getQueries () ~= nil then
155- transaction .onError = function (tr , err ) print (" [MSync] Database creation/update failed: " .. err ) end
156- transaction .onSuccess = function ()
157- MSync .Settings .DBVersion = MSync .DBVersion
158- MSync .SaveSettings ()
159- print (" [MSync] Database upgrade successful, current DB schema version " .. MSync .DBVersion )
160- end
161- transaction :start ()
162- 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()
200+ MSync_Version_Table_create :start ()
170201 end
171202
172203 MSync .Connect ()
0 commit comments