Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ public DispatchQuery createDispatchQuery(
{
QueryStateMachine stateMachine = QueryStateMachine.begin(
query,
preparedQuery.getPrepareSql(),
session,
locationFactory.createQueryLocation(session.getQueryId()),
resourceGroup,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ public void queryCreatedEvent(BasicQueryInfo queryInfo)
queryInfo.getQueryId().toString(),
queryInfo.getSession().getTransactionId().map(TransactionId::toString),
queryInfo.getQuery(),
queryInfo.getPreparedQuery(),
QUEUED.toString(),
queryInfo.getSelf(),
Optional.empty(),
Expand All @@ -145,6 +146,7 @@ public void queryImmediateFailureEvent(BasicQueryInfo queryInfo, ExecutionFailur
queryInfo.getQueryId().toString(),
queryInfo.getSession().getTransactionId().map(TransactionId::toString),
queryInfo.getQuery(),
queryInfo.getPreparedQuery(),
queryInfo.getState().toString(),
queryInfo.getSelf(),
Optional.empty(),
Expand Down Expand Up @@ -236,6 +238,7 @@ private QueryMetadata createQueryMetadata(QueryInfo queryInfo)
queryInfo.getQueryId().toString(),
queryInfo.getSession().getTransactionId().map(TransactionId::toString),
queryInfo.getQuery(),
queryInfo.getPreparedQuery(),
queryInfo.getState().toString(),
queryInfo.getSelf(),
createTextQueryPlan(queryInfo),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public class QueryInfo
private final String query;
// expand the original query to a more accurate one if the data flow indicated by the original query is too obscure.
private final Optional<String> expandedQuery;
private final Optional<String> preparedQuery;
private final QueryStats queryStats;
private final Optional<String> setCatalog;
private final Optional<String> setSchema;
Expand Down Expand Up @@ -96,6 +97,7 @@ public QueryInfo(
@JsonProperty("fieldNames") List<String> fieldNames,
@JsonProperty("query") String query,
@JsonProperty("expandedQuery") Optional<String> expandedQuery,
@JsonProperty("preparedQuery") Optional<String> preparedQuery,
@JsonProperty("queryStats") QueryStats queryStats,
@JsonProperty("setCatalog") Optional<String> setCatalog,
@JsonProperty("setSchema") Optional<String> setSchema,
Expand Down Expand Up @@ -136,6 +138,7 @@ public QueryInfo(
requireNonNull(startedTransactionId, "startedTransactionId is null");
requireNonNull(query, "query is null");
requireNonNull(expandedQuery, "expandedQuery is null");
requireNonNull(preparedQuery, "preparedQuery is null");
requireNonNull(outputStage, "outputStage is null");
requireNonNull(inputs, "inputs is null");
requireNonNull(output, "output is null");
Expand All @@ -156,6 +159,7 @@ public QueryInfo(
this.fieldNames = ImmutableList.copyOf(fieldNames);
this.query = query;
this.expandedQuery = expandedQuery;
this.preparedQuery = preparedQuery;
this.queryStats = queryStats;
this.setCatalog = setCatalog;
this.setSchema = setSchema;
Expand Down Expand Up @@ -237,6 +241,12 @@ public Optional<String> getExpandedQuery()
return expandedQuery;
}

@JsonProperty
public Optional<String> getPreparedQuery()
{
return preparedQuery;
}

@JsonProperty
public QueryStats getQueryStats()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,13 @@ public PreparedQuery prepareQuery(Session session, String query, WarningCollecto
public PreparedQuery prepareQuery(Session session, Statement wrappedStatement, WarningCollector warningCollector)
throws ParsingException, PrestoException, SemanticException
{
Statement statement = unwrapExecuteStatement(wrappedStatement, sqlParser, session, warningCollector);
Comment thread
ShashwatArghode marked this conversation as resolved.
Outdated
Statement statement = wrappedStatement;
Optional<String> prepareSql = Optional.empty();
if (statement instanceof Execute) {
prepareSql = Optional.of(session.getPreparedStatementFromExecute((Execute) statement));
statement = sqlParser.createStatement(prepareSql.get(), createParsingOptions(session, warningCollector));
}

if (statement instanceof Explain && ((Explain) statement).isAnalyze()) {
Statement innerStatement = ((Explain) statement).getStatement();
Optional<QueryType> innerQueryType = StatementUtils.getQueryType(innerStatement.getClass());
Expand All @@ -91,7 +97,7 @@ public PreparedQuery prepareQuery(Session session, Statement wrappedStatement, W
if (isLogFormattedQueryEnabled(session)) {
formattedQuery = Optional.of(getFormattedQuery(statement, parameters));
}
return new PreparedQuery(statement, parameters, formattedQuery);
return new PreparedQuery(statement, parameters, formattedQuery, prepareSql);
}

private static String getFormattedQuery(Statement statement, List<Expression> parameters)
Expand All @@ -102,16 +108,6 @@ private static String getFormattedQuery(Statement statement, List<Expression> pa
return format("-- Formatted Query:\n%s", formattedQuery);
}

private static Statement unwrapExecuteStatement(Statement statement, SqlParser sqlParser, Session session, WarningCollector warningCollector)
{
if (!(statement instanceof Execute)) {
return statement;
}

String sql = session.getPreparedStatementFromExecute((Execute) statement);
return sqlParser.createStatement(sql, createParsingOptions(session, warningCollector));
}

private static void validateParameters(Statement node, List<Expression> parameterValues)
{
int parameterCount = getParameterCount(node);
Expand All @@ -128,12 +124,14 @@ public static class PreparedQuery
private final Statement statement;
private final List<Expression> parameters;
private final Optional<String> formattedQuery;
private final Optional<String> prepareSql;

public PreparedQuery(Statement statement, List<Expression> parameters, Optional<String> formattedQuery)
public PreparedQuery(Statement statement, List<Expression> parameters, Optional<String> formattedQuery, Optional<String> prepareSql)
{
this.statement = requireNonNull(statement, "statement is null");
this.parameters = ImmutableList.copyOf(requireNonNull(parameters, "parameters is null"));
this.formattedQuery = requireNonNull(formattedQuery, "formattedQuery is null");
this.prepareSql = requireNonNull(prepareSql, "prepareSql is null");
}

public Statement getStatement()
Expand All @@ -150,5 +148,10 @@ public Optional<String> getFormattedQuery()
{
return formattedQuery;
}

public Optional<String> getPrepareSql()
{
return prepareSql;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public class QueryStateMachine

private final QueryId queryId;
private final String query;
private final Optional<String> preparedQuery;
private final Session session;
private final URI self;
private final Optional<QueryType> queryType;
Expand Down Expand Up @@ -155,6 +156,7 @@ public class QueryStateMachine

private QueryStateMachine(
String query,
Optional<String> preparedQuery,
Session session,
URI self,
ResourceGroupId resourceGroup,
Expand All @@ -166,6 +168,7 @@ private QueryStateMachine(
WarningCollector warningCollector)
{
this.query = requireNonNull(query, "query is null");
this.preparedQuery = requireNonNull(preparedQuery, "preparedQuery is null");
this.session = requireNonNull(session, "session is null");
this.queryId = session.getQueryId();
this.self = requireNonNull(self, "self is null");
Expand All @@ -186,6 +189,7 @@ private QueryStateMachine(
*/
public static QueryStateMachine begin(
String query,
Optional<String> preparedQuery,
Session session,
URI self,
ResourceGroupId resourceGroup,
Expand All @@ -199,6 +203,7 @@ public static QueryStateMachine begin(
{
return beginWithTicker(
query,
preparedQuery,
session,
self,
resourceGroup,
Expand All @@ -214,6 +219,7 @@ public static QueryStateMachine begin(

static QueryStateMachine beginWithTicker(
String query,
Optional<String> preparedQuery,
Session session,
URI self,
ResourceGroupId resourceGroup,
Expand All @@ -235,6 +241,7 @@ static QueryStateMachine beginWithTicker(

QueryStateMachine queryStateMachine = new QueryStateMachine(
query,
preparedQuery,
session,
self,
resourceGroup,
Expand Down Expand Up @@ -392,7 +399,8 @@ public BasicQueryInfo getBasicQueryInfo(Optional<BasicStageExecutionStats> rootS
queryStats,
failureCause.get(),
queryType,
warningCollector.getWarnings());
warningCollector.getWarnings(),
preparedQuery);
}

public QueryInfo getQueryInfo(Optional<StageInfo> rootStage)
Expand Down Expand Up @@ -439,6 +447,7 @@ public QueryInfo getQueryInfo(Optional<StageInfo> rootStage)
outputManager.getQueryOutputInfo().map(QueryOutputInfo::getColumnNames).orElse(ImmutableList.of()),
query,
expandedQuery.get(),
preparedQuery,
queryStats,
Optional.ofNullable(setCatalog.get()),
Optional.ofNullable(setSchema.get()),
Expand Down Expand Up @@ -932,6 +941,7 @@ public void pruneQueryInfo()
queryInfo.getFieldNames(),
queryInfo.getQuery(),
queryInfo.getExpandedQuery(),
queryInfo.getPreparedQuery(),
pruneQueryStats(queryInfo.getQueryStats()),
queryInfo.getSetCatalog(),
queryInfo.getSetSchema(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ public class BasicQueryInfo
private final ExecutionFailureInfo failureInfo;
private final Optional<QueryType> queryType;
private final List<PrestoWarning> warnings;
private final Optional<String> preparedQuery;

@ThriftConstructor
@JsonCreator
Expand All @@ -84,7 +85,8 @@ public BasicQueryInfo(
@JsonProperty("errorCode") ErrorCode errorCode,
@JsonProperty("failureInfo") ExecutionFailureInfo failureInfo,
@JsonProperty("queryType") Optional<QueryType> queryType,
@JsonProperty("warnings") List<PrestoWarning> warnings)
@JsonProperty("warnings") List<PrestoWarning> warnings,
@JsonProperty("preparedQuery") Optional<String> preparedQuery)
{
this.queryId = requireNonNull(queryId, "queryId is null");
this.session = requireNonNull(session, "session is null");
Expand All @@ -100,6 +102,7 @@ public BasicQueryInfo(
this.queryStats = requireNonNull(queryStats, "queryStats is null");
this.queryType = requireNonNull(queryType, "queryType is null");
this.warnings = requireNonNull(warnings, "warnings is null");
this.preparedQuery = requireNonNull(preparedQuery, "preparedQuery is null");
}

public BasicQueryInfo(
Expand All @@ -114,7 +117,8 @@ public BasicQueryInfo(
BasicQueryStats queryStats,
ExecutionFailureInfo failureInfo,
Optional<QueryType> queryType,
List<PrestoWarning> warnings)
List<PrestoWarning> warnings,
Optional<String> preparedQuery)
{
this(
queryId,
Expand All @@ -129,7 +133,9 @@ public BasicQueryInfo(
(failureInfo != null && failureInfo.getErrorCode() != null) ? failureInfo.getErrorCode().getType() : null,
failureInfo != null ? failureInfo.getErrorCode() : null,
failureInfo,
queryType, warnings);
queryType,
warnings,
preparedQuery);
}

public BasicQueryInfo(QueryInfo queryInfo)
Expand All @@ -147,7 +153,8 @@ public BasicQueryInfo(QueryInfo queryInfo)
queryInfo.getErrorCode(),
queryInfo.getFailureInfo(),
queryInfo.getQueryType(),
queryInfo.getWarnings());
queryInfo.getWarnings(),
queryInfo.getPreparedQuery());
}

public static BasicQueryInfo immediateFailureQueryInfo(Session session, String query, URI self, Optional<ResourceGroupId> resourceGroupId, ExecutionFailureInfo failure)
Expand All @@ -164,7 +171,8 @@ public static BasicQueryInfo immediateFailureQueryInfo(Session session, String q
immediateFailureQueryStats(),
failure,
Optional.empty(),
ImmutableList.of());
ImmutableList.of(),
Optional.empty());
}

@ThriftField(1)
Expand Down Expand Up @@ -268,6 +276,13 @@ public List<PrestoWarning> getWarnings()
return warnings;
}

@ThriftField(15)
@JsonProperty
public Optional<String> getPreparedQuery()
{
return preparedQuery;
}

@Override
public String toString()
{
Expand Down
2 changes: 1 addition & 1 deletion presto-main/src/main/resources/webapp/dist/query.js

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -925,6 +925,10 @@ export class QueryDetail extends React.Component {
$('#query').each((i, block) => {
hljs.highlightBlock(block);
});

$('#prepared-query').each((i, block) => {
hljs.highlightBlock(block);
});
}

this.setState({
Expand Down Expand Up @@ -968,6 +972,29 @@ export class QueryDetail extends React.Component {
);
}

renderPreparedQuery() {
const query = this.state.query;
if (!query.hasOwnProperty('preparedQuery') || query.preparedQuery === null) {
return;
}

return (
<div className="col-xs-12">
<h3>
Prepared Query
<a className="btn copy-button" data-clipboard-target="#prepared-query-text" data-toggle="tooltip" data-placement="right" title="Copy to clipboard">
<span className="glyphicon glyphicon-copy" aria-hidden="true" alt="Copy to clipboard"/>
</a>
</h3>
<pre id="prepared-query">
<code className="lang-sql" id="prepared-query-text">
{query.preparedQuery}
</code>
</pre>
</div>
);
}

renderSessionProperties() {
const query = this.state.query;

Expand Down Expand Up @@ -1583,6 +1610,7 @@ export class QueryDetail extends React.Component {
</code>
</pre>
</div>
{this.renderPreparedQuery()}
</div>
{this.renderStages()}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,8 @@ public BasicQueryInfo getBasicQueryInfo()
OptionalDouble.empty()),
null,
Optional.empty(),
ImmutableList.of());
ImmutableList.of(),
Optional.empty());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ public static QueryStateMachine createQueryStateMachine(
{
return QueryStateMachine.begin(
sqlString,
Optional.empty(),
session,
URI.create("fake://uri"),
new ResourceGroupId("test"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ public void testCreateMaterializedViewNotExistsTrue()

QueryStateMachine stateMachine = QueryStateMachine.begin(
sql,
Optional.empty(),
testSession,
URI.create("fake://uri"),
new ResourceGroupId("test"),
Expand All @@ -156,6 +157,7 @@ public void testCreateMaterializedViewExistsFalse()

QueryStateMachine stateMachine = QueryStateMachine.begin(
sql,
Optional.empty(),
testSession,
URI.create("fake://uri"),
new ResourceGroupId("test"),
Expand Down
Loading