mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-01-09 23:54:09 -06:00
489 lines
12 KiB
JavaScript
489 lines
12 KiB
JavaScript
/////////////////////////////////////////////////////////////
|
|
//
|
|
// pgAdmin 4 - PostgreSQL Tools
|
|
//
|
|
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
|
// This software is released under the PostgreSQL Licence
|
|
//
|
|
//////////////////////////////////////////////////////////////
|
|
|
|
import BaseUISchema from 'sources/SchemaView/base_schema.ui';
|
|
import gettext from 'sources/gettext';
|
|
import { isEmptyString } from 'sources/validators';
|
|
|
|
export class RestoreSectionSchema extends BaseUISchema {
|
|
constructor(fieldOptions={}) {
|
|
super();
|
|
|
|
this.fieldOptions = {
|
|
selectedNodeType: undefined,
|
|
...fieldOptions,
|
|
};
|
|
|
|
this.selectedNodeType = this.fieldOptions.selectedNodeType;
|
|
}
|
|
|
|
get idAttribute() {
|
|
return 'id';
|
|
}
|
|
|
|
isDisabled(state) {
|
|
return this.selectedNodeType !== 'function' &&
|
|
this.selectedNodeType !== 'table' &&
|
|
this.selectedNodeType !== 'trigger' &&
|
|
this.selectedNodeType !== 'trigger_function' &&
|
|
(state.only_data || state.only_schema);
|
|
}
|
|
|
|
get baseFields() {
|
|
let obj = this;
|
|
return [{
|
|
id: 'pre_data',
|
|
label: gettext('Pre-data'),
|
|
type: 'switch',
|
|
group: gettext('Sections'),
|
|
inlineNext: true,
|
|
deps: ['only_data', 'only_schema'],
|
|
disabled: function(state) {
|
|
return obj.isDisabled(state);
|
|
},
|
|
}, {
|
|
id: 'data',
|
|
label: gettext('Data'),
|
|
type: 'switch',
|
|
group: gettext('Sections'),
|
|
inlineNext: true,
|
|
deps: ['only_data', 'only_schema'],
|
|
disabled: function(state) {
|
|
return obj.isDisabled(state);
|
|
},
|
|
}, {
|
|
id: 'post_data',
|
|
label: gettext('Post-data'),
|
|
type: 'switch',
|
|
group: gettext('Sections'),
|
|
deps: ['only_data', 'only_schema'],
|
|
disabled: function(state) {
|
|
return obj.isDisabled(state);
|
|
},
|
|
}];
|
|
}
|
|
}
|
|
|
|
export function getRestoreSectionSchema(fieldOptions) {
|
|
return new RestoreSectionSchema(fieldOptions);
|
|
}
|
|
|
|
export class RestoreTypeObjSchema extends BaseUISchema {
|
|
constructor(fieldOptions={}) {
|
|
super();
|
|
|
|
this.fieldOptions = {
|
|
selectedNodeType: undefined,
|
|
...fieldOptions,
|
|
};
|
|
|
|
this.selectedNodeType = this.fieldOptions.selectedNodeType;
|
|
}
|
|
|
|
get idAttribute() {
|
|
return 'id';
|
|
}
|
|
|
|
get baseFields() {
|
|
let obj = this;
|
|
return [{
|
|
id: 'only_data',
|
|
label: gettext('Only data'),
|
|
type: 'switch',
|
|
group: gettext('Type of objects'),
|
|
inlineNext: true,
|
|
deps: ['pre_data', 'data', 'post_data', 'only_schema'],
|
|
disabled: function(state) {
|
|
if(obj.selectedNodeType == 'table') {
|
|
state.only_data = true;
|
|
}
|
|
return (obj.selectedNodeType !== 'database' && obj.selectedNodeType !== 'schema') ||
|
|
(state.pre_data ||
|
|
state.data ||
|
|
state.post_data ||
|
|
state.only_schema
|
|
);
|
|
},
|
|
}, {
|
|
id: 'only_schema',
|
|
label: gettext('Only schema'),
|
|
type: 'switch',
|
|
group: gettext('Type of objects'),
|
|
deps: ['pre_data', 'data', 'post_data', 'only_data'],
|
|
disabled: function(state) {
|
|
if(obj.selectedNodeType == 'index' || obj.selectedNodeType == 'function') {
|
|
state.only_schema = true;
|
|
}
|
|
return (obj.selectedNodeType !== 'database' && obj.selectedNodeType !== 'schema') ||
|
|
(state.pre_data ||
|
|
state.data ||
|
|
state.post_data ||
|
|
state.only_data
|
|
);
|
|
},
|
|
}];
|
|
}
|
|
}
|
|
|
|
export function getRestoreTypeObjSchema(fieldOptions) {
|
|
return new RestoreTypeObjSchema(fieldOptions);
|
|
}
|
|
|
|
export class RestoreSaveOptSchema extends BaseUISchema {
|
|
constructor(fieldOptions={}, initValues={}) {
|
|
super({
|
|
id: null,
|
|
...initValues,
|
|
});
|
|
|
|
this.fieldOptions = {
|
|
nodeInfo: null,
|
|
...fieldOptions,
|
|
};
|
|
}
|
|
|
|
get idAttribute() {
|
|
return 'id';
|
|
}
|
|
|
|
|
|
get baseFields() {
|
|
return [{
|
|
id: 'dns_owner',
|
|
label: gettext('Owner'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
inlineNext: true,
|
|
group: gettext('Do not save'),
|
|
}, {
|
|
id: 'dns_privilege',
|
|
label: gettext('Privileges'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
inlineNext: true,
|
|
group: gettext('Do not save'),
|
|
}, {
|
|
id: 'dns_tablespace',
|
|
label: gettext('Tablespaces'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
inlineNext: true,
|
|
group: gettext('Do not save'),
|
|
}, {
|
|
id: 'dns_comments',
|
|
label: gettext('Comments'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
inlineNext: true,
|
|
group: gettext('Do not save'),
|
|
min_version: 110000
|
|
}, {
|
|
id: 'dns_publications',
|
|
label: gettext('Publications'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Do not save'),
|
|
inlineNext: true,
|
|
min_version: 110000
|
|
}, {
|
|
id: 'dns_subscriptions',
|
|
label: gettext('Subscriptions'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Do not save'),
|
|
inlineNext: true,
|
|
min_version: 110000
|
|
}, {
|
|
id: 'dns_security_labels',
|
|
label: gettext('Security labels'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Do not save'),
|
|
inlineNext: true,
|
|
min_version: 110000
|
|
}, {
|
|
id: 'dns_table_access_method',
|
|
label: gettext('Table access methods'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Do not save'),
|
|
inlineNext: true,
|
|
min_version: 150000
|
|
}];
|
|
}
|
|
}
|
|
|
|
export function getRestoreSaveOptSchema(fieldOptions) {
|
|
return new RestoreSaveOptSchema(fieldOptions);
|
|
}
|
|
|
|
export class RestoreDisableOptionSchema extends BaseUISchema {
|
|
constructor(fieldOptions={}, initValues={}) {
|
|
super({
|
|
id: null,
|
|
...initValues,
|
|
});
|
|
|
|
this.fieldOptions = {
|
|
nodeInfo: null,
|
|
...fieldOptions,
|
|
};
|
|
}
|
|
|
|
get idAttribute() {
|
|
return 'id';
|
|
}
|
|
|
|
|
|
get baseFields() {
|
|
return [{
|
|
id: 'disable_trigger',
|
|
label: gettext('Triggers'),
|
|
type: 'switch',
|
|
disable: false,
|
|
group: gettext('Disable')
|
|
}];
|
|
}
|
|
}
|
|
|
|
export function getRestoreDisableOptionSchema(fieldOptions) {
|
|
return new RestoreDisableOptionSchema(fieldOptions);
|
|
}
|
|
|
|
export class RestoreMiscellaneousSchema extends BaseUISchema {
|
|
constructor(fieldOptions={}, initValues={}) {
|
|
super({
|
|
id: null,
|
|
verbose: true,
|
|
...initValues,
|
|
});
|
|
|
|
this.fieldOptions = {
|
|
nodeInfo: null,
|
|
...fieldOptions,
|
|
};
|
|
}
|
|
|
|
get idAttribute() {
|
|
return 'id';
|
|
}
|
|
|
|
get baseFields() {
|
|
return [{
|
|
id: 'verbose',
|
|
label: gettext('Verbose messages'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Miscellaneous / Behavior'),
|
|
}, {
|
|
id: 'use_set_session_auth',
|
|
label: gettext('Use SET SESSION AUTHORIZATION'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Miscellaneous / Behavior'),
|
|
}, {
|
|
id: 'exit_on_error',
|
|
label: gettext('Exit on error'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Miscellaneous / Behavior'),
|
|
}, {
|
|
id: 'exclude_schema',
|
|
label: gettext('Exclude schema'),
|
|
type: 'text',
|
|
disabled: false,
|
|
group: gettext('Miscellaneous / Behavior')
|
|
}];
|
|
}
|
|
}
|
|
|
|
export function getRestoreMiscellaneousSchema(fieldOptions) {
|
|
return new RestoreMiscellaneousSchema(fieldOptions);
|
|
}
|
|
|
|
//Restore Schema
|
|
export default class RestoreSchema extends BaseUISchema {
|
|
|
|
constructor(restoreSectionSchema, restoreTypeObjSchema, restoreSaveOptSchema, restoreDisableOptionSchema, restoreMiscellaneousSchema, fieldOptions = {}, treeNodeInfo={}, pgBrowser=null) {
|
|
super({
|
|
custom: false,
|
|
file: undefined,
|
|
role: undefined,
|
|
format: 'custom',
|
|
verbose: true,
|
|
blobs: true,
|
|
encoding: undefined,
|
|
database: undefined,
|
|
schemas: undefined,
|
|
tables: undefined,
|
|
functions: undefined,
|
|
triggers: undefined,
|
|
trigger_funcs: undefined,
|
|
indexes: undefined
|
|
});
|
|
|
|
this.fieldOptions = {
|
|
encoding: null,
|
|
role: null,
|
|
...fieldOptions,
|
|
};
|
|
|
|
this.getSectionSchema = restoreSectionSchema;
|
|
this.getRestoreTypeObjSchema = restoreTypeObjSchema;
|
|
this.getRestoreSaveOptSchema = restoreSaveOptSchema;
|
|
this.getRestoreDisableOptionSchema = restoreDisableOptionSchema;
|
|
this.getRestoreMiscellaneousSchema = restoreMiscellaneousSchema;
|
|
this.treeNodeInfo = treeNodeInfo;
|
|
this.pgBrowser = pgBrowser;
|
|
}
|
|
|
|
get idAttribute() {
|
|
return 'id';
|
|
}
|
|
|
|
get baseFields() {
|
|
let obj = this;
|
|
return [{
|
|
id: 'format',
|
|
label: gettext('Format'),
|
|
disabled: false,type: 'select',
|
|
controlProps: { allowClear: false, width: '100%' },
|
|
options: [{
|
|
label: gettext('Custom or tar'),
|
|
value: 'custom',
|
|
},
|
|
{
|
|
label: gettext('Directory'),
|
|
value: 'directory',
|
|
}],
|
|
}, {
|
|
id: 'file',
|
|
label: gettext('Filename'),
|
|
type: (state) => {
|
|
return {
|
|
type: 'file',
|
|
controlProps: {
|
|
dialogType: state.format == 'directory' ? 'select_folder' : 'select_file',
|
|
supportedTypes: ['*', 'backup', 'sql', 'patch'],
|
|
dialogTitle: 'Select file',
|
|
}
|
|
};
|
|
},
|
|
disabled: false,
|
|
deps: ['format']
|
|
}, {
|
|
id: 'no_of_jobs',
|
|
label: gettext('Number of jobs'),
|
|
type: 'int',
|
|
}, {
|
|
id: 'role',
|
|
label: gettext('Role name'),
|
|
node: 'role',
|
|
type: 'select',
|
|
options: obj.fieldOptions.role,
|
|
controlProps: {
|
|
allowClear: false,
|
|
},
|
|
}, {
|
|
type: 'nested-fieldset',
|
|
label: gettext('Sections'),
|
|
group: gettext('Data Options'),
|
|
schema:obj.getSectionSchema(),
|
|
visible: true
|
|
}, {
|
|
type: 'nested-fieldset',
|
|
label: gettext('Type of objects'),
|
|
group: gettext('Data Options'),
|
|
schema:obj.getRestoreTypeObjSchema(),
|
|
visible: true
|
|
}, {
|
|
type: 'nested-fieldset',
|
|
label: gettext('Do not save'),
|
|
group: gettext('Data Options'),
|
|
schema:obj.getRestoreSaveOptSchema(),
|
|
visible: true
|
|
}, {
|
|
id: 'include_create_database',
|
|
label: gettext('Include CREATE DATABASE statement'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Query Options')
|
|
}, {
|
|
id: 'clean',
|
|
label: gettext('Clean before restore'),
|
|
type: 'switch',
|
|
group: gettext('Query Options'),
|
|
inlineNext: true,
|
|
disabled: function(state) {
|
|
if(obj.selectedNodeType === 'function' || obj.selectedNodeType === 'trigger_function') {
|
|
state.clean = true;
|
|
return true;
|
|
}
|
|
},
|
|
}, {
|
|
id: 'if_exists',
|
|
label: gettext('Include IF EXISTS clause'),
|
|
type: 'switch',
|
|
group: gettext('Query Options'),
|
|
deps: ['clean'],
|
|
disabled: function(state) {
|
|
if (state.clean) {
|
|
return false;
|
|
}
|
|
state.if_exists = false;
|
|
return true;
|
|
},
|
|
}, {
|
|
id: 'single_transaction',
|
|
label: gettext('Single transaction'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Query Options'),
|
|
}, {
|
|
id: 'enable_row_security',
|
|
label: gettext('Enable row security'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Table Options'),
|
|
}, {
|
|
id: 'no_data_fail_table',
|
|
label: gettext('No data for failed tables'),
|
|
type: 'switch',
|
|
disabled: false,
|
|
group: gettext('Table Options'),
|
|
}, {
|
|
type: 'nested-fieldset',
|
|
label: gettext('Disable'),
|
|
group: gettext('Options'),
|
|
schema:obj.getRestoreDisableOptionSchema(),
|
|
visible: true
|
|
}, {
|
|
type: 'nested-fieldset',
|
|
label: gettext('Miscellaneous / Behavior'),
|
|
group: gettext('Options'),
|
|
schema:obj.getRestoreMiscellaneousSchema(),
|
|
visible: true
|
|
}];
|
|
}
|
|
|
|
validate(state, setError) {
|
|
if (isEmptyString(state.service)) {
|
|
let errmsg = null;
|
|
/* events validation*/
|
|
if (!state.file) {
|
|
errmsg = gettext('Please provide a filename.');
|
|
setError('file', errmsg);
|
|
return true;
|
|
} else {
|
|
setError('file', null);
|
|
}
|
|
}
|
|
}
|
|
}
|