I'm trying to get better at my cfscript and can't figure this one out. In a tag based CFC I could do something like this:
<cffunction name="querySd" access="public" returnType="query" output="false">
<cfargument name="sd_id" type="numeric" required="No"/>
<cfargument name="sd_code" type="string" required="No"/>
<cfquery name="LOCAL.qrySd" datasource="#variables.dsn#">
SELECT sd_id, sd_code, sd_active, sd_expires, sd_added, sd_dla
FROM sd
WHERE 0=0
<cfif isDefined("ARGUMENTS.sd_id")>
AND sd_id = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#ARGUMENTS.sd_id#"/>
</cfif>
<cfif isDefined("ARGUMENTS.sd_code")>
AND sd_code = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#ARGUMENTS.sd_code#" maxlength="20"/>
</cfif>
</cfquery>
<cfreturn LOCAL.qrySd>
</cffunction>
However, trying a similar method in cfscript throws an error:
public query function querySd( numeric sd_id, string sd_code ){
local.querySd = new Query(datasource = variables.dsn);
if( isDefined('arguments.sd_id') ){
local.querySd.addParam( name = 'sdid', value = arguments.sd_id, cfsqltype = 'cf_sql_int');
};
if( isDefined('arguments.sd_code') ){
local.querySd.addParam( name = 'sdcode', value = arguments.sd_code, cfsqltype = 'cf_sql_varchar', maxlength = '20');
};
local.querySd.setSql('
SELECT sd_id, sd_code, sd_active, sd_expires, sd_added, sd_dla
FROM sd
WHERE 0 = 0
if( isDefined('arguments.sd_id') ){
AND sd_id = :sdid
};
if( isDefined('arguments.sd_code') ){
AND sd_code = :sdcode
};
');
local.qrySd = local.querySd.execute().getResult();
What's the correct way of working with optional arguments in a cfscript based query inside of a cfc?