Edgewall Software

Ticket #5120: mysql-params-5120-4.patch

File mysql-params-5120-4.patch, 2.7 KB (added by thijstriemstra, 17 months ago)

against 0.13-trunk r10394

  • trac/db/mysql_backend.py

     
    6363     
    6464    Database URLs should be of the form: 
    6565    {{{ 
    66     mysql://user[:password]@host[:port]/database 
     66    mysql://user[:password]@host[:port]/database[?param1=value&param2=value] 
    6767    }}} 
    6868    """ 
    6969    implements(IDatabaseConnector) 
     
    186186        db_name = os.path.basename(db_prop['path']) 
    187187 
    188188        args = [self.mysqldump_path] 
     189        for param in ['read_default_file', 'named_pipe', 'compress', 
     190                      'unix_socket']: 
     191            if 'params' in db_prop and param in db_prop['params']: 
     192                val = db_prop['params'][param] 
     193                if param == 'compress' and val == 1: 
     194                    args.extend(['--compress']) 
     195                elif param == 'unix_socket': 
     196                    args.extend(['--socket', val]) 
     197                    args.extend(['--protocol', 'socket']) 
     198                elif param == 'named_pipe' and val == 1: 
     199                    args.extend(['--protocol', 'pipe']) 
     200                elif param == 'read_default_file': 
     201                    args.extend(['--defaults-file=', val]) 
    189202        if 'host' in db_prop: 
    190203            args.extend(['-h', db_prop['host']]) 
    191204        if 'port' in db_prop: 
     
    193206        if 'user' in db_prop: 
    194207            args.extend(['-u', db_prop['user']]) 
    195208        args.extend(['-r', dest_file, db_name]) 
    196          
    197209        environ = os.environ.copy() 
    198210        if 'password' in db_prop: 
    199211            environ['MYSQL_PWD'] = str(db_prop['password']) 
     
    225237            password = '' 
    226238        if port == None: 
    227239            port = 3306 
    228         cnx = MySQLdb.connect(db=path, user=user, passwd=password, 
    229                               host=host, port=port, charset='utf8') 
     240        opt = {} 
     241        for param in ['compress', 'named_pipe', 'init_command', 
     242                      'read_default_file', 'read_default_group', 
     243                      'unix_socket']: 
     244            if params.has_key(param): 
     245                val = params[param] 
     246                if param in ('compress', 'named_pipe'): 
     247                    try: 
     248                        opt[param] = int(val) 
     249                    except ValueError: 
     250                        pass 
     251                else: 
     252                    opt[param] = val 
     253        cnx = MySQLdb.connect(db=path, user=user, passwd=password, host=host, 
     254                              port=port, charset='utf8', **opt) 
    230255        if hasattr(cnx, 'encoders'): 
    231256            # 'encoders' undocumented but present since 1.2.1 (r422) 
    232257            cnx.encoders[Markup] = cnx.encoders[types.UnicodeType]