diff --git a/public/app/core/components/sql_part/sql_part.ts b/public/app/core/components/sql_part/sql_part.ts index 1929cfdadfa..5fc6072fc8c 100644 --- a/public/app/core/components/sql_part/sql_part.ts +++ b/public/app/core/components/sql_part/sql_part.ts @@ -9,8 +9,6 @@ export class SqlPartDef { wrapOpen: string; wrapClose: string; separator: string; - category: any; - addStrategy: any; constructor(options: any) { this.type = options.type; @@ -31,8 +29,6 @@ export class SqlPartDef { } this.params = options.params; this.defaultParams = options.defaultParams; - this.category = options.category; - this.addStrategy = options.addStrategy; } } diff --git a/public/app/plugins/datasource/postgres/partials/query.editor.html b/public/app/plugins/datasource/postgres/partials/query.editor.html index f0e15fc1a50..29952c2106b 100644 --- a/public/app/plugins/datasource/postgres/partials/query.editor.html +++ b/public/app/plugins/datasource/postgres/partials/query.editor.html @@ -44,7 +44,7 @@
diff --git a/public/app/plugins/datasource/postgres/query_ctrl.ts b/public/app/plugins/datasource/postgres/query_ctrl.ts index 0b389ae1877..fbd6907f767 100644 --- a/public/app/plugins/datasource/postgres/query_ctrl.ts +++ b/public/app/plugins/datasource/postgres/query_ctrl.ts @@ -222,9 +222,44 @@ export class PostgresQueryCtrl extends QueryCtrl { }; } - addSelectPart(selectParts, cat, subitem) { - let partModel = sqlPart.create({ type: cat.value }); - partModel.def.addStrategy(selectParts, partModel, this); + addSelectPart(selectParts, item) { + let partModel = sqlPart.create({ type: item.value }); + let addAlias = false; + + switch (item.value) { + case 'column': + let parts = _.map(selectParts, function(part: any) { + return sqlPart.create({ type: part.def.type, params: _.clone(part.params) }); + }); + this.selectModels.push(parts); + break; + case 'aggregate': + case 'special': + let index = _.findIndex(selectParts, (p: any) => p.def.type === item.value); + if (index !== -1) { + selectParts[index] = partModel; + } else { + selectParts.splice(1, 0, partModel); + } + if (!_.find(selectParts, (p: any) => p.def.type === 'alias')) { + addAlias = true; + } + break; + case 'alias': + addAlias = true; + break; + } + + if (addAlias) { + // set initial alias name to column name + partModel = sqlPart.create({ type: 'alias', params: [selectParts[0].params[0]] }); + if (selectParts[selectParts.length - 1].def.type === 'alias') { + selectParts[selectParts.length - 1] = partModel; + } else { + selectParts.push(partModel); + } + } + this.updatePersistedParts(); this.panelCtrl.refresh(); } diff --git a/public/app/plugins/datasource/postgres/sql_part.ts b/public/app/plugins/datasource/postgres/sql_part.ts index b9ecc036cd9..be1be82f6b7 100644 --- a/public/app/plugins/datasource/postgres/sql_part.ts +++ b/public/app/plugins/datasource/postgres/sql_part.ts @@ -16,109 +16,9 @@ function register(options: any) { index[options.type] = new SqlPartDef(options); } -function replaceAggregationAddStrategy(selectParts, partModel) { - var hasAlias = false; - - // look for existing aggregation - for (var i = 0; i < selectParts.length; i++) { - var part = selectParts[i]; - if (part.def.type === 'aggregate') { - selectParts[i] = partModel; - return; - } - if (part.def.type === 'alias') { - hasAlias = true; - } - } - - // add alias if none exists yet - if (!hasAlias) { - var aliasModel = createPart({ type: 'alias', params: [selectParts[0].params[0]] }); - selectParts.push(aliasModel); - } - - selectParts.splice(1, 0, partModel); -} - -function replaceSpecialAddStrategy(selectParts, partModel) { - var hasAlias = false; - - // look for existing aggregation - for (var i = 0; i < selectParts.length; i++) { - var part = selectParts[i]; - if (part.def.type === 'special') { - selectParts[i] = partModel; - return; - } - if (part.def.type === 'alias') { - hasAlias = true; - } - } - - // add alias if none exists yet - if (!hasAlias) { - var aliasModel = createPart({ type: 'alias', params: [selectParts[0].params[0]] }); - selectParts.push(aliasModel); - } - - selectParts.splice(1, 0, partModel); -} - -function addMathStrategy(selectParts, partModel) { - var partCount = selectParts.length; - if (partCount > 0) { - // if last is math, replace it - if (selectParts[partCount - 1].def.type === 'math') { - selectParts[partCount - 1] = partModel; - return; - } - // if next to last is math, replace it - if (partCount > 1 && selectParts[partCount - 2].def.type === 'math') { - selectParts[partCount - 2] = partModel; - return; - } else if (selectParts[partCount - 1].def.type === 'alias') { - // if last is alias add it before - selectParts.splice(partCount - 1, 0, partModel); - return; - } - } - selectParts.push(partModel); -} - -function addAliasStrategy(selectParts, partModel) { - var partCount = selectParts.length; - if (partCount > 0) { - // if last is alias, replace it - if (selectParts[partCount - 1].def.type === 'alias') { - selectParts[partCount - 1] = partModel; - return; - } - } - selectParts.push(partModel); -} - -function addColumnStrategy(selectParts, partModel, query) { - // copy all parts - var parts = _.map(selectParts, function(part: any) { - return createPart({ type: part.def.type, params: _.clone(part.params) }); - }); - - query.selectModels.push(parts); -} - -function addExpressionStrategy(selectParts, partModel, query) { - // copy all parts - var parts = _.map(selectParts, function(part: any) { - return createPart({ type: part.def.type, params: _.clone(part.params) }); - }); - - query.selectModels.push(parts); -} - register({ type: 'column', style: 'label', - addStrategy: addColumnStrategy, params: [{ type: 'column', dynamicLookup: true }], defaultParams: ['value'], }); @@ -127,7 +27,6 @@ register({ type: 'expression', style: 'expression', label: 'Expr:', - addStrategy: addExpressionStrategy, params: [ { name: 'left', type: 'string', dynamicLookup: true }, { name: 'op', type: 'string', dynamicLookup: true }, @@ -140,7 +39,6 @@ register({ type: 'macro', style: 'label', label: 'Macro:', - addStrategy: addExpressionStrategy, params: [], defaultParams: [], }); @@ -148,23 +46,13 @@ register({ register({ type: 'aggregate', style: 'label', - addStrategy: replaceAggregationAddStrategy, params: [{ name: 'name', type: 'string', dynamicLookup: true }], defaultParams: ['avg'], }); -register({ - type: 'math', - style: 'label', - addStrategy: addMathStrategy, - params: [{ name: 'expr', type: 'string' }], - defaultParams: [' / 100'], -}); - register({ type: 'alias', style: 'label', - addStrategy: addAliasStrategy, params: [{ name: 'name', type: 'string', quote: 'double' }], defaultParams: ['alias'], }); @@ -199,7 +87,6 @@ register({ }, ], defaultParams: ['increase'], - addStrategy: replaceSpecialAddStrategy, }); export default {