Skip to content

Commit

Permalink
🎨 Improve handling of database column filters containing empty values F…
Browse files Browse the repository at this point in the history
  • Loading branch information
88250 committed Oct 11, 2023
1 parent 28e4e1e commit ccb6545
Showing 1 changed file with 43 additions and 3 deletions.
46 changes: 43 additions & 3 deletions kernel/av/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,8 @@ func (value *Value) Compare(other *Value) int {
}

func (value *Value) CompareOperator(other *Value, operator FilterOperator) bool {
if nil == value || nil == other {
return false
if nil == other {
return true
}

if nil != value.Block && nil != other.Block {
Expand All @@ -193,16 +193,34 @@ func (value *Value) CompareOperator(other *Value, operator FilterOperator) bool
if nil != value.Text && nil != other.Text {
switch operator {
case FilterOperatorIsEqual:
if "" == strings.TrimSpace(other.Text.Content) {
return true
}
return value.Text.Content == other.Text.Content
case FilterOperatorIsNotEqual:
if "" == strings.TrimSpace(other.Text.Content) {
return true
}
return value.Text.Content != other.Text.Content
case FilterOperatorContains:
if "" == strings.TrimSpace(other.Text.Content) {
return true
}
return strings.Contains(value.Text.Content, other.Text.Content)
case FilterOperatorDoesNotContain:
if "" == strings.TrimSpace(other.Text.Content) {
return true
}
return !strings.Contains(value.Text.Content, other.Text.Content)
case FilterOperatorStartsWith:
if "" == strings.TrimSpace(other.Text.Content) {
return true
}
return strings.HasPrefix(value.Text.Content, other.Text.Content)
case FilterOperatorEndsWith:
if "" == strings.TrimSpace(other.Text.Content) {
return true
}
return strings.HasSuffix(value.Text.Content, other.Text.Content)
case FilterOperatorIsEmpty:
return "" == strings.TrimSpace(value.Text.Content)
Expand All @@ -214,8 +232,14 @@ func (value *Value) CompareOperator(other *Value, operator FilterOperator) bool
if nil != value.Number && nil != other.Number {
switch operator {
case FilterOperatorIsEqual:
if !other.Number.IsNotEmpty {
return true
}
return value.Number.Content == other.Number.Content
case FilterOperatorIsNotEqual:
if !other.Number.IsNotEmpty {
return true
}
return value.Number.Content != other.Number.Content
case FilterOperatorIsGreater:
return value.Number.Content > other.Number.Content
Expand All @@ -235,8 +259,14 @@ func (value *Value) CompareOperator(other *Value, operator FilterOperator) bool
if nil != value.Date && nil != other.Date {
switch operator {
case FilterOperatorIsEqual:
if !other.Date.IsNotEmpty {
return true
}
return value.Date.Content == other.Date.Content
case FilterOperatorIsNotEqual:
if !other.Date.IsNotEmpty {
return true
}
return value.Date.Content != other.Date.Content
case FilterOperatorIsGreater:
return value.Date.Content > other.Date.Content
Expand Down Expand Up @@ -541,7 +571,17 @@ func (table *Table) FilterRows() {
for _, row := range table.Rows {
pass := true
for j, index := range colIndexes {
if !row.Cells[index].Value.CompareOperator(table.Filters[j].Value, table.Filters[j].Operator) {
operator := table.Filters[j].Operator

if nil == row.Cells[index].Value {
switch operator {
case FilterOperatorIsNotEmpty:
pass = false
}
break
}

if !row.Cells[index].Value.CompareOperator(table.Filters[j].Value, operator) {
pass = false
break
}
Expand Down

0 comments on commit ccb6545

Please sign in to comment.