spec/lib/filter_build.cfm
2025-06-02 16:16:51 +03:00

47 lines
2.4 KiB
Plaintext

<!--- version 2.01---><!---15:25 31.01.2019--->
<!--- build query filter string --->
<!--- пустые и некорректные значения параметров вызвыают пропуск параметра --->
<cfparam name="ATTRIBUTES.filter" type="struct"/>
<cfloop collection=#ATTRIBUTES.filter# item="item">
<cfsilent>
<cfset fltr=structFind(ATTRIBUTES.filter,item)>
<cfparam name="fltr.val" default=""/>
<cfparam name="fltr.prefix" default=""/>
<cfparam name="fltr.suffix" default=""/>
<cfparam name="fltr.list" default="No"/>
</cfsilent> <!---
---> AND <cfif structKeyExists(fltr,"expression") AND len(fltr.expression)><!---
---><cfset len=listLen(#fltr.expression#,"?")><!---
---><cfloop from=1 to=#len# index="i"><!---
---><cfoutput>#listGetAt(fltr.expression,i,"?")#</cfoutput><!---
---><cfif i LT #len#><cfqueryparam cfsqltype="#getCfSqLType(fltr.ftype)#" list="#fltr.list#" value="#fltr.prefix##fltr.val##fltr.suffix#"/></cfif><!---
---></cfloop><!---
---><cfelse><!---
---><cfoutput>#fltr.field#</cfoutput><cfswitch expression=#fltr.compare#><cfcase value="EQ"> = </cfcase><cfcase value="NE,NEQ"> <> </cfcase><cfcase value="LE"> <= </cfcase><cfcase value="LT"> < </cfcase><cfcase value="GE"> >= </cfcase><cfcase value="GT"> > </cfcase><cfcase value="LIKE"> LIKE </cfcase><cfcase value="NOTLIKE"> NOT LIKE </cfcase><cfcase value="LIKE%"> LIKE <cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# value="%#fltr.val#%"/><cfcontinue/></cfcase><cfcase value="NOTLIKE%"> NOT LIKE <cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# value="%#fltr.val#%"/><cfcontinue/></cfcase><cfcase value="IN"> IN (<cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# list="#fltr.list#" value="#fltr.val#"/>)<cfcontinue/></cfcase><cfdefaultcase> = <cfoutput> #fltr.field#</cfoutput><cfcontinue/><!---***криво---></cfdefaultcase></cfswitch><cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# value="#fltr.val#"/><cfcontinue/>
</cfif>
</cfloop>
<cfexit method="exittag"/>
<cffunction name="getCfSqlType" output="No">
<cfargument name="fieldType" default=""/>
<cfswitch expression=#ARGUMENTS.fieldType#>
<cfcase value="numeric">
<cfreturn "CF_SQL_NUMERIC"/>
</cfcase>
<cfcase value="date,time,datetime">
<cfreturn "CF_SQL_TIMESTAMP"/>
</cfcase>
<cfcase value="string">
<cfreturn "CF_SQL_VARCHAR"/>
</cfcase>
<cfdefaultcase>
<cfreturn "CF_SQL_VARCHAR"/>
</cfdefaultcase>
</cfswitch>
</cffunction>