47 lines
1.9 KiB
JavaScript
47 lines
1.9 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* transform.js
|
|
* Converte server.js de sintaxe MySQL/adapter para PostgreSQL nativo (pg).
|
|
* Uso: node transform.js > server_new.js
|
|
*/
|
|
import { readFileSync, writeFileSync } from 'fs';
|
|
|
|
let code = readFileSync('./server.js', 'utf8');
|
|
|
|
// 1. Remove the dead initTables function (MySQL DDL, never called)
|
|
code = code.replace(/\/\/ Initialization: Create tables if not exist[\s\S]*?^\/\/ initTables\(\); removed from here\s*/m, '');
|
|
|
|
// 2. Fix all simple ? placeholders in pool.query calls
|
|
// Strategy: for each pool.query or client.query call, replace ? sequentially with $1, $2...
|
|
function fixPlaceholders(sql) {
|
|
let i = 0;
|
|
return sql.replace(/\?/g, () => `$${++i}`);
|
|
}
|
|
|
|
// 3. Replace INSERT INTO table SET ? with helper call marker
|
|
// 4. Replace UPDATE table SET ? WHERE id = ? with helper call marker
|
|
// These need manual per-call replacement, done below
|
|
|
|
// Fix simple queries with ? -> $n (for strings not containing SET ?)
|
|
code = code.replace(/pool\.query\('([^']*?)'\s*,\s*\[([^\]]+)\]\)/g, (match, sql, params) => {
|
|
if (sql.includes('SET ?') || sql.includes('SET?')) return match; // skip complex
|
|
const fixed = fixPlaceholders(sql);
|
|
return `pool.query('${fixed}', [${params}])`;
|
|
});
|
|
|
|
code = code.replace(/pool\.query\(`([\s\S]*?)`\s*,\s*\[([^\]]+)\]\)/g, (match, sql, params) => {
|
|
if (sql.includes('SET ?') || sql.includes('ON DUPLICATE')) return match;
|
|
const fixed = fixPlaceholders(sql);
|
|
return `pool.query(\`${fixed}\`, [${params}])`;
|
|
});
|
|
|
|
// Fix client.query inside withTransaction
|
|
code = code.replace(/client\.query\('([^']*?)'\s*,\s*\[([^\]]+)\]\)/g, (match, sql, params) => {
|
|
if (sql.includes('SET ?')) return match;
|
|
const fixed = fixPlaceholders(sql);
|
|
return `client.query('${fixed}', [${params}])`;
|
|
});
|
|
|
|
writeFileSync('./server_transformed.js', code, 'utf8');
|
|
console.log('Done. Check server_transformed.js');
|