anchor.diff:  					tmpString = deSerializeJSON( "{" & arrayToList( tmpArr ) & "}" );
   
   					// finally we can evaluate the queryParam struct.  This will scrub the values (i.e. proper cfsql types, prevent sql injection, etc...).
  -					eval_string = queryParamStruct(
  +					evalString = queryParamStruct(
   													value = structKeyExists( tmpString, 'value' ) ? tmpString.value : '',
   													cfsqltype = structKeyExists( tmpString, 'cfsqltype' ) ? tmpString.cfsqltype : '',
   													list= structKeyExists( tmpString, 'list' ) ? tmpString.list : false,
  
positive.code: 
  			return this;
  		}
  
  		private function _appendToWhere( required string andOr, required string column, required string operator, required string value ){
  			if ( arrayLen( _criteria.where )
  				&& ( left( _criteria.where[ arrayLen( _criteria.where ) ] , 5 ) != "AND ("
  
negative.code: 
  
  					// This can be any kind of object, but we are hoping it is a struct (see queryParam())
  					if ( isStruct( evalString ) ){
  						// Now we'll pass back a pseudo cfqueryparam.  The read() function will
  						// break this down and re-create it since the tag call itself has to be static
  						returnString = tmpStartString & chr(998) & 'cfsqltype=#chr(777)#'
  										& reReplaceNoCase(evalString.cfsqltype,'\$queryparam','INVALID','all')
  										& '#chr(777)# value=#chr(777)#' & reReplaceNoCase( evalString.value, '\$queryparam','INVALID','all')
  										& '#chr(777)#' & chr(999) &  tmpEndString;
  						// Now the recursion.  Pass the string with the value we just parsed back to
  						// this function to see if there is anything left to parse.  When there is
  						// nothing left to parse it will be returned to the calling function (read())
  						return parseQueryParams( returnString );
  					}else{
  						// The evaluated string was not a simple object and could be malicious so we'll
  						// just pass back an error message so the programmer can fix it.
  						return "Parsed queryParam is not a struct!";
  					}
  				}else{
  					// There was not an instance of queryParam called, so return the unmodified sql
  					return arguments.str;
  				}
  			}else{
  				// Nothing left to parse, let's return the string back to the original calling function
  				return arguments.str;
  			}
  		}
  
  		/**
  		* Delegates the creation of a "table" to the underlying persistence storage "connector"
  		**/
  		public tabledef function makeTable( required tabledef tabledef ){
  			return this.conn.makeTable( arguments.tabledef );
  		}
  
  		// Entity Query API - Provides LINQ'ish style queries
  		public function from( required string from ){
  			_resetCriteria();
  			_criteria.from = arguments.from;
  
  			return this;
  		}
  
  		public function where( required string column, required string operator, required string value ){
  			// There can be only one where.
  			if ( arrayLen( _criteria.where ) && left( _criteria.where[ 1 ] , 5 ) != "WHERE" ){
  				arrayPrepend( _criteria.where, "WHERE #_getSafeColumnName( column )# #operator# #queryParam(value)#" );
  