Skip to content

Trino Case Sensitivity support : Introduce NameCanonicalizer to the metadata #26339

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
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 @@ -97,7 +97,7 @@ public ListenableFuture<Void> execute(
{
Session session = stateMachine.getSession();
Map<NodeRef<Parameter>, Expression> parameterLookup = bindParameters(statement, parameters);
QualifiedObjectName originalTableName = createQualifiedObjectName(session, statement, statement.getName());
QualifiedObjectName originalTableName = createQualifiedObjectName(session, statement, statement.getName(), plannerContext.getMetadata());
RedirectionAwareTableHandle redirectionAwareTableHandle = plannerContext.getMetadata().getRedirectionAwareTableHandle(session, originalTableName);
if (redirectionAwareTableHandle.tableHandle().isEmpty()) {
if (!statement.isTableExists()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public ListenableFuture<Void> execute(
}

Session session = stateMachine.getSession();
QualifiedObjectName procedureName = createQualifiedObjectName(session, call, call.getName());
QualifiedObjectName procedureName = createQualifiedObjectName(session, call, call.getName(), plannerContext.getMetadata());
CatalogHandle catalogHandle = getRequiredCatalogHandle(plannerContext.getMetadata(), stateMachine.getSession(), call, procedureName.catalogName());
Procedure procedure = procedureRegistry.resolve(catalogHandle, procedureName.asSchemaTableName());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ else if (statement.getType() == Comment.Type.COLUMN) {

private void commentOnTable(Comment statement, Session session)
{
QualifiedObjectName originalTableName = createQualifiedObjectName(session, statement, statement.getName());
QualifiedObjectName originalTableName = createQualifiedObjectName(session, statement, statement.getName(), metadata);
if (metadata.isMaterializedView(session, originalTableName)) {
throw semanticException(
TABLE_NOT_FOUND,
Expand All @@ -116,7 +116,7 @@ private void commentOnTable(Comment statement, Session session)

private void commentOnView(Comment statement, Session session)
{
QualifiedObjectName viewName = createQualifiedObjectName(session, statement, statement.getName());
QualifiedObjectName viewName = createQualifiedObjectName(session, statement, statement.getName(), metadata);
if (!metadata.isView(session, viewName)) {
String additionalInformation;
if (metadata.getMaterializedView(session, viewName).isPresent()) {
Expand All @@ -140,7 +140,7 @@ private void commentOnColumn(Comment statement, Session session)
QualifiedName prefix = statement.getName().getPrefix()
.orElseThrow(() -> semanticException(MISSING_TABLE, statement, "Table must be specified"));

QualifiedObjectName originalObjectName = createQualifiedObjectName(session, statement, prefix);
QualifiedObjectName originalObjectName = createQualifiedObjectName(session, statement, prefix, metadata);
Optional<ViewDefinition> view = metadata.getView(session, originalObjectName);
if (view.isPresent()) {
ViewDefinition viewDefinition = view.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public ListenableFuture<Void> execute(CreateBranch statement, QueryStateMachine
{
Session session = stateMachine.getSession();

QualifiedObjectName table = createQualifiedObjectName(session, statement, statement.getTableName());
QualifiedObjectName table = createQualifiedObjectName(session, statement, statement.getTableName(), metadata);
String branch = statement.getBranchName().getValue();
Optional<String> fromBranch = statement.getFromBranch().map(Identifier::getValue);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ Analysis executeInternal(
WarningCollector warningCollector,
PlanOptimizersStatsCollector planOptimizersStatsCollector)
{
QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName());
QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName(), plannerContext.getMetadata());
Map<NodeRef<Parameter>, Expression> parameterLookup = bindParameters(statement, parameters);

String sql = getFormattedSql(statement.getQuery(), sqlParser);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ static ListenableFuture<Void> internalExecute(
Session session,
List<Expression> parameters)
{
CatalogSchemaName schema = createCatalogSchemaName(session, statement, Optional.of(statement.getSchemaName()));
CatalogSchemaName schema = createCatalogSchemaName(session, statement, Optional.of(statement.getSchemaName()), plannerContext.getMetadata());

String catalogName = schema.getCatalogName();
CatalogHandle catalogHandle = getRequiredCatalogHandle(plannerContext.getMetadata(), session, statement, catalogName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ ListenableFuture<Void> internalExecute(CreateTable statement, Session session, L
checkArgument(!statement.getElements().isEmpty(), "no columns for table");

Map<NodeRef<Parameter>, Expression> parameterLookup = bindParameters(statement, parameters);
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getName());
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getName(), plannerContext.getMetadata());
Optional<TableHandle> tableHandle;
try {
tableHandle = plannerContext.getMetadata().getTableHandle(session, tableName);
Expand Down Expand Up @@ -216,7 +216,7 @@ ListenableFuture<Void> internalExecute(CreateTable statement, Session session, L
.build());
}
else if (element instanceof LikeClause likeClause) {
QualifiedObjectName originalLikeTableName = createQualifiedObjectName(session, statement, likeClause.getTableName());
QualifiedObjectName originalLikeTableName = createQualifiedObjectName(session, statement, likeClause.getTableName(), plannerContext.getMetadata());
if (plannerContext.getMetadata().getCatalogHandle(session, originalLikeTableName.catalogName()).isEmpty()) {
throw semanticException(CATALOG_NOT_FOUND, statement, "LIKE table catalog '%s' not found", originalLikeTableName.catalogName());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public ListenableFuture<Void> execute(
Map<NodeRef<Parameter>, Expression> parameterLookup = bindParameters(statement, parameters);

Session session = stateMachine.getSession();
QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName());
QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName(), plannerContext.getMetadata());

accessControl.checkCanCreateView(session.toSecurityContext(), name);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ private static void executeDenyOnSchema(Session session, Deny statement, Metadat
throw semanticException(NOT_SUPPORTED, statement, "Denying on branch is not supported");
}

CatalogSchemaName schemaName = createCatalogSchemaName(session, statement, Optional.of(statement.getGrantObject().getName()));
CatalogSchemaName schemaName = createCatalogSchemaName(session, statement, Optional.of(statement.getGrantObject().getName()), metadata);

if (!metadata.schemaExists(session, schemaName)) {
throw semanticException(SCHEMA_NOT_FOUND, statement, "Schema '%s' does not exist", schemaName);
Expand All @@ -103,7 +103,7 @@ private static void executeDenyOnSchema(Session session, Deny statement, Metadat

private static void executeDenyOnTable(Session session, Deny statement, Metadata metadata, AccessControl accessControl)
{
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getGrantObject().getName());
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getGrantObject().getName(), metadata);
Optional<Identifier> branch = statement.getGrantObject().getBranch();

if (!metadata.isMaterializedView(session, tableName) && !metadata.isView(session, tableName)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public ListenableFuture<Void> execute(DropBranch statement, QueryStateMachine st
{
Session session = stateMachine.getSession();

QualifiedObjectName table = createQualifiedObjectName(session, statement, statement.getTableName());
QualifiedObjectName table = createQualifiedObjectName(session, statement, statement.getTableName(), metadata);
String branch = statement.getBranchName().getValue();

if (metadata.isMaterializedView(session, table)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getTable());
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getTable(), metadata);
RedirectionAwareTableHandle redirectionAwareTableHandle = metadata.getRedirectionAwareTableHandle(session, tableName);
if (redirectionAwareTableHandle.tableHandle().isEmpty()) {
if (!statement.isTableExists()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName());
QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName(), metadata);

if (!metadata.isMaterializedView(session, name)) {
if (metadata.isView(session, name)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getTable());
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getTable(), metadata);
RedirectionAwareTableHandle redirectionAwareTableHandle = metadata.getRedirectionAwareTableHandle(session, tableName);
if (redirectionAwareTableHandle.tableHandle().isEmpty()) {
String exceptionMessage = "Table '%s' does not exist".formatted(tableName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
CatalogSchemaName schema = createCatalogSchemaName(session, statement, Optional.of(statement.getSchemaName()));
CatalogSchemaName schema = createCatalogSchemaName(session, statement, Optional.of(statement.getSchemaName()), metadata);

if (!metadata.schemaExists(session, schema)) {
if (!statement.isExists()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
QualifiedObjectName originalTableName = createQualifiedObjectName(session, statement, statement.getTableName());
QualifiedObjectName originalTableName = createQualifiedObjectName(session, statement, statement.getTableName(), metadata);
if (metadata.isMaterializedView(session, originalTableName)) {
throw semanticException(
GENERIC_USER_ERROR,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName());
QualifiedObjectName name = createQualifiedObjectName(session, statement, statement.getName(), metadata);

if (metadata.isMaterializedView(session, name)) {
throw semanticException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public ListenableFuture<Void> execute(FastForwardBranch statement, QueryStateMac
{
Session session = stateMachine.getSession();

QualifiedObjectName table = createQualifiedObjectName(session, statement, statement.geTableName());
QualifiedObjectName table = createQualifiedObjectName(session, statement, statement.geTableName(), metadata);
String sourceBranch = statement.getSourceBranchName().getValue();
String targetBranch = statement.getTargetBranchName().getValue();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ private void executeGrantOnSchema(Session session, Grant statement)
throw semanticException(NOT_SUPPORTED, statement, "Granting on branch is not supported");
}

CatalogSchemaName schemaName = createCatalogSchemaName(session, statement, Optional.of(statement.getGrantObject().getName()));
CatalogSchemaName schemaName = createCatalogSchemaName(session, statement, Optional.of(statement.getGrantObject().getName()), metadata);

if (!metadata.schemaExists(session, schemaName)) {
throw semanticException(SCHEMA_NOT_FOUND, statement, "Schema '%s' does not exist", schemaName);
Expand All @@ -107,7 +107,7 @@ private void executeGrantOnSchema(Session session, Grant statement)

private void executeGrantOnTable(Session session, Grant statement)
{
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getGrantObject().getName());
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getGrantObject().getName(), metadata);
Optional<Identifier> branch = statement.getGrantObject().getBranch();

if (!metadata.isMaterializedView(session, tableName) && !metadata.isView(session, tableName)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public ListenableFuture<Void> execute(
{
Metadata metadata = plannerContext.getMetadata();
Session session = stateMachine.getSession();
QualifiedObjectName viewName = createQualifiedObjectName(session, refreshView, refreshView.getName());
QualifiedObjectName viewName = createQualifiedObjectName(session, refreshView, refreshView.getName(), metadata);

ViewDefinition viewDefinition = metadata.getView(session, viewName)
.orElseThrow(() -> semanticException(TABLE_NOT_FOUND, refreshView, "View '%s' not found", viewName));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
QualifiedObjectName originalTableName = createQualifiedObjectName(session, statement, statement.getTable());
QualifiedObjectName originalTableName = createQualifiedObjectName(session, statement, statement.getTable(), metadata);
RedirectionAwareTableHandle redirectionAwareTableHandle = metadata.getRedirectionAwareTableHandle(session, originalTableName);
if (redirectionAwareTableHandle.tableHandle().isEmpty()) {
if (!statement.isTableExists()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
QualifiedObjectName materializedViewName = createQualifiedObjectName(session, statement, statement.getSource());
QualifiedObjectName materializedViewName = createQualifiedObjectName(session, statement, statement.getSource(), metadata);
if (!metadata.isMaterializedView(session, materializedViewName)) {
if (metadata.isView(session, materializedViewName)) {
throw semanticException(
Expand All @@ -83,7 +83,7 @@ public ListenableFuture<Void> execute(
throw semanticException(TABLE_NOT_FOUND, statement, "Materialized View '%s' does not exist", materializedViewName);
}

QualifiedObjectName target = createQualifiedObjectName(session, statement, statement.getTarget());
QualifiedObjectName target = createQualifiedObjectName(session, statement, statement.getTarget(), metadata);
if (metadata.getCatalogHandle(session, target.catalogName()).isEmpty()) {
throw semanticException(CATALOG_NOT_FOUND, statement, "Target catalog '%s' not found", target.catalogName());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
CatalogSchemaName source = createCatalogSchemaName(session, statement, Optional.of(statement.getSource()));
CatalogSchemaName source = createCatalogSchemaName(session, statement, Optional.of(statement.getSource()), metadata);
CatalogSchemaName target = new CatalogSchemaName(source.getCatalogName(), statement.getTarget().getValue());

if (!metadata.schemaExists(session, source)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getSource());
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getSource(), metadata);

if (metadata.isMaterializedView(session, tableName)) {
throw semanticException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public ListenableFuture<Void> execute(
WarningCollector warningCollector)
{
Session session = stateMachine.getSession();
QualifiedObjectName viewName = createQualifiedObjectName(session, statement, statement.getSource());
QualifiedObjectName viewName = createQualifiedObjectName(session, statement, statement.getSource(), metadata);
if (metadata.isMaterializedView(session, viewName)) {
throw semanticException(
TABLE_NOT_FOUND,
Expand All @@ -81,7 +81,7 @@ public ListenableFuture<Void> execute(
throw semanticException(TABLE_NOT_FOUND, statement, "View '%s' does not exist", viewName);
}

QualifiedObjectName target = createQualifiedObjectName(session, statement, statement.getTarget());
QualifiedObjectName target = createQualifiedObjectName(session, statement, statement.getTarget(), metadata);
if (metadata.getCatalogHandle(session, target.catalogName()).isEmpty()) {
throw semanticException(CATALOG_NOT_FOUND, statement, "Target catalog '%s' not found", target.catalogName());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ private void executeRevokeOnSchema(Session session, Revoke statement)
throw semanticException(NOT_SUPPORTED, statement, "Revoking on branch is not supported");
}

CatalogSchemaName schemaName = createCatalogSchemaName(session, statement, Optional.of(statement.getGrantObject().getName()));
CatalogSchemaName schemaName = createCatalogSchemaName(session, statement, Optional.of(statement.getGrantObject().getName()), metadata);

if (!metadata.schemaExists(session, schemaName)) {
throw semanticException(SCHEMA_NOT_FOUND, statement, "Schema '%s' does not exist", schemaName);
Expand All @@ -108,7 +108,7 @@ private void executeRevokeOnSchema(Session session, Revoke statement)

private void executeRevokeOnTable(Session session, Revoke statement)
{
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getGrantObject().getName());
QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getGrantObject().getName(), metadata);
Optional<Identifier> branch = statement.getGrantObject().getBranch();

if (!metadata.isMaterializedView(session, tableName) && !metadata.isView(session, tableName)) {
Expand Down
Loading
Loading