if (typeof( ShowCFDebugSQL ) == "undefined"){
function ShowCFDebugSQL(){
var arrTable = document.getElementsByTagName( "table" );
var arrPre = null;
var objCFDebugTable = null;
var arrRawData = new Array();
var objRawData = null;
var objFrame = document.createElement( "textarea" );
var i = 0;
for (i = 0 ; i < arrTable.length ; i++){
if (
arrTable[ i ].className &&
(arrTable[ i ].className == "cfdebug")
){
objCFDebugTable = arrTable[ i ];
break;
}
}
if (objCFDebugTable){
arrPre = objCFDebugTable.getElementsByTagName( "pre" );
for (i = 0 ; i < arrPre.length ; i++){
if( arrPre[ i ].innerHTML.match( new RegExp( "SELECT|INSERT|DELETE|JOIN|WHERE", "i" ) ) ){
objRawData = new Object();
objRawData.SQL = arrPre[ i ].innerHTML;
objRawData.Params = "";
if (
(arrPre[ i ].nextSibling.nodeType == 1) &&
(arrPre[ i ].nextSibling.tagName.toLowerCase() == "code")
){
if (arrPre[ i ].nextSibling.innerHTML.match( new RegExp( "^Query Param", "i" ) )){
objRawData.Params = arrPre[ i ].nextSibling.innerHTML;
}
} else if (
(arrPre[ i ].nextSibling.nextSibling.nodeType == 1) &&
(arrPre[ i ].nextSibling.nextSibling.tagName.toLowerCase() == "code")
){
if (arrPre[ i ].nextSibling.nextSibling.innerHTML.match( new RegExp( "^Query Param", "i" ) )){
objRawData.Params = arrPre[ i ].nextSibling.nextSibling.innerHTML;
}
}
if (objRawData.Params.length > 0){
objRawData.Params = ParseParams( objRawData.Params );
arrRawData[ arrRawData.length ] = objRawData;
} else {
alert(
"I found a SQL query that does not have query params:\n\n" +
objRawData.SQL.replace( new RegExp( "\\s+", "g" ), " " ).substring( 0, 150 ) + "...\n\n" +
"This will not be included in the result."
);
}
}
}
if (arrRawData.length > 0){
objFrame.style.backgroundColor = "#FAFAFA";
objFrame.style.border = "4px solid #FAB60A";
objFrame.style.color = "#000000";
objFrame.style.fontFamily = "monospace, verdana";
objFrame.style.fontSize = "12px";
objFrame.style.height = "500px";
objFrame.style.left = "0px";
objFrame.style.padding = "15px 15px 15px 15px";
objFrame.style.position = "absolute";
objFrame.style.top = "0px";
objFrame.style.width = "90%";
objFrame.ondblclick = function(){ this.parentNode.removeChild( this ); };
objFrame.value += "+------------------------------------------------------------------------+\n";
objFrame.value += "| Kinky Solutions ColdFusion SQL Debug Parser |\n";
objFrame.value += "| Written by Ben Nadel @ 2007 |\n";
objFrame.value += "| http://www.bennadel.com |\n";
objFrame.value += "+------------------------------------------------------------------------+\n\n";
objFrame.value += "**** DOUBLE-CLICK TO CLOSE TEXT AREA ****\n\n\n";
for (i = 0 ; i < arrRawData.length ; i++){
objFrame.value += ReplaceParams(
arrRawData[ i ].SQL,
arrRawData[ i ].Params
).replace(
new RegExp( "<", "gi" ), "<"
).replace(
new RegExp( ">", "gi" ), ">"
);
objFrame.value += "\n\n\n+--- END SQL STATEMENT --------------------------------------------------+\n\n\n";
}
document.getElementsByTagName( "body" )[ 0 ].appendChild(
objFrame
);
}
} else {
alert(
"I could not find the ColdFusion debugging information.\n" +
"Try turnning on debugging and running again."
);
}
}
function ReplaceParams( strSQL, arrParams ){
var intCounter = 0;
return(
strSQL.replace(
new RegExp( "\\?", "g" ),
function(){
var strReturn = "";
if (intCounter < arrParams.length){
strReturn = arrParams[ intCounter ].Value;
if (!arrParams[ intCounter ].Type.match( new RegExp( "INT|NUMERIC|FLOAT|DECIMAL|DOUBLE|BIT|REAL", "i" ) )){
strReturn = (
"'" +
strReturn.replace(
new RegExp( "'", "g" ),
"''"
) +
"'"
);
}
intCounter++;
}
return( strReturn );
}
)
);
}
function ParseParams( strData ){
var arrParams = new Array();
strData.replace(
new RegExp(
"Parameter\\s#(\\d+)\\(([\\w_]+)\\)\\s*=\\s*([^\\r\\n]*)",
"gi"
),
function( $0, $1, $2, $3 ){
var objParam = new Object();
objParam.ID = $1;
objParam.Type = $2;
objParam.Value = ($3).replace( new RegExp( "<br\\s*/?>$", "gi" ), "" );
arrParams[ arrParams.length ] = objParam;
}
);
return( arrParams );
}
}