Skip to content
Open
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 @@ -44,6 +44,7 @@
import io.trino.sql.tree.ExecuteImmediate;
import io.trino.sql.tree.Expression;
import io.trino.sql.tree.Identifier;
import io.trino.sql.tree.Insert;
import io.trino.sql.tree.Node;
import io.trino.sql.tree.NodeLocation;
import io.trino.sql.tree.QualifiedName;
Expand Down Expand Up @@ -95,26 +96,27 @@

public class TrinoQueryProperties
{
public static final String TRINO_CATALOG_HEADER_NAME = "X-Trino-Catalog";
public static final String TRINO_SCHEMA_HEADER_NAME = "X-Trino-Schema";
public static final String TRINO_PREPARED_STATEMENT_HEADER_NAME = "X-Trino-Prepared-Statement";

private final Logger log = Logger.get(TrinoQueryProperties.class);
private final boolean isClientsUseV2Format;
private final int maxBodySize;
private final Optional<String> defaultCatalog;
private final Optional<String> defaultSchema;
private final ZstdDecompressor decompressor = ZstdDecompressor.create();

private String body = "";
private String queryType = "";
private String resourceGroupQueryType = "";
private Set<QualifiedName> tables = ImmutableSet.of();
private final Optional<String> defaultCatalog;
private final Optional<String> defaultSchema;
private Set<String> catalogs = ImmutableSet.of();
private Set<String> schemas = ImmutableSet.of();
private Set<String> catalogSchemas = ImmutableSet.of();
private boolean isNewQuerySubmission;
private Optional<String> errorMessage = Optional.empty();
private Optional<String> queryId = Optional.empty();
private final ZstdDecompressor decompressor = ZstdDecompressor.create();

public static final String TRINO_CATALOG_HEADER_NAME = "X-Trino-Catalog";
public static final String TRINO_SCHEMA_HEADER_NAME = "X-Trino-Schema";
public static final String TRINO_PREPARED_STATEMENT_HEADER_NAME = "X-Trino-Prepared-Statement";

@JsonCreator
public TrinoQueryProperties(
Expand Down Expand Up @@ -361,6 +363,7 @@ private void visitNode(Node node, ImmutableSet.Builder<QualifiedName> tableBuild
case DropCatalog s -> catalogBuilder.add(s.getCatalogName().getValue());
case DropSchema s -> setCatalogAndSchemaNameFromSchemaQualifiedName(Optional.of(s.getSchemaName()), catalogBuilder, schemaBuilder, catalogSchemaBuilder);
case DropTable s -> tableBuilder.add(qualifyName(s.getTableName()));
case Insert s -> tableBuilder.add(qualifyName(s.getTarget()));
case Query q -> q.getWith().ifPresent(with -> temporaryTables.addAll(with.getQueries().stream().map(WithQuery::getName).map(Identifier::getValue).map(QualifiedName::of).toList()));
case RenameMaterializedView s -> {
tableBuilder.add(qualifyName(s.getSource()));
Expand Down Expand Up @@ -457,20 +460,23 @@ private void setCatalogAndSchemaNameFromSchemaQualifiedName(
if (schemaOptional.isEmpty()) {
schemaBuilder.add(defaultSchema.orElseThrow(this::unsetDefaultExceptionSupplier));
catalogBuilder.add(defaultCatalog.orElseThrow(this::unsetDefaultExceptionSupplier));
catalogSchemaBuilder.add(format("%s.%s", defaultCatalog, defaultSchema));
catalogSchemaBuilder.add(format("%s.%s", defaultCatalog.orElseThrow(this::unsetDefaultExceptionSupplier),
defaultSchema.orElseThrow(this::unsetDefaultExceptionSupplier)));
}
else {
QualifiedName schema = schemaOptional.orElseThrow();
switch (schema.getParts().size()) {
case 1 -> {
schemaBuilder.add(schema.getParts().getFirst());
catalogBuilder.add(defaultCatalog.orElseThrow(this::unsetDefaultExceptionSupplier));
catalogSchemaBuilder.add(format("%s.%s", defaultCatalog, schema.getParts().getFirst()));
catalogSchemaBuilder.add(format("%s.%s", defaultCatalog.orElseThrow(this::unsetDefaultExceptionSupplier), schema.getParts().getFirst()));
break;
}
case 2 -> {
schemaBuilder.add(schema.getParts().get(1));
catalogBuilder.add(schema.getParts().getFirst());
catalogSchemaBuilder.add(format("%s.%s", schema.getParts().getFirst(), schema.getParts().getLast()));
break;
}
default -> log.error("Schema has >2 parts: %s", schema);
}
Expand All @@ -487,8 +493,7 @@ private QualifiedName qualifyName(QualifiedName name)
{
List<String> nameParts = name.getParts();
return switch (nameParts.size()) {
case 1 ->
QualifiedName.of(defaultCatalog.orElseThrow(this::unsetDefaultExceptionSupplier), defaultSchema.orElseThrow(this::unsetDefaultExceptionSupplier), nameParts.getFirst());
case 1 -> QualifiedName.of(defaultCatalog.orElseThrow(this::unsetDefaultExceptionSupplier), defaultSchema.orElseThrow(this::unsetDefaultExceptionSupplier), nameParts.getFirst());
case 2 -> QualifiedName.of(defaultCatalog.orElseThrow(this::unsetDefaultExceptionSupplier), nameParts.getFirst(), nameParts.get(1));
case 3 -> QualifiedName.of(nameParts.getFirst(), nameParts.get(1), nameParts.get(2));
default -> throw new RequestParsingException("Unexpected qualified name: " + name.getParts());
Expand Down Expand Up @@ -565,7 +570,7 @@ private QualifiedName parseIdentifierStringToQualifiedName(String name)
parts.add(new Identifier(name.substring(start, name.length() - 1)));
}
else {
parts.add(new Identifier(name.substring(start, name.length())));
parts.add(new Identifier(name.substring(start)));
}
return QualifiedName.of(parts);
}
Expand Down
Loading