Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import fnmatch
- import subprocess
- db_user='mangos'
- db_password='mangos'
- mangos_db='mangos_udb'
- character_db='mangos_character'
- realmd_db='mangos_realmd'
- sql_path='/opt/mangos/dat/mangos/sql/updates/'
- class sqlUpdate:
- def __init__(self, rev, fnum, name):
- self.rev = rev
- self.fnum = fnum
- self.name = name
- def __cmp__(self,other):
- res = cmp(self.rev, other.rev)
- if res != 0:
- return res
- res = cmp(self.fnum, other.fnum)
- if res != 0:
- return res
- # should not happen, but did already happen, go by full of filename for consistent order
- return cmp(self.name, other.name)
- def parseFileName(filename):
- token = filename.split('_')
- # some files are rev_num_db.sql instead of rev_num_db_table.sql:
- if len(token) == 3:
- token2 = token[2].split('.')
- token[2] = token2[0]
- return int(token[0]), int(token[1]), token[2]
- def queryVersion(query, db_name):
- command = ['mysql', '-u', db_user, '-p%s'%db_password, '-ss', '-e', query, db_name]
- stdoutdata, stderrdata = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()
- last_update=stdoutdata.split()[0]
- print last_update
- last_update_tokens = last_update.split('_')
- return sqlUpdate(int(last_update_tokens[1]), int(last_update_tokens[2]), last_update)
- files = os.listdir(sql_path)
- sqlupdates = fnmatch.filter(files, '*.sql')
- #=== find current db versions ===
- worldstate = queryVersion('SHOW COLUMNS FROM db_version LIKE \'required%\'', mangos_db)
- charstate = queryVersion('SHOW COLUMNS FROM character_db_version LIKE \'required%\'', character_db)
- realmdstate = queryVersion('SHOW COLUMNS FROM realmd_db_version LIKE \'required%\'', realmd_db)
- world_updates = []
- char_updates = []
- realmd_updates = []
- for i in sqlupdates:
- rev, num, db = parseFileName(i)
- ufile = sqlUpdate(rev, num, i)
- if db == 'mangos':
- if ufile > worldstate:
- world_updates.append(ufile)
- elif db == 'characters':
- if ufile > charstate:
- char_updates.append(ufile)
- elif db == 'realmd':
- if ufile > realmdstate:
- realmd_updates.append(ufile)
- else: print "Error: file does not follow naming conventions:" + ufile.name
- print 'Updating world DB...'
- world_updates.sort()
- for i in world_updates:
- print 'Applying: ' + i.name
- command = ['mysql', '-u', db_user, '-p%s'%db_password, mangos_db]
- subprocess.Popen(command, stdin=open(sql_path + i.name,'r')).communicate()
- print 'Updating character DB...'
- char_updates.sort()
- for i in char_updates:
- print 'Applying: ' + i.name
- command = ['mysql', '-u', db_user, '-p%s'%db_password, character_db]
- subprocess.Popen(command, stdin=open(sql_path + i.name,'r')).communicate()
- print 'Updating realmd DB...'
- world_updates.sort()
- for i in realmd_updates:
- print 'Applying: ' + i.name
- command = ['mysql', '-u', db_user, '-p%s'%db_password, realmd_db]
- subprocess.Popen(command, stdin=open(sql_path + i.name,'r')).communicate()
Add Comment
Please, Sign In to add comment