diff --git a/public/app/plugins/datasource/influxdb/query_builder.ts b/public/app/plugins/datasource/influxdb/query_builder.ts index e62d4c818cf..60d190602da 100644 --- a/public/app/plugins/datasource/influxdb/query_builder.ts +++ b/public/app/plugins/datasource/influxdb/query_builder.ts @@ -64,7 +64,8 @@ export class InfluxQueryBuilder { measurement = this.target.measurement; policy = this.target.policy; - if (!measurement.match('^/.*/')) { + // If there is a measurement and it is not empty string + if (!measurement.match(/^\/.*\/|^$/)) { measurement = '"' + measurement + '"'; if (policy && policy !== 'default') { @@ -73,6 +74,10 @@ export class InfluxQueryBuilder { } } + if (measurement === '') { + return 'SHOW FIELD KEYS'; + } + return 'SHOW FIELD KEYS FROM ' + measurement; } else if (type === 'RETENTION POLICIES') { query = 'SHOW RETENTION POLICIES on "' + this.database + '"'; @@ -89,7 +94,9 @@ export class InfluxQueryBuilder { measurement = policy + '.' + measurement; } - query += ' FROM ' + measurement; + if (measurement !== '') { + query += ' FROM ' + measurement; + } } if (withKey) { diff --git a/public/app/plugins/datasource/influxdb/specs/query_builder.test.ts b/public/app/plugins/datasource/influxdb/specs/query_builder.test.ts index 07be475e028..17569325243 100644 --- a/public/app/plugins/datasource/influxdb/specs/query_builder.test.ts +++ b/public/app/plugins/datasource/influxdb/specs/query_builder.test.ts @@ -213,5 +213,13 @@ describe('InfluxQueryBuilder', () => { const query = builder.buildExploreQuery('TAG_KEYS'); expect(query).toBe(`SHOW TAG KEYS WHERE "app" == ''`); }); + + it('should not add FROM statement if the measurement empty', () => { + const builder = new InfluxQueryBuilder({ measurement: '', tags: [] }); + let query = builder.buildExploreQuery('TAG_KEYS'); + expect(query).toBe('SHOW TAG KEYS'); + query = builder.buildExploreQuery('FIELDS'); + expect(query).toBe('SHOW FIELD KEYS'); + }); }); });