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 {