sourceError.html 7.5 KB
Newer Older
1
<!-- can not use doctype -->
2
<!--
3
Copyright 2004-2010 H2 Group. Multiple-Licensed under the H2 License, Version 1.0,
4 5
and under the Eclipse Public License, Version 1.0
(http://h2database.com/html/license.html).
6 7
Initial Developer: H2 Group
-->
8 9
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
10
<title>Error Analyzer</title>
11
<link rel="stylesheet" type="text/css" href="stylesheet.css" />
12
<style type="text/css">
13 14
body {
    max-width: none;
Thomas Mueller's avatar
Thomas Mueller committed
15
    width: inherit;
16
}
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
a {
    text-decoration: underline;
    font-weight: normal;
    color: #0000ff;
}
a.selected {
    text-decoration: none;
    font-weight: bold;
    color: #000000;
}
a.disabled {
    text-decoration: none;
    font-weight: normal;
    color: lightGray;
}
32
input {
33
    vertical-align: middle;
34
}
35 36 37 38 39
</style>

<script type="text/javascript">
//<!--

40
function get(id) {
41
    return document.getElementById(id);
42 43
}

44 45 46
var lastError = '';
var hasData = false;
var errorCode = '0';
47
var build = 100;
48

49
function goDetails(code) {
50 51 52 53 54
    code = code.replace('21S', '210');
    code = code.replace('42S', '421');
    code = code.replace('HY', '50');
    code = code.replace('C', '1');
    code = code.replace('T', '2');
55
    get('more').src = 'http://h2database.com/javadoc/org/h2/constant/ErrorCode.html#c' + code;
56 57
}

58
function go(file, line) {
59
    var url;
60
    if (get('rawSource').checked == true) {
61 62 63 64 65 66
        url = "source.html?file=";
        url += file;
        url += "&line=";
        url += line;
        url += "&build=";
        url += build;
67 68 69
    } else {
        var tag = 'trunk/h2';
        if (build == 64) {
70
            tag = 'tags/version-1.0.' + build;
Thomas Mueller's avatar
Thomas Mueller committed
71
        } else if (build == 146 || build == 148) {
Thomas Mueller's avatar
Thomas Mueller committed
72
            tag = 'tags/version-1.3.' + build + '/h2';
73 74
        } else if (build >= 120) {
            tag = 'tags/version-1.2.' + build + '/h2';
75 76
        } else if (build >= 100) {
            tag = 'tags/version-1.1.' + build + '/h2';
77
        } else if (build >= 63) {
78 79 80 81 82 83 84 85 86
            tag = 'tags/version-1.0.' + build + '/h2';
        }
        url = 'http://code.google.com/p/h2database/source/browse/';
        url += tag;
        url += '/src/main/';
        url += file;
        url += '#';
        url += line;
    }
87 88
    get('file').innerHTML = file;
    get('code').src = url;
89 90 91
}

function convert() {
92
    try {
93
        var s = get('error').value;
94 95 96 97 98 99 100 101
        if(lastError == s) {
            return;
        }
        lastError = s;
        var result = '';
        hasData = false;
        var idx = s.lastIndexOf("[");
        if (idx >= 0) {
102
            get('message').innerHTML = s.substring(0, idx);
103 104 105 106
            var end = s.indexOf("]", idx);
            errorCode = s.substring(idx + 1, end);
            hasData = true;
            idx = errorCode.indexOf("-");
107
            build = parseInt(errorCode.substring(idx + 1));
108
            get('version').innerHTML = (build < 100 ? '1.0.' : (build < 120 ? '1.1.' : '1.2.')) + build;
109 110 111 112
            errorCode = errorCode.substring(0, idx);
            while (errorCode.length > 1 && errorCode.charAt(0) == '0') {
                errorCode = errorCode.substring(1);
            }
113
            get('errorCode').innerHTML = errorCode;
114 115 116 117
            goDetails(errorCode);
            s = s.substring(end + 1);
        }
        idx = 0;
118 119
        s = s.replace(/\t/g, " ");
        s = s.replace(/ +/g, " ");
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
        while (true) {
            var start = s.indexOf("at org.h2.", idx);
            if (start < 0) {
                result += s.substring(idx);
                break;
            }
            start += 3; // skip 'at '
            if (idx > 0) {
                result += s.substring(idx, start);
            }
            var end = s.indexOf(')', start);
            if (end < 0) {
                result += s.substring(idx);
                break;
            }
            var element = s.substring(start, end + 1);
            var open = element.lastIndexOf('(');
            var dotMethod = element.lastIndexOf('.', open - 1);
            var dotClass = element.lastIndexOf('.', dotMethod - 1);
            var packageName = element.substring(0, dotClass);
            var colon = element.lastIndexOf(':');
            var file = element.substring(open + 1, colon);
            var lineNumber = element.substring(colon + 1, element.length - 1);
            var fullFileName = packageName.replace(/\./g, '/') + "/" + file;
            result += "<a href='javascript:go(\"";
            result += fullFileName;
            result += "\",";
            result += lineNumber;
            result += ")'>";
            result += element;
150
            result += "<" + "/a>";
151 152 153 154 155
            hasData = true;
            idx = end + 1;
        }
        result = result.replace(/[\n\r]+/g, "<br/>");
        result = result.replace(/ at /g, "");
156
        get('links').innerHTML = result;
157
        select('input');
158
    } catch(e) {
159 160
        hasData = false;
        alert('Can not parse the stack trace: ' + e);
161 162 163 164 165
    }

}

function select(id) {
166 167 168 169 170 171 172 173
    get('input').style.display = 'none';
    get('details').style.display = 'none';
    get('source').style.display = 'none';
    get('inputTab').className = '';
    get('detailsTab').className = hasData ? '' : 'disabled';
    get('sourceTab').className = hasData ? '' : 'disabled';
    get(id + 'Tab').className = 'selected';
    get(id).style.display = '';
174 175 176 177
    if(id=='details') {
        goDetails(errorCode);
    }
    sizeTextArea();
178 179 180 181
}

function sizeTextArea() {
    var height=document.body.clientHeight;
182
    var error = get('error');
183
    error.style.height = (height - error.offsetTop - 25) + 'px';
184
    var more = get('more');
185
    more.style.height = (height - more.offsetTop - 25) + 'px';
186 187
    var code = get('code');
    code.style.height = (height - get('sourceTable').offsetTop - code.offsetTop - 30) + 'px';
188 189 190 191 192
}

//-->
</script>

193 194 195
</head>
<body style="margin:20px" onresize="sizeTextArea();" onload="sizeTextArea();" >

196
<h1>Error Analyzer</h1>
197
<b><a href="../html/main.html">Home</a></b><br />
198
<h2>
Thomas Mueller's avatar
Thomas Mueller committed
199 200 201
    <a href="javascript:select('input')" id = "inputTab">Input</a>&nbsp;
    <a href="javascript:select('details')" id = "detailsTab">Details</a>&nbsp;
    <a href="javascript:select('source')" id = "sourceTab">Source Code</a>
202 203
</h2>
<hr/>
Thomas Mueller's avatar
Thomas Mueller committed
204
<div id = "input">
205
    <p>Paste the error message and stack trace below and click on 'Details' or 'Source Code': </p>
Thomas Mueller's avatar
Thomas Mueller committed
206
    <textarea id = "error" cols="100" style="width: 100%; overflow: auto;" rows="20"
207 208 209 210 211 212 213 214
        onChange="convert()"
        onSelect="convert()"
        onKeyUp="convert()"
        onKeyPress="convert()"
        onFocus="convert()"
        onBlur="convert()"
    >
    </textarea>
215
</div>
Thomas Mueller's avatar
Thomas Mueller committed
216 217 218
<div id = "details">
    <p><b>Error Code: </b><span id = "errorCode"></span></p>
    <p><b>Product Version: </b><span id = "version"></span></p>
219
    <p><b>Message: </b></p>
Thomas Mueller's avatar
Thomas Mueller committed
220
    <p id = "message"></p>
221
    <p><b>More Information:</b></p>
Thomas Mueller's avatar
Thomas Mueller committed
222
    <iframe id = "more" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="100px" src="">
223
    </iframe>
224
</div>
Thomas Mueller's avatar
Thomas Mueller committed
225 226
<div id = "source">
    <table id = "sourceTable" style="border:0px" width="100%"><tr>
227 228
    <td style="border:0px" width="30px">
        <p><b>Stack Trace: </b></p>
Thomas Mueller's avatar
Thomas Mueller committed
229
        <p id = "links"></p>
230
    </td><td style="border:0px" width="90%">
Thomas Mueller's avatar
Thomas Mueller committed
231 232 233
        <p><b>Source File: </b><span id = "file"></span><br />
        Raw file <input type="checkbox" id = "rawSource" /> (fast; only Firefox)</p>
        <iframe id = "code" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="100px" src="">
234 235 236
        </iframe>
    </td>
    </tr></table>
237 238 239 240 241 242
</div>
<script type="text/javascript">
//<!--
select('input');
//-->
</script>
243 244
<!-- analytics -->
</body></html>