diff --git a/jrunner/src/main/java/jrunner/jrunner.java b/jrunner/src/main/java/jrunner/jrunner.java index 53a0a87..f786052 100644 --- a/jrunner/src/main/java/jrunner/jrunner.java +++ b/jrunner/src/main/java/jrunner/jrunner.java @@ -208,6 +208,15 @@ public class jrunner { } try { scon = DriverManager.getConnection(scu, scn, scp); + // Migration mode only: PostgreSQL ignores setFetchSize unless autoCommit + // is false — without this it buffers the ENTIRE result set into memory + // (OOM on big tables). The migration source is read-only, so never + // committing is harmless. Do NOT do this in query mode: callers run + // committed DDL/DML through query mode, and autoCommit=false would roll + // those statements back on connection close. + if (!queryMode) { + scon.setAutoCommit(false); + } } catch (SQLException e) { System.out.println("issue connecting to source:"); e.printStackTrace(); @@ -303,6 +312,7 @@ public class jrunner { for (int i = 1; i <= cols; i++){ switch (dtn[i].toUpperCase()){ case "VARCHAR": + case "NVARCHAR": nc = rs.getString(i); if (rs.wasNull() || nc == null) { nc = "NULL"; @@ -313,6 +323,7 @@ public class jrunner { nc = "'" + nc + "'"; break; case "TEXT": + case "NTEXT": nc = rs.getString(i); if (rs.wasNull() || nc == null) { nc = "NULL"; @@ -323,6 +334,7 @@ public class jrunner { nc = "'" + nc + "'"; break; case "CHAR": + case "NCHAR": nc = rs.getString(i); if (rs.wasNull() || nc == null) { nc = "NULL"; @@ -333,6 +345,7 @@ public class jrunner { nc = "'" + nc + "'"; break; case "CLOB": + case "NCLOB": nc = rs.getString(i); if (rs.wasNull() || nc == null) { nc = "NULL";