172 instance_operation_ls paging bug fix
This commit is contained in:
+16
-2
@@ -1,6 +1,7 @@
|
||||
<!--- version 2.01---><!---15:25 31.01.2019--->
|
||||
<!--- version 3---><!---16:42 16.11.2020--->
|
||||
<!--- version 4---><!---2025-09-06 19:15:50 больше не нужно объявлять параметр как list, достаточно оператора IN--->
|
||||
<!--- version 5---><!---2025-11-20 ILIKE - потеря совместимости со стандартным SQL (можно вернуться к совместимости через lower, но будут проблемы с индексами)--->
|
||||
<!--- build query filter string --->
|
||||
|
||||
<cfparam name="ATTRIBUTES.filter" type="struct"/>
|
||||
@@ -23,8 +24,21 @@
|
||||
---><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=#uCase(fltr.compare)#><cfcase value="EQ"> = </cfcase><cfcase value="NE,NEQ"> <> </cfcase><cfcase value="LE,LTE"> <= </cfcase><cfcase value="LT"> < </cfcase><cfcase value="GE,GTE"> >= </cfcase><cfcase value="GT"> > </cfcase><cfcase value="LIKE"> LIKE </cfcase><cfcase value="LIKE%,LIKEP"> LIKE <cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# value="%#fltr.val#%"/><cfcontinue/></cfcase><cfcase value="IN"> IN (<cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# list=true value="#fltr.val#"/>)<cfcontinue/></cfcase><cfdefaultcase> = <cfoutput> #fltr.field#</cfoutput><cfcontinue/><!---***криво---></cfdefaultcase></cfswitch><cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# value="#fltr.val#"/><cfcontinue/>
|
||||
</cfif>
|
||||
---><cfoutput>#fltr.field#</cfoutput><cfswitch expression=#uCase(fltr.compare)#>
|
||||
<cfcase value="EQ"> = </cfcase><!---
|
||||
---><cfcase value="NE,NEQ"> <> </cfcase><!---
|
||||
---><cfcase value="LE,LTE"> <= </cfcase><!---
|
||||
---><cfcase value="LT"> < </cfcase><!---
|
||||
---><cfcase value="GE,GTE"> >= </cfcase><!---
|
||||
---><cfcase value="GT"> > </cfcase><!---
|
||||
---><cfcase value="LIKE"> LIKE </cfcase><!---
|
||||
---><cfcase value="ILIKE"> ILIKE </cfcase><!---
|
||||
---><cfcase value="LIKE%,LIKEP"> LIKE <cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# value="%#fltr.val#%"/><cfcontinue/></cfcase><!---
|
||||
---><cfcase value="ILIKE%,ILIKEP"> ILIKE <cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# value="%#fltr.val#%"/><cfcontinue/></cfcase><!---
|
||||
---><cfcase value="IN"> IN (<cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# list=true value="#fltr.val#"/>)<cfcontinue/></cfcase><!---
|
||||
---><cfdefaultcase> = <cfoutput> #fltr.field#</cfoutput><cfcontinue/><!---***криво---></cfdefaultcase><!---
|
||||
---></cfswitch><cfqueryparam cfsqltype=#getCfSqLType(fltr.ftype)# value="#fltr.val#"/><cfcontinue/>
|
||||
</cfif><!--- *** ILIKE POSTGRESQL SPECIFIC --->
|
||||
</cfloop>
|
||||
<cfexit method="exittag"/>
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
hint="Static helper methods for ReST API">
|
||||
<!--- v0.02 2024-10-15 --->
|
||||
<!--- v0.03 2024-11-27 --->
|
||||
<!--- v0.04 2025-11-20 columns--->
|
||||
|
||||
|
||||
<cffunction name="empty2null"
|
||||
@@ -81,9 +82,11 @@
|
||||
hint="parse and collect filter params, for operators see filter_build">
|
||||
<!---e.g. duration=NEQ:2--->
|
||||
<!---*** add test for multiple values--->
|
||||
<cfargument name="params" type="struct" required="true" />
|
||||
<cfargument name="params" type="struct" required="true" /><!--- имена полей и колонок в snake_case --->
|
||||
|
||||
<cfset var local={}/><!--- *** --->
|
||||
<cfset var out=structNew()/>
|
||||
|
||||
<cfloop collection=#params# index="local.item">
|
||||
|
||||
<cfset var urlParamName=snake2camel(lCase(local.item))/>
|
||||
@@ -98,11 +101,17 @@
|
||||
<cfif !isValid(ARGUMENTS.params[local.item].type,value)>
|
||||
<cfthrow type="invalidParamValue" message="Filter parameter #urlParamName# value is not a valid #ARGUMENTS.params[local.item].type#"/><!---не выводим значение, чтобы исключить XSS--->
|
||||
</cfif>
|
||||
|
||||
<cfif structKeyExists(ARGUMENTS.params[local.item], "column") AND len(ARGUMENTS.params[local.item].column)>
|
||||
<cfset var column="#ARGUMENTS.params[local.item].column#"/>
|
||||
<cfelse>
|
||||
<cfset var column=local.item/>
|
||||
</cfif>
|
||||
|
||||
<cfif structKeyExists(ARGUMENTS.params[local.item], "prefix") AND len(ARGUMENTS.params[local.item].prefix)>
|
||||
<cfset var fieldName="#ARGUMENTS.params[local.item].prefix#.#local.item#"/>
|
||||
<cfset var fieldName="#ARGUMENTS.params[local.item].prefix#.#column#"/>
|
||||
<cfelse>
|
||||
<cfset var fieldName=#local.item#/>
|
||||
<cfset var fieldName=#column#/>
|
||||
</cfif>
|
||||
|
||||
<cfif structKeyExists(ARGUMENTS.params[local.item], "list") AND ARGUMENTS.params[local.item].list GT 0>
|
||||
|
||||
Reference in New Issue
Block a user