Correct the validation logic when modifying indexes/exclusion constraints. Fixes #2113
parent
d21cbb8b1f
commit
4c2004d479
|
@ -24,7 +24,22 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
|
||||||
},{
|
},{
|
||||||
id: 'oper_class', label:'{{ _('Operator class') }}', type:'text',
|
id: 'oper_class', label:'{{ _('Operator class') }}', type:'text',
|
||||||
node: 'table', url: 'get_oper_class', first_empty: true,
|
node: 'table', url: 'get_oper_class', first_empty: true,
|
||||||
editable: true,
|
editable: function(m) {
|
||||||
|
if (m instanceof Backbone.Collection) {
|
||||||
|
return true;
|
||||||
|
} else if ((_.has(m.collection, 'handler') &&
|
||||||
|
!_.isUndefined(m.collection.handler) &&
|
||||||
|
!_.isUndefined(m.collection.handler.get('oid')))) {
|
||||||
|
return false;
|
||||||
|
} else if (_.has(m.collection, 'handler') &&
|
||||||
|
!_.isUndefined(m.collection.handler) &&
|
||||||
|
!_.isUndefined(m.collection.handler.get('amname')) &&
|
||||||
|
m.collection.handler.get('amname') != 'btree') {
|
||||||
|
// Disable if access method is not btree
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
select2: {
|
select2: {
|
||||||
allowClear: true, width: 'style', tags: true,
|
allowClear: true, width: 'style', tags: true,
|
||||||
placeholder: '{{ _("Select the operator class") }}'
|
placeholder: '{{ _("Select the operator class") }}'
|
||||||
|
@ -65,6 +80,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
|
||||||
url: full_url,
|
url: full_url,
|
||||||
success: function(res) {
|
success: function(res) {
|
||||||
data = res.data;
|
data = res.data;
|
||||||
|
self.column.set('options', data);
|
||||||
},
|
},
|
||||||
error: function() {
|
error: function() {
|
||||||
eventHandler.trigger('pgadmin:view:fetch:error', m, self.column);
|
eventHandler.trigger('pgadmin:view:fetch:error', m, self.column);
|
||||||
|
@ -72,18 +88,6 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
|
||||||
});
|
});
|
||||||
eventHandler.trigger('pgadmin:view:fetched', m, self.column);
|
eventHandler.trigger('pgadmin:view:fetched', m, self.column);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* Transform the data
|
|
||||||
*/
|
|
||||||
transform = self.column.get('transform') || self.defaults.transform;
|
|
||||||
if (transform && _.isFunction(transform)) {
|
|
||||||
// We will transform the data later, when rendering.
|
|
||||||
// It will allow us to generate different data based on the
|
|
||||||
// dependencies.
|
|
||||||
self.column.set('options', transform.bind(self, data));
|
|
||||||
} else {
|
|
||||||
self.column.set('options', data);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
self.column.set('options', []);
|
self.column.set('options', []);
|
||||||
}
|
}
|
||||||
|
@ -94,49 +98,42 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
|
||||||
options: {
|
options: {
|
||||||
onText: 'ASC',
|
onText: 'ASC',
|
||||||
offText: 'DESC',
|
offText: 'DESC',
|
||||||
},editable: function(m) {
|
},
|
||||||
|
editable: function(m) {
|
||||||
if (m instanceof Backbone.Collection) {
|
if (m instanceof Backbone.Collection) {
|
||||||
return true;
|
return true;
|
||||||
}
|
} else if ((_.has(m.collection, 'handler') &&
|
||||||
else {
|
|
||||||
if (m.top.get('amname') === 'btree') {
|
|
||||||
m.set('is_sort_nulls_applicable', true);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
m.set('is_sort_nulls_applicable', false);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ((_.has(m.collection, 'handler') &&
|
|
||||||
!_.isUndefined(m.collection.handler) &&
|
!_.isUndefined(m.collection.handler) &&
|
||||||
!_.isUndefined(m.collection.handler.get('oid')))) {
|
!_.isUndefined(m.collection.handler.get('oid')))) {
|
||||||
return false;
|
return false;
|
||||||
|
} else if (m.top.get('amname') === 'btree') {
|
||||||
|
m.set('is_sort_nulls_applicable', true);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
m.set('is_sort_nulls_applicable', false);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
id: 'nulls_order', label:'{{ _('NULLs order') }}', type:"switch",
|
id: 'nulls_order', label:'{{ _('NULLs order') }}', type:"switch",
|
||||||
options: {
|
options: {
|
||||||
onText: 'FIRST',
|
onText: 'FIRST',
|
||||||
offText: 'LAST',
|
offText: 'LAST',
|
||||||
},editable: function(m) {
|
},
|
||||||
|
editable: function(m) {
|
||||||
if (m instanceof Backbone.Collection) {
|
if (m instanceof Backbone.Collection) {
|
||||||
return true;
|
return true;
|
||||||
}
|
} else if ((_.has(m.collection, 'handler') &&
|
||||||
else {
|
|
||||||
if (m.top.get('amname') === 'btree') {
|
|
||||||
m.set('is_sort_nulls_applicable', true);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
m.set('is_sort_nulls_applicable', false);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((_.has(m.collection, 'handler') &&
|
|
||||||
!_.isUndefined(m.collection.handler) &&
|
!_.isUndefined(m.collection.handler) &&
|
||||||
!_.isUndefined(m.collection.handler.get('oid')))) {
|
!_.isUndefined(m.collection.handler.get('oid')))) {
|
||||||
return false;
|
return false;
|
||||||
|
} else if (m.top.get('amname') === 'btree') {
|
||||||
|
m.set('is_sort_nulls_applicable', true);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
m.set('is_sort_nulls_applicable', false);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
id: 'operator', label:'{{ _('Operator') }}', type: 'text',
|
id: 'operator', label:'{{ _('Operator') }}', type: 'text',
|
||||||
|
@ -184,6 +181,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
|
||||||
url: full_url,
|
url: full_url,
|
||||||
success: function(res) {
|
success: function(res) {
|
||||||
data = res.data;
|
data = res.data;
|
||||||
|
self.column.set('options', data);
|
||||||
},
|
},
|
||||||
error: function() {
|
error: function() {
|
||||||
eventHandler.trigger('pgadmin:view:fetch:error', m, self.column);
|
eventHandler.trigger('pgadmin:view:fetch:error', m, self.column);
|
||||||
|
@ -191,18 +189,6 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
|
||||||
});
|
});
|
||||||
eventHandler.trigger('pgadmin:view:fetched', m, self.column);
|
eventHandler.trigger('pgadmin:view:fetched', m, self.column);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* Transform the data
|
|
||||||
*/
|
|
||||||
transform = self.column.get('transform') || self.defaults.transform;
|
|
||||||
if (transform && _.isFunction(transform)) {
|
|
||||||
// We will transform the data later, when rendering.
|
|
||||||
// It will allow us to generate different data based on the
|
|
||||||
// dependencies.
|
|
||||||
self.column.set('options', transform.bind(self, data));
|
|
||||||
} else {
|
|
||||||
self.column.set('options', data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -11,6 +11,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
|
||||||
type: 'coll-index',
|
type: 'coll-index',
|
||||||
sqlAlterHelp: 'sql-alterindex.html',
|
sqlAlterHelp: 'sql-alterindex.html',
|
||||||
sqlCreateHelp: 'sql-createindex.html',
|
sqlCreateHelp: 'sql-createindex.html',
|
||||||
|
dialogHelp: '{{ url_for('help.static', filename='index_dialog.html') }}',
|
||||||
columns: ['name', 'description'],
|
columns: ['name', 'description'],
|
||||||
hasStatistics: true,
|
hasStatistics: true,
|
||||||
statsPrettifyFields: ['Size', 'Index size']
|
statsPrettifyFields: ['Size', 'Index size']
|
||||||
|
@ -84,7 +85,9 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
|
||||||
editable: function(m) {
|
editable: function(m) {
|
||||||
// Header cell then skip
|
// Header cell then skip
|
||||||
if (m instanceof Backbone.Collection) {
|
if (m instanceof Backbone.Collection) {
|
||||||
return false;
|
return false;
|
||||||
|
} else if (m.inSchemaWithModelCheck.apply(this, arguments)) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return !(m.checkAccessMethod.apply(this, arguments));
|
return !(m.checkAccessMethod.apply(this, arguments));
|
||||||
},
|
},
|
||||||
|
@ -114,12 +117,12 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
|
||||||
// Header cell then skip
|
// Header cell then skip
|
||||||
if (m instanceof Backbone.Collection) {
|
if (m instanceof Backbone.Collection) {
|
||||||
return false;
|
return false;
|
||||||
}
|
} else if (m.inSchemaWithModelCheck.apply(this, arguments)) {
|
||||||
else {
|
return false;
|
||||||
if (m.top.get('amname') === 'btree') {
|
} else if (m.top.get('amname') === 'btree') {
|
||||||
m.set('is_sort_nulls_applicable', true);
|
m.set('is_sort_nulls_applicable', true);
|
||||||
return true;
|
return true;
|
||||||
}
|
} else {
|
||||||
m.set('is_sort_nulls_applicable', false);
|
m.set('is_sort_nulls_applicable', false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -136,14 +139,15 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
|
||||||
editable: function(m) {
|
editable: function(m) {
|
||||||
// Header cell then skip
|
// Header cell then skip
|
||||||
if (m instanceof Backbone.Collection) {
|
if (m instanceof Backbone.Collection) {
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
if (m.top.get('amname') === 'btree') {
|
|
||||||
m.set('is_sort_nulls_applicable', true);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
m.set('is_sort_nulls_applicable', false);
|
|
||||||
return false;
|
return false;
|
||||||
|
} else if (m.inSchemaWithModelCheck.apply(this, arguments)) {
|
||||||
|
return false;
|
||||||
|
} else if (m.top.get('amname') === 'btree') {
|
||||||
|
m.set('is_sort_nulls_applicable', true);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
m.set('is_sort_nulls_applicable', false);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
deps: ['amname', 'sort_order'],
|
deps: ['amname', 'sort_order'],
|
||||||
|
@ -187,11 +191,10 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
|
||||||
checkAccessMethod: function(m) {
|
checkAccessMethod: function(m) {
|
||||||
//Access method is empty or btree then do not disable field
|
//Access method is empty or btree then do not disable field
|
||||||
var parent_model = m.top;
|
var parent_model = m.top;
|
||||||
if(!m.inSchemaWithModelCheck.apply(this, [m]) &&
|
if(_.isUndefined(parent_model.get('amname')) ||
|
||||||
(_.isUndefined(parent_model.get('amname')) ||
|
|
||||||
_.isNull(parent_model.get('amname')) ||
|
_.isNull(parent_model.get('amname')) ||
|
||||||
String(parent_model.get('amname')).replace(/^\s+|\s+$/g, '') == '' ||
|
String(parent_model.get('amname')).replace(/^\s+|\s+$/g, '') == '' ||
|
||||||
parent_model.get('amname') === 'btree')) {
|
parent_model.get('amname') === 'btree') {
|
||||||
// We need to set nulls to true if sort_order is set to desc
|
// We need to set nulls to true if sort_order is set to desc
|
||||||
// nulls first is default for desc
|
// nulls first is default for desc
|
||||||
if(m.get('sort_order') == true && m.previous('sort_order') == false) {
|
if(m.get('sort_order') == true && m.previous('sort_order') == false) {
|
||||||
|
@ -202,7 +205,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
|
||||||
m.set('is_sort_nulls_applicable', false);
|
m.set('is_sort_nulls_applicable', false);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!pgBrowser.Nodes['index']) {
|
if (!pgBrowser.Nodes['index']) {
|
||||||
|
|
Loading…
Reference in New Issue