-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathalterViewHelper.js
More file actions
64 lines (55 loc) · 2.21 KB
/
alterViewHelper.js
File metadata and controls
64 lines (55 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* @typedef {import('../../../shared/types').App} App
*/
const { getModifyViewCommentsScriptDtos } = require('./viewHelpers/commentsHelper');
const { getRenameViewScriptDtos } = require('./viewHelpers/alterNameHelper');
const { AlterScriptDto } = require('../types/AlterScriptDto');
const { getSchemaOfAlterCollection } = require('../../utils/general');
const { createView, dropView } = require('./viewHelpers/createDropViewHelper');
const { getModifySelectStatementScriptDtos } = require('./viewHelpers/alterViewStatementHelper');
/**
* @param {Object} ddlProvider
* @param {Function} mapProperties
* @returns {(view: Object) => AlterScriptDto}
*/
const getAddViewScriptDto = (ddlProvider, mapProperties) => view => {
const script = createView({ ddlProvider, mapProperties, view });
return AlterScriptDto.getInstance([script], true, false);
};
/**
* @param {Object} ddlProvider
* @returns {(view: Object) => AlterScriptDto}
*/
const getDeleteViewScriptDto = ddlProvider => view => {
const viewSchema = getSchemaOfAlterCollection(view);
const script = dropView({ ddlProvider, viewSchema });
return AlterScriptDto.getInstance([script], true, true);
};
/**
* @param {Object} ddlProvider
* @param {Function} mapProperties
* @returns {(view: Object) => Array<AlterScriptDto>}
*/
const getModifyViewScriptDtos = (ddlProvider, mapProperties) => view => {
const renameViewNameScriptDtos = getRenameViewScriptDtos(view, ddlProvider, mapProperties);
const modifySelectStatementScriptDtos = getModifySelectStatementScriptDtos(view, ddlProvider, mapProperties);
const modifyCommentsScriptDtos = getModifyViewCommentsScriptDtos(view);
return [...renameViewNameScriptDtos, ...modifySelectStatementScriptDtos, ...modifyCommentsScriptDtos].filter(
Boolean,
);
};
/**
* @param {App} app
*/
const getViewsScripts = app => {
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
const { mapProperties } = app.require('@hackolade/ddl-fe-utils');
return {
getAddViewScriptDto: getAddViewScriptDto(ddlProvider, mapProperties),
getDeleteViewScriptDto: getDeleteViewScriptDto(ddlProvider),
getModifyViewScriptDtos: getModifyViewScriptDtos(ddlProvider, mapProperties),
};
};
module.exports = {
getViewsScripts,
};