This is an automated email from the ASF dual-hosted git repository.

amoghj pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/main by this push:
     new 6e7702dabc Core: Remove deprecated operations method from 
BaseMetadataTable (#9298)
6e7702dabc is described below

commit 6e7702dabca4e037bb1ab434d6f4a8332af589bc
Author: Ajantha Bhat <[email protected]>
AuthorDate: Thu Jan 18 21:40:49 2024 +0530

    Core: Remove deprecated operations method from BaseMetadataTable (#9298)
---
 .palantir/revapi.yml                               | 71 ++++++++++++++++++++++
 .../java/org/apache/iceberg/BaseMetadataTable.java | 12 +---
 .../java/org/apache/iceberg/SerializableTable.java |  2 +
 .../iceberg/spark/BaseFileRewriteCoordinator.java  | 12 +---
 .../apache/iceberg/spark/ScanTaskSetManager.java   | 11 +---
 .../java/org/apache/iceberg/spark/Spark3Util.java  | 13 ++++
 .../iceberg/spark/BaseFileRewriteCoordinator.java  | 12 +---
 .../apache/iceberg/spark/ScanTaskSetManager.java   | 11 +---
 .../java/org/apache/iceberg/spark/Spark3Util.java  | 13 ++++
 .../iceberg/spark/BaseFileRewriteCoordinator.java  | 12 +---
 .../apache/iceberg/spark/ScanTaskSetManager.java   | 11 +---
 .../java/org/apache/iceberg/spark/Spark3Util.java  | 13 ++++
 12 files changed, 126 insertions(+), 67 deletions(-)

diff --git a/.palantir/revapi.yml b/.palantir/revapi.yml
index 990c9ba31a..c5c92dba0d 100644
--- a/.palantir/revapi.yml
+++ b/.palantir/revapi.yml
@@ -874,6 +874,74 @@ acceptedBreaks:
       justification: "Static utility class - should not have public 
constructor"
   "1.4.0":
     org.apache.iceberg:iceberg-core:
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.AllDataFilesTable"
+      new: "class org.apache.iceberg.AllDataFilesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.AllDeleteFilesTable"
+      new: "class org.apache.iceberg.AllDeleteFilesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.AllEntriesTable"
+      new: "class org.apache.iceberg.AllEntriesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.AllFilesTable"
+      new: "class org.apache.iceberg.AllFilesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.AllManifestsTable"
+      new: "class org.apache.iceberg.AllManifestsTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.BaseMetadataTable"
+      new: "class org.apache.iceberg.BaseMetadataTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.DataFilesTable"
+      new: "class org.apache.iceberg.DataFilesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.DeleteFilesTable"
+      new: "class org.apache.iceberg.DeleteFilesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.FilesTable"
+      new: "class org.apache.iceberg.FilesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.HistoryTable"
+      new: "class org.apache.iceberg.HistoryTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.ManifestEntriesTable"
+      new: "class org.apache.iceberg.ManifestEntriesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.ManifestsTable"
+      new: "class org.apache.iceberg.ManifestsTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.MetadataLogEntriesTable"
+      new: "class org.apache.iceberg.MetadataLogEntriesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.PartitionsTable"
+      new: "class org.apache.iceberg.PartitionsTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.PositionDeletesTable"
+      new: "class org.apache.iceberg.PositionDeletesTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.RefsTable"
+      new: "class org.apache.iceberg.RefsTable"
+      justification: "Removing deprecated code"
+    - code: "java.class.noLongerImplementsInterface"
+      old: "class org.apache.iceberg.SnapshotsTable"
+      new: "class org.apache.iceberg.SnapshotsTable"
+      justification: "Removing deprecated code"
     - code: "java.class.defaultSerializationChanged"
       old: "class org.apache.iceberg.mapping.NameMapping"
       new: "class org.apache.iceberg.mapping.NameMapping"
@@ -890,6 +958,9 @@ acceptedBreaks:
     - code: "java.field.serialVersionUIDChanged"
       new: "field org.apache.iceberg.util.SerializableMap<K, 
V>.serialVersionUID"
       justification: "Serialization is not be used"
+    - code: "java.method.removed"
+      old: "method org.apache.iceberg.TableOperations 
org.apache.iceberg.BaseMetadataTable::operations()"
+      justification: "Removing deprecated code"
   apache-iceberg-0.14.0:
     org.apache.iceberg:iceberg-api:
     - code: "java.class.defaultSerializationChanged"
diff --git a/core/src/main/java/org/apache/iceberg/BaseMetadataTable.java 
b/core/src/main/java/org/apache/iceberg/BaseMetadataTable.java
index 28e3b1ead6..57a6386093 100644
--- a/core/src/main/java/org/apache/iceberg/BaseMetadataTable.java
+++ b/core/src/main/java/org/apache/iceberg/BaseMetadataTable.java
@@ -38,8 +38,7 @@ import org.apache.iceberg.transforms.Transforms;
  * the metadata table using a {@link StaticTableOperations}. This way no 
Catalog related calls are
  * needed when reading the table data after deserialization.
  */
-public abstract class BaseMetadataTable extends BaseReadOnlyTable
-    implements HasTableOperations, Serializable {
+public abstract class BaseMetadataTable extends BaseReadOnlyTable implements 
Serializable {
   private final PartitionSpec spec = PartitionSpec.unpartitioned();
   private final SortOrder sortOrder = SortOrder.unsorted();
   private final BaseTable table;
@@ -101,17 +100,10 @@ public abstract class BaseMetadataTable extends 
BaseReadOnlyTable
 
   abstract MetadataTableType metadataTableType();
 
-  protected BaseTable table() {
+  public BaseTable table() {
     return table;
   }
 
-  /** @deprecated will be removed in 1.4.0; do not use metadata table 
TableOperations */
-  @Override
-  @Deprecated
-  public TableOperations operations() {
-    return table.operations();
-  }
-
   @Override
   public String name() {
     return name;
diff --git a/core/src/main/java/org/apache/iceberg/SerializableTable.java 
b/core/src/main/java/org/apache/iceberg/SerializableTable.java
index 5a98ddbaf9..42e7af72d4 100644
--- a/core/src/main/java/org/apache/iceberg/SerializableTable.java
+++ b/core/src/main/java/org/apache/iceberg/SerializableTable.java
@@ -105,6 +105,8 @@ public class SerializableTable implements Table, 
Serializable {
     if (table instanceof HasTableOperations) {
       TableOperations ops = ((HasTableOperations) table).operations();
       return ops.current().metadataFileLocation();
+    } else if (table instanceof BaseMetadataTable) {
+      return ((BaseMetadataTable) 
table).table().operations().current().metadataFileLocation();
     } else {
       return null;
     }
diff --git 
a/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
 
b/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
index 45c46f1a3e..5c95475d33 100644
--- 
a/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
+++ 
b/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
@@ -22,9 +22,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 import org.apache.iceberg.ContentFile;
-import org.apache.iceberg.HasTableOperations;
 import org.apache.iceberg.Table;
-import org.apache.iceberg.TableOperations;
 import org.apache.iceberg.exceptions.ValidationException;
 import org.apache.iceberg.relocated.com.google.common.collect.Maps;
 import org.apache.iceberg.util.Pair;
@@ -72,18 +70,12 @@ abstract class BaseFileRewriteCoordinator<F extends 
ContentFile<F>> {
 
   public Set<String> fetchSetIds(Table table) {
     return resultMap.keySet().stream()
-        .filter(e -> e.first().equals(tableUUID(table)))
+        .filter(e -> e.first().equals(Spark3Util.baseTableUUID(table)))
         .map(Pair::second)
         .collect(Collectors.toSet());
   }
 
   private Pair<String, String> toId(Table table, String setId) {
-    String tableUUID = tableUUID(table);
-    return Pair.of(tableUUID, setId);
-  }
-
-  private String tableUUID(Table table) {
-    TableOperations ops = ((HasTableOperations) table).operations();
-    return ops.current().uuid();
+    return Pair.of(Spark3Util.baseTableUUID(table), setId);
   }
 }
diff --git 
a/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
 
b/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
index e8cd7decce..cab40d1031 100644
--- 
a/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
+++ 
b/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
@@ -22,10 +22,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
-import org.apache.iceberg.HasTableOperations;
 import org.apache.iceberg.ScanTask;
 import org.apache.iceberg.Table;
-import org.apache.iceberg.TableOperations;
 import org.apache.iceberg.relocated.com.google.common.base.Preconditions;
 import org.apache.iceberg.relocated.com.google.common.collect.Maps;
 import org.apache.iceberg.util.Pair;
@@ -64,17 +62,12 @@ public class ScanTaskSetManager {
 
   public Set<String> fetchSetIds(Table table) {
     return tasksMap.keySet().stream()
-        .filter(e -> e.first().equals(tableUUID(table)))
+        .filter(e -> e.first().equals(Spark3Util.baseTableUUID(table)))
         .map(Pair::second)
         .collect(Collectors.toSet());
   }
 
-  private String tableUUID(Table table) {
-    TableOperations ops = ((HasTableOperations) table).operations();
-    return ops.current().uuid();
-  }
-
   private Pair<String, String> toId(Table table, String setId) {
-    return Pair.of(tableUUID(table), setId);
+    return Pair.of(Spark3Util.baseTableUUID(table), setId);
   }
 }
diff --git 
a/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java 
b/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java
index d7717e2bfd..10b856a7ac 100644
--- a/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java
+++ b/spark/v3.3/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java
@@ -29,6 +29,8 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.Path;
+import org.apache.iceberg.BaseMetadataTable;
+import org.apache.iceberg.HasTableOperations;
 import org.apache.iceberg.NullOrder;
 import org.apache.iceberg.PartitionField;
 import org.apache.iceberg.PartitionSpec;
@@ -945,6 +947,17 @@ public class Spark3Util {
     return org.apache.spark.sql.catalyst.TableIdentifier.apply(table, 
database);
   }
 
+  static String baseTableUUID(org.apache.iceberg.Table table) {
+    if (table instanceof HasTableOperations) {
+      TableOperations ops = ((HasTableOperations) table).operations();
+      return ops.current().uuid();
+    } else if (table instanceof BaseMetadataTable) {
+      return ((BaseMetadataTable) table).table().operations().current().uuid();
+    } else {
+      throw new UnsupportedOperationException("Cannot retrieve UUID for table 
" + table.name());
+    }
+  }
+
   private static class DescribeSortOrderVisitor implements 
SortOrderVisitor<String> {
     private static final DescribeSortOrderVisitor INSTANCE = new 
DescribeSortOrderVisitor();
 
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
index 45c46f1a3e..5c95475d33 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
@@ -22,9 +22,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 import org.apache.iceberg.ContentFile;
-import org.apache.iceberg.HasTableOperations;
 import org.apache.iceberg.Table;
-import org.apache.iceberg.TableOperations;
 import org.apache.iceberg.exceptions.ValidationException;
 import org.apache.iceberg.relocated.com.google.common.collect.Maps;
 import org.apache.iceberg.util.Pair;
@@ -72,18 +70,12 @@ abstract class BaseFileRewriteCoordinator<F extends 
ContentFile<F>> {
 
   public Set<String> fetchSetIds(Table table) {
     return resultMap.keySet().stream()
-        .filter(e -> e.first().equals(tableUUID(table)))
+        .filter(e -> e.first().equals(Spark3Util.baseTableUUID(table)))
         .map(Pair::second)
         .collect(Collectors.toSet());
   }
 
   private Pair<String, String> toId(Table table, String setId) {
-    String tableUUID = tableUUID(table);
-    return Pair.of(tableUUID, setId);
-  }
-
-  private String tableUUID(Table table) {
-    TableOperations ops = ((HasTableOperations) table).operations();
-    return ops.current().uuid();
+    return Pair.of(Spark3Util.baseTableUUID(table), setId);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
index e8cd7decce..cab40d1031 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
@@ -22,10 +22,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
-import org.apache.iceberg.HasTableOperations;
 import org.apache.iceberg.ScanTask;
 import org.apache.iceberg.Table;
-import org.apache.iceberg.TableOperations;
 import org.apache.iceberg.relocated.com.google.common.base.Preconditions;
 import org.apache.iceberg.relocated.com.google.common.collect.Maps;
 import org.apache.iceberg.util.Pair;
@@ -64,17 +62,12 @@ public class ScanTaskSetManager {
 
   public Set<String> fetchSetIds(Table table) {
     return tasksMap.keySet().stream()
-        .filter(e -> e.first().equals(tableUUID(table)))
+        .filter(e -> e.first().equals(Spark3Util.baseTableUUID(table)))
         .map(Pair::second)
         .collect(Collectors.toSet());
   }
 
-  private String tableUUID(Table table) {
-    TableOperations ops = ((HasTableOperations) table).operations();
-    return ops.current().uuid();
-  }
-
   private Pair<String, String> toId(Table table, String setId) {
-    return Pair.of(tableUUID(table), setId);
+    return Pair.of(Spark3Util.baseTableUUID(table), setId);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java
index 62301e9676..a81877c98b 100644
--- a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java
+++ b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java
@@ -29,6 +29,8 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.Path;
+import org.apache.iceberg.BaseMetadataTable;
+import org.apache.iceberg.HasTableOperations;
 import org.apache.iceberg.NullOrder;
 import org.apache.iceberg.PartitionField;
 import org.apache.iceberg.PartitionSpec;
@@ -948,6 +950,17 @@ public class Spark3Util {
     return org.apache.spark.sql.catalyst.TableIdentifier.apply(table, 
database);
   }
 
+  static String baseTableUUID(org.apache.iceberg.Table table) {
+    if (table instanceof HasTableOperations) {
+      TableOperations ops = ((HasTableOperations) table).operations();
+      return ops.current().uuid();
+    } else if (table instanceof BaseMetadataTable) {
+      return ((BaseMetadataTable) table).table().operations().current().uuid();
+    } else {
+      throw new UnsupportedOperationException("Cannot retrieve UUID for table 
" + table.name());
+    }
+  }
+
   private static class DescribeSortOrderVisitor implements 
SortOrderVisitor<String> {
     private static final DescribeSortOrderVisitor INSTANCE = new 
DescribeSortOrderVisitor();
 
diff --git 
a/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
 
b/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
index 45c46f1a3e..5c95475d33 100644
--- 
a/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
+++ 
b/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/BaseFileRewriteCoordinator.java
@@ -22,9 +22,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 import org.apache.iceberg.ContentFile;
-import org.apache.iceberg.HasTableOperations;
 import org.apache.iceberg.Table;
-import org.apache.iceberg.TableOperations;
 import org.apache.iceberg.exceptions.ValidationException;
 import org.apache.iceberg.relocated.com.google.common.collect.Maps;
 import org.apache.iceberg.util.Pair;
@@ -72,18 +70,12 @@ abstract class BaseFileRewriteCoordinator<F extends 
ContentFile<F>> {
 
   public Set<String> fetchSetIds(Table table) {
     return resultMap.keySet().stream()
-        .filter(e -> e.first().equals(tableUUID(table)))
+        .filter(e -> e.first().equals(Spark3Util.baseTableUUID(table)))
         .map(Pair::second)
         .collect(Collectors.toSet());
   }
 
   private Pair<String, String> toId(Table table, String setId) {
-    String tableUUID = tableUUID(table);
-    return Pair.of(tableUUID, setId);
-  }
-
-  private String tableUUID(Table table) {
-    TableOperations ops = ((HasTableOperations) table).operations();
-    return ops.current().uuid();
+    return Pair.of(Spark3Util.baseTableUUID(table), setId);
   }
 }
diff --git 
a/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
 
b/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
index e8cd7decce..cab40d1031 100644
--- 
a/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
+++ 
b/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/ScanTaskSetManager.java
@@ -22,10 +22,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
-import org.apache.iceberg.HasTableOperations;
 import org.apache.iceberg.ScanTask;
 import org.apache.iceberg.Table;
-import org.apache.iceberg.TableOperations;
 import org.apache.iceberg.relocated.com.google.common.base.Preconditions;
 import org.apache.iceberg.relocated.com.google.common.collect.Maps;
 import org.apache.iceberg.util.Pair;
@@ -64,17 +62,12 @@ public class ScanTaskSetManager {
 
   public Set<String> fetchSetIds(Table table) {
     return tasksMap.keySet().stream()
-        .filter(e -> e.first().equals(tableUUID(table)))
+        .filter(e -> e.first().equals(Spark3Util.baseTableUUID(table)))
         .map(Pair::second)
         .collect(Collectors.toSet());
   }
 
-  private String tableUUID(Table table) {
-    TableOperations ops = ((HasTableOperations) table).operations();
-    return ops.current().uuid();
-  }
-
   private Pair<String, String> toId(Table table, String setId) {
-    return Pair.of(tableUUID(table), setId);
+    return Pair.of(Spark3Util.baseTableUUID(table), setId);
   }
 }
diff --git 
a/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java 
b/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java
index cfcc3941c7..39518ffbb9 100644
--- a/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java
+++ b/spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java
@@ -28,6 +28,8 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.hadoop.fs.Path;
+import org.apache.iceberg.BaseMetadataTable;
+import org.apache.iceberg.HasTableOperations;
 import org.apache.iceberg.NullOrder;
 import org.apache.iceberg.PartitionField;
 import org.apache.iceberg.PartitionSpec;
@@ -948,6 +950,17 @@ public class Spark3Util {
     return org.apache.spark.sql.catalyst.TableIdentifier.apply(table, 
database);
   }
 
+  static String baseTableUUID(org.apache.iceberg.Table table) {
+    if (table instanceof HasTableOperations) {
+      TableOperations ops = ((HasTableOperations) table).operations();
+      return ops.current().uuid();
+    } else if (table instanceof BaseMetadataTable) {
+      return ((BaseMetadataTable) table).table().operations().current().uuid();
+    } else {
+      throw new UnsupportedOperationException("Cannot retrieve UUID for table 
" + table.name());
+    }
+  }
+
   private static class DescribeSortOrderVisitor implements 
SortOrderVisitor<String> {
     private static final DescribeSortOrderVisitor INSTANCE = new 
DescribeSortOrderVisitor();
 

Reply via email to