extract-mysql-schema 0.6.2 → 0.6.5

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.
Files changed (3) hide show
  1. package/index.js +22 -9
  2. package/package.json +1 -1
  3. package/run.js +5 -3
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 = 'litservices' and F.POS=0
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
- FROM INFORMATION_SCHEMA.COLUMNS C
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('DEFAULT_GENERATED') >= 0 ? (queryColumns[i]['EXTRA'].indexOf('on update') > 0 ? "ALWAYS" : "BY DEFAULT") : "NEVER",
185
- isUpdatable: queryColumns[i]['EXTRA'].indexOf('DEFAULT_GENERATED') < 0,
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
- definition.push(`${name}\t${column.sqltype}\t${column.isAutoNumber && column.isPrimaryKey ?" auto_increment":""}${def}\t${column.isNullable?"NULL":"NOT NULL"}${column.isPrimaryKey && !column.isCompoundKey?" PRIMARY KEY":""}${extra}`);
207
+ if(column.generated==="STORED") def = `${column.expression} STORED`;
208
+ let notNull = column.isNullable?"NULL":"NOT NULL";
209
+ if(column.generated==="STORED") {
210
+ def = ` AS (${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
- definition = `CREATE TABLE IF NOT EXISTS ${name}\n(\n ${definition}\n);`;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "extract-mysql-schema",
3
- "version": "0.6.2",
3
+ "version": "0.6.5",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": "./run.js",
package/run.js CHANGED
@@ -88,6 +88,7 @@ async function main(options) {
88
88
  let options = {
89
89
  configFile:"",
90
90
  outputFile:"",
91
+ debug:false,
91
92
  columnISV:true,
92
93
  tableISV:false,
93
94
  procedureISV:false,
@@ -102,6 +103,7 @@ let argv = process.argv;
102
103
 
103
104
  for(let i=2;i<argv.length;i++) {
104
105
  if(argv[i]==="--columnISV") options.columnISV=true;
106
+ else if(argv[i]==="--debug") options.debug=true;
105
107
  else if(argv[i]==="--tableISV") options.tableISV=true;
106
108
  else if(argv[i]==="--procedureISV") options.procedureISV=true;
107
109
  else if(argv[i]==="--writeSql") options.writeSql=true;
@@ -125,11 +127,11 @@ try {
125
127
  main(options).then(()=>{
126
128
  if(options.debug) console.log("DONE");
127
129
  process.exit(0);
128
- },()=>{
129
- if(options.debug) console.log("ERROR");
130
+ },(e)=>{
131
+ console.log("ERROR",e);
130
132
  process.exit(1);
131
133
  })
132
134
  } catch (e) {
133
135
  process.exit(1);
134
136
  }
135
- })();
137
+ })();