extract-mysql-schema 0.6.1 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +22 -9
- package/package.json +1 -1
- package/run.js +2 -2
package/index.js
CHANGED
|
@@ -87,7 +87,7 @@ const extractSchemas = async function (connection, options) {
|
|
|
87
87
|
JOIN INFORMATION_SCHEMA.INNODB_TABLES T1 ON T1.TABLE_ID=I.TABLE_ID
|
|
88
88
|
LEFT JOIN INFORMATION_SCHEMA.TABLES T2 ON T1.NAME=CONCAT(T2.TABLE_SCHEMA,'/',T2.TABLE_NAME)
|
|
89
89
|
JOIN information_schema.COLUMNS C on C.TABLE_SCHEMA=T2.TABLE_SCHEMA and C.TABLE_NAME=T2.TABLE_NAME and C.COLUMN_NAME=F.NAME
|
|
90
|
-
WHERE T2.TABLE_SCHEMA = '
|
|
90
|
+
WHERE T2.TABLE_SCHEMA = '${schemaName}' and F.POS=0
|
|
91
91
|
ORDER BY T2.TABLE_SCHEMA,T2.TABLE_NAME,I.NAME,F.POS
|
|
92
92
|
`);
|
|
93
93
|
queryIndexes=queryIndexes[0];
|
|
@@ -95,8 +95,10 @@ const extractSchemas = async function (connection, options) {
|
|
|
95
95
|
let queryColumns = await adapter.query(`
|
|
96
96
|
SELECT T.TABLE_TYPE,C.*,
|
|
97
97
|
CASE WHEN EXISTS(SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS C2 WHERE C2.TABLE_SCHEMA=C.TABLE_SCHEMA and C2.TABLE_NAME=C.TABLE_NAME AND C2.COLUMN_KEY='PRI' AND C.COLUMN_KEY='PRI' AND C2.COLUMN_NAME<>C.COLUMN_NAME) THEN 'YES' ELSE 'NO' END AS IS_COMPOUND_KEY
|
|
98
|
-
|
|
98
|
+
,TP.PARTITION_METHOD,TP.PARTITION_EXPRESSION
|
|
99
|
+
FROM INFORMATION_SCHEMA.COLUMNS C
|
|
99
100
|
LEFT JOIN INFORMATION_SCHEMA.TABLES T ON T.TABLE_SCHEMA=C.TABLE_SCHEMA AND T.TABLE_NAME=C.TABLE_NAME
|
|
101
|
+
LEFT JOIN INFORMATION_SCHEMA.PARTITIONS TP ON TP.TABLE_SCHEMA=C.TABLE_SCHEMA AND TP.TABLE_NAME=C.TABLE_NAME AND TP.PARTITION_NAME IS NOT NULL
|
|
100
102
|
where C.TABLE_SCHEMA ='${schemaName}'
|
|
101
103
|
order by C.TABLE_NAME,C.ORDINAL_POSITION
|
|
102
104
|
`);
|
|
@@ -164,7 +166,7 @@ const extractSchemas = async function (connection, options) {
|
|
|
164
166
|
table_type: 'BASE',
|
|
165
167
|
table_catalog: schemaName,
|
|
166
168
|
table_name: tableName,
|
|
167
|
-
table_schema: schemaName
|
|
169
|
+
table_schema: schemaName,
|
|
168
170
|
}
|
|
169
171
|
};
|
|
170
172
|
wrappers[tableName] = wrapper;
|
|
@@ -181,14 +183,17 @@ const extractSchemas = async function (connection, options) {
|
|
|
181
183
|
isCompoundKey: queryColumns[i]['IS_COMPOUND_KEY'] === 'YES',
|
|
182
184
|
isNullable: queryColumns[i]['IS_NULLABLE'] === 'YES',
|
|
183
185
|
isAutoNumber: queryColumns[i]['EXTRA'] === 'auto_increment',
|
|
184
|
-
generated: queryColumns[i]['EXTRA'].indexOf('
|
|
185
|
-
|
|
186
|
+
generated: queryColumns[i]['EXTRA'].indexOf('STORED GENERATED') >=0 ? "STORED" : (
|
|
187
|
+
queryColumns[i]['EXTRA'].indexOf('DEFAULT_GENERATED') >= 0 ? (queryColumns[i]['EXTRA'].indexOf('on update') > 0 ? "ALWAYS" : "BY DEFAULT") : "NEVER"
|
|
188
|
+
),
|
|
189
|
+
expression: queryColumns[i]['GENERATION_EXPRESSION'] !== '' ? queryColumns[i]['GENERATION_EXPRESSION'].replace(/\\'/g,"'") : null,
|
|
190
|
+
isUpdatable: queryColumns[i]['EXTRA'].indexOf('DEFAULT_GENERATED') < 0 && queryColumns[i]['EXTRA'].indexOf('STORED GENERATED') < 0,
|
|
186
191
|
type: queryColumns[i]['DATA_TYPE'],
|
|
187
192
|
defaultValue: queryColumns[i]['COLUMN_DEFAULT'] || "",
|
|
188
193
|
references:[]
|
|
189
194
|
};
|
|
190
195
|
let extra = queryColumns[i]['EXTRA']||"";
|
|
191
|
-
extra=extra.replace(/DEFAULT_GENERATED\w?/g,'').replace(/auto_increment\w?/g,'');
|
|
196
|
+
extra=extra.replace(/STORED GENERATED\w?/g,'').replace(/DEFAULT_GENERATED\w?/g,'').replace(/auto_increment\w?/g,'');
|
|
192
197
|
let def = column.defaultValue?(column.defaultValue):"";
|
|
193
198
|
if(def!=="CURRENT_TIMESTAMP" && def) {
|
|
194
199
|
if(def.indexOf('(')>0) def=`(${def})`;
|
|
@@ -197,8 +202,15 @@ const extractSchemas = async function (connection, options) {
|
|
|
197
202
|
else def=`('${def}')`;
|
|
198
203
|
}
|
|
199
204
|
}
|
|
205
|
+
if(wrapper.partition===undefined && queryColumns[i]['PARTITION_METHOD']!==null) wrapper.partition=`PARTITION BY ${queryColumns[i]['PARTITION_METHOD']}(${queryColumns[i]['PARTITION_EXPRESSION']})`;
|
|
200
206
|
if(def) def=`DEFAULT ${def}`;
|
|
201
|
-
|
|
207
|
+
if(column.generated==="STORED") def = `${column.expression} STORED`;
|
|
208
|
+
let notNull = column.isNullable?"NULL":"NOT NULL";
|
|
209
|
+
if(column.generated==="STORED") {
|
|
210
|
+
def = `(${column.expression}) STORED`;
|
|
211
|
+
notNull=""
|
|
212
|
+
}
|
|
213
|
+
definition.push(`${name}\t${column.sqltype}\t${column.isAutoNumber && column.isPrimaryKey ?" auto_increment":""}${def}\t${notNull}${column.isPrimaryKey && !column.isCompoundKey?" PRIMARY KEY":""}${extra}`);
|
|
202
214
|
|
|
203
215
|
if(foreign[tableName+"_"+name]!==undefined) {
|
|
204
216
|
column.references.push(foreign[tableName+"_"+name]);
|
|
@@ -214,7 +226,8 @@ const extractSchemas = async function (connection, options) {
|
|
|
214
226
|
Object.keys(wrappers).forEach((name)=>{
|
|
215
227
|
let wrapper = wrappers[name];
|
|
216
228
|
let definition = spaceTabs(wrapper.definition).join('\n ,');
|
|
217
|
-
|
|
229
|
+
let partition = wrapper.partition!==undefined?'\n'+wrapper.partition:'';
|
|
230
|
+
definition = `CREATE TABLE IF NOT EXISTS ${name}\n(\n ${definition}\n)${partition};`;
|
|
218
231
|
|
|
219
232
|
let definitions = [];
|
|
220
233
|
definitions.push(definition);
|
|
@@ -350,4 +363,4 @@ DELIMITER;
|
|
|
350
363
|
|
|
351
364
|
module.exports = {
|
|
352
365
|
extractSchemas
|
|
353
|
-
};
|
|
366
|
+
};
|
package/package.json
CHANGED
package/run.js
CHANGED
|
@@ -10,8 +10,8 @@ async function main(options) {
|
|
|
10
10
|
const done = [];
|
|
11
11
|
const content = [];
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
content.push(`CREATE DATABASE IF NOT EXISTS ${config.connection.database};\nUSE ${config.connection.database};`);
|
|
14
|
+
|
|
15
15
|
|
|
16
16
|
const processFolder = function(seedPath) {
|
|
17
17
|
if(fs.existsSync(seedPath)) {
|