in asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java [354:588]
public void compileAndExecute(IHyracksClientConnection hcc, IRequestParameters requestParameters) throws Exception {
validateStatements(requestParameters);
trackRequest(requestParameters);
Counter resultSetIdCounter = new Counter(0);
FileSplit outputFile = null;
String threadName = Thread.currentThread().getName();
Thread.currentThread().setName(
QueryTranslator.class.getSimpleName() + ":" + requestParameters.getRequestReference().getUuid());
Map<String, String> config = new HashMap<>();
final IResultSet resultSet = requestParameters.getResultSet();
final ResultDelivery resultDelivery = requestParameters.getResultProperties().getDelivery();
final long maxResultReads = requestParameters.getResultProperties().getMaxReads();
final Stats stats = requestParameters.getStats();
final StatementProperties statementProperties = requestParameters.getStatementProperties();
final ResultMetadata outMetadata = requestParameters.getOutMetadata();
final Map<String, IAObject> stmtParams = requestParameters.getStatementParameters();
warningCollector.setMaxWarnings(sessionConfig.getMaxWarnings());
try {
for (Statement stmt : statements) {
if (sessionConfig.is(SessionConfig.FORMAT_HTML)) {
sessionOutput.out().println(ApiServlet.HTML_STATEMENT_SEPARATOR);
}
validateOperation(appCtx, activeNamespace, stmt);
MetadataProvider metadataProvider = MetadataProvider.create(appCtx, activeNamespace);
configureMetadataProvider(metadataProvider, config, resultSetIdCounter, outputFile, requestParameters,
stmt);
IStatementRewriter stmtRewriter = rewriterFactory.createStatementRewriter();
rewriteStatement(stmt, stmtRewriter, metadataProvider); // Rewrite the statement's AST.
Statement.Kind kind = stmt.getKind();
statementProperties.setKind(kind);
switch (kind) {
case SET:
handleSetStatement(stmt, config);
break;
case DATAVERSE_DECL:
activeNamespace = handleUseDataverseStatement(metadataProvider, stmt);
break;
case CREATE_DATABASE:
handleCreateDatabaseStatement(metadataProvider, stmt, requestParameters,
Creator.DEFAULT_CREATOR);
break;
case CREATE_DATAVERSE:
handleCreateDataverseStatement(metadataProvider, stmt, requestParameters,
Creator.DEFAULT_CREATOR);
break;
case DATASET_DECL:
handleCreateDatasetStatement(metadataProvider, stmt, hcc, requestParameters,
Creator.DEFAULT_CREATOR);
break;
case CREATE_INDEX:
handleCreateIndexStatement(metadataProvider, stmt, hcc, requestParameters,
Creator.DEFAULT_CREATOR);
break;
case CREATE_FULL_TEXT_FILTER:
handleCreateFullTextFilterStatement(metadataProvider, stmt);
break;
case CREATE_FULL_TEXT_CONFIG:
handleCreateFullTextConfigStatement(metadataProvider, stmt);
break;
case TYPE_DECL:
handleCreateTypeStatement(metadataProvider, stmt);
break;
case NODEGROUP_DECL:
handleCreateNodeGroupStatement(metadataProvider, stmt);
break;
case DATABASE_DROP:
handleDatabaseDropStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case DATAVERSE_DROP:
handleDataverseDropStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case TRUNCATE:
handleDatasetTruncateStatement(metadataProvider, stmt, requestParameters);
break;
case DATASET_DROP:
handleDatasetDropStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case INDEX_DROP:
handleIndexDropStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case FULL_TEXT_FILTER_DROP:
handleFullTextFilterDrop(metadataProvider, stmt, hcc, requestParameters);
break;
case FULL_TEXT_CONFIG_DROP:
handleFullTextConfigDrop(metadataProvider, stmt, hcc, requestParameters);
break;
case TYPE_DROP:
handleTypeDropStatement(metadataProvider, stmt);
break;
case NODEGROUP_DROP:
handleNodegroupDropStatement(metadataProvider, stmt);
break;
case CREATE_ADAPTER:
handleCreateAdapterStatement(metadataProvider, stmt);
break;
case ADAPTER_DROP:
handleAdapterDropStatement(metadataProvider, stmt);
break;
case CREATE_FUNCTION:
handleCreateFunctionStatement(metadataProvider, stmt, stmtRewriter, requestParameters,
Creator.DEFAULT_CREATOR);
break;
case FUNCTION_DROP:
handleFunctionDropStatement(metadataProvider, stmt, requestParameters);
break;
case CREATE_LIBRARY:
handleCreateLibraryStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case LIBRARY_DROP:
handleLibraryDropStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case CREATE_SYNONYM:
handleCreateSynonymStatement(metadataProvider, stmt, requestParameters,
Creator.DEFAULT_CREATOR);
break;
case SYNONYM_DROP:
handleDropSynonymStatement(metadataProvider, stmt, requestParameters);
break;
case CREATE_VIEW:
handleCreateViewStatement(metadataProvider, stmt, stmtRewriter, requestParameters,
Creator.DEFAULT_CREATOR);
break;
case VIEW_DROP:
handleViewDropStatement(metadataProvider, stmt, requestParameters);
break;
case LOAD:
if (stats.getProfileType() == Stats.ProfileType.FULL) {
this.jobFlags.add(JobFlag.PROFILE_RUNTIME);
}
handleLoadStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case COPY_FROM:
if (stats.getProfileType() == Stats.ProfileType.FULL) {
this.jobFlags.add(JobFlag.PROFILE_RUNTIME);
}
handleCopyFromStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case COPY_TO:
metadataProvider.setResultSetId(new ResultSetId(resultSetIdCounter.getAndInc()));
// The result should to be read just once
metadataProvider.setMaxResultReads(1);
if (stats.getProfileType() == Stats.ProfileType.FULL) {
this.jobFlags.add(JobFlag.PROFILE_RUNTIME);
}
handleCopyToStatement(metadataProvider, stmt, hcc, resultSet, resultDelivery, outMetadata,
requestParameters, stmtParams, stats);
break;
case INSERT:
case UPSERT:
if (((InsertStatement) stmt).getReturnExpression() != null) {
metadataProvider.setResultSetId(new ResultSetId(resultSetIdCounter.getAndInc()));
metadataProvider.setResultAsyncMode(resultDelivery == ResultDelivery.ASYNC
|| resultDelivery == ResultDelivery.DEFERRED);
metadataProvider.setMaxResultReads(maxResultReads);
}
if (stats.getProfileType() == Stats.ProfileType.FULL) {
this.jobFlags.add(JobFlag.PROFILE_RUNTIME);
}
handleInsertUpsertStatement(metadataProvider, stmt, hcc, resultSet, resultDelivery, outMetadata,
stats, requestParameters, stmtParams, stmtRewriter);
break;
case DELETE:
handleDeleteStatement(metadataProvider, stmt, hcc, stmtParams, stmtRewriter, requestParameters);
break;
case CREATE_FEED:
handleCreateFeedStatement(metadataProvider, stmt);
break;
case DROP_FEED:
handleDropFeedStatement(metadataProvider, stmt, hcc);
break;
case DROP_FEED_POLICY:
handleDropFeedPolicyStatement(metadataProvider, stmt);
break;
case CONNECT_FEED:
handleConnectFeedStatement(metadataProvider, stmt);
break;
case DISCONNECT_FEED:
handleDisconnectFeedStatement(metadataProvider, stmt);
break;
case START_FEED:
handleStartFeedStatement(metadataProvider, stmt, hcc);
break;
case STOP_FEED:
handleStopFeedStatement(metadataProvider, stmt);
break;
case CREATE_FEED_POLICY:
handleCreateFeedPolicyStatement(metadataProvider, stmt);
break;
case QUERY:
metadataProvider.setResultSetId(new ResultSetId(resultSetIdCounter.getAndInc()));
metadataProvider.setResultAsyncMode(
resultDelivery == ResultDelivery.ASYNC || resultDelivery == ResultDelivery.DEFERRED);
metadataProvider.setMaxResultReads(maxResultReads);
if (stats.getProfileType() == Stats.ProfileType.FULL) {
this.jobFlags.add(JobFlag.PROFILE_RUNTIME);
}
handleQuery(metadataProvider, (Query) stmt, hcc, resultSet, resultDelivery, outMetadata, stats,
requestParameters, stmtParams, stmtRewriter);
break;
case ANALYZE:
handleAnalyzeStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case ANALYZE_DROP:
handleAnalyzeDropStatement(metadataProvider, stmt, hcc, requestParameters);
break;
case COMPACT:
handleCompactStatement(metadataProvider, stmt, hcc);
break;
case FUNCTION_DECL:
handleDeclareFunctionStatement(metadataProvider, stmt);
break;
case EXTENSION:
final ExtensionStatement extStmt = (ExtensionStatement) stmt;
statementProperties.setName(extStmt.getName());
if (!isCompileOnly()) {
extStmt.handle(hcc, this, requestParameters, metadataProvider,
resultSetIdCounter.getAndInc());
}
break;
default:
throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, stmt.getSourceLocation(),
"Unexpected statement: " + kind);
}
}
} catch (Exception ex) {
this.appCtx.getRequestTracker().incrementFailedRequests();
throw ex;
} finally {
// async queries are completed after their job completes
if (ResultDelivery.ASYNC != resultDelivery) {
appCtx.getRequestTracker().complete(requestParameters.getRequestReference().getUuid());
}
Thread.currentThread().setName(threadName);
}
}