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
98
99
100
101
102
103
104
105
106
107
|
diff --git a/trac/db/mysql_backend.py b/trac/db/mysql_backend.py
--- a/trac/db/mysql_backend.py
+++ b/trac/db/mysql_backend.py
@@ -121,7 +121,9 @@
name = '`%s`' % c
table_col = filter((lambda x: x.name == c), table.columns)
if len(table_col) == 1 and table_col[0].type.lower() == 'text':
- if name == '`rev`':
+ if table_col[0].key_size is not None:
+ name += '(%d)' % table_col[0].key_size
+ elif name == '`rev`':
name += '(20)'
elif name == '`path`':
name += '(255)'
diff --git a/trac/db/schema.py b/trac/db/schema.py
--- a/trac/db/schema.py
+++ b/trac/db/schema.py
@@ -35,11 +35,12 @@
class Column(object):
"""Declare a table column in a database schema."""
- def __init__(self, name, type='text', size=None, unique=False,
+ def __init__(self, name, type='text', size=None, key_size=None,
auto_increment=False):
self.name = name
self.type = type
self.size = size
+ self.key_size = key_size
self.auto_increment = auto_increment
diff --git a/trac/db_default.py b/trac/db_default.py
--- a/trac/db_default.py
+++ b/trac/db_default.py
@@ -91,17 +91,17 @@
Column('value')],
Table('revision', key=('repos', 'rev'))[
Column('repos', type='int'),
- Column('rev'),
+ Column('rev', key_size=20),
Column('time', type='int64'),
Column('author'),
Column('message'),
Index(['repos', 'time'])],
Table('node_change', key=('repos', 'rev', 'path', 'change_type'))[
Column('repos', type='int'),
- Column('rev'),
- Column('path'),
+ Column('rev', key_size=20),
+ Column('path', key_size=255),
Column('node_type', size=1),
- Column('change_type', size=1),
+ Column('change_type', size=1, key_size=2),
Column('base_path'),
Column('base_rev'),
Index(['repos', 'rev'])],
diff --git a/trac/upgrades/db23.py b/trac/upgrades/db23.py
--- a/trac/upgrades/db23.py
+++ b/trac/upgrades/db23.py
@@ -15,17 +15,17 @@
Column('value')],
Table('revision', key=('repos', 'rev'))[
Column('repos'),
- Column('rev'),
+ Column('rev', key_size=20),
Column('time', type='int'),
Column('author'),
Column('message'),
Index(['repos', 'time'])],
Table('node_change', key=('repos', 'rev', 'path', 'change_type'))[
- Column('repos'),
- Column('rev'),
- Column('path'),
+ Column('repos', key_size=56),
+ Column('rev', key_size=20),
+ Column('path', key_size=255),
Column('node_type', size=1),
- Column('change_type', size=1),
+ Column('change_type', size=1, key_size=2),
Column('base_path'),
Column('base_rev'),
Index(['repos', 'rev'])]]
diff --git a/trac/upgrades/db24.py b/trac/upgrades/db24.py
--- a/trac/upgrades/db24.py
+++ b/trac/upgrades/db24.py
@@ -24,17 +24,17 @@
Column('value')],
Table('revision', key=('repos', 'rev'))[
Column('repos', type='int'),
- Column('rev'),
+ Column('rev', key_size=20),
Column('time', type='int'),
Column('author'),
Column('message'),
Index(['repos', 'time'])],
Table('node_change', key=('repos', 'rev', 'path', 'change_type'))[
Column('repos', type='int'),
- Column('rev'),
- Column('path'),
+ Column('rev', key_size=20),
+ Column('path', key_size=255),
Column('node_type', size=1),
- Column('change_type', size=1),
+ Column('change_type', size=1, key_size=2),
Column('base_path'),
Column('base_rev'),
Index(['repos', 'rev'])]]
|