import fs from 'fs';
/**
 * ## sqlite与postgres不同点
 * 1.
 * sqlite: AUTOINCREAMENT
 * postgresql: GENERATED BY DEFAULT AS IDENTITY
 *
 * 2.
 * sqlite: datetime
 * postgresql: timestamp
 *
 * 3.
 * sqlite: update sqlite_sequence set seq = 1000 where name = 'sys_role' ;
 * postgresql: select setval('sys_role_id_seq', 1000);
 *
 * 4.
 * sqlite: "disabled" boolean DEFAULT (0)
 * postgresql: "disabled" boolean DEFAULT (false)
 *
 * 5.
 * sqlite: last_insert_rowid()
 * postgresql: LASTVAL()
 *
 * 6.
 * sqlite: integer
 * postgresql: bigint
 */
function transform() {
  // 读取文件列表
  const sqliteFiles = fs.readdirSync('./migration/');
  const pgFiles = fs.readdirSync('./migration-pg');
  //找出pg里面没有的文件
  const notFiles = sqliteFiles.filter(file => !pgFiles.includes(file));
  for (const notFile of notFiles) {
    //开始转换
    const sqliteSql = fs.readFileSync(`./migration/${notFile}`, 'utf-8');
    let pgSql = sqliteSql.replace(/AUTOINCREMENT/g, 'GENERATED BY DEFAULT AS IDENTITY');
    pgSql = pgSql.replace(/datetime/g, 'timestamp');
    pgSql = pgSql.replace(/boolean DEFAULT \(0\)/g, 'boolean DEFAULT (false)');
    pgSql = pgSql.replace(/integer/g, 'bigint');
    pgSql = pgSql.replace(/last_insert_rowid\(\)/g, 'LASTVAL()');
    fs.writeFileSync(`./migration-pg/${notFile}`, pgSql);
  }

  if (notFiles.length > 0) {
    console.log('sqlite->pg 转换完成');

    throw new Error('sqlite->pg 转换完成，有更新，需要测试pg');
  } else {
    console.log('sql无需更新');
  }
}
transform();
