diff --git a/core/trino-main/src/main/java/io/trino/connector/ConnectorServices.java b/core/trino-main/src/main/java/io/trino/connector/ConnectorServices.java
index aa88537c502d..6cd5c84ad6d9 100644
--- a/core/trino-main/src/main/java/io/trino/connector/ConnectorServices.java
+++ b/core/trino-main/src/main/java/io/trino/connector/ConnectorServices.java
@@ -37,11 +37,11 @@
import io.trino.spi.connector.TableProcedureMetadata;
import io.trino.spi.eventlistener.EventListener;
import io.trino.spi.function.FunctionProvider;
+import io.trino.spi.function.table.ArgumentSpecification;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ReturnTypeSpecification.DescribedTable;
+import io.trino.spi.function.table.TableArgumentSpecification;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ArgumentSpecification;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ReturnTypeSpecification.DescribedTable;
-import io.trino.spi.ptf.TableArgumentSpecification;
import io.trino.spi.session.PropertyMetadata;
import io.trino.split.RecordPageSourceProvider;
diff --git a/core/trino-main/src/main/java/io/trino/connector/system/GlobalSystemConnector.java b/core/trino-main/src/main/java/io/trino/connector/system/GlobalSystemConnector.java
index 326d302f9183..3912bbe262c9 100644
--- a/core/trino-main/src/main/java/io/trino/connector/system/GlobalSystemConnector.java
+++ b/core/trino-main/src/main/java/io/trino/connector/system/GlobalSystemConnector.java
@@ -24,9 +24,9 @@
import io.trino.spi.connector.ConnectorSplitSource;
import io.trino.spi.connector.ConnectorTransactionHandle;
import io.trino.spi.connector.SystemTable;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.transaction.IsolationLevel;
import io.trino.transaction.InternalConnector;
import io.trino.transaction.TransactionId;
diff --git a/core/trino-main/src/main/java/io/trino/connector/system/SystemConnectorModule.java b/core/trino-main/src/main/java/io/trino/connector/system/SystemConnectorModule.java
index 1561fcaa3be6..e039bc8126a1 100644
--- a/core/trino-main/src/main/java/io/trino/connector/system/SystemConnectorModule.java
+++ b/core/trino-main/src/main/java/io/trino/connector/system/SystemConnectorModule.java
@@ -34,8 +34,8 @@
import io.trino.operator.table.ExcludeColumns;
import io.trino.operator.table.Sequence;
import io.trino.spi.connector.SystemTable;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
public class SystemConnectorModule
implements Module
diff --git a/core/trino-main/src/main/java/io/trino/metadata/CatalogTableFunctions.java b/core/trino-main/src/main/java/io/trino/metadata/CatalogTableFunctions.java
index 657cb19d8adf..23430d768b7a 100644
--- a/core/trino-main/src/main/java/io/trino/metadata/CatalogTableFunctions.java
+++ b/core/trino-main/src/main/java/io/trino/metadata/CatalogTableFunctions.java
@@ -15,7 +15,7 @@
import com.google.common.collect.Maps;
import io.trino.spi.function.SchemaFunctionName;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import javax.annotation.concurrent.ThreadSafe;
diff --git a/core/trino-main/src/main/java/io/trino/metadata/FunctionManager.java b/core/trino-main/src/main/java/io/trino/metadata/FunctionManager.java
index 0d9f4050c63c..3a21101e3ee4 100644
--- a/core/trino-main/src/main/java/io/trino/metadata/FunctionManager.java
+++ b/core/trino-main/src/main/java/io/trino/metadata/FunctionManager.java
@@ -34,7 +34,7 @@
import io.trino.spi.function.InvocationConvention.InvocationArgumentConvention;
import io.trino.spi.function.ScalarFunctionImplementation;
import io.trino.spi.function.WindowFunctionSupplier;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
import io.trino.spi.type.Type;
import io.trino.spi.type.TypeOperators;
import io.trino.type.BlockTypeOperators;
diff --git a/core/trino-main/src/main/java/io/trino/metadata/GlobalFunctionCatalog.java b/core/trino-main/src/main/java/io/trino/metadata/GlobalFunctionCatalog.java
index 803fe0d3b888..d844211d5376 100644
--- a/core/trino-main/src/main/java/io/trino/metadata/GlobalFunctionCatalog.java
+++ b/core/trino-main/src/main/java/io/trino/metadata/GlobalFunctionCatalog.java
@@ -33,8 +33,8 @@
import io.trino.spi.function.SchemaFunctionName;
import io.trino.spi.function.Signature;
import io.trino.spi.function.WindowFunctionSupplier;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
import io.trino.spi.type.TypeSignature;
import javax.annotation.concurrent.ThreadSafe;
diff --git a/core/trino-main/src/main/java/io/trino/metadata/HandleJsonModule.java b/core/trino-main/src/main/java/io/trino/metadata/HandleJsonModule.java
index def005789a67..2581657f9ae3 100644
--- a/core/trino-main/src/main/java/io/trino/metadata/HandleJsonModule.java
+++ b/core/trino-main/src/main/java/io/trino/metadata/HandleJsonModule.java
@@ -29,7 +29,7 @@
import io.trino.spi.connector.ConnectorTransactionHandle;
import io.trino.spi.exchange.ExchangeSinkInstanceHandle;
import io.trino.spi.exchange.ExchangeSourceHandle;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
public class HandleJsonModule
implements Module
diff --git a/core/trino-main/src/main/java/io/trino/metadata/TableFunctionHandle.java b/core/trino-main/src/main/java/io/trino/metadata/TableFunctionHandle.java
index 2bc0b3fccb65..6f6865ab762c 100644
--- a/core/trino-main/src/main/java/io/trino/metadata/TableFunctionHandle.java
+++ b/core/trino-main/src/main/java/io/trino/metadata/TableFunctionHandle.java
@@ -17,7 +17,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import io.trino.spi.connector.CatalogHandle;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import static java.util.Objects.requireNonNull;
diff --git a/core/trino-main/src/main/java/io/trino/metadata/TableFunctionMetadata.java b/core/trino-main/src/main/java/io/trino/metadata/TableFunctionMetadata.java
index 0469ae6a8bb9..dfef7d239fd1 100644
--- a/core/trino-main/src/main/java/io/trino/metadata/TableFunctionMetadata.java
+++ b/core/trino-main/src/main/java/io/trino/metadata/TableFunctionMetadata.java
@@ -14,7 +14,7 @@
package io.trino.metadata;
import io.trino.spi.connector.CatalogHandle;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import static java.util.Objects.requireNonNull;
diff --git a/core/trino-main/src/main/java/io/trino/metadata/TableFunctionRegistry.java b/core/trino-main/src/main/java/io/trino/metadata/TableFunctionRegistry.java
index 7debaa38e8d7..5534ffa27385 100644
--- a/core/trino-main/src/main/java/io/trino/metadata/TableFunctionRegistry.java
+++ b/core/trino-main/src/main/java/io/trino/metadata/TableFunctionRegistry.java
@@ -17,7 +17,7 @@
import io.trino.connector.CatalogServiceProvider;
import io.trino.spi.connector.CatalogHandle;
import io.trino.spi.function.SchemaFunctionName;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import javax.annotation.concurrent.ThreadSafe;
diff --git a/core/trino-main/src/main/java/io/trino/operator/EmptyTableFunctionPartition.java b/core/trino-main/src/main/java/io/trino/operator/EmptyTableFunctionPartition.java
index c5ca7a5f006b..ee510951f4b3 100644
--- a/core/trino-main/src/main/java/io/trino/operator/EmptyTableFunctionPartition.java
+++ b/core/trino-main/src/main/java/io/trino/operator/EmptyTableFunctionPartition.java
@@ -17,17 +17,17 @@
import io.trino.spi.TrinoException;
import io.trino.spi.block.Block;
import io.trino.spi.block.RunLengthEncodedBlock;
-import io.trino.spi.ptf.TableFunctionDataProcessor;
-import io.trino.spi.ptf.TableFunctionProcessorState;
-import io.trino.spi.ptf.TableFunctionProcessorState.Blocked;
-import io.trino.spi.ptf.TableFunctionProcessorState.Processed;
+import io.trino.spi.function.table.TableFunctionDataProcessor;
+import io.trino.spi.function.table.TableFunctionProcessorState;
+import io.trino.spi.function.table.TableFunctionProcessorState.Blocked;
+import io.trino.spi.function.table.TableFunctionProcessorState.Processed;
import io.trino.spi.type.Type;
import java.util.List;
import static io.airlift.concurrent.MoreFutures.toListenableFuture;
import static io.trino.spi.StandardErrorCode.FUNCTION_IMPLEMENTATION_ERROR;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Finished.FINISHED;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Finished.FINISHED;
import static java.lang.String.format;
import static java.util.Objects.requireNonNull;
diff --git a/core/trino-main/src/main/java/io/trino/operator/LeafTableFunctionOperator.java b/core/trino-main/src/main/java/io/trino/operator/LeafTableFunctionOperator.java
index a709d70175dd..c951eb369647 100644
--- a/core/trino-main/src/main/java/io/trino/operator/LeafTableFunctionOperator.java
+++ b/core/trino-main/src/main/java/io/trino/operator/LeafTableFunctionOperator.java
@@ -20,12 +20,12 @@
import io.trino.spi.connector.CatalogHandle;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplit;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
-import io.trino.spi.ptf.TableFunctionProcessorState;
-import io.trino.spi.ptf.TableFunctionProcessorState.Blocked;
-import io.trino.spi.ptf.TableFunctionProcessorState.Processed;
-import io.trino.spi.ptf.TableFunctionSplitProcessor;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.TableFunctionProcessorState;
+import io.trino.spi.function.table.TableFunctionProcessorState.Blocked;
+import io.trino.spi.function.table.TableFunctionProcessorState.Processed;
+import io.trino.spi.function.table.TableFunctionSplitProcessor;
import io.trino.split.EmptySplit;
import io.trino.sql.planner.plan.PlanNodeId;
@@ -35,7 +35,7 @@
import static com.google.common.base.Preconditions.checkState;
import static io.airlift.concurrent.MoreFutures.toListenableFuture;
import static io.trino.spi.StandardErrorCode.FUNCTION_IMPLEMENTATION_ERROR;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Finished.FINISHED;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Finished.FINISHED;
import static java.util.Objects.requireNonNull;
public class LeafTableFunctionOperator
diff --git a/core/trino-main/src/main/java/io/trino/operator/RegularTableFunctionPartition.java b/core/trino-main/src/main/java/io/trino/operator/RegularTableFunctionPartition.java
index cd17c4ae6d53..4403db6116d6 100644
--- a/core/trino-main/src/main/java/io/trino/operator/RegularTableFunctionPartition.java
+++ b/core/trino-main/src/main/java/io/trino/operator/RegularTableFunctionPartition.java
@@ -22,10 +22,10 @@
import io.trino.spi.block.Block;
import io.trino.spi.block.BlockBuilder;
import io.trino.spi.block.RunLengthEncodedBlock;
-import io.trino.spi.ptf.TableFunctionDataProcessor;
-import io.trino.spi.ptf.TableFunctionProcessorState;
-import io.trino.spi.ptf.TableFunctionProcessorState.Blocked;
-import io.trino.spi.ptf.TableFunctionProcessorState.Processed;
+import io.trino.spi.function.table.TableFunctionDataProcessor;
+import io.trino.spi.function.table.TableFunctionProcessorState;
+import io.trino.spi.function.table.TableFunctionProcessorState.Blocked;
+import io.trino.spi.function.table.TableFunctionProcessorState.Processed;
import io.trino.spi.type.Type;
import java.util.Arrays;
@@ -42,7 +42,7 @@
import static com.google.common.util.concurrent.Futures.immediateFuture;
import static io.airlift.concurrent.MoreFutures.toListenableFuture;
import static io.trino.spi.StandardErrorCode.FUNCTION_IMPLEMENTATION_ERROR;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Finished.FINISHED;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Finished.FINISHED;
import static io.trino.spi.type.BigintType.BIGINT;
import static java.lang.Math.min;
import static java.lang.Math.toIntExact;
diff --git a/core/trino-main/src/main/java/io/trino/operator/TableFunctionOperator.java b/core/trino-main/src/main/java/io/trino/operator/TableFunctionOperator.java
index e5b0715b49d4..7172673412a6 100644
--- a/core/trino-main/src/main/java/io/trino/operator/TableFunctionOperator.java
+++ b/core/trino-main/src/main/java/io/trino/operator/TableFunctionOperator.java
@@ -23,8 +23,8 @@
import io.trino.operator.RegularTableFunctionPartition.PassThroughColumnSpecification;
import io.trino.spi.Page;
import io.trino.spi.connector.SortOrder;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
import io.trino.spi.type.Type;
import io.trino.sql.planner.plan.PlanNodeId;
diff --git a/core/trino-main/src/main/java/io/trino/operator/table/ExcludeColumns.java b/core/trino-main/src/main/java/io/trino/operator/table/ExcludeColumns.java
index f2e1cda7d3bf..2ef635f3a946 100644
--- a/core/trino-main/src/main/java/io/trino/operator/table/ExcludeColumns.java
+++ b/core/trino-main/src/main/java/io/trino/operator/table/ExcludeColumns.java
@@ -21,18 +21,18 @@
import io.trino.spi.connector.ConnectorAccessControl;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.DescriptorArgument;
-import io.trino.spi.ptf.DescriptorArgumentSpecification;
-import io.trino.spi.ptf.TableArgument;
-import io.trino.spi.ptf.TableArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
-import io.trino.spi.ptf.TableFunctionDataProcessor;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.DescriptorArgument;
+import io.trino.spi.function.table.DescriptorArgumentSpecification;
+import io.trino.spi.function.table.TableArgument;
+import io.trino.spi.function.table.TableArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
+import io.trino.spi.function.table.TableFunctionDataProcessor;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
import io.trino.spi.type.RowType;
import java.util.List;
@@ -44,10 +44,10 @@
import static com.google.common.collect.Iterables.getOnlyElement;
import static io.trino.metadata.GlobalFunctionCatalog.BUILTIN_SCHEMA;
import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT;
-import static io.trino.spi.ptf.DescriptorArgument.NULL_DESCRIPTOR;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Finished.FINISHED;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Processed.usedInputAndProduced;
+import static io.trino.spi.function.table.DescriptorArgument.NULL_DESCRIPTOR;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Finished.FINISHED;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Processed.usedInputAndProduced;
import static java.lang.String.format;
import static java.util.Locale.ENGLISH;
import static java.util.stream.Collectors.joining;
diff --git a/core/trino-main/src/main/java/io/trino/operator/table/Sequence.java b/core/trino-main/src/main/java/io/trino/operator/table/Sequence.java
index e1f3b357fc16..bb713debf17b 100644
--- a/core/trino-main/src/main/java/io/trino/operator/table/Sequence.java
+++ b/core/trino-main/src/main/java/io/trino/operator/table/Sequence.java
@@ -30,17 +30,17 @@
import io.trino.spi.connector.ConnectorSplitSource;
import io.trino.spi.connector.ConnectorTransactionHandle;
import io.trino.spi.connector.FixedSplitSource;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.ReturnTypeSpecification.DescribedTable;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
-import io.trino.spi.ptf.TableFunctionProcessorState;
-import io.trino.spi.ptf.TableFunctionSplitProcessor;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.ReturnTypeSpecification.DescribedTable;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.TableFunctionProcessorState;
+import io.trino.spi.function.table.TableFunctionSplitProcessor;
import java.math.BigInteger;
import java.util.List;
@@ -52,9 +52,9 @@
import static io.trino.metadata.GlobalFunctionCatalog.BUILTIN_SCHEMA;
import static io.trino.operator.table.Sequence.SequenceFunctionSplit.MAX_SPLIT_SIZE;
import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT;
-import static io.trino.spi.ptf.Descriptor.descriptor;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Finished.FINISHED;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Processed.produced;
+import static io.trino.spi.function.table.Descriptor.descriptor;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Finished.FINISHED;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Processed.produced;
import static io.trino.spi.type.BigintType.BIGINT;
import static java.lang.String.format;
diff --git a/core/trino-main/src/main/java/io/trino/sql/analyzer/Analysis.java b/core/trino-main/src/main/java/io/trino/sql/analyzer/Analysis.java
index 136e976cf121..da7cf157036b 100644
--- a/core/trino-main/src/main/java/io/trino/sql/analyzer/Analysis.java
+++ b/core/trino-main/src/main/java/io/trino/sql/analyzer/Analysis.java
@@ -41,8 +41,8 @@
import io.trino.spi.eventlistener.ColumnInfo;
import io.trino.spi.eventlistener.RoutineInfo;
import io.trino.spi.eventlistener.TableInfo;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.security.Identity;
import io.trino.spi.type.RowType;
import io.trino.spi.type.Type;
diff --git a/core/trino-main/src/main/java/io/trino/sql/analyzer/StatementAnalyzer.java b/core/trino-main/src/main/java/io/trino/sql/analyzer/StatementAnalyzer.java
index c32f3c164d86..4a9b92da34ac 100644
--- a/core/trino-main/src/main/java/io/trino/sql/analyzer/StatementAnalyzer.java
+++ b/core/trino-main/src/main/java/io/trino/sql/analyzer/StatementAnalyzer.java
@@ -73,19 +73,19 @@
import io.trino.spi.connector.TableProcedureMetadata;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.function.OperatorType;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ArgumentSpecification;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.DescriptorArgument;
-import io.trino.spi.ptf.DescriptorArgumentSpecification;
-import io.trino.spi.ptf.ReturnTypeSpecification;
-import io.trino.spi.ptf.ReturnTypeSpecification.DescribedTable;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableArgument;
-import io.trino.spi.ptf.TableArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ArgumentSpecification;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.DescriptorArgument;
+import io.trino.spi.function.table.DescriptorArgumentSpecification;
+import io.trino.spi.function.table.ReturnTypeSpecification;
+import io.trino.spi.function.table.ReturnTypeSpecification.DescribedTable;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableArgument;
+import io.trino.spi.function.table.TableArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import io.trino.spi.security.AccessDeniedException;
import io.trino.spi.security.GroupProvider;
import io.trino.spi.security.Identity;
@@ -339,9 +339,9 @@
import static io.trino.spi.connector.StandardWarningCode.REDUNDANT_ORDER_BY;
import static io.trino.spi.function.FunctionKind.AGGREGATE;
import static io.trino.spi.function.FunctionKind.WINDOW;
-import static io.trino.spi.ptf.DescriptorArgument.NULL_DESCRIPTOR;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
-import static io.trino.spi.ptf.ReturnTypeSpecification.OnlyPassThrough.ONLY_PASS_THROUGH;
+import static io.trino.spi.function.table.DescriptorArgument.NULL_DESCRIPTOR;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.OnlyPassThrough.ONLY_PASS_THROUGH;
import static io.trino.spi.type.BigintType.BIGINT;
import static io.trino.spi.type.BooleanType.BOOLEAN;
import static io.trino.spi.type.DoubleType.DOUBLE;
diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java b/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java
index 1e1eab0bb216..33deff22e1cb 100644
--- a/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java
+++ b/core/trino-main/src/main/java/io/trino/sql/planner/LocalExecutionPlanner.java
@@ -167,9 +167,9 @@
import io.trino.spi.function.FunctionId;
import io.trino.spi.function.FunctionKind;
import io.trino.spi.function.WindowFunctionSupplier;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
import io.trino.spi.predicate.Domain;
import io.trino.spi.predicate.NullableValue;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
import io.trino.spi.type.RowType;
import io.trino.spi.type.Type;
import io.trino.spiller.PartitioningSpillerFactory;
diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/plan/TableFunctionNode.java b/core/trino-main/src/main/java/io/trino/sql/planner/plan/TableFunctionNode.java
index f62203291851..45998e07a873 100644
--- a/core/trino-main/src/main/java/io/trino/sql/planner/plan/TableFunctionNode.java
+++ b/core/trino-main/src/main/java/io/trino/sql/planner/plan/TableFunctionNode.java
@@ -19,7 +19,7 @@
import com.google.common.collect.ImmutableMap;
import io.trino.metadata.TableFunctionHandle;
import io.trino.spi.connector.CatalogHandle;
-import io.trino.spi.ptf.Argument;
+import io.trino.spi.function.table.Argument;
import io.trino.sql.planner.Symbol;
import javax.annotation.concurrent.Immutable;
diff --git a/core/trino-main/src/main/java/io/trino/sql/planner/planprinter/PlanPrinter.java b/core/trino-main/src/main/java/io/trino/sql/planner/planprinter/PlanPrinter.java
index 58aaaf4a7ce1..5a092a7b2fea 100644
--- a/core/trino-main/src/main/java/io/trino/sql/planner/planprinter/PlanPrinter.java
+++ b/core/trino-main/src/main/java/io/trino/sql/planner/planprinter/PlanPrinter.java
@@ -40,13 +40,13 @@
import io.trino.plugin.base.metrics.TDigestHistogram;
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.expression.FunctionName;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.DescriptorArgument;
+import io.trino.spi.function.table.ScalarArgument;
import io.trino.spi.predicate.Domain;
import io.trino.spi.predicate.NullableValue;
import io.trino.spi.predicate.Range;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.DescriptorArgument;
-import io.trino.spi.ptf.ScalarArgument;
import io.trino.spi.statistics.ColumnStatisticMetadata;
import io.trino.spi.statistics.TableStatisticType;
import io.trino.spi.type.Type;
@@ -159,7 +159,7 @@
import static io.trino.execution.StageInfo.getAllStages;
import static io.trino.metadata.ResolvedFunction.extractFunctionName;
import static io.trino.server.DynamicFilterService.DynamicFilterDomainStats;
-import static io.trino.spi.ptf.DescriptorArgument.NULL_DESCRIPTOR;
+import static io.trino.spi.function.table.DescriptorArgument.NULL_DESCRIPTOR;
import static io.trino.sql.DynamicFilters.extractDynamicFilters;
import static io.trino.sql.ExpressionUtils.combineConjunctsWithDuplicates;
import static io.trino.sql.planner.SystemPartitioningHandle.SINGLE_DISTRIBUTION;
diff --git a/core/trino-main/src/main/java/io/trino/tracing/TracingConnectorMetadata.java b/core/trino-main/src/main/java/io/trino/tracing/TracingConnectorMetadata.java
index 52774e48cf70..b56e16c91e15 100644
--- a/core/trino-main/src/main/java/io/trino/tracing/TracingConnectorMetadata.java
+++ b/core/trino-main/src/main/java/io/trino/tracing/TracingConnectorMetadata.java
@@ -69,8 +69,8 @@
import io.trino.spi.function.FunctionId;
import io.trino.spi.function.FunctionMetadata;
import io.trino.spi.function.SchemaFunctionName;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.security.GrantInfo;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.RoleGrant;
diff --git a/core/trino-main/src/test/java/io/trino/connector/MockConnector.java b/core/trino-main/src/test/java/io/trino/connector/MockConnector.java
index 08a910be0335..fc4227592062 100644
--- a/core/trino-main/src/test/java/io/trino/connector/MockConnector.java
+++ b/core/trino-main/src/test/java/io/trino/connector/MockConnector.java
@@ -85,10 +85,10 @@
import io.trino.spi.eventlistener.EventListener;
import io.trino.spi.expression.ConnectorExpression;
import io.trino.spi.function.FunctionProvider;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.metrics.Metrics;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.security.GrantInfo;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.RoleGrant;
diff --git a/core/trino-main/src/test/java/io/trino/connector/MockConnectorFactory.java b/core/trino-main/src/test/java/io/trino/connector/MockConnectorFactory.java
index 07517e732e4d..4a9b07a0c3f4 100644
--- a/core/trino-main/src/test/java/io/trino/connector/MockConnectorFactory.java
+++ b/core/trino-main/src/test/java/io/trino/connector/MockConnectorFactory.java
@@ -52,10 +52,10 @@
import io.trino.spi.eventlistener.EventListener;
import io.trino.spi.expression.ConnectorExpression;
import io.trino.spi.function.FunctionProvider;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.metrics.Metrics;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.security.GrantInfo;
import io.trino.spi.security.RoleGrant;
import io.trino.spi.security.ViewExpression;
diff --git a/core/trino-main/src/test/java/io/trino/connector/TestingTableFunctions.java b/core/trino-main/src/test/java/io/trino/connector/TestingTableFunctions.java
index 8f236c0d493f..24204b767eee 100644
--- a/core/trino-main/src/test/java/io/trino/connector/TestingTableFunctions.java
+++ b/core/trino-main/src/test/java/io/trino/connector/TestingTableFunctions.java
@@ -31,23 +31,23 @@
import io.trino.spi.connector.FixedSplitSource;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.function.SchemaFunctionName;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.DescriptorArgumentSpecification;
+import io.trino.spi.function.table.ReturnTypeSpecification.DescribedTable;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableArgument;
+import io.trino.spi.function.table.TableArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
+import io.trino.spi.function.table.TableFunctionDataProcessor;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.TableFunctionProcessorState;
+import io.trino.spi.function.table.TableFunctionProcessorState.Processed;
+import io.trino.spi.function.table.TableFunctionSplitProcessor;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.DescriptorArgumentSpecification;
-import io.trino.spi.ptf.ReturnTypeSpecification.DescribedTable;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableArgument;
-import io.trino.spi.ptf.TableArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
-import io.trino.spi.ptf.TableFunctionDataProcessor;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
-import io.trino.spi.ptf.TableFunctionProcessorState;
-import io.trino.spi.ptf.TableFunctionProcessorState.Processed;
-import io.trino.spi.ptf.TableFunctionSplitProcessor;
import io.trino.spi.type.RowType;
import java.util.List;
@@ -61,13 +61,13 @@
import static io.airlift.slice.SizeOf.instanceSize;
import static io.airlift.slice.Slices.utf8Slice;
import static io.trino.connector.TestingTableFunctions.ConstantFunction.ConstantFunctionSplit.DEFAULT_SPLIT_SIZE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.OnlyPassThrough.ONLY_PASS_THROUGH;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Finished.FINISHED;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Processed.produced;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Processed.usedInput;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Processed.usedInputAndProduced;
import static io.trino.spi.predicate.Utils.nativeValueToBlock;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
-import static io.trino.spi.ptf.ReturnTypeSpecification.OnlyPassThrough.ONLY_PASS_THROUGH;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Finished.FINISHED;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Processed.produced;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Processed.usedInput;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Processed.usedInputAndProduced;
import static io.trino.spi.type.BigintType.BIGINT;
import static io.trino.spi.type.BooleanType.BOOLEAN;
import static io.trino.spi.type.IntegerType.INTEGER;
diff --git a/core/trino-main/src/test/java/io/trino/sql/planner/TestTableFunctionInvocation.java b/core/trino-main/src/test/java/io/trino/sql/planner/TestTableFunctionInvocation.java
index 317d18826336..a74cc5a457b4 100644
--- a/core/trino-main/src/test/java/io/trino/sql/planner/TestTableFunctionInvocation.java
+++ b/core/trino-main/src/test/java/io/trino/sql/planner/TestTableFunctionInvocation.java
@@ -25,8 +25,8 @@
import io.trino.connector.TestingTableFunctions.TwoScalarArgumentsFunction;
import io.trino.connector.TestingTableFunctions.TwoTableArgumentsFunction;
import io.trino.spi.connector.TableFunctionApplicationResult;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.Descriptor.Field;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.Descriptor.Field;
import io.trino.sql.planner.assertions.BasePlanTest;
import io.trino.sql.planner.assertions.RowNumberSymbolMatcher;
import io.trino.sql.planner.plan.TableFunctionProcessorNode;
diff --git a/core/trino-main/src/test/java/io/trino/sql/planner/assertions/TableFunctionMatcher.java b/core/trino-main/src/test/java/io/trino/sql/planner/assertions/TableFunctionMatcher.java
index 88454654f413..e469751a4d3e 100644
--- a/core/trino-main/src/test/java/io/trino/sql/planner/assertions/TableFunctionMatcher.java
+++ b/core/trino-main/src/test/java/io/trino/sql/planner/assertions/TableFunctionMatcher.java
@@ -19,11 +19,11 @@
import io.trino.Session;
import io.trino.cost.StatsProvider;
import io.trino.metadata.Metadata;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.DescriptorArgument;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.TableArgument;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.DescriptorArgument;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.TableArgument;
import io.trino.sql.planner.Symbol;
import io.trino.sql.planner.plan.DataOrganizationSpecification;
import io.trino.sql.planner.plan.PlanNode;
diff --git a/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/test/PlanBuilder.java b/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/test/PlanBuilder.java
index 6e0f03151ca3..41e2cd994b25 100644
--- a/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/test/PlanBuilder.java
+++ b/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/test/PlanBuilder.java
@@ -33,8 +33,8 @@
import io.trino.spi.connector.ColumnHandle;
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.connector.SortOrder;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.type.Type;
import io.trino.sql.ExpressionUtils;
import io.trino.sql.analyzer.TypeSignatureProvider;
diff --git a/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/test/TableFunctionProcessorBuilder.java b/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/test/TableFunctionProcessorBuilder.java
index 5b4f3604cef6..e3a6c901eebe 100644
--- a/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/test/TableFunctionProcessorBuilder.java
+++ b/core/trino-main/src/test/java/io/trino/sql/planner/iterative/rule/test/TableFunctionProcessorBuilder.java
@@ -16,7 +16,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import io.trino.metadata.TableFunctionHandle;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.sql.planner.PlanNodeIdAllocator;
import io.trino.sql.planner.Symbol;
import io.trino.sql.planner.plan.DataOrganizationSpecification;
diff --git a/core/trino-spi/pom.xml b/core/trino-spi/pom.xml
index 75d3d71f791f..b2ae7fa8c3d1 100644
--- a/core/trino-spi/pom.xml
+++ b/core/trino-spi/pom.xml
@@ -233,6 +233,27 @@
+ -
+ true
+
java.method.returnTypeTypeParametersChanged
+ method java.util.Set<io.trino.spi.ptf.ConnectorTableFunction> io.trino.spi.connector.Connector::getTableFunctions()
+ method java.util.Set<io.trino.spi.function.table.ConnectorTableFunction> io.trino.spi.connector.Connector::getTableFunctions()
+ Relocate table function infrastructure
+
+ -
+ true
+
java.method.parameterTypeChanged
+ parameter java.util.Optional<io.trino.spi.connector.TableFunctionApplicationResult<io.trino.spi.connector.ConnectorTableHandle>> io.trino.spi.connector.ConnectorMetadata::applyTableFunction(io.trino.spi.connector.ConnectorSession, ===io.trino.spi.ptf.ConnectorTableFunctionHandle===)
+ parameter java.util.Optional<io.trino.spi.connector.TableFunctionApplicationResult<io.trino.spi.connector.ConnectorTableHandle>> io.trino.spi.connector.ConnectorMetadata::applyTableFunction(io.trino.spi.connector.ConnectorSession, ===io.trino.spi.function.table.ConnectorTableFunctionHandle===)
+ 1
+ Relocate table function infrastructure
+
+ -
+ true
+
java.class.removed
+ interface io.trino.spi.ptf.TableFunctionDataProcessor
+ Relocate table function infrastructure
+
diff --git a/core/trino-spi/src/main/java/io/trino/spi/connector/Connector.java b/core/trino-spi/src/main/java/io/trino/spi/connector/Connector.java
index 8fdb5222449e..ae511a01d18b 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/connector/Connector.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/connector/Connector.java
@@ -16,8 +16,8 @@
import io.trino.spi.Experimental;
import io.trino.spi.eventlistener.EventListener;
import io.trino.spi.function.FunctionProvider;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
import io.trino.spi.session.PropertyMetadata;
import io.trino.spi.transaction.IsolationLevel;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java b/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java
index df3871c516e8..40ca581b37b0 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorMetadata.java
@@ -26,8 +26,8 @@
import io.trino.spi.function.FunctionId;
import io.trino.spi.function.FunctionMetadata;
import io.trino.spi.function.SchemaFunctionName;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.security.GrantInfo;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.RoleGrant;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorSplitManager.java b/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorSplitManager.java
index a1be4d4fa1a6..36a141b50db0 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorSplitManager.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorSplitManager.java
@@ -14,7 +14,7 @@
package io.trino.spi.connector;
import io.trino.spi.Experimental;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
public interface ConnectorSplitManager
{
diff --git a/core/trino-spi/src/main/java/io/trino/spi/function/FunctionProvider.java b/core/trino-spi/src/main/java/io/trino/spi/function/FunctionProvider.java
index 00f831226d26..7bfbdc3ef7fb 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/function/FunctionProvider.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/FunctionProvider.java
@@ -14,8 +14,8 @@
package io.trino.spi.function;
import io.trino.spi.Experimental;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
@Experimental(eta = "2023-03-31")
public interface FunctionProvider
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/AbstractConnectorTableFunction.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/AbstractConnectorTableFunction.java
similarity index 98%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/AbstractConnectorTableFunction.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/AbstractConnectorTableFunction.java
index 2b21e3b2150a..ce73eb1b8f09 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/AbstractConnectorTableFunction.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/AbstractConnectorTableFunction.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
import io.trino.spi.connector.ConnectorAccessControl;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/Argument.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/Argument.java
similarity index 97%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/Argument.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/Argument.java
index ee2371cc911d..006a358f0c8e 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/Argument.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/Argument.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/ArgumentSpecification.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/ArgumentSpecification.java
similarity index 90%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/ArgumentSpecification.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/ArgumentSpecification.java
index 30374afa720e..48e9ab483078 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/ArgumentSpecification.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/ArgumentSpecification.java
@@ -11,14 +11,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
import javax.annotation.Nullable;
-import static io.trino.spi.ptf.Preconditions.checkArgument;
-import static io.trino.spi.ptf.Preconditions.checkNotNullOrEmpty;
+import static io.trino.spi.function.table.Preconditions.checkArgument;
+import static io.trino.spi.function.table.Preconditions.checkNotNullOrEmpty;
/**
* Abstract class to capture the three supported argument types for a table function:
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/ConnectorTableFunction.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/ConnectorTableFunction.java
similarity index 98%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/ConnectorTableFunction.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/ConnectorTableFunction.java
index d0a2659fbede..b7f7788e70a6 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/ConnectorTableFunction.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/ConnectorTableFunction.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
import io.trino.spi.connector.ConnectorAccessControl;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/ConnectorTableFunctionHandle.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/ConnectorTableFunctionHandle.java
similarity index 95%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/ConnectorTableFunctionHandle.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/ConnectorTableFunctionHandle.java
index 47df2b836356..8514e215af7c 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/ConnectorTableFunctionHandle.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/ConnectorTableFunctionHandle.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/Descriptor.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/Descriptor.java
similarity index 91%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/Descriptor.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/Descriptor.java
index 7b1387dded02..6368556a81c6 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/Descriptor.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/Descriptor.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -25,7 +25,6 @@
import java.util.Optional;
import java.util.stream.Collectors;
-import static io.trino.spi.ptf.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
@Experimental(eta = "2022-10-31")
@@ -37,7 +36,7 @@ public class Descriptor
public Descriptor(@JsonProperty("fields") List fields)
{
requireNonNull(fields, "fields is null");
- checkArgument(!fields.isEmpty(), "descriptor has no fields");
+ Preconditions.checkArgument(!fields.isEmpty(), "descriptor has no fields");
this.fields = List.copyOf(fields);
}
@@ -53,7 +52,7 @@ public static Descriptor descriptor(List names, List types)
{
requireNonNull(names, "names is null");
requireNonNull(types, "types is null");
- checkArgument(names.size() == types.size(), "names and types lists do not match");
+ Preconditions.checkArgument(names.size() == types.size(), "names and types lists do not match");
List fields = new ArrayList<>();
for (int i = 0; i < names.size(); i++) {
fields.add(new Field(names.get(i), Optional.of(types.get(i))));
@@ -105,7 +104,7 @@ public Field(String name, Optional type)
public Field(@JsonProperty("name") Optional name, @JsonProperty("type") Optional type)
{
this.name = requireNonNull(name, "name is null");
- name.ifPresent(nameValue -> checkArgument(!nameValue.isEmpty(), "name is empty"));
+ name.ifPresent(nameValue -> Preconditions.checkArgument(!nameValue.isEmpty(), "name is empty"));
this.type = requireNonNull(type, "type is null");
}
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/DescriptorArgument.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/DescriptorArgument.java
similarity index 94%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/DescriptorArgument.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/DescriptorArgument.java
index f79add30ccbf..3a11353a53fe 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/DescriptorArgument.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/DescriptorArgument.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -21,7 +21,6 @@
import java.util.Objects;
import java.util.Optional;
-import static io.trino.spi.ptf.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
/**
@@ -41,7 +40,7 @@ public class DescriptorArgument
public DescriptorArgument(@JsonProperty("descriptor") Optional descriptor)
{
this.descriptor = requireNonNull(descriptor, "descriptor is null");
- descriptor.ifPresent(descriptorValue -> checkArgument(
+ descriptor.ifPresent(descriptorValue -> Preconditions.checkArgument(
descriptorValue.getFields().stream().allMatch(field -> field.getName().isPresent()),
"All fields of a descriptor argument must have names"));
}
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/DescriptorArgumentSpecification.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/DescriptorArgumentSpecification.java
similarity index 94%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/DescriptorArgumentSpecification.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/DescriptorArgumentSpecification.java
index 1e7eea6b4ae4..89f722b837d7 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/DescriptorArgumentSpecification.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/DescriptorArgumentSpecification.java
@@ -11,11 +11,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
-import static io.trino.spi.ptf.Preconditions.checkArgument;
+import static io.trino.spi.function.table.Preconditions.checkArgument;
@Experimental(eta = "2022-10-31")
public class DescriptorArgumentSpecification
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/NameAndPosition.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/NameAndPosition.java
similarity index 91%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/NameAndPosition.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/NameAndPosition.java
index 59cd944e40f0..22eb163db822 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/NameAndPosition.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/NameAndPosition.java
@@ -11,14 +11,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
import java.util.Objects;
-import static io.trino.spi.ptf.Preconditions.checkArgument;
-import static io.trino.spi.ptf.Preconditions.checkNotNullOrEmpty;
+import static io.trino.spi.function.table.Preconditions.checkArgument;
+import static io.trino.spi.function.table.Preconditions.checkNotNullOrEmpty;
/**
* This class represents a descriptor field reference.
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/Preconditions.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/Preconditions.java
similarity index 96%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/Preconditions.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/Preconditions.java
index 872dbfc9b900..ba92cc888b36 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/Preconditions.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/Preconditions.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import static java.util.Objects.requireNonNull;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/Primitives.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/Primitives.java
similarity index 97%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/Primitives.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/Primitives.java
index cf5a97840af9..93a94ce62d26 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/Primitives.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/Primitives.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import java.util.HashMap;
import java.util.Map;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/ReturnTypeSpecification.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/ReturnTypeSpecification.java
similarity index 95%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/ReturnTypeSpecification.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/ReturnTypeSpecification.java
index 73f016f0ae50..d15a911de49b 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/ReturnTypeSpecification.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/ReturnTypeSpecification.java
@@ -11,11 +11,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
-import static io.trino.spi.ptf.Preconditions.checkArgument;
+import static io.trino.spi.function.table.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
/**
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/ScalarArgument.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/ScalarArgument.java
similarity index 98%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/ScalarArgument.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/ScalarArgument.java
index f0cea1c7bc57..481ae76fb118 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/ScalarArgument.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/ScalarArgument.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/ScalarArgumentSpecification.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/ScalarArgumentSpecification.java
similarity index 95%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/ScalarArgumentSpecification.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/ScalarArgumentSpecification.java
index a0afc7d26833..bf9f85cb7fae 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/ScalarArgumentSpecification.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/ScalarArgumentSpecification.java
@@ -11,12 +11,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
import io.trino.spi.type.Type;
-import static io.trino.spi.ptf.Preconditions.checkArgument;
+import static io.trino.spi.function.table.Preconditions.checkArgument;
import static java.lang.String.format;
import static java.util.Objects.requireNonNull;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableArgument.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableArgument.java
similarity index 98%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/TableArgument.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/TableArgument.java
index 1f2ece78339b..f81d8e7cc4b6 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableArgument.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableArgument.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableArgumentSpecification.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableArgumentSpecification.java
similarity index 96%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/TableArgumentSpecification.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/TableArgumentSpecification.java
index bdd209d57e84..2c29e5ee9c9c 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableArgumentSpecification.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableArgumentSpecification.java
@@ -11,11 +11,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
-import static io.trino.spi.ptf.Preconditions.checkArgument;
+import static io.trino.spi.function.table.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
@Experimental(eta = "2022-10-31")
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionAnalysis.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionAnalysis.java
similarity index 95%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionAnalysis.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionAnalysis.java
index cb58e97f9b55..1fbbe683ebe7 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionAnalysis.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionAnalysis.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
@@ -20,7 +20,6 @@
import java.util.Map;
import java.util.Optional;
-import static io.trino.spi.ptf.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toMap;
@@ -51,7 +50,7 @@ public final class TableFunctionAnalysis
private TableFunctionAnalysis(Optional returnedType, Map> requiredColumns, ConnectorTableFunctionHandle handle)
{
this.returnedType = requireNonNull(returnedType, "returnedType is null");
- returnedType.ifPresent(descriptor -> checkArgument(descriptor.isTyped(), "field types not specified"));
+ returnedType.ifPresent(descriptor -> Preconditions.checkArgument(descriptor.isTyped(), "field types not specified"));
this.requiredColumns = Map.copyOf(requiredColumns.entrySet().stream()
.collect(toMap(Map.Entry::getKey, entry -> List.copyOf(entry.getValue()))));
this.handle = requireNonNull(handle, "handle is null");
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionDataProcessor.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionDataProcessor.java
similarity index 97%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionDataProcessor.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionDataProcessor.java
index 06f842029f7d..3d5ca9cec596 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionDataProcessor.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionDataProcessor.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Page;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionProcessorProvider.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionProcessorProvider.java
similarity index 97%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionProcessorProvider.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionProcessorProvider.java
index f210878d6abc..0be4cd2ed585 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionProcessorProvider.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionProcessorProvider.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
import io.trino.spi.connector.ConnectorSession;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionProcessorState.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionProcessorState.java
similarity index 99%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionProcessorState.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionProcessorState.java
index adeed87c89a3..0149adadf149 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionProcessorState.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionProcessorState.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
import io.trino.spi.Page;
diff --git a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionSplitProcessor.java b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionSplitProcessor.java
similarity index 97%
rename from core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionSplitProcessor.java
rename to core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionSplitProcessor.java
index aa398bcb6d8d..3cc2709e9c4c 100644
--- a/core/trino-spi/src/main/java/io/trino/spi/ptf/TableFunctionSplitProcessor.java
+++ b/core/trino-spi/src/main/java/io/trino/spi/function/table/TableFunctionSplitProcessor.java
@@ -11,7 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.trino.spi.ptf;
+package io.trino.spi.function.table;
import io.trino.spi.Experimental;
diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorMetadata.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorMetadata.java
index 4e2af75616f5..eb01610e5944 100644
--- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorMetadata.java
+++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorMetadata.java
@@ -69,8 +69,8 @@
import io.trino.spi.function.FunctionId;
import io.trino.spi.function.FunctionMetadata;
import io.trino.spi.function.SchemaFunctionName;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.security.GrantInfo;
import io.trino.spi.security.Privilege;
import io.trino.spi.security.RoleGrant;
diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorSplitManager.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorSplitManager.java
index d28d1b13adfa..5ff299b72dbe 100644
--- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorSplitManager.java
+++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorSplitManager.java
@@ -22,7 +22,7 @@
import io.trino.spi.connector.ConnectorTransactionHandle;
import io.trino.spi.connector.Constraint;
import io.trino.spi.connector.DynamicFilter;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import static java.util.Objects.requireNonNull;
diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorTableFunction.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorTableFunction.java
index 0e99690ac932..47f75333f28a 100644
--- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorTableFunction.java
+++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/classloader/ClassLoaderSafeConnectorTableFunction.java
@@ -17,11 +17,11 @@
import io.trino.spi.connector.ConnectorAccessControl;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ArgumentSpecification;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ReturnTypeSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ArgumentSpecification;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ReturnTypeSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import java.util.List;
import java.util.Map;
diff --git a/lib/trino-plugin-toolkit/src/test/java/io/trino/plugin/base/classloader/TestClassLoaderSafeWrappers.java b/lib/trino-plugin-toolkit/src/test/java/io/trino/plugin/base/classloader/TestClassLoaderSafeWrappers.java
index b559881f4ec1..55646e93a8b1 100644
--- a/lib/trino-plugin-toolkit/src/test/java/io/trino/plugin/base/classloader/TestClassLoaderSafeWrappers.java
+++ b/lib/trino-plugin-toolkit/src/test/java/io/trino/plugin/base/classloader/TestClassLoaderSafeWrappers.java
@@ -26,7 +26,7 @@
import io.trino.spi.connector.RecordSet;
import io.trino.spi.connector.SystemTable;
import io.trino.spi.eventlistener.EventListener;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import org.testng.annotations.Test;
import java.lang.reflect.Method;
diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/DefaultJdbcMetadata.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/DefaultJdbcMetadata.java
index 50f0f81d9517..5f171d81bcd7 100644
--- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/DefaultJdbcMetadata.java
+++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/DefaultJdbcMetadata.java
@@ -56,9 +56,9 @@
import io.trino.spi.expression.ConnectorExpression;
import io.trino.spi.expression.Constant;
import io.trino.spi.expression.Variable;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.Domain;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.security.AccessDeniedException;
import io.trino.spi.security.TrinoPrincipal;
import io.trino.spi.statistics.ComputedStatistics;
diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnector.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnector.java
index 9c4d5671d2bb..f6ff35936a33 100644
--- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnector.java
+++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnector.java
@@ -27,8 +27,8 @@
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitManager;
import io.trino.spi.connector.ConnectorTransactionHandle;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
import io.trino.spi.session.PropertyMetadata;
import io.trino.spi.transaction.IsolationLevel;
diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcModule.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcModule.java
index cba1ea2c1923..cbc4334d443b 100644
--- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcModule.java
+++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcModule.java
@@ -29,8 +29,8 @@
import io.trino.spi.connector.ConnectorPageSinkProvider;
import io.trino.spi.connector.ConnectorRecordSetProvider;
import io.trino.spi.connector.ConnectorSplitManager;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
import jakarta.annotation.PreDestroy;
import java.util.concurrent.ExecutorService;
diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ptf/Procedure.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ptf/Procedure.java
index 0a41b4bb7c5a..97323a917fdc 100644
--- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ptf/Procedure.java
+++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ptf/Procedure.java
@@ -28,15 +28,15 @@
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTableHandle;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.Descriptor.Field;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.Descriptor.Field;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import java.util.List;
import java.util.Map;
@@ -44,7 +44,7 @@
import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.common.collect.Iterables.getOnlyElement;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
import static io.trino.spi.type.VarcharType.VARCHAR;
import static java.util.Objects.requireNonNull;
diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ptf/Query.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ptf/Query.java
index 7bbf8cd4be95..7f708a7187fe 100644
--- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ptf/Query.java
+++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/ptf/Query.java
@@ -29,15 +29,15 @@
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTableHandle;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.Descriptor.Field;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.Descriptor.Field;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import java.util.List;
import java.util.Map;
@@ -45,7 +45,7 @@
import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.common.collect.Iterables.getOnlyElement;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
import static io.trino.spi.type.VarcharType.VARCHAR;
import static java.util.Objects.requireNonNull;
diff --git a/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestingH2JdbcModule.java b/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestingH2JdbcModule.java
index 28859b5a7eb7..d02c14bbb7d5 100644
--- a/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestingH2JdbcModule.java
+++ b/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestingH2JdbcModule.java
@@ -22,7 +22,7 @@
import io.trino.plugin.jdbc.credential.CredentialProvider;
import io.trino.plugin.jdbc.mapping.IdentifierMapping;
import io.trino.plugin.jdbc.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import org.h2.Driver;
import java.util.Map;
diff --git a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnector.java b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnector.java
index fb006880ae5c..27aa095f3656 100644
--- a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnector.java
+++ b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnector.java
@@ -24,7 +24,7 @@
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitManager;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.session.PropertyMetadata;
import io.trino.spi.transaction.IsolationLevel;
diff --git a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorModule.java b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorModule.java
index 7fa004432b27..de5feea0c27f 100644
--- a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorModule.java
+++ b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorModule.java
@@ -27,7 +27,7 @@
import io.trino.plugin.base.session.SessionPropertiesProvider;
import io.trino.plugin.bigquery.ptf.Query;
import io.trino.spi.NodeManager;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import java.lang.annotation.Target;
import java.lang.management.ManagementFactory;
diff --git a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryMetadata.java b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryMetadata.java
index aceb549836a6..fb38627795be 100644
--- a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryMetadata.java
+++ b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryMetadata.java
@@ -65,8 +65,8 @@
import io.trino.spi.connector.TableFunctionApplicationResult;
import io.trino.spi.connector.TableNotFoundException;
import io.trino.spi.expression.ConnectorExpression;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.security.TrinoPrincipal;
import io.trino.spi.statistics.ComputedStatistics;
import io.trino.spi.type.BigintType;
diff --git a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/ptf/Query.java b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/ptf/Query.java
index cf71a2c7cfaf..fe2990f9ae43 100644
--- a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/ptf/Query.java
+++ b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/ptf/Query.java
@@ -30,15 +30,15 @@
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTableHandle;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.Descriptor.Field;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.Descriptor.Field;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import java.util.List;
import java.util.Map;
@@ -47,7 +47,7 @@
import static com.google.common.collect.Iterables.getOnlyElement;
import static io.trino.plugin.bigquery.Conversions.isSupportedType;
import static io.trino.plugin.bigquery.Conversions.toColumnHandle;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
import static io.trino.spi.type.VarcharType.VARCHAR;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toList;
diff --git a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraClientModule.java b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraClientModule.java
index f9d975de3845..ef9877615165 100644
--- a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraClientModule.java
+++ b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraClientModule.java
@@ -30,7 +30,7 @@
import io.airlift.json.JsonCodec;
import io.trino.plugin.cassandra.ptf.Query;
import io.trino.spi.TrinoException;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.type.Type;
import io.trino.spi.type.TypeId;
import io.trino.spi.type.TypeManager;
diff --git a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnector.java b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnector.java
index 7317d7fa1f7a..ae93af9301a3 100644
--- a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnector.java
+++ b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnector.java
@@ -23,7 +23,7 @@
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitManager;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.session.PropertyMetadata;
import io.trino.spi.transaction.IsolationLevel;
diff --git a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraMetadata.java b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraMetadata.java
index 2d9a9dfd83c2..de4b76875ae7 100644
--- a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraMetadata.java
+++ b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraMetadata.java
@@ -44,8 +44,8 @@
import io.trino.spi.connector.SchemaTablePrefix;
import io.trino.spi.connector.TableFunctionApplicationResult;
import io.trino.spi.connector.TableNotFoundException;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.statistics.ComputedStatistics;
import io.trino.spi.type.Type;
diff --git a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/ptf/Query.java b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/ptf/Query.java
index ecc850306401..0711c7915a92 100644
--- a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/ptf/Query.java
+++ b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/ptf/Query.java
@@ -28,15 +28,15 @@
import io.trino.spi.connector.ConnectorAccessControl;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.Descriptor.Field;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.Descriptor.Field;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import java.util.List;
import java.util.Map;
@@ -45,7 +45,7 @@
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.common.collect.Iterables.getOnlyElement;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
import static io.trino.spi.type.VarcharType.VARCHAR;
import static java.util.Objects.requireNonNull;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnector.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnector.java
index 61c848b5e053..27fbebd74389 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnector.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnector.java
@@ -35,8 +35,8 @@
import io.trino.spi.connector.TableProcedureMetadata;
import io.trino.spi.eventlistener.EventListener;
import io.trino.spi.function.FunctionProvider;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
import io.trino.spi.session.PropertyMetadata;
import io.trino.spi.transaction.IsolationLevel;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeFunctionProvider.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeFunctionProvider.java
index a87be918d1b2..de4732d88d34 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeFunctionProvider.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeFunctionProvider.java
@@ -17,8 +17,8 @@
import io.trino.plugin.deltalake.functions.tablechanges.TableChangesProcessorProvider;
import io.trino.plugin.deltalake.functions.tablechanges.TableChangesTableFunctionHandle;
import io.trino.spi.function.FunctionProvider;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
import static java.util.Objects.requireNonNull;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeModule.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeModule.java
index 109a9d1dab79..2801e8067b85 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeModule.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeModule.java
@@ -61,8 +61,8 @@
import io.trino.spi.connector.ConnectorSplitManager;
import io.trino.spi.connector.TableProcedureMetadata;
import io.trino.spi.function.FunctionProvider;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
import java.util.concurrent.ExecutorService;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeSplitManager.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeSplitManager.java
index dddea4b667be..41e400b4a865 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeSplitManager.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeSplitManager.java
@@ -35,10 +35,10 @@
import io.trino.spi.connector.Constraint;
import io.trino.spi.connector.DynamicFilter;
import io.trino.spi.connector.FixedSplitSource;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.Domain;
import io.trino.spi.predicate.NullableValue;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.type.TypeManager;
import java.io.IOException;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/InternalDeltaLakeConnectorFactory.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/InternalDeltaLakeConnectorFactory.java
index 31f392d35f2f..ff8d74d90c00 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/InternalDeltaLakeConnectorFactory.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/InternalDeltaLakeConnectorFactory.java
@@ -56,8 +56,8 @@
import io.trino.spi.connector.TableProcedureMetadata;
import io.trino.spi.eventlistener.EventListener;
import io.trino.spi.function.FunctionProvider;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.procedure.Procedure;
-import io.trino.spi.ptf.ConnectorTableFunction;
import io.trino.spi.type.TypeManager;
import org.weakref.jmx.guice.MBeanModule;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunction.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunction.java
index 3a77adb47544..a5c4ae7d3a10 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunction.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunction.java
@@ -28,12 +28,12 @@
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.connector.TableNotFoundException;
import io.trino.spi.function.SchemaFunctionName;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import java.util.List;
import java.util.Map;
@@ -44,7 +44,7 @@
import static io.trino.plugin.base.util.Functions.checkFunctionArgument;
import static io.trino.plugin.deltalake.DeltaLakeColumnType.SYNTHESIZED;
import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
import static io.trino.spi.type.BigintType.BIGINT;
import static io.trino.spi.type.TimestampWithTimeZoneType.TIMESTAMP_TZ_MILLIS;
import static io.trino.spi.type.VarcharType.VARCHAR;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunctionProcessor.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunctionProcessor.java
index 195a9c7fd7e5..fddbf4aa9d7e 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunctionProcessor.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunctionProcessor.java
@@ -29,9 +29,9 @@
import io.trino.spi.block.Block;
import io.trino.spi.block.RunLengthEncodedBlock;
import io.trino.spi.connector.ConnectorSession;
+import io.trino.spi.function.table.TableFunctionProcessorState;
+import io.trino.spi.function.table.TableFunctionSplitProcessor;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.TableFunctionProcessorState;
-import io.trino.spi.ptf.TableFunctionSplitProcessor;
import org.joda.time.DateTimeZone;
import java.util.List;
@@ -50,8 +50,8 @@
import static io.trino.plugin.deltalake.DeltaLakeSessionProperties.isParquetOptimizedReaderEnabled;
import static io.trino.plugin.deltalake.DeltaLakeSessionProperties.isParquetUseColumnIndex;
import static io.trino.plugin.deltalake.functions.tablechanges.TableChangesFileType.CDF_FILE;
+import static io.trino.spi.function.table.TableFunctionProcessorState.Finished.FINISHED;
import static io.trino.spi.predicate.Utils.nativeValueToBlock;
-import static io.trino.spi.ptf.TableFunctionProcessorState.Finished.FINISHED;
import static io.trino.spi.type.BigintType.BIGINT;
import static io.trino.spi.type.DateTimeEncoding.packDateTimeWithZone;
import static io.trino.spi.type.TimeZoneKey.UTC_KEY;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunctionProvider.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunctionProvider.java
index 6dbfda85a583..07460bec8231 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunctionProvider.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesFunctionProvider.java
@@ -17,7 +17,7 @@
import com.google.inject.Provider;
import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorTableFunction;
import io.trino.plugin.deltalake.DeltaLakeMetadataFactory;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import static java.util.Objects.requireNonNull;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesProcessorProvider.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesProcessorProvider.java
index 557c158d5caf..5a250e87f73e 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesProcessorProvider.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesProcessorProvider.java
@@ -21,9 +21,9 @@
import io.trino.plugin.hive.parquet.ParquetReaderConfig;
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplit;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
-import io.trino.spi.ptf.TableFunctionSplitProcessor;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.TableFunctionSplitProcessor;
import org.joda.time.DateTimeZone;
import static java.util.Objects.requireNonNull;
diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesTableFunctionHandle.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesTableFunctionHandle.java
index 1b4dd908bb9e..61e96abb61f8 100644
--- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesTableFunctionHandle.java
+++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/functions/tablechanges/TableChangesTableFunctionHandle.java
@@ -16,7 +16,7 @@
import com.google.common.collect.ImmutableList;
import io.trino.plugin.deltalake.DeltaLakeColumnHandle;
import io.trino.spi.connector.SchemaTableName;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import java.util.List;
diff --git a/plugin/trino-druid/src/main/java/io/trino/plugin/druid/DruidJdbcClientModule.java b/plugin/trino-druid/src/main/java/io/trino/plugin/druid/DruidJdbcClientModule.java
index 6dd2d378f630..d90da9c3b312 100644
--- a/plugin/trino-druid/src/main/java/io/trino/plugin/druid/DruidJdbcClientModule.java
+++ b/plugin/trino-druid/src/main/java/io/trino/plugin/druid/DruidJdbcClientModule.java
@@ -25,7 +25,7 @@
import io.trino.plugin.jdbc.JdbcClient;
import io.trino.plugin.jdbc.credential.CredentialProvider;
import io.trino.plugin.jdbc.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import org.apache.calcite.avatica.remote.Driver;
import java.util.Properties;
diff --git a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnector.java b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnector.java
index 81efc468fb88..6014954e6acf 100644
--- a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnector.java
+++ b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnector.java
@@ -23,7 +23,7 @@
import io.trino.spi.connector.ConnectorSplitManager;
import io.trino.spi.connector.ConnectorTransactionHandle;
import io.trino.spi.connector.SystemTable;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.transaction.IsolationLevel;
import java.util.Set;
diff --git a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorModule.java b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorModule.java
index 78ea5ea90de6..2cda1656af15 100644
--- a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorModule.java
+++ b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorModule.java
@@ -18,7 +18,7 @@
import io.airlift.configuration.AbstractConfigurationAwareModule;
import io.trino.plugin.elasticsearch.client.ElasticsearchClient;
import io.trino.plugin.elasticsearch.ptf.RawQuery;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import static com.google.inject.multibindings.Multibinder.newSetBinder;
import static com.google.inject.multibindings.OptionalBinder.newOptionalBinder;
diff --git a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchMetadata.java b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchMetadata.java
index a5602254d116..cc3aa9f72c44 100644
--- a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchMetadata.java
+++ b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchMetadata.java
@@ -59,9 +59,9 @@
import io.trino.spi.expression.ConnectorExpression;
import io.trino.spi.expression.Constant;
import io.trino.spi.expression.Variable;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.Domain;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.type.ArrayType;
import io.trino.spi.type.RowType;
import io.trino.spi.type.StandardTypes;
diff --git a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ptf/RawQuery.java b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ptf/RawQuery.java
index 98b388fbc8cc..c891b704e60d 100644
--- a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ptf/RawQuery.java
+++ b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ptf/RawQuery.java
@@ -28,14 +28,14 @@
import io.trino.spi.connector.ConnectorTableHandle;
import io.trino.spi.connector.ConnectorTableSchema;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import java.util.List;
import java.util.Map;
@@ -43,7 +43,7 @@
import static com.google.common.collect.ImmutableList.toImmutableList;
import static io.trino.plugin.elasticsearch.ElasticsearchTableHandle.Type.QUERY;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
import static io.trino.spi.type.VarcharType.VARCHAR;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toList;
diff --git a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnector.java b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnector.java
index 84da93840cee..9b379fa94795 100644
--- a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnector.java
+++ b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnector.java
@@ -22,7 +22,7 @@
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitManager;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.transaction.IsolationLevel;
import java.util.Set;
diff --git a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsMetadata.java b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsMetadata.java
index d9cc852af366..54f04d99ca6e 100644
--- a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsMetadata.java
+++ b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsMetadata.java
@@ -26,7 +26,7 @@
import io.trino.spi.connector.SchemaTableName;
import io.trino.spi.connector.SchemaTablePrefix;
import io.trino.spi.connector.TableFunctionApplicationResult;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import java.util.List;
import java.util.Map;
diff --git a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsModule.java b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsModule.java
index 3353ed2ecf9f..b7814a6f9e38 100644
--- a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsModule.java
+++ b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsModule.java
@@ -17,7 +17,7 @@
import com.google.inject.Module;
import com.google.inject.Scopes;
import io.trino.plugin.google.sheets.ptf.Sheet;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import static com.google.inject.multibindings.Multibinder.newSetBinder;
import static io.airlift.configuration.ConfigBinder.configBinder;
diff --git a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/ptf/Sheet.java b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/ptf/Sheet.java
index 5eb449b70aef..3bb9e6d7996e 100644
--- a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/ptf/Sheet.java
+++ b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/ptf/Sheet.java
@@ -29,14 +29,14 @@
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorTableHandle;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import java.util.List;
import java.util.Map;
@@ -47,7 +47,7 @@
import static io.trino.plugin.google.sheets.SheetsClient.DEFAULT_RANGE;
import static io.trino.plugin.google.sheets.SheetsClient.RANGE_SEPARATOR;
import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
import static io.trino.spi.type.VarcharType.VARCHAR;
import static java.util.Objects.requireNonNull;
diff --git a/plugin/trino-mariadb/src/main/java/io/trino/plugin/mariadb/MariaDbClientModule.java b/plugin/trino-mariadb/src/main/java/io/trino/plugin/mariadb/MariaDbClientModule.java
index 4f0df3e3cd63..dea89f09351d 100644
--- a/plugin/trino-mariadb/src/main/java/io/trino/plugin/mariadb/MariaDbClientModule.java
+++ b/plugin/trino-mariadb/src/main/java/io/trino/plugin/mariadb/MariaDbClientModule.java
@@ -26,7 +26,7 @@
import io.trino.plugin.jdbc.JdbcClient;
import io.trino.plugin.jdbc.credential.CredentialProvider;
import io.trino.plugin.jdbc.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import org.mariadb.jdbc.Driver;
import java.util.Properties;
diff --git a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoClientModule.java b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoClientModule.java
index 84e9ec63a157..930cf06707e4 100644
--- a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoClientModule.java
+++ b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoClientModule.java
@@ -24,7 +24,7 @@
import com.mongodb.client.MongoClients;
import io.airlift.configuration.AbstractConfigurationAwareModule;
import io.trino.plugin.mongodb.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.type.TypeManager;
import java.util.Set;
diff --git a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnector.java b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnector.java
index 36bb0a973b89..a6449ca1a0be 100644
--- a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnector.java
+++ b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnector.java
@@ -22,7 +22,7 @@
import io.trino.spi.connector.ConnectorSession;
import io.trino.spi.connector.ConnectorSplitManager;
import io.trino.spi.connector.ConnectorTransactionHandle;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import io.trino.spi.transaction.IsolationLevel;
import java.util.Set;
diff --git a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoMetadata.java b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoMetadata.java
index 806f167697e3..624d41cbf6d4 100644
--- a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoMetadata.java
+++ b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoMetadata.java
@@ -45,9 +45,9 @@
import io.trino.spi.connector.SortingProperty;
import io.trino.spi.connector.TableFunctionApplicationResult;
import io.trino.spi.connector.TableNotFoundException;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
import io.trino.spi.predicate.Domain;
import io.trino.spi.predicate.TupleDomain;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
import io.trino.spi.security.TrinoPrincipal;
import io.trino.spi.statistics.ComputedStatistics;
import io.trino.spi.type.ArrayType;
diff --git a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/ptf/Query.java b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/ptf/Query.java
index faa8f2b4cbc2..51227c163229 100644
--- a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/ptf/Query.java
+++ b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/ptf/Query.java
@@ -33,14 +33,14 @@
import io.trino.spi.connector.ConnectorTableSchema;
import io.trino.spi.connector.ConnectorTransactionHandle;
import io.trino.spi.connector.SchemaTableName;
-import io.trino.spi.ptf.AbstractConnectorTableFunction;
-import io.trino.spi.ptf.Argument;
-import io.trino.spi.ptf.ConnectorTableFunction;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.Descriptor;
-import io.trino.spi.ptf.ScalarArgument;
-import io.trino.spi.ptf.ScalarArgumentSpecification;
-import io.trino.spi.ptf.TableFunctionAnalysis;
+import io.trino.spi.function.table.AbstractConnectorTableFunction;
+import io.trino.spi.function.table.Argument;
+import io.trino.spi.function.table.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.Descriptor;
+import io.trino.spi.function.table.ScalarArgument;
+import io.trino.spi.function.table.ScalarArgumentSpecification;
+import io.trino.spi.function.table.TableFunctionAnalysis;
import org.bson.Document;
import org.bson.json.JsonParseException;
@@ -50,7 +50,7 @@
import static com.google.common.collect.ImmutableList.toImmutableList;
import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT;
-import static io.trino.spi.ptf.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
+import static io.trino.spi.function.table.ReturnTypeSpecification.GenericTable.GENERIC_TABLE;
import static io.trino.spi.type.VarcharType.VARCHAR;
import static java.util.Locale.ENGLISH;
import static java.util.Objects.requireNonNull;
diff --git a/plugin/trino-mysql/src/main/java/io/trino/plugin/mysql/MySqlClientModule.java b/plugin/trino-mysql/src/main/java/io/trino/plugin/mysql/MySqlClientModule.java
index 341789aed6fb..5a13fe34e43c 100644
--- a/plugin/trino-mysql/src/main/java/io/trino/plugin/mysql/MySqlClientModule.java
+++ b/plugin/trino-mysql/src/main/java/io/trino/plugin/mysql/MySqlClientModule.java
@@ -29,7 +29,7 @@
import io.trino.plugin.jdbc.JdbcStatisticsConfig;
import io.trino.plugin.jdbc.credential.CredentialProvider;
import io.trino.plugin.jdbc.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import java.sql.SQLException;
import java.util.Properties;
diff --git a/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClientModule.java b/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClientModule.java
index befc4338b224..ea626b8eae64 100644
--- a/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClientModule.java
+++ b/plugin/trino-oracle/src/main/java/io/trino/plugin/oracle/OracleClientModule.java
@@ -28,7 +28,7 @@
import io.trino.plugin.jdbc.RetryingConnectionFactory;
import io.trino.plugin.jdbc.credential.CredentialProvider;
import io.trino.plugin.jdbc.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleDriver;
diff --git a/plugin/trino-postgresql/src/main/java/io/trino/plugin/postgresql/PostgreSqlClientModule.java b/plugin/trino-postgresql/src/main/java/io/trino/plugin/postgresql/PostgreSqlClientModule.java
index e6c612303fd4..38fc87001de5 100644
--- a/plugin/trino-postgresql/src/main/java/io/trino/plugin/postgresql/PostgreSqlClientModule.java
+++ b/plugin/trino-postgresql/src/main/java/io/trino/plugin/postgresql/PostgreSqlClientModule.java
@@ -24,7 +24,7 @@
import io.trino.plugin.jdbc.QueryBuilder;
import io.trino.plugin.jdbc.RemoteQueryCancellationModule;
import io.trino.plugin.jdbc.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import static com.google.inject.multibindings.Multibinder.newSetBinder;
import static com.google.inject.multibindings.OptionalBinder.newOptionalBinder;
diff --git a/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftClientModule.java b/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftClientModule.java
index 072f4bead5da..35dc0ed8e58b 100644
--- a/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftClientModule.java
+++ b/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftClientModule.java
@@ -28,7 +28,7 @@
import io.trino.plugin.jdbc.JdbcStatisticsConfig;
import io.trino.plugin.jdbc.credential.CredentialProvider;
import io.trino.plugin.jdbc.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import java.util.Properties;
diff --git a/plugin/trino-singlestore/src/main/java/io/trino/plugin/singlestore/SingleStoreClientModule.java b/plugin/trino-singlestore/src/main/java/io/trino/plugin/singlestore/SingleStoreClientModule.java
index 2426c62264c5..23fe707d3b83 100644
--- a/plugin/trino-singlestore/src/main/java/io/trino/plugin/singlestore/SingleStoreClientModule.java
+++ b/plugin/trino-singlestore/src/main/java/io/trino/plugin/singlestore/SingleStoreClientModule.java
@@ -26,7 +26,7 @@
import io.trino.plugin.jdbc.JdbcClient;
import io.trino.plugin.jdbc.credential.CredentialProvider;
import io.trino.plugin.jdbc.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import java.util.Properties;
diff --git a/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClientModule.java b/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClientModule.java
index 7601cfb3473c..c0b2f399a581 100644
--- a/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClientModule.java
+++ b/plugin/trino-sqlserver/src/main/java/io/trino/plugin/sqlserver/SqlServerClientModule.java
@@ -31,7 +31,7 @@
import io.trino.plugin.jdbc.credential.CredentialProvider;
import io.trino.plugin.jdbc.ptf.Procedure;
import io.trino.plugin.jdbc.ptf.Query;
-import io.trino.spi.ptf.ConnectorTableFunction;
+import io.trino.spi.function.table.ConnectorTableFunction;
import static com.google.inject.multibindings.Multibinder.newSetBinder;
import static com.google.inject.multibindings.OptionalBinder.newOptionalBinder;
diff --git a/testing/trino-tests/src/test/java/io/trino/tests/TestTableFunctionInvocation.java b/testing/trino-tests/src/test/java/io/trino/tests/TestTableFunctionInvocation.java
index 897e8505303c..b6cf1f3456f0 100644
--- a/testing/trino-tests/src/test/java/io/trino/tests/TestTableFunctionInvocation.java
+++ b/testing/trino-tests/src/test/java/io/trino/tests/TestTableFunctionInvocation.java
@@ -49,8 +49,8 @@
import io.trino.spi.connector.TableFunctionApplicationResult;
import io.trino.spi.function.FunctionProvider;
import io.trino.spi.function.SchemaFunctionName;
-import io.trino.spi.ptf.ConnectorTableFunctionHandle;
-import io.trino.spi.ptf.TableFunctionProcessorProvider;
+import io.trino.spi.function.table.ConnectorTableFunctionHandle;
+import io.trino.spi.function.table.TableFunctionProcessorProvider;
import io.trino.testing.AbstractTestQueryFramework;
import io.trino.testing.DistributedQueryRunner;
import io.trino.testing.QueryRunner;