anchor.diff:  		<cfreturn loc.rv>
   	</cffunction>
   
  -	<cffunction name="$getColumnInfo" returntype="query" access="public" output="false">
  -		<cfargument name="table" type="string" required="true">
  -		<cfargument name="datasource" type="string" required="true">
  -		<cfargument name="username" type="string" required="true">
  -		<cfargument name="password" type="string" required="true">
  -		<cfscript>
  -			var loc = {};
  -			arguments.type = "columns";
  -			loc.rv = $dbinfo(argumentCollection=arguments);
  -		</cfscript>
  -		<cfreturn loc.rv>
  -	</cffunction>
  -
  -	<cffunction name="$quoteValue" returntype="string" access="public" output="false">
  -		<cfargument name="str" type="string" required="true" hint="string to quote">
  -		<cfargument name="sqlType" type="string" default="CF_SQL_VARCHAR" hint="sql column type for data">
  -		<cfargument name="type" type="string" required="false" hint="validation type for data">
  -		<cfscript>
  -			var loc = {};
  -			if (!StructKeyExists(arguments, "type"))
  -			{
  -				arguments.type = $getValidationType(arguments.sqlType);
  -			}
  -			if (!ListFindNoCase("integer,float,boolean", arguments.type) || !Len(arguments.str))
  -			{
  -				loc.rv = "'#arguments.str#'";
  -			}
  -			else
  -			{
  -				loc.rv = arguments.str;
  -			}
  -		</cfscript>
  -		<cfreturn loc.rv>
  -	</cffunction>
  -
  -	<cffunction name="$convertMaxRowsToLimit" returntype="struct" access="public" output="false">
  -		<cfargument name="args" type="struct" required="true">
  -		<cfscript>
  -			var loc = {};
  -			loc.rv = arguments.args;
  -			if (StructKeyExists(loc.rv, "maxRows") && loc.rv.maxRows > 0)
  -			{
  -				if (loc.rv.maxRows > 0)
  -				{
  -					loc.rv.limit = loc.rv.maxRows;
  -				}
  -				StructDelete(loc.rv, "maxRows");
  -			}
  -		</cfscript>
  -		<cfreturn loc.rv>
  -	</cffunction>
  -
  -	<cffunction name="$comment" returntype="string" access="public" output="false">
  -		<cfargument name="text" type="string" required="true">
  -		<cfreturn "/* " & arguments.text & " */">
  -	</cffunction>
  -
  -	<cfinclude template="../../plugins/injection.cfm">
   </cfcomponent>
positive.code: 			}
  			else
  			{
  				loc.rv = $getColumnInfo(argumentCollection=loc.args);
  			}
  		</cfscript>
  		<cfreturn loc.rv>
  	</cffunction>
  
  	<cffunction name="$getValidationType" returntype="string" access="public" output="false">
  		<cfargument name="type" type="string" required="true">
  		<cfswitch expression="#arguments.type#">
  			<cfcase value="CF_SQL_DECIMAL,CF_SQL_DOUBLE,CF_SQL_FLOAT,CF_SQL_MONEY,CF_SQL_MONEY4,CF_SQL_NUMERIC,CF_SQL_REAL" delimiters=",">
  				<cfreturn "float">
  			</cfcase>
  			<cfcase value="CF_SQL_INTEGER,CF_SQL_BIGINT,CF_SQL_SMALLINT,CF_SQL_TINYINT" delimiters=",">
  				<cfreturn "integer">
  			</cfcase>
  			<cfcase value="CF_SQL_BINARY,CF_SQL_VARBINARY,CF_SQL_LONGVARBINARY,CF_SQL_BLOB,CF_SQL_CLOB" delimiters=",">
  				<cfreturn "binary">
  			</cfcase>
  			<cfcase value="CF_SQL_DATE,CF_SQL_TIME,CF_SQL_TIMESTAMP" delimiters=",">
  				<cfreturn "datetime">
  			</cfcase>
  			<cfcase value="CF_SQL_BIT" delimiters=",">
  				<cfreturn "boolean">
  			</cfcase>
  			<cfcase value="CF_SQL_ARRAY" delimiters=",">
  				<cfreturn "array">
  			</cfcase>
  			<cfcase value="CF_SQL_STRUCT" delimiters=",">
  				<cfreturn "struct">
  			</cfcase>
  			<cfdefaultcase>
  				<cfreturn "string">
  			</cfdefaultcase>
  		</cfswitch>
  	</cffunction>
  
  	<cffunction name="$cleanInStatementValue" returntype="string" access="public" output="false">
  		<cfargument name="statement" type="string" required="true">
  		<cfscript>
  			var loc = {};
  			loc.rv = arguments.statement;
  			loc.delim = ",";
  			if (Find("'", loc.rv))
  			{
  				loc.delim = "','";
  				loc.rv = RemoveChars(loc.rv, 1, 1);
  				loc.rv = Reverse(RemoveChars(Reverse(loc.rv), 1, 1));
  				loc.rv = Replace(loc.rv, "''", "'", "all");
  			}
  			loc.rv = ReplaceNoCase(loc.rv, loc.delim, Chr(7), "all");
  		</cfscript>
  		<cfreturn loc.rv>
  	</cffunction>
  
  	<cffunction name="$CFQueryParameters" returntype="struct" access="public" output="false">
  		<cfargument name="settings" type="struct" required="true">
  		<cfscript>
  			var loc = {};
  			if (!StructKeyExists(arguments.settings, "value"))
  			{
  				$throw(type="Wheels.QueryParamValue", message="The value for `cfqueryparam` cannot be determined", extendedInfo="This is usually caused by a syntax error in the `WHERE` statement, such as forgetting to quote strings for example.");
  			}
  			loc.rv = {};
  			loc.rv.cfsqltype = arguments.settings.type;
  			loc.rv.value = arguments.settings.value;
  			if (StructKeyExists(arguments.settings, "null"))
  			{
  				loc.rv.null = arguments.settings.null;
  			}
  			if (StructKeyExists(arguments.settings, "scale") && arguments.settings.scale > 0)
  			{
  				loc.rv.scale = arguments.settings.scale;
  			}
  			if (StructKeyExists(arguments.settings, "list") && arguments.settings.list)
  			{
  				loc.rv.list = arguments.settings.list;
  				loc.rv.separator = Chr(7);
  				loc.rv.value = $cleanInStatementValue(loc.rv.value);
  			}
  		</cfscript>
  		<cfreturn loc.rv>
  	</cffunction>
  
  	<cffunction name="$performQuery" returntype="struct" access="public" output="false">
  		<cfargument name="sql" type="array" required="true">
  
negative.code: 			}
  
  			// add a key as a comment for cached queries to ensure query is unique for the life of this application
  			if (StructKeyExists(arguments, "cachedwithin"))
  			{
  				loc.comment = $comment("cachekey:#application.wheels.cachekey#");
  			}
  