diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java index 2ece97e..fe2bc0d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java @@ -486,6 +486,18 @@ protected void initialize(Class type, Object oldInstance, Object newInstance, } } + /** + * Need to serialize org.antlr.runtime.CommonToken + */ + public static class CommonTokenDelegate extends PersistenceDelegate { + @Override + protected Expression instantiate(Object oldInstance, Encoder out) { + CommonToken ct = (CommonToken)oldInstance; + Object[] args = {ct.getType(), ct.getText()}; + return new Expression(ct, ct.getClass(), "new", args); + } + } + public static void setMapRedWork(Configuration conf, MapredWork w, String hiveScratchDir) { setMapWork(conf, w.getMapWork(), hiveScratchDir, true); if (w.getReduceWork() != null) { @@ -711,7 +723,7 @@ public static MapredWork clonePlan(MapredWork plan) { PerfLogger perfLogger = PerfLogger.getPerfLogger(); perfLogger.PerfLogBegin(LOG, PerfLogger.CLONE_PLAN); ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); - Configuration conf = new Configuration(); + Configuration conf = (Configuration)new HiveConf(); serializePlan(plan, baos, conf, true); MapredWork newPlan = deserializePlan(new ByteArrayInputStream(baos.toByteArray()), MapredWork.class, conf, true); @@ -740,6 +752,7 @@ public void exceptionThrown(Exception e) { e.setPersistenceDelegate(org.datanucleus.store.types.backed.Map.class, new MapDelegate()); e.setPersistenceDelegate(org.datanucleus.store.types.backed.List.class, new ListDelegate()); + e.setPersistenceDelegate(org.antlr.runtime.CommonToken.class, new CommonTokenDelegate()); e.writeObject(plan); e.close();