mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-11 17:29:37 +02:00
Fix: Conversion SQL SQLite → PostgreSQL
Correction de TOUTES les requêtes SQL pour PostgreSQL: 1. Paramètres: ? → $1, $2, $3... - 234 conversions automatiques - auth.routes.js: WHERE username = $1 - Tous les routes et services corrigés 2. Booléens: 0/1 → TRUE/FALSE - WHERE enabled = 1 → WHERE enabled = TRUE - WHERE completed = 0 → WHERE completed = FALSE - rss-scheduler.js ligne 154: corrigé ERREURS RÉSOLUES: - ✅ "syntax error at end of input" (auth login) - ✅ "operator does not exist: boolean = integer" (RSS) Script: scripts/convert-sql-to-postgres.js - Conversion automatique intelligente - Gère WHERE, INSERT, UPDATE, DELETE, SELECT - Remplace ? par $N selon ordre - Convertit booléens 0/1 → TRUE/FALSE Fichiers modifiés: - routes/*.js (9 fichiers) - services/*.js (2 fichiers) - 234 requêtes SQL corrigées La connexion et les flux RSS devraient maintenant fonctionner.
This commit is contained in:
12 files changed
+235
-134
No files matched your search
Executable
+101
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// Script de conversion SQLite → PostgreSQL pour les requêtes SQL
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
console.log('🔄 Conversion des requêtes SQLite → PostgreSQL\n');
|
||||
|
||||
// Fichiers à convertir
|
||||
const files = [
|
||||
'routes/auth.routes.js',
|
||||
'routes/calendar.routes.js',
|
||||
'routes/notes.routes.js',
|
||||
'routes/openrouter.routes.js',
|
||||
'routes/rss.routes.js',
|
||||
'routes/rss.routes-v2.js',
|
||||
'routes/settings.routes.js',
|
||||
'routes/todos.routes.js',
|
||||
'routes/users.routes.js',
|
||||
'services/rss-scheduler.js',
|
||||
'services/rss-scheduler-v2.js'
|
||||
];
|
||||
|
||||
let totalChanges = 0;
|
||||
|
||||
files.forEach(file => {
|
||||
const filePath = path.join(__dirname, '..', file);
|
||||
|
||||
if (!fs.existsSync(filePath)) {
|
||||
console.log(`⏭️ ${file} n'existe pas, skip`);
|
||||
return;
|
||||
}
|
||||
|
||||
let content = fs.readFileSync(filePath, 'utf8');
|
||||
let changes = 0;
|
||||
|
||||
// 1. Convertir les paramètres ? vers $1, $2, $3...
|
||||
// Chercher toutes les requêtes SQL entre quotes
|
||||
content = content.replace(/(["'`])([^"'`]*?\bWHERE\b[^"'`]*?)(\1)/gi, (match, quote, sql, endQuote) => {
|
||||
let newSql = sql;
|
||||
let paramCount = 0;
|
||||
|
||||
// Remplacer chaque ? par $N
|
||||
newSql = newSql.replace(/\?/g, () => {
|
||||
paramCount++;
|
||||
return `$${paramCount}`;
|
||||
});
|
||||
|
||||
if (paramCount > 0) {
|
||||
changes += paramCount;
|
||||
}
|
||||
|
||||
return quote + newSql + endQuote;
|
||||
});
|
||||
|
||||
// Gérer aussi les requêtes INSERT, UPDATE, DELETE
|
||||
content = content.replace(/(["'`])([^"'`]*?\b(?:INSERT|UPDATE|DELETE|SELECT)\b[^"'`]*?)(\1)/gi, (match, quote, sql, endQuote) => {
|
||||
if (sql.includes('$')) return match; // Déjà converti
|
||||
|
||||
let newSql = sql;
|
||||
let paramCount = 0;
|
||||
|
||||
// Remplacer chaque ? par $N
|
||||
newSql = newSql.replace(/\?/g, () => {
|
||||
paramCount++;
|
||||
return `$${paramCount}`;
|
||||
});
|
||||
|
||||
if (paramCount > 0) {
|
||||
changes += paramCount;
|
||||
}
|
||||
|
||||
return quote + newSql + endQuote;
|
||||
});
|
||||
|
||||
// 2. Convertir les booléens 0/1 vers TRUE/FALSE
|
||||
// enabled = 1 → enabled = TRUE
|
||||
content = content.replace(/\bWHERE\s+(\w+)\s*=\s*1\b/gi, 'WHERE $1 = TRUE');
|
||||
content = content.replace(/\bWHERE\s+(\w+)\s*=\s*0\b/gi, 'WHERE $1 = FALSE');
|
||||
content = content.replace(/\bAND\s+(\w+)\s*=\s*1\b/gi, 'AND $1 = TRUE');
|
||||
content = content.replace(/\bAND\s+(\w+)\s*=\s*0\b/gi, 'AND $1 = FALSE');
|
||||
content = content.replace(/\bOR\s+(\w+)\s*=\s*1\b/gi, 'OR $1 = TRUE');
|
||||
content = content.replace(/\bOR\s+(\w+)\s*=\s*0\b/gi, 'OR $1 = FALSE');
|
||||
|
||||
// 3. Convertir DEFAULT dans les INSERT
|
||||
content = content.replace(/,\s*0\s*\)/g, ', FALSE)'); // Avant la fin de VALUES
|
||||
content = content.replace(/,\s*1\s*\)/g, ', TRUE)');
|
||||
content = content.replace(/VALUES\s*\(\s*1\s*,/gi, 'VALUES (TRUE,');
|
||||
content = content.replace(/VALUES\s*\(\s*0\s*,/gi, 'VALUES (FALSE,');
|
||||
|
||||
if (changes > 0) {
|
||||
fs.writeFileSync(filePath, content, 'utf8');
|
||||
console.log(`✅ ${file}: ${changes} changements`);
|
||||
totalChanges += changes;
|
||||
} else {
|
||||
console.log(`⚪ ${file}: aucun changement`);
|
||||
}
|
||||
});
|
||||
|
||||
console.log(`\n✅ Total: ${totalChanges} conversions effectuées`);
|
||||
console.log('\n📝 Vérifiez manuellement si nécessaire et testez!');
|
||||
Reference in new issue
Block a user