anchor.diff:  			}
   
   			// add a key as a comment for cached queries to ensure query is unique for the life of this application
  -			if (StructKeyExists(arguments, "cachedwithin")) 
  +			if (StructKeyExists(arguments, "cachedwithin"))
   			{
   				loc.comment = $comment("cachekey:#application.wheels.cachekey#");
   			}
  
positive.code: 		<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>
negative.code: 			}
  			else
  			{
  				local.rv = $getColumnInfo(argumentCollection=local.args);
  			}
  			return local.rv;
  		}
  
  		public string function $getValidationType(required string type) {
  			switch(arguments.type) {
  				case "CF_SQL_DECIMAL": case "CF_SQL_DOUBLE": case "CF_SQL_FLOAT": case "CF_SQL_MONEY": case "CF_SQL_MONEY4": case "CF_SQL_NUMERIC": case "CF_SQL_REAL":
  					return "float";
  				case "CF_SQL_INTEGER": case "CF_SQL_BIGINT": case "CF_SQL_SMALLINT": case "CF_SQL_TINYINT":
  					return "integer";
  				case "CF_SQL_BINARY": case "CF_SQL_VARBINARY": case "CF_SQL_LONGVARBINARY": case "CF_SQL_BLOB": case "CF_SQL_CLOB":
  					return "binary";
  				case "CF_SQL_DATE": case "CF_SQL_TIME": case "CF_SQL_TIMESTAMP":
  					return "datetime";
  				case "CF_SQL_BIT":
  					return "boolean";
  				case "CF_SQL_ARRAY":
  					return "array";
  				case "CF_SQL_STRUCT":
  					return "struct";
  				default:
  					return "string";
  			}
  		}
  
  		public string function $cleanInStatementValue(required string statement) {
  			local.rv = arguments.statement;
  			local.delim = ",";
  			if (Find("'", local.rv))
  			{
  				local.delim = "','";
  				local.rv = RemoveChars(local.rv, 1, 1);
  				local.rv = Reverse(RemoveChars(Reverse(local.rv), 1, 1));
  				local.rv = Replace(local.rv, "''", "'", "all");
  			}
  			local.rv = ReplaceNoCase(local.rv, local.delim, Chr(7), "all");
  			return local.rv;
  		}
  
  		public struct function $CFQueryParameters(required struct settings) {
  			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.");
  			}
  			local.rv = {};
  			local.rv.cfsqltype = arguments.settings.type;
  			local.rv.value = arguments.settings.value;
  			if (StructKeyExists(arguments.settings, "null"))
  			{
  				local.rv.null = arguments.settings.null;
  			}
  			if (StructKeyExists(arguments.settings, "scale") && arguments.settings.scale > 0)
  			{
  				local.rv.scale = arguments.settings.scale;
  			}
  			if (StructKeyExists(arguments.settings, "list") && arguments.settings.list)
  			{
  				local.rv.list = arguments.settings.list;
  				local.rv.separator = Chr(7);
  				local.rv.value = $cleanInStatementValue(local.rv.value);
  			}
  			return local.rv;
  		}
  
  		public query function $getColumnInfo(
  		  required string table,
  		  required string datasource,
  		  required string username,
  		  required string password
  		) {
  			arguments.type = "columns";
  			local.rv = $dbinfo(argumentCollection=arguments);
  			return local.rv;
  		}
  
  		public string function $quoteValue(
  		  required string str,
  		  string sqlType="CF_SQL_VARCHAR",
  		  string type
  		) {
  			if (!StructKeyExists(arguments, "type"))
  			{
  				arguments.type = $getValidationType(arguments.sqlType);
  			}
  			if (!ListFindNoCase("integer,float,boolean", arguments.type) || !Len(arguments.str))
  			{
  				local.rv = "'#arguments.str#'";
  			}
  			else
  			{
  				local.rv = arguments.str;
  			}
  			return local.rv;
  		}
  
  		public struct function $convertMaxRowsToLimit(required struct args) {
  			local.rv = arguments.args;
  			if (StructKeyExists(local.rv, "maxRows") && local.rv.maxRows > 0)
  			{
  				if (local.rv.maxRows > 0)
  				{
  					local.rv.limit = local.rv.maxRows;
  				}
  				StructDelete(local.rv, "maxRows");
  			}
  			return local.rv;
  		}
  
  		public string function $comment(required string text) {
  			return "/* " & arguments.text & " */";
  		}
  	</cfscript>
  
  	<cffunction name="$performQuery" returntype="struct" access="public" output="false">
  		<cfargument name="sql" type="array" required="true">
  