首页 > 代码库 > Driver
Driver
aa
@Override public CommandProcessorResponse run(String command) throws CommandNeedRetryException { return run(command, false); }
然后调用下面方法
最核心
CommandProcessorResponse cpr = runInternal(command, alreadyCompiled);
public CommandProcessorResponse run(String command, boolean alreadyCompiled) throws CommandNeedRetryException { CommandProcessorResponse cpr = runInternal(command, alreadyCompiled); if(cpr.getResponseCode() == 0) { return cpr; } SessionState ss = SessionState.get(); if(ss == null) { return cpr; } MetaDataFormatter mdf = MetaDataFormatUtils.getFormatter(ss.getConf()); if(!(mdf instanceof JsonMetaDataFormatter)) { return cpr; }
调用
compileInternal这句到达核心位置
private CommandProcessorResponse runInternal(String command, boolean alreadyCompiled) int ret; if (!alreadyCompiled) { // compile internal will automatically reset the perf logger ret = compileInternal(command, true); // then we continue to use this perf logger perfLogger = SessionState.getPerfLogger(); if (ret != 0) { return createProcessorResponse(ret);
到达
compile
private int compileInternal(String command, boolean deferClose) { int ret; Metrics metrics = MetricsFactory.getInstance(); if (metrics != null) { metrics.incrementCounter(MetricsConstant.WAITING_COMPILE_OPS, 1); } final ReentrantLock compileLock = tryAcquireCompileLock(isParallelEnabled, command); if (compileLock == null) { return ErrorMsg.COMPILE_LOCK_TIMED_OUT.getErrorCode(); } try { if (metrics != null) { metrics.decrementCounter(MetricsConstant.WAITING_COMPILE_OPS, 1); } ret = compile(command, true, deferClose); } finally { compileLock.unlock(); } if (ret != 0) { try { releaseLocksAndCommitOrRollback(false, null); } catch (LockException e) { LOG.warn("Exception in releasing locks. " + org.apache.hadoop.util.StringUtils.stringifyException(e)); } }
dd\\
ParseDriver创建解析器 解析命令
并且ASTNode 在parse 做了词法分析 和语法分析。
perfLogger.PerfLogBegin(CLASS_NAME, PerfLogger.PARSE); ParseDriver pd = new ParseDriver(); ASTNode tree = pd.parse(command, ctx); tree = ParseUtils.findRootNonNullToken(tree); perfLogger.PerfLogEnd(CLASS_NAME, PerfLogger.PARSE);
Driver
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。