~maria-captains/mariadb-tools/trunk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import gdb.printing

# in python2 gdb.Value can only be converted to long(), python3 only has int()
try: a=long(1)
except: long=int

def PrettyPrinter(arg):

    name = getattr(arg, '__name__', arg)

    def PrettyPrinterWrapperWrapperWrapper(func):

        class PrettyPrinterWrapperWrapper:

            class PrettyPrinterWrapper:
                def __init__(self, prefix, val, cb):
                    self.prefix = prefix
                    self.val = val
                    self.cb = cb
                def to_string(self):
                    return self.prefix + self.cb(self.val)

            def __init__(self, name, cb):
                self.name = name
                self.enabled = True
                self.cb = cb

            def __call__(self, val):
                prefix = ''
                if val.type.code == gdb.TYPE_CODE_PTR:
                    prefix = '({}) {:#08x} '.format(str(val.type), long(val))
                    try: val = val.dereference()
                    except: return None
                valtype=val.type.unqualified()
                if valtype.name == self.name:
                    return self.PrettyPrinterWrapper(prefix, val, self.cb)
                if valtype.strip_typedefs().name == self.name:
                    return self.PrettyPrinterWrapper(prefix, val, self.cb)
                return None

        pp=PrettyPrinterWrapperWrapper(name, func)
        gdb.printing.register_pretty_printer(None, pp, True)
        return func

    if callable(arg):
        return PrettyPrinterWrapperWrapperWrapper(arg)

    return PrettyPrinterWrapperWrapperWrapper

@PrettyPrinter
def String(val):
    return '_' + val['str_charset']['name'].string() + \
           ' "' + val['Ptr'].string('ascii', 'strict',
                    val['str_length']) + '"'

@PrettyPrinter
def st_bitmap(val):
    s=''
    for i in range((val['n_bits']+7)//8):
        s = format(int(val['bitmap'][i]), '032b') + s
    return "b'" + s[-int(val['n_bits']):] + "'"

def print_flags(val, bits):
    return ','.join([s for n,s in enumerate(bits) if val & (1 << n)])

@PrettyPrinter
def sql_mode_t(val):
    return print_flags(val, ['REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES',
        'IGNORE_SPACE', 'IGNORE_BAD_TABLE_OPTIONS', 'ONLY_FULL_GROUP_BY',
        'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE',
        'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS',
        'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI',
        'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES',
        'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE',
        'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL',
        'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION',
        'PAD_CHAR_TO_FULL_LENGTH'])

@PrettyPrinter('Alter_inplace_info::HA_ALTER_FLAGS')
def HA_ALTER_FLAGS(val):
    return print_flags(val, ['ADD_INDEX', 'DROP_INDEX', 'ADD_UNIQUE_INDEX',
        'DROP_UNIQUE_INDEX', 'ADD_PK_INDEX', 'DROP_PK_INDEX',
        'ADD_VIRTUAL_COLUMN', 'ADD_STORED_BASE_COLUMN',
        'ADD_STORED_GENERATED_COLUMN', 'DROP_VIRTUAL_COLUMN',
        'DROP_STORED_COLUMN', 'ALTER_COLUMN_NAME', 'ALTER_VIRTUAL_COLUMN_TYPE',
        'ALTER_STORED_COLUMN_TYPE', 'ALTER_COLUMN_EQUAL_PACK_LENGTH',
        'ALTER_STORED_COLUMN_ORDER', 'ALTER_VIRTUAL_COLUMN_ORDER',
        'ALTER_COLUMN_NULLABLE', 'ALTER_COLUMN_NOT_NULLABLE',
        'ALTER_COLUMN_DEFAULT', 'ALTER_VIRTUAL_GCOL_EXPR',
        'ALTER_STORED_GCOL_EXPR', 'ADD_FOREIGN_KEY', 'DROP_FOREIGN_KEY',
        'CHANGE_CREATE_OPTION', 'ALTER_RENAME', 'ALTER_COLUMN_OPTION',
        'ALTER_COLUMN_COLUMN_FORMAT', 'ADD_PARTITION', 'DROP_PARTITION',
        'ALTER_PARTITION', 'COALESCE_PARTITION', 'REORGANIZE_PARTITION',
        'ALTER_TABLE_REORG', 'ALTER_REMOVE_PARTITIONING',
        'ALTER_ALL_PARTITION', 'RECREATE_TABLE', 'ALTER_COLUMN_VCOL',
        'ALTER_PARTITIONED', 'ALTER_ADD_CHECK_CONSTRAINT',
        'ALTER_DROP_CHECK_CONSTRAINT'])