@@ -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,43 @@ 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 ) {
133- if fieldName != "advisory_type_name" {
134- return originalValues , originalOperator
130+ func (t * FilterData ) transformParams (fieldName string ) (operator string , values []string ) {
131+ if len (t .Values ) == 1 && (t .Values [0 ] == "null" || t .Values [0 ] == "notnull" ) {
132+ // handle special cases filter=null and filter=notnull
133+ return t .Values [0 ], []string {"0" }
135134 }
135+ if fieldName == "advisory_type_name" {
136+ return t .transformAdvisoryTypeParams ()
137+ }
138+ // no change
139+ return t .Operator , t .Values
140+ }
136141
137- transformedValues = make ([]string , 0 , len (originalValues ))
138- for _ , originalValue := range originalValues {
142+ func (t * FilterData ) transformAdvisoryTypeParams () (
143+ // expand "other" in advisory_type filter into list of what we mean by other
144+ transformedOperator string , transformedValues []string ) {
145+ transformedValues = make ([]string , 0 , len (t .Values ))
146+ for _ , originalValue := range t .Values {
139147 if originalValue == "other" {
140148 transformedValues = append (transformedValues , database .OtherAdvisoryTypes ... )
141149 } else {
142150 transformedValues = append (transformedValues , originalValue )
143151 }
144152 }
145153
146- if len (transformedValues ) == len (originalValues ) {
147- return originalValues , originalOperator
154+ if len (transformedValues ) == len (t . Values ) {
155+ return t . Operator , t . Values
148156 }
149157
150- switch originalOperator {
158+ switch t . Operator {
151159 case OpEq :
152160 transformedOperator = OpIn
153161 case OpNeq :
154162 transformedOperator = OpNotIn
155163 default :
156- transformedOperator = originalOperator
164+ transformedOperator = t . Operator
157165 }
158- return transformedValues , transformedOperator
166+ return transformedOperator , transformedValues
159167}
160168
161169func (t Filters ) ToQueryParams () string {
0 commit comments