@@ -79,7 +79,7 @@ func checkValueCount(operator string, nValues int) bool {
7979// Convert a single filter to where clauses
8080func (t * FilterData ) ToWhere (fieldName string , attributes database.AttrMap ) (string , []any , error ) {
8181 var err error
82- transformedValues , transformedOperator := transformFilterParams ( fieldName , t . Values , t . Operator )
82+ transformedOperator , transformedValues := t . transformParams ( fieldName )
8383 var values = make ([]interface {}, len (transformedValues ))
8484 for i , v := range transformedValues {
8585 fieldInfo , found := attributes [fieldName ]
@@ -127,35 +127,40 @@ func (t *FilterData) ToWhere(fieldName string, attributes database.AttrMap) (str
127127 }
128128}
129129
130- // transformFilterParams Allow exceptions in ToWhere values usage (e.g. "other").
131- func transformFilterParams (fieldName string , originalValues []string , originalOperator string ) (
132- transformedValues []string , transformedOperator string ) {
130+ func (t * FilterData ) transformParams (fieldName string ) (
131+ transformedOperator string , transformedValues []string ) {
132+ if len (t .Values ) == 1 && (t .Values [0 ] == "null" || t .Values [0 ] == "notnull" ) {
133+ // handle special cases filter=null and filter=notnull
134+ return t .Values [0 ], []string {"0" }
135+ }
133136 if fieldName != "advisory_type_name" {
134- return originalValues , originalOperator
137+ // no change
138+ return t .Operator , t .Values
135139 }
136140
137- transformedValues = make ([]string , 0 , len (originalValues ))
138- for _ , originalValue := range originalValues {
141+ // special case, in advisory_type_name filter expand "other" into list of what we mean by other
142+ transformedValues = make ([]string , 0 , len (t .Values ))
143+ for _ , originalValue := range t .Values {
139144 if originalValue == "other" {
140145 transformedValues = append (transformedValues , database .OtherAdvisoryTypes ... )
141146 } else {
142147 transformedValues = append (transformedValues , originalValue )
143148 }
144149 }
145150
146- if len (transformedValues ) == len (originalValues ) {
147- return originalValues , originalOperator
151+ if len (transformedValues ) == len (t . Values ) {
152+ return t . Operator , t . Values
148153 }
149154
150- switch originalOperator {
155+ switch t . Operator {
151156 case OpEq :
152157 transformedOperator = OpIn
153158 case OpNeq :
154159 transformedOperator = OpNotIn
155160 default :
156- transformedOperator = originalOperator
161+ transformedOperator = t . Operator
157162 }
158- return transformedValues , transformedOperator
163+ return transformedOperator , transformedValues
159164}
160165
161166func (t Filters ) ToQueryParams () string {
0 commit comments