diff --git a/http/swagger.yml b/http/swagger.yml index ff55dfd3b6..cd4e41fc2f 100644 --- a/http/swagger.yml +++ b/http/swagger.yml @@ -6314,7 +6314,7 @@ components: type: string predicate: description: sql where like delete statement - example: tag1="value1" and (tag2="value2" and tag3="value3") + example: tag1="value1" and (tag2="value2" and tag3!="value3") type: string Node: oneOf: diff --git a/predicate/predicate_test.go b/predicate/predicate_test.go index b6d2c5d669..95e3d17c0a 100644 --- a/predicate/predicate_test.go +++ b/predicate/predicate_test.go @@ -21,7 +21,7 @@ func TestDataTypeConversion(t *testing.T) { name: "empty node", }, { - name: "tag rule", + name: "equal tag rule", node: &TagRuleNode{ Operator: influxdb.Equal, Tag: influxdb.Tag{ @@ -47,7 +47,33 @@ func TestDataTypeConversion(t *testing.T) { }, }, { - name: "measurement tag rule", + name: "not equal tag rule", + node: &TagRuleNode{ + Operator: influxdb.NotEqual, + Tag: influxdb.Tag{ + Key: "k1", + Value: "v1", + }, + }, + dataType: &datatypes.Node{ + NodeType: datatypes.NodeTypeComparisonExpression, + Value: &datatypes.Node_Comparison_{Comparison: datatypes.ComparisonNotEqual}, + Children: []*datatypes.Node{ + { + NodeType: datatypes.NodeTypeTagRef, + Value: &datatypes.Node_TagRefValue{TagRefValue: "k1"}, + }, + { + NodeType: datatypes.NodeTypeLiteral, + Value: &datatypes.Node_StringValue{ + StringValue: "v1", + }, + }, + }, + }, + }, + { + name: "measurement equal tag rule", node: &TagRuleNode{ Operator: influxdb.Equal, Tag: influxdb.Tag{ @@ -73,7 +99,33 @@ func TestDataTypeConversion(t *testing.T) { }, }, { - name: "field tag rule", + name: "measurement not equal tag rule", + node: &TagRuleNode{ + Operator: influxdb.NotEqual, + Tag: influxdb.Tag{ + Key: "_measurement", + Value: "cpu", + }, + }, + dataType: &datatypes.Node{ + NodeType: datatypes.NodeTypeComparisonExpression, + Value: &datatypes.Node_Comparison_{Comparison: datatypes.ComparisonNotEqual}, + Children: []*datatypes.Node{ + { + NodeType: datatypes.NodeTypeTagRef, + Value: &datatypes.Node_TagRefValue{TagRefValue: models.MeasurementTagKey}, + }, + { + NodeType: datatypes.NodeTypeLiteral, + Value: &datatypes.Node_StringValue{ + StringValue: "cpu", + }, + }, + }, + }, + }, + { + name: "equal field tag rule", node: &TagRuleNode{ Operator: influxdb.Equal, Tag: influxdb.Tag{ @@ -98,6 +150,32 @@ func TestDataTypeConversion(t *testing.T) { }, }, }, + { + name: "not equal field tag rule", + node: &TagRuleNode{ + Operator: influxdb.NotEqual, + Tag: influxdb.Tag{ + Key: "_field", + Value: "cpu", + }, + }, + dataType: &datatypes.Node{ + NodeType: datatypes.NodeTypeComparisonExpression, + Value: &datatypes.Node_Comparison_{Comparison: datatypes.ComparisonNotEqual}, + Children: []*datatypes.Node{ + { + NodeType: datatypes.NodeTypeTagRef, + Value: &datatypes.Node_TagRefValue{TagRefValue: models.FieldKeyTagKey}, + }, + { + NodeType: datatypes.NodeTypeLiteral, + Value: &datatypes.Node_StringValue{ + StringValue: "cpu", + }, + }, + }, + }, + }, { name: "logical", node: &LogicalNode{ diff --git a/predicate/tag_rule.go b/predicate/tag_rule.go index 5a4f72dae4..aec7f2ccce 100644 --- a/predicate/tag_rule.go +++ b/predicate/tag_rule.go @@ -44,7 +44,7 @@ func NodeComparison(op influxdb.Operator) (datatypes.Node_Comparison, error) { case influxdb.Equal: return datatypes.ComparisonEqual, nil case influxdb.NotEqual: - fallthrough + return datatypes.ComparisonNotEqual, nil case influxdb.RegexEqual: fallthrough case influxdb.NotRegexEqual: diff --git a/ui/src/buckets/selectors/index.test.ts b/ui/src/buckets/selectors/index.test.ts index 2ff8785a0b..13bf16cbb9 100644 --- a/ui/src/buckets/selectors/index.test.ts +++ b/ui/src/buckets/selectors/index.test.ts @@ -13,9 +13,7 @@ describe('Bucket Selector', () => { expect(isSystemBucket(`naming_${SYSTEM}`)).toEqual(false) expect(isSystemBucket('SYSTEM')).toEqual(false) }) - // skipping this test for now as it's flakey. Issue has been raise: - // https://github.com/influxdata/influxdb/issues/15798 - it.skip('should sort the bucket names alphabetically', () => { + it('should sort the bucket names alphabetically', () => { const buckets: Bucket[] = [ { id: '7902bd683453c00c', diff --git a/ui/src/buckets/selectors/index.ts b/ui/src/buckets/selectors/index.ts index 9b1956609e..030c40c98d 100644 --- a/ui/src/buckets/selectors/index.ts +++ b/ui/src/buckets/selectors/index.ts @@ -5,28 +5,36 @@ export const SYSTEM = 'system' export const isSystemBucket = (type: string): boolean => type === SYSTEM -export const getSortedBucketNames = (buckets: Bucket[]) => - buckets - .sort((a, b) => { - const firstBucket = `${a.name}`.toLowerCase() - const secondBucket = `${b.name}`.toLowerCase() - if (firstBucket === secondBucket) { - return 0 - } - if (isSystemBucket(a.type)) { - // ensures that the default system types are the last buckets - return 1 - } - if (isSystemBucket(b.type)) { - // ensures that the default system types are the last buckets - return -1 - } - if (firstBucket < secondBucket) { - return -1 - } - if (firstBucket > secondBucket) { - return 1 - } - return 0 - }) - .map(bucket => bucket.name) +const sortFunc = (a: Bucket, b: Bucket) => { + const firstBucket = `${a.name}`.toLowerCase() + const secondBucket = `${b.name}`.toLowerCase() + if (firstBucket === secondBucket) { + return 0 + } + if (firstBucket < secondBucket) { + return -1 + } + if (firstBucket > secondBucket) { + return 1 + } + return 0 +} + +export const getSortedBucketNames = (buckets: Bucket[]) => { + const systemBuckets = [] + const otherBuckets = [] + buckets.forEach(bucket => { + // separate system buckets from the rest + if (isSystemBucket(bucket.type)) { + systemBuckets.push(bucket) + } else { + otherBuckets.push(bucket) + } + }) + // alphabetize system buckets + systemBuckets.sort(sortFunc) + // alphabetize other buckets + otherBuckets.sort(sortFunc) + // concat the system buckets to the end of the other buckets and map results + return otherBuckets.concat(systemBuckets).map(bucket => bucket.name) +} diff --git a/ui/src/shared/components/DeleteDataForm/FilterRow.tsx b/ui/src/shared/components/DeleteDataForm/FilterRow.tsx index 1bef056c1a..1f28cff934 100644 --- a/ui/src/shared/components/DeleteDataForm/FilterRow.tsx +++ b/ui/src/shared/components/DeleteDataForm/FilterRow.tsx @@ -8,7 +8,6 @@ import { Input, SelectDropdown, } from '@influxdata/clockface' -import {FeatureFlag} from 'src/shared/utils/featureFlag' // Types import {Filter} from 'src/types' @@ -46,20 +45,17 @@ const FilterRow: FC = ({ > -
==
- - -