@@ -24,62 +24,109 @@ export default (args) => {
24
24
enumName = `enum_${ tableName } _${ columnName } `
25
25
} = args ;
26
26
27
- const newEnumName = `${ enumName } _new` ;
28
-
29
- return queryInterface . sequelize . transaction ( sequelizeOptions , ( t ) => {
30
- const newSequelizeOptions = {
31
- ...( sequelizeOptions || { } ) ,
32
- transaction : t
33
- } ;
34
-
35
- // Create a copy of the type
36
- return createEnum ( {
27
+ if ( sequelizeOptions . transaction ) {
28
+ return replaceEnum ( {
29
+ tableName,
30
+ columnName,
31
+ defaultValue,
32
+ newValues,
37
33
queryInterface,
38
- name : newEnumName ,
39
- values : newValues ,
40
- sequelizeOptions : newSequelizeOptions
41
- } )
42
- // Drop default value (ALTER COLUMN cannot cast default values)
43
- . then ( ( ) => defaultValue && unsetDefaultValueFromEnum ( {
44
- queryInterface,
45
- tableName,
46
- columnName,
47
- sequelizeOptions : newSequelizeOptions
48
- } ) )
49
- // Change column type to the new ENUM TYPE
50
- . then ( ( ) => setColumnTypeToEnum ( {
51
- tableName,
52
- columnName,
53
- enumName : newEnumName ,
54
- queryInterface,
55
- sequelizeOptions : newSequelizeOptions
56
- } ) )
57
- // Drop old ENUM
58
- . then ( ( ) => dropEnum (
59
- {
60
- name : enumName ,
61
- sequelizeOptions : newSequelizeOptions ,
62
- queryInterface
63
- }
64
- ) )
65
- // Rename new ENUM name
66
- . then ( ( ) => renameEnum ( {
67
- oldEnumName : newEnumName ,
68
- newEnumName : enumName ,
69
- queryInterface,
70
- sequelizeOptions : newSequelizeOptions
71
- } ) )
72
- . then ( ( ) => defaultValue && setColumnDefault ( {
34
+ newSequelizeOptions : sequelizeOptions ,
35
+ enumName
36
+ } ) ;
37
+ } else {
38
+ return queryInterface . sequelize . transaction ( sequelizeOptions , ( t ) => {
39
+ const newSequelizeOptions = {
40
+ ...( sequelizeOptions || { } ) ,
41
+ transaction : t
42
+ } ;
43
+ return replaceEnum ( {
73
44
tableName,
74
45
columnName,
75
46
defaultValue,
76
- defaultValueType : enumName ,
47
+ newValues ,
77
48
queryInterface,
78
- sequelizeOptions : newSequelizeOptions
79
- } ) ) ;
80
- } ) ;
49
+ newSequelizeOptions,
50
+ enumName
51
+ } ) ;
52
+ } ) ;
53
+ }
81
54
} ;
82
55
56
+ /**
57
+ * Implementation of enum replacement.
58
+ *
59
+ * @param {Object } args
60
+ * @param {String } args.tableName
61
+ * @param {String } args.columnName
62
+ * @param {String } args.defaultValue
63
+ * @param {Array } args.newValues
64
+ * @param {Object } args.queryInterface
65
+ * @param {Object } args.newSequelizeOptions
66
+ * @param {String } args.enumName
67
+ *
68
+ * @return {Promise }
69
+ */
70
+ function replaceEnum ( args ) {
71
+ const {
72
+ tableName,
73
+ columnName,
74
+ defaultValue,
75
+ newValues,
76
+ queryInterface,
77
+ newSequelizeOptions,
78
+ enumName
79
+ } = args ;
80
+
81
+ const newEnumName = `${ enumName } _new` ;
82
+
83
+ // Create a copy of the type
84
+ return createEnum ( {
85
+ queryInterface,
86
+ name : newEnumName ,
87
+ values : newValues ,
88
+ sequelizeOptions : newSequelizeOptions
89
+ } )
90
+ // Drop default value (ALTER COLUMN cannot cast default values)
91
+ . then ( ( ) => defaultValue && unsetDefaultValueFromEnum ( {
92
+ queryInterface,
93
+ tableName,
94
+ columnName,
95
+ sequelizeOptions : newSequelizeOptions
96
+ } ) )
97
+ // Change column type to the new ENUM TYPE
98
+ . then ( ( ) => setColumnTypeToEnum ( {
99
+ tableName,
100
+ columnName,
101
+ enumName : newEnumName ,
102
+ queryInterface,
103
+ sequelizeOptions : newSequelizeOptions
104
+ } ) )
105
+ // Drop old ENUM
106
+ . then ( ( ) => dropEnum (
107
+ {
108
+ name : enumName ,
109
+ sequelizeOptions : newSequelizeOptions ,
110
+ queryInterface
111
+ }
112
+ ) )
113
+ // Rename new ENUM name
114
+ . then ( ( ) => renameEnum ( {
115
+ oldEnumName : newEnumName ,
116
+ newEnumName : enumName ,
117
+ queryInterface,
118
+ sequelizeOptions : newSequelizeOptions
119
+ } ) )
120
+ . then ( ( ) => defaultValue && setColumnDefault ( {
121
+ tableName,
122
+ columnName,
123
+ defaultValue,
124
+ defaultValueType : enumName ,
125
+ queryInterface,
126
+ sequelizeOptions : newSequelizeOptions
127
+ } ) ) ;
128
+ }
129
+
83
130
/**
84
131
* Create a new ENUM.
85
132
*
0 commit comments