diff --git ql/src/java/org/apache/hadoop/hive/ql/Driver.java ql/src/java/org/apache/hadoop/hive/ql/Driver.java index c09ffde..86db406 100644 --- ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -901,8 +901,19 @@ private void releaseLocks(List hiveLocks) { perfLogger.PerfLogEnd(CLASS_NAME, PerfLogger.RELEASE_LOCKS); } - public CommandProcessorResponse run(String command) throws CommandNeedRetryException { - CommandProcessorResponse cpr = runInternal(command); + public CommandProcessorResponse run(String command) + throws CommandNeedRetryException { + return run(command, false); + } + + public CommandProcessorResponse run() + throws CommandNeedRetryException { + return run(null, true); + } + + public CommandProcessorResponse run(String command, boolean alreadyCompiled) + throws CommandNeedRetryException { + CommandProcessorResponse cpr = runInternal(command, alreadyCompiled); if(cpr.getResponseCode() == 0) { return cpr; } @@ -957,7 +968,25 @@ public CommandProcessorResponse run(String command) throws CommandNeedRetryExcep } return cpr; } - private CommandProcessorResponse runInternal(String command) throws CommandNeedRetryException { + + public CommandProcessorResponse compileAndRespond(String command) { + return new CommandProcessorResponse(compileInternal(command), + errorMessage, SQLState); + } + + private int compileInternal(String command) { + int ret; + synchronized (compileMonitor) { + ret = compile(command); + } + if (ret != 0) { + releaseLocks(ctx.getHiveLocks()); + } + return ret; + } + + private CommandProcessorResponse runInternal(String command, boolean alreadyCompiled) + throws CommandNeedRetryException { errorMessage = null; SQLState = null; downstreamError = null; @@ -990,12 +1019,11 @@ private CommandProcessorResponse runInternal(String command) throws CommandNeedR perfLogger.PerfLogBegin(CLASS_NAME, PerfLogger.TIME_TO_SUBMIT); int ret; - synchronized (compileMonitor) { - ret = compile(command); - } - if (ret != 0) { - releaseLocks(ctx.getHiveLocks()); - return new CommandProcessorResponse(ret, errorMessage, SQLState); + if (!alreadyCompiled) { + ret = compileInternal(command); + if (ret != 0) { + return new CommandProcessorResponse(ret, errorMessage, SQLState); + } } boolean requireLock = false; diff --git service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java index 4ee1b74..3e59374 100644 --- service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java +++ service/src/java/org/apache/hive/service/cli/operation/SQLOperation.java @@ -76,19 +76,13 @@ public SQLOperation(HiveSession parentSession, String statement, Map