sourceError.html 7.5 KB
Newer Older
1
<!-- can not use doctype -->
2
<!--
Thomas Mueller's avatar
Thomas Mueller committed
3
Copyright 2004-2013 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">
//<!--

Thomas Mueller's avatar
Thomas Mueller committed
40 41
function getVersion(build) {
    if (build == 64) {
42
        return '1.0/version-1.0.' + build;
Thomas Mueller's avatar
Thomas Mueller committed
43 44 45
    } else if (build >= 146 && build != 147) {
        return '1.3.' + build;
    } else if (build >= 120) {
46
        return '1.2/version-1.2.' + build;
Thomas Mueller's avatar
Thomas Mueller committed
47
    } else if (build >= 100) {
48
        return '1.1/version-1.1.' + build;
Thomas Mueller's avatar
Thomas Mueller committed
49 50 51 52
    }
    return '1.0.' + build;
}

53
function get(id) {
54
    return document.getElementById(id);
55 56
}

57 58 59
var lastError = '';
var hasData = false;
var errorCode = '0';
60
var build = 100;
61

62
function goDetails(code) {
63 64 65 66 67
    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');
68
    get('more').src = 'http://h2database.com/javadoc/org/h2/constant/ErrorCode.html#c' + code;
69 70
}

71
function go(file, line) {
72
    var url;
73
    if (get('rawSource').checked == true) {
74 75 76 77 78 79
        url = "source.html?file=";
        url += file;
        url += "&line=";
        url += line;
        url += "&build=";
        url += build;
80
        get('file').innerHTML = file;
81
        get('code').src = url;
82
    } else {
83 84 85 86 87
        if (build && build > 0) {
            var tag = 'tags/version-' + getVersion(build) + '/h2';
        } else {
            var tag = 'trunk/h2';
        }
88 89 90 91 92 93
        url = 'http://code.google.com/p/h2database/source/browse/';
        url += tag;
        url += '/src/main/';
        url += file;
        url += '#';
        url += line;
94 95
        // X-Frame-Options is now 'SAMEORIGIN'
        window.open(url);
96
    }
97 98 99
}

function convert() {
100
    try {
101
        var s = get('error').value;
102 103 104 105 106 107 108 109
        if(lastError == s) {
            return;
        }
        lastError = s;
        var result = '';
        hasData = false;
        var idx = s.lastIndexOf("[");
        if (idx >= 0) {
110
            get('message').innerHTML = s.substring(0, idx);
111 112 113 114
            var end = s.indexOf("]", idx);
            errorCode = s.substring(idx + 1, end);
            hasData = true;
            idx = errorCode.indexOf("-");
115
            build = parseInt(errorCode.substring(idx + 1));
Thomas Mueller's avatar
Thomas Mueller committed
116
            get('version').innerHTML = getVersion(build);
117 118 119 120
            errorCode = errorCode.substring(0, idx);
            while (errorCode.length > 1 && errorCode.charAt(0) == '0') {
                errorCode = errorCode.substring(1);
            }
121
            get('errorCode').innerHTML = errorCode;
122 123 124
            goDetails(errorCode);
        }
        idx = 0;
125 126
        s = s.replace(/\t/g, " ");
        s = s.replace(/ +/g, " ");
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
        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;
157
            result += "<" + "/a>";
158 159 160 161 162
            hasData = true;
            idx = end + 1;
        }
        result = result.replace(/[\n\r]+/g, "<br/>");
        result = result.replace(/ at /g, "");
163
        get('links').innerHTML = result;
164
        select('input');
165
    } catch(e) {
166 167
        hasData = false;
        alert('Can not parse the stack trace: ' + e);
168 169 170 171 172
    }

}

function select(id) {
173 174 175 176 177 178 179 180
    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 = '';
181 182 183 184
    if(id=='details') {
        goDetails(errorCode);
    }
    sizeTextArea();
185 186 187 188
}

function sizeTextArea() {
    var height=document.body.clientHeight;
189
    var error = get('error');
190
    error.style.height = (height - error.offsetTop - 25) + 'px';
191
    var more = get('more');
192
    more.style.height = (height - more.offsetTop - 25) + 'px';
193 194
    var code = get('code');
    code.style.height = (height - get('sourceTable').offsetTop - code.offsetTop - 30) + 'px';
195 196 197 198 199
}

//-->
</script>

200 201 202
</head>
<body style="margin:20px" onresize="sizeTextArea();" onload="sizeTextArea();" >

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