apache/shardingsphere · error · UnsupportedSQLOperationException
1
1
Error message
Unsupported SQL operation: CREATE TEMPORARY TABLE.
What it means
Error "Unsupported SQL operation: CREATE TEMPORARY TABLE." thrown in apache/shardingsphere.
Source
Thrown at infra/context/src/main/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java:74
SQLRewriteResult rewriteResult = rewrite(queryContext, globalRuleMetaData, props, routeContext);
ExecutionContext result = createExecutionContext(queryContext, routeContext, rewriteResult);
logSQL(queryContext, props, result);
return result;
}
private void check(final QueryContext queryContext) {
checkUnsupportedTemporaryTableDDL(queryContext);
if (queryContext.getHintValueContext().isSkipMetadataValidate()) {
return;
}
ShardingSphereDatabase database = queryContext.getUsedDatabase();
new SupportedSQLCheckEngine().checkSQL(database.getRuleMetaData().getRules(), queryContext.getSqlStatementContext(), database);
}
private void checkUnsupportedTemporaryTableDDL(final QueryContext queryContext) {
SQLStatement sqlStatement = queryContext.getSqlStatementContext().getSqlStatement();
if (sqlStatement instanceof CreateTableStatement && ((CreateTableStatement) sqlStatement).isTemporary()) {
throw new UnsupportedSQLOperationException("CREATE TEMPORARY TABLE");
}
if (sqlStatement instanceof DropTableStatement && ((DropTableStatement) sqlStatement).isTemporary()) {
throw new UnsupportedSQLOperationException("DROP TEMPORARY TABLE");
}
}
private RouteContext route(final QueryContext queryContext, final RuleMetaData globalRuleMetaData, final ConfigurationProperties props) {
ShardingSphereDatabase database = queryContext.getUsedDatabase();
return new SQLRouteEngine(database.getRuleMetaData().getRules(), props).route(queryContext, globalRuleMetaData, database);
}
private SQLRewriteResult rewrite(final QueryContext queryContext, final RuleMetaData globalRuleMetaData, final ConfigurationProperties props, final RouteContext routeContext) {
SQLRewriteEntry sqlRewriteEntry = new SQLRewriteEntry(queryContext.getUsedDatabase(), globalRuleMetaData, props);
return sqlRewriteEntry.rewrite(queryContext, routeContext);
}
private ExecutionContext createExecutionContext(final QueryContext queryContext, final RouteContext routeContext, final SQLRewriteResult rewriteResult) {
return new ExecutionContext(queryContext, ExecutionContextBuilder.build(queryContext.getUsedDatabase(), rewriteResult, queryContext.getSqlStatementContext()), routeContext);View on GitHub (pinned to e952770a21)
Solutions
- Create a regular (non-temporary) table instead.
- Remove the TEMPORARY keyword and let the table be routed as a normal sharding or single table.
- Perform the temporary table operation directly on the target database outside ShardingSphere.
When it happens
Trigger: A CREATE TEMPORARY TABLE statement is submitted through the ShardingSphere kernel processor, which does not support temporary tables.
Common situations: Applications or ORM tools issuing CREATE TEMPORARY TABLE for intermediate results through ShardingSphere-Proxy or JDBC.
AI-assisted analysis of apache/shardingsphere@e952770a21 (2026-08-14).
Data as JSON: /api/errors/9ccafde79cfe0b89.
Report an issue: GitHub.