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

FrankChen021 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 81d9e6d12d4 fix: address CodeQL control-flow and API warnings (#19820)
81d9e6d12d4 is described below

commit 81d9e6d12d4d0a0563fcacabe68716c6dd5fc57a
Author: Frank Chen <[email protected]>
AuthorDate: Wed Aug 5 21:29:37 2026 +0800

    fix: address CodeQL control-flow and API warnings (#19820)
    
    * Fix CodeQL control flow and API warnings
    
    * Preserve query counter behavior for HTTP errors
    
    * test: cover VSizeColumnarInts equality
---
 .../rabbitstream/RabbitSequenceNumber.java         |  2 +
 .../query/expressions/BloomFilterExpressions.java  |  6 ++
 .../autoscaling/ec2/EC2AutoScalerTest.java         |  2 -
 .../histogram/ApproximateHistogram.java            |  4 +-
 .../indexing/kafka/KafkaDataSourceMetadata.java    |  5 +-
 .../druid/indexing/kafka/KafkaSequenceNumber.java  |  2 +
 .../indexing/kinesis/KinesisSequenceNumber.java    |  2 +
 .../apache/druid/indexing/common/task/Tasks.java   |  2 +
 .../SeekableStreamIndexTaskRunnerTest.java         |  2 +
 .../SeekableStreamSupervisorStateTest.java         |  2 +
 .../SeekableStreamSupervisorTestBase.java          |  2 +
 .../apache/druid/msq/exec/ControllerHolder.java    |  3 +
 .../processor/SegmentGeneratorFrameProcessor.java  |  2 +
 .../controller/BaseControllerQueryKernelTest.java  |  3 +
 .../druid/extendedset/intset/ConciseSet.java       | 12 ++-
 .../org/apache/druid/frame/field/FieldWriters.java |  3 +
 .../java/util/common/guava/FunctionalIterator.java |  2 +
 .../org/apache/druid/math/expr/ExpressionType.java |  9 ++
 .../druid/math/expr/ExpressionTypeFactory.java     |  3 +
 .../druid/query/PrioritizedExecutorService.java    |  2 +
 .../org/apache/druid/query/filter/InDimFilter.java |  4 +-
 .../epinephelinae/ByteBufferMinMaxOffsetHeap.java  |  6 +-
 .../druid/query/ordering/StringComparators.java    | 12 ++-
 .../TopNColumnAggregatesProcessorFactory.java      |  4 +
 .../druid/segment/data/CompressedBlockReader.java  |  1 -
 .../druid/segment/data/VSizeColumnarInts.java      | 19 +++++
 .../druid/segment/filter/ExpressionFilter.java     |  3 +
 .../SpatialDimensionRowTransformer.java            |  4 +-
 .../druid/collections/IntSetTestUtility.java       | 52 +-----------
 .../java/util/common/guava/ConcatSequenceTest.java |  5 +-
 .../math/expr/VectorExprResultConsistencyTest.java |  3 +
 .../druid/query/scan/ScanQueryRunnerTest.java      |  2 +-
 .../druid/query/search/SearchQueryRunnerTest.java  |  1 -
 .../druid/segment/column/TypeStrategiesTest.java   | 20 ++++-
 .../druid/segment/data/VSizeColumnarIntsTest.java  | 17 ++++
 .../druid/segment/transform/RowFunctionTest.java   | 48 +----------
 .../druid/segment/transform/TransformerTest.java   | 55 ++----------
 .../partition/HashBasedNumberedShardSpecTest.java  | 26 +++++-
 .../apache/druid/metadata/BasicDataSourceExt.java  |  2 +
 .../org/apache/druid/server/QueryResultPusher.java |  5 ++
 .../druid/rpc/NoDelayScheduledExecutorService.java | 26 +++++-
 .../druid/segment/realtime/sink/SinkTest.java      | 97 +---------------------
 .../coordinator/duty/CompactSegmentsTest.java      |  6 +-
 .../simulate/WrappingScheduledExecutorService.java | 26 +++++-
 sql/src/main/codegen/templates/Parser.jj           | 10 +++
 45 files changed, 249 insertions(+), 275 deletions(-)

diff --git 
a/extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitSequenceNumber.java
 
b/extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitSequenceNumber.java
index 0f5197d7a55..8ddc005fe8f 100644
--- 
a/extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitSequenceNumber.java
+++ 
b/extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitSequenceNumber.java
@@ -25,6 +25,8 @@ import javax.validation.constraints.NotNull;
 
 // OrderedSequenceNumber.equals() should be used instead.
 @SuppressWarnings("ComparableImplementedButEqualsNotOverridden")
+// Every Rabbit sequence number is inclusive, so inherited equality and 
value-only ordering are consistent.
+// codeql[java/inconsistent-compareto-and-equals]
 public class RabbitSequenceNumber extends OrderedSequenceNumber<Long>
 {
   private RabbitSequenceNumber(Long sequenceNumber)
diff --git 
a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java
 
b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java
index 59f2b350727..72e3a830eb0 100644
--- 
a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java
+++ 
b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java
@@ -228,6 +228,9 @@ public class BloomFilterExpressions
                 matches = filter.testLong(longVal);
               }
               break;
+            case ARRAY:
+            case COMPLEX:
+              break;
           }
 
           return ExprEval.ofLongBoolean(matches);
@@ -293,6 +296,9 @@ public class BloomFilterExpressions
                 matches = filter.testLong(longVal);
               }
               break;
+            case ARRAY:
+            case COMPLEX:
+              break;
           }
 
           return ExprEval.ofLongBoolean(matches);
diff --git 
a/extensions-core/ec2-extensions/src/test/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScalerTest.java
 
b/extensions-core/ec2-extensions/src/test/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScalerTest.java
index 9fb8f8eff75..1807c280963 100644
--- 
a/extensions-core/ec2-extensions/src/test/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScalerTest.java
+++ 
b/extensions-core/ec2-extensions/src/test/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScalerTest.java
@@ -140,7 +140,6 @@ public class EC2AutoScalerTest
     );
 
     final int n = 150;
-    Assert.assertTrue(n <= 2 * EC2AutoScaler.MAX_AWS_FILTER_VALUES);
 
     List<String> ips = Lists.transform(
         ContiguousSet.create(Range.closedOpen(0, n), 
DiscreteDomain.integers()).asList(),
@@ -193,7 +192,6 @@ public class EC2AutoScalerTest
     );
 
     final int n = 150;
-    Assert.assertTrue(n <= 2 * EC2AutoScaler.MAX_AWS_FILTER_VALUES);
 
     List<String> ids = Lists.transform(
         ContiguousSet.create(Range.closedOpen(0, n), 
DiscreteDomain.integers()).asList(),
diff --git 
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
 
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
index 11236b8d25f..8f72d3046ee 100644
--- 
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
+++ 
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
@@ -747,17 +747,15 @@ public class ApproximateHistogram
 
     // if there are values below the lower limit, fill in array position 1
     // else array position 0
-    while (j != leftBinCount || k != rightBinCount) {
+    if (j != leftBinCount || k != rightBinCount) {
       if (j != leftBinCount && (k == rightBinCount || leftPositions[j] < 
rightPositions[k])) {
         mergedPositions[pos] = leftPositions[j];
         mergedBins[pos] = leftBins[j];
         ++j;
-        break;
       } else {
         mergedPositions[pos] = rightPositions[k];
         mergedBins[pos] = rightBins[k];
         ++k;
-        break;
       }
     }
 
diff --git 
a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java
 
b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java
index 04a6c2ba928..d8b05c69c19 100644
--- 
a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java
+++ 
b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java
@@ -37,7 +37,10 @@ import javax.annotation.Nullable;
 import java.util.Comparator;
 import java.util.Map;
 
-public class KafkaDataSourceMetadata extends 
SeekableStreamDataSourceMetadata<KafkaTopicPartition, Long> implements 
Comparable<KafkaDataSourceMetadata>
+// Natural ordering intentionally compares offsets only; inherited equality 
also includes the non-ordering stream config.
+// codeql[java/inconsistent-compareto-and-equals]
+public class KafkaDataSourceMetadata extends 
SeekableStreamDataSourceMetadata<KafkaTopicPartition, Long>
+    implements Comparable<KafkaDataSourceMetadata>
 {
   private static final Logger LOGGER = new 
Logger(KafkaDataSourceMetadata.class);
 
diff --git 
a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSequenceNumber.java
 
b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSequenceNumber.java
index d727e5a7baf..1a21c6fe8a7 100644
--- 
a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSequenceNumber.java
+++ 
b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSequenceNumber.java
@@ -25,6 +25,8 @@ import javax.validation.constraints.NotNull;
 
 // OrderedSequenceNumber.equals() should be used instead.
 @SuppressWarnings("ComparableImplementedButEqualsNotOverridden")
+// Every Kafka sequence number is inclusive, so inherited equality and 
value-only ordering are consistent.
+// codeql[java/inconsistent-compareto-and-equals]
 public class KafkaSequenceNumber extends OrderedSequenceNumber<Long>
 {
   private KafkaSequenceNumber(Long sequenceNumber)
diff --git 
a/extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisSequenceNumber.java
 
b/extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisSequenceNumber.java
index ce5025238e6..f6c79f4896f 100644
--- 
a/extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisSequenceNumber.java
+++ 
b/extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisSequenceNumber.java
@@ -26,6 +26,8 @@ import java.math.BigInteger;
 
 // OrderedSequenceNumber.equals() should be used instead.
 @SuppressWarnings("ComparableImplementedButEqualsNotOverridden")
+// Ordering intentionally groups equivalent unread/end markers while inherited 
equality preserves their identities.
+// codeql[java/inconsistent-compareto-and-equals]
 public class KinesisSequenceNumber extends OrderedSequenceNumber<String>
 {
   /**
diff --git 
a/indexing-service/src/main/java/org/apache/druid/indexing/common/task/Tasks.java
 
b/indexing-service/src/main/java/org/apache/druid/indexing/common/task/Tasks.java
index 5e09198828e..fa2b0af0bc0 100644
--- 
a/indexing-service/src/main/java/org/apache/druid/indexing/common/task/Tasks.java
+++ 
b/indexing-service/src/main/java/org/apache/druid/indexing/common/task/Tasks.java
@@ -39,6 +39,8 @@ public class Tasks
   public static final int DEFAULT_EMBEDDED_KILL_TASK_PRIORITY = 25;
 
   static {
+    // Keep the independently defined indexing and compaction defaults aligned 
when either constant changes.
+    // codeql[java/constant-comparison]
     Verify.verify(DEFAULT_MERGE_TASK_PRIORITY == 
DataSourceCompactionConfig.DEFAULT_COMPACTION_TASK_PRIORITY);
   }
 
diff --git 
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunnerTest.java
 
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunnerTest.java
index d4cf8bb8961..0fc173c7d24 100644
--- 
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunnerTest.java
+++ 
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunnerTest.java
@@ -1118,6 +1118,8 @@ public class SeekableStreamIndexTaskRunnerTest
       if (sequenceNumber == null) {
         return null;
       }
+      // Offset ordering intentionally excludes boundary exclusivity, which 
value equality includes.
+      // codeql[java/inconsistent-compareto-and-equals]
       return new OrderedSequenceNumber<>(sequenceNumber.toString(), false)
       {
         @Override
diff --git 
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorStateTest.java
 
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorStateTest.java
index 1bdc228b7e1..f4fa78c582f 100644
--- 
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorStateTest.java
+++ 
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorStateTest.java
@@ -3432,6 +3432,8 @@ public class SeekableStreamSupervisorStateTest extends 
EasyMockSupport
     @Override
     protected OrderedSequenceNumber<String> makeSequenceNumber(String seq, 
boolean isExclusive)
     {
+      // Offset ordering intentionally excludes boundary exclusivity, which 
value equality includes.
+      // codeql[java/inconsistent-compareto-and-equals]
       return new OrderedSequenceNumber<>(seq, isExclusive)
       {
         @Override
diff --git 
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorTestBase.java
 
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorTestBase.java
index 968e8a75092..c60de2e941c 100644
--- 
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorTestBase.java
+++ 
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorTestBase.java
@@ -215,6 +215,8 @@ public abstract class SeekableStreamSupervisorTestBase
     @Override
     protected OrderedSequenceNumber<String> makeSequenceNumber(String seq, 
boolean isExclusive)
     {
+      // Offset ordering intentionally excludes boundary exclusivity, which 
value equality includes.
+      // codeql[java/inconsistent-compareto-and-equals]
       return new OrderedSequenceNumber<>(seq, isExclusive)
       {
         @Override
diff --git 
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerHolder.java
 
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerHolder.java
index 5e0af589a86..7dedebe5471 100644
--- 
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerHolder.java
+++ 
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerHolder.java
@@ -348,6 +348,9 @@ public class ControllerHolder
       case FAILED:
         state = State.FAILED;
         break;
+
+      case RUNNING:
+        break;
     }
   }
 
diff --git 
a/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/processor/SegmentGeneratorFrameProcessor.java
 
b/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/processor/SegmentGeneratorFrameProcessor.java
index e37c755bdd5..4ce0b2cb5b3 100644
--- 
a/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/processor/SegmentGeneratorFrameProcessor.java
+++ 
b/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/processor/SegmentGeneratorFrameProcessor.java
@@ -218,6 +218,8 @@ public class SegmentGeneratorFrameProcessor implements 
FrameProcessor<DataSegmen
     }
   }
 
+  // Input rows are never ordered during indexing, and compareTo always 
rejects attempts to do so.
+  // codeql[java/inconsistent-compareto-and-equals]
   private class MSQInputRow implements InputRow
   {
     private final Object[] backingArray;
diff --git 
a/multi-stage-query/src/test/java/org/apache/druid/msq/kernel/controller/BaseControllerQueryKernelTest.java
 
b/multi-stage-query/src/test/java/org/apache/druid/msq/kernel/controller/BaseControllerQueryKernelTest.java
index bb802382045..41f160fcc45 100644
--- 
a/multi-stage-query/src/test/java/org/apache/druid/msq/kernel/controller/BaseControllerQueryKernelTest.java
+++ 
b/multi-stage-query/src/test/java/org/apache/druid/msq/kernel/controller/BaseControllerQueryKernelTest.java
@@ -210,6 +210,9 @@ public class BaseControllerQueryKernelTest extends 
InitializedNullHandlingTest
         case FAILED:
           controllerQueryKernel.failStage(stageId);
           break;
+
+        case RETRYING:
+          throw new IAE("Cannot initialize a stage directly in the retrying 
phase");
       }
       if (!recursiveCall) {
         setupStages.add(stageNumber);
diff --git 
a/processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java 
b/processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java
index 5bce5616a7b..c197da823d0 100755
--- 
a/processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java
+++ 
b/processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java
@@ -657,14 +657,16 @@ public class ConciseSet extends AbstractIntSet implements 
Serializable
         if (!otherItr.isLiteral) {
           int minCount = Math.min(thisItr.count, otherItr.count);
           res.appendFill(minCount, operator.combineLiterals(thisItr.word, 
otherItr.word));
-          //noinspection NonShortCircuitBooleanExpression
+          // Both iterators must advance before testing whether either is 
exhausted.
+          // codeql[java/non-short-circuit-evaluation]
           if (!thisItr.prepareNext(minCount) | /* NOT || */ 
!otherItr.prepareNext(minCount)) {
             break;
           }
         } else {
           res.appendLiteral(operator.combineLiterals(thisItr.toLiteral(), 
otherItr.word));
           thisItr.word--;
-          //noinspection NonShortCircuitBooleanExpression
+          // Both iterators must advance before testing whether either is 
exhausted.
+          // codeql[java/non-short-circuit-evaluation]
           if (!thisItr.prepareNext(1) | /* do NOT use "||" */ 
!otherItr.prepareNext()) {
             break;
           }
@@ -672,13 +674,15 @@ public class ConciseSet extends AbstractIntSet implements 
Serializable
       } else if (!otherItr.isLiteral) {
         res.appendLiteral(operator.combineLiterals(thisItr.word, 
otherItr.toLiteral()));
         otherItr.word--;
-        //noinspection NonShortCircuitBooleanExpression
+        // Both iterators must advance before testing whether either is 
exhausted.
+        // codeql[java/non-short-circuit-evaluation]
         if (!thisItr.prepareNext() | /* do NOT use  "||" */ 
!otherItr.prepareNext(1)) {
           break;
         }
       } else {
         res.appendLiteral(operator.combineLiterals(thisItr.word, 
otherItr.word));
-        //noinspection NonShortCircuitBooleanExpression
+        // Both iterators must advance before testing whether either is 
exhausted.
+        // codeql[java/non-short-circuit-evaluation]
         if (!thisItr.prepareNext() | /* do NOT use  "||" */ 
!otherItr.prepareNext()) {
           break;
         }
diff --git 
a/processing/src/main/java/org/apache/druid/frame/field/FieldWriters.java 
b/processing/src/main/java/org/apache/druid/frame/field/FieldWriters.java
index 58d325f5a20..3df53e83caf 100644
--- a/processing/src/main/java/org/apache/druid/frame/field/FieldWriters.java
+++ b/processing/src/main/java/org/apache/druid/frame/field/FieldWriters.java
@@ -93,6 +93,9 @@ public class FieldWriters
             return makeFloatArrayWriter(columnSelectorFactory, columnName, 
frameType);
           case DOUBLE:
             return makeDoubleArrayWriter(columnSelectorFactory, columnName, 
frameType);
+          case ARRAY:
+          case COMPLEX:
+            throw new UnsupportedColumnTypeException(columnName, columnType);
         }
       default:
         throw new UnsupportedColumnTypeException(columnName, columnType);
diff --git 
a/processing/src/main/java/org/apache/druid/java/util/common/guava/FunctionalIterator.java
 
b/processing/src/main/java/org/apache/druid/java/util/common/guava/FunctionalIterator.java
index fa06f25ac1b..20527a7f521 100644
--- 
a/processing/src/main/java/org/apache/druid/java/util/common/guava/FunctionalIterator.java
+++ 
b/processing/src/main/java/org/apache/druid/java/util/common/guava/FunctionalIterator.java
@@ -59,6 +59,8 @@ public class FunctionalIterator<T> implements Iterator<T>
   @Override
   public void remove()
   {
+    // Iterator.remove is optional; preserve the removal capability of the 
wrapped iterator.
+    // codeql[java/iterator-remove-failure]
     delegate.remove();
   }
 
diff --git 
a/processing/src/main/java/org/apache/druid/math/expr/ExpressionType.java 
b/processing/src/main/java/org/apache/druid/math/expr/ExpressionType.java
index 42f32212097..9d993baa7d2 100644
--- a/processing/src/main/java/org/apache/druid/math/expr/ExpressionType.java
+++ b/processing/src/main/java/org/apache/druid/math/expr/ExpressionType.java
@@ -103,6 +103,9 @@ public class ExpressionType extends 
BaseTypeSignature<ExprType>
           return LONG_ARRAY;
         case DOUBLE:
           return DOUBLE_ARRAY;
+        case ARRAY:
+        case COMPLEX:
+          return elementType;
       }
     }
     return elementType;
@@ -138,6 +141,9 @@ public class ExpressionType extends 
BaseTypeSignature<ExprType>
             return DOUBLE_ARRAY;
           case STRING:
             return STRING_ARRAY;
+          case ARRAY:
+          case COMPLEX:
+            break;
         }
         return 
ExpressionTypeFactory.getInstance().ofArray(fromColumnTypeStrict(valueType.getElementType()));
       case COMPLEX:
@@ -175,6 +181,9 @@ public class ExpressionType extends 
BaseTypeSignature<ExprType>
             return DOUBLE_ARRAY;
           case STRING:
             return STRING_ARRAY;
+          case ARRAY:
+          case COMPLEX:
+            break;
         }
         return 
ExpressionTypeFactory.getInstance().ofArray(fromColumnType(valueType.getElementType()));
       case COMPLEX:
diff --git 
a/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeFactory.java
 
b/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeFactory.java
index 29b8edd5aeb..03f77b56a9e 100644
--- 
a/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeFactory.java
+++ 
b/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeFactory.java
@@ -79,6 +79,9 @@ public class ExpressionTypeFactory implements 
TypeFactory<ExpressionType>
           return ExpressionType.DOUBLE_ARRAY;
         case LONG:
           return ExpressionType.LONG_ARRAY;
+        case ARRAY:
+        case COMPLEX:
+          break;
       }
     }
     return INTERNER.intern(new ExpressionType(ExprType.ARRAY, null, 
elementType));
diff --git 
a/processing/src/main/java/org/apache/druid/query/PrioritizedExecutorService.java
 
b/processing/src/main/java/org/apache/druid/query/PrioritizedExecutorService.java
index af14e4cc83b..92844f4f959 100644
--- 
a/processing/src/main/java/org/apache/druid/query/PrioritizedExecutorService.java
+++ 
b/processing/src/main/java/org/apache/druid/query/PrioritizedExecutorService.java
@@ -213,6 +213,8 @@ public class PrioritizedExecutorService extends 
AbstractExecutorService implemen
   }
 }
 
+// Tasks with equal scheduling keys remain distinct futures, so identity 
equality is intentional.
+// codeql[java/inconsistent-compareto-and-equals]
 class PrioritizedListenableFutureTask<V> implements RunnableFuture<V>,
     ListenableFuture<V>,
     PrioritizedRunnable,
diff --git 
a/processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java 
b/processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java
index 67eb8f01e9f..7bc9137782f 100644
--- a/processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java
+++ b/processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java
@@ -141,7 +141,7 @@ public class InDimFilter extends 
AbstractOptimizableDimFilter implements Filter
   {
     this(
         dimension,
-        values instanceof ValuesSet ? (ValuesSet) values : new 
ValuesSet(values),
+        values instanceof ValuesSet valuesSet ? valuesSet : new 
ValuesSet(values),
         null,
         null,
         null
@@ -161,7 +161,7 @@ public class InDimFilter extends 
AbstractOptimizableDimFilter implements Filter
   {
     this(
         dimension,
-        values instanceof ValuesSet ? (ValuesSet) values : new 
ValuesSet(values),
+        values instanceof ValuesSet valuesSet ? valuesSet : new 
ValuesSet(values),
         extractionFn,
         null,
         null
diff --git 
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java
 
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java
index ff2746bca29..68b2b1a466c 100644
--- 
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java
+++ 
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java
@@ -308,10 +308,8 @@ public class ByteBufferMinMaxOffsetHeap
         int minGcOffset = buf.getInt(minGrandchild * Integer.BYTES);
         int cmp = comparator.compare(minChildOffset, minGcOffset);
         minIndex = (cmp > 0) ? minGrandchild : minChild;
-      } else if (minChild > -1) {
-        minIndex = minChild;
       } else {
-        break;
+        minIndex = minChild;
       }
       if (minIndex == minGrandchild) {
         int offset = buf.getInt(pos * Integer.BYTES);
@@ -337,6 +335,8 @@ public class ByteBufferMinMaxOffsetHeap
             }
           }
           minChild = findMinChild(comparator, minIndex);
+        } else {
+          break;
         }
         pos = minIndex;
       } else {
diff --git 
a/processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java
 
b/processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java
index 650b259ed56..a2480335dcc 100644
--- 
a/processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java
+++ 
b/processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java
@@ -68,7 +68,8 @@ public class StringComparators
     {
       // Avoid comparisons for equal references
       // Assuming we mostly compare different strings, checking s.equals(s2) 
will only make the comparison slower.
-      //noinspection StringEquality
+      // Identity is only a fast path; ORDERING performs the content 
comparison for distinct strings.
+      // codeql[java/reference-equality-on-strings]
       if (s == s2) {
         return 0;
       }
@@ -311,7 +312,8 @@ public class StringComparators
     public int compare(String s, String s2)
     {
       // Optimization
-      //noinspection StringEquality
+      // Identity is only a fast path; ORDERING performs the content 
comparison for distinct strings.
+      // codeql[java/reference-equality-on-strings]
       if (s == s2) {
         return 0;
       }
@@ -373,7 +375,8 @@ public class StringComparators
     {
       // return if o1 and o2 are the same object
       // Assuming we mostly compare different strings, checking o1.equals(o2) 
will only make the comparison slower.
-      //noinspection StringEquality
+      // Identity is only a fast path; numeric and lexical comparison handles 
distinct strings.
+      // codeql[java/reference-equality-on-strings]
       if (o1 == o2) {
         return 0;
       }
@@ -450,7 +453,8 @@ public class StringComparators
     @Override
     public int compare(String o1, String o2)
     {
-      //noinspection StringEquality
+      // Identity is only a fast path; version comparison handles distinct 
strings.
+      // codeql[java/reference-equality-on-strings]
       if (o1 == o2) {
         return 0;
       }
diff --git 
a/processing/src/main/java/org/apache/druid/query/topn/types/TopNColumnAggregatesProcessorFactory.java
 
b/processing/src/main/java/org/apache/druid/query/topn/types/TopNColumnAggregatesProcessorFactory.java
index e921e1231f8..be3ba1c8f97 100644
--- 
a/processing/src/main/java/org/apache/druid/query/topn/types/TopNColumnAggregatesProcessorFactory.java
+++ 
b/processing/src/main/java/org/apache/druid/query/topn/types/TopNColumnAggregatesProcessorFactory.java
@@ -74,6 +74,10 @@ public class TopNColumnAggregatesProcessorFactory
           return new FloatTopNColumnAggregatesProcessor(converter);
         case DOUBLE:
           return new DoubleTopNColumnAggregatesProcessor(converter);
+        case STRING:
+        case ARRAY:
+        case COMPLEX:
+          break;
       }
     }
 
diff --git 
a/processing/src/main/java/org/apache/druid/segment/data/CompressedBlockReader.java
 
b/processing/src/main/java/org/apache/druid/segment/data/CompressedBlockReader.java
index 951a3cca447..78138a5aa53 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/data/CompressedBlockReader.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/data/CompressedBlockReader.java
@@ -68,7 +68,6 @@ public final class CompressedBlockReader implements Closeable
     if (versionFromBuffer == VERSION) {
       final CompressionStrategy compression = 
CompressionStrategy.forId(buffer.get());
       final int blockSize = buffer.getInt();
-      assert CompressedPools.BUFFER_SIZE == blockSize;
       Preconditions.checkState(
           blockSize <= CompressedPools.BUFFER_SIZE,
           "Maximum block size must be less than " + CompressedPools.BUFFER_SIZE
diff --git 
a/processing/src/main/java/org/apache/druid/segment/data/VSizeColumnarInts.java 
b/processing/src/main/java/org/apache/druid/segment/data/VSizeColumnarInts.java
index 7ce51492bd8..fc62d469b4f 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/data/VSizeColumnarInts.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/data/VSizeColumnarInts.java
@@ -150,6 +150,25 @@ public class VSizeColumnarInts implements ColumnarInts, 
Comparable<VSizeColumnar
     return retVal;
   }
 
+  @Override
+  public boolean equals(Object o)
+  {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof VSizeColumnarInts)) {
+      return false;
+    }
+    final VSizeColumnarInts that = (VSizeColumnarInts) o;
+    return numBytes == that.numBytes && buffer.equals(that.buffer);
+  }
+
+  @Override
+  public int hashCode()
+  {
+    return 31 * numBytes + buffer.hashCode();
+  }
+
   public int getNumBytes()
   {
     return numBytes;
diff --git 
a/processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java
 
b/processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java
index 1864e255170..28b6b501a1d 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java
@@ -175,6 +175,9 @@ public class ExpressionFilter implements Filter
               }
 
               return Arrays.stream(result).filter(Objects::nonNull).anyMatch(o 
-> Evals.asBoolean((double) o));
+            case ARRAY:
+            case COMPLEX:
+              break;
           }
         }
         return eval.asBoolean();
diff --git 
a/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
 
b/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
index 27b90812628..f089fd09f8e 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
@@ -98,7 +98,9 @@ public class SpatialDimensionRowTransformer implements 
Function<InputRow, InputR
         )
     );
 
-    InputRow retVal = new InputRow()
+    // Rows are ordered by timestamp, while equality retains the wrapped row's 
identity semantics.
+    // codeql[java/inconsistent-compareto-and-equals]
+    final InputRow retVal = new InputRow()
     {
       @Override
       public List<String> getDimensions()
diff --git 
a/processing/src/test/java/org/apache/druid/collections/IntSetTestUtility.java 
b/processing/src/test/java/org/apache/druid/collections/IntSetTestUtility.java
index 7a18d44c03f..1e3fedf21ad 100644
--- 
a/processing/src/test/java/org/apache/druid/collections/IntSetTestUtility.java
+++ 
b/processing/src/test/java/org/apache/druid/collections/IntSetTestUtility.java
@@ -27,7 +27,6 @@ import org.roaringbitmap.IntIterator;
 
 import java.util.BitSet;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 /**
@@ -61,54 +60,11 @@ public class IntSetTestUtility
 
   public static Boolean equalSets(Set<Integer> s1, ImmutableBitmap s2)
   {
-    Set<Integer> s3 = new HashSet<>();
-    for (Integer i : new IntIt(s2.iterator())) {
-      s3.add(i);
+    final Set<Integer> s3 = new HashSet<>();
+    final IntIterator iterator = s2.iterator();
+    while (iterator.hasNext()) {
+      s3.add(iterator.next());
     }
     return Sets.difference(s1, s3).isEmpty();
   }
-
-  private static class IntIt implements Iterable<Integer>
-  {
-    private final Iterator<Integer> intIter;
-
-    public IntIt(IntIterator intIt)
-    {
-      this.intIter = new IntIter(intIt);
-    }
-
-    @Override
-    public Iterator<Integer> iterator()
-    {
-      return intIter;
-    }
-
-    private static class IntIter implements Iterator<Integer>
-    {
-      private final IntIterator intIt;
-
-      public IntIter(IntIterator intIt)
-      {
-        this.intIt = intIt;
-      }
-
-      @Override
-      public boolean hasNext()
-      {
-        return intIt.hasNext();
-      }
-
-      @Override
-      public Integer next()
-      {
-        return intIt.next();
-      }
-
-      @Override
-      public void remove()
-      {
-        throw new UnsupportedOperationException("Cannot remove ints from int 
iterator");
-      }
-    }
-  }
 }
diff --git 
a/processing/src/test/java/org/apache/druid/java/util/common/guava/ConcatSequenceTest.java
 
b/processing/src/test/java/org/apache/druid/java/util/common/guava/ConcatSequenceTest.java
index 1e2bb56690c..68e4e4aa552 100644
--- 
a/processing/src/test/java/org/apache/druid/java/util/common/guava/ConcatSequenceTest.java
+++ 
b/processing/src/test/java/org/apache/druid/java/util/common/guava/ConcatSequenceTest.java
@@ -216,17 +216,16 @@ public class ConcatSequenceTest
                   return Sequences.simple(
                       new Iterable<>()
                       {
-                        private Iterator<Integer> baseIter = input.iterator();
-
                         @Override
                         public Iterator<Integer> iterator()
                         {
+                          final Iterator<Integer> baseIter = input.iterator();
                           return new Iterator<>()
                           {
                             @Override
                             public boolean hasNext()
                             {
-                              boolean result = baseIter.hasNext();
+                              final boolean result = baseIter.hasNext();
                               if (!result) {
                                 lastSeqFullyRead.set(true);
                               }
diff --git 
a/processing/src/test/java/org/apache/druid/math/expr/VectorExprResultConsistencyTest.java
 
b/processing/src/test/java/org/apache/druid/math/expr/VectorExprResultConsistencyTest.java
index 9ffe5da3ace..8d06ffdc7ea 100644
--- 
a/processing/src/test/java/org/apache/druid/math/expr/VectorExprResultConsistencyTest.java
+++ 
b/processing/src/test/java/org/apache/druid/math/expr/VectorExprResultConsistencyTest.java
@@ -965,6 +965,9 @@ public class VectorExprResultConsistencyTest extends 
InitializedNullHandlingTest
           }
           vectorBinding.addString(entry.getKey(), strings);
           break;
+        case ARRAY:
+        case COMPLEX:
+          throw new IllegalArgumentException("Unsupported vector binding type: 
" + entry.getValue());
       }
     }
 
diff --git 
a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryRunnerTest.java 
b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryRunnerTest.java
index b19312384ad..35e57b66ae8 100644
--- 
a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryRunnerTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryRunnerTest.java
@@ -941,7 +941,7 @@ public class ScanQueryRunnerTest extends 
InitializedNullHandlingTest
                   Map<String, Object> event = new HashMap<>();
                   String[] values1 = input.split("\\t");
                   for (int i = 0; i < dimSpecs.length; i++) {
-                    if (dimSpecs[i] == null || i >= dimSpecs.length) {
+                    if (dimSpecs[i] == null) {
                       continue;
                     }
 
diff --git 
a/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerTest.java
 
b/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerTest.java
index 1b0012560bb..cb2df0c4784 100644
--- 
a/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerTest.java
@@ -868,7 +868,6 @@ public class SearchQueryRunnerTest extends 
InitializedNullHandlingTest
     List<SearchHit> copy = new ArrayList<>(expectedResults);
     for (Result<SearchResultValue> result : results) {
       Assert.assertEquals(DateTimes.of("2011-01-12T00:00:00.000Z"), 
result.getTimestamp());
-      Assert.assertTrue(result.getValue() instanceof Iterable);
 
       Iterable<SearchHit> resultValues = result.getValue();
       for (SearchHit resultValue : resultValues) {
diff --git 
a/processing/src/test/java/org/apache/druid/segment/column/TypeStrategiesTest.java
 
b/processing/src/test/java/org/apache/druid/segment/column/TypeStrategiesTest.java
index 857a6d6a854..1b73b4f2f57 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/column/TypeStrategiesTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/column/TypeStrategiesTest.java
@@ -20,7 +20,6 @@
 package org.apache.druid.segment.column;
 
 import com.google.common.collect.Ordering;
-import com.google.common.primitives.Longs;
 import org.apache.druid.guice.BuiltInTypesModule;
 import org.apache.druid.java.util.common.IAE;
 import org.apache.druid.java.util.common.Pair;
@@ -675,9 +674,24 @@ public class TypeStrategiesTest
     }
 
     @Override
-    public int compareTo(NullableLongPair o)
+    public boolean equals(final Object o)
     {
-      return 
Comparators.<Long>naturalNullsFirst().thenComparing(Longs::compare).compare(this.lhs,
 o.lhs);
+      return super.equals(o);
+    }
+
+    @Override
+    public int hashCode()
+    {
+      return super.hashCode();
+    }
+
+    @Override
+    public int compareTo(final NullableLongPair o)
+    {
+      final int lhsComparison = 
Comparators.<Long>naturalNullsFirst().compare(lhs, o.lhs);
+      return lhsComparison != 0
+             ? lhsComparison
+             : Comparators.<Long>naturalNullsFirst().compare(rhs, o.rhs);
     }
   }
 
diff --git 
a/processing/src/test/java/org/apache/druid/segment/data/VSizeColumnarIntsTest.java
 
b/processing/src/test/java/org/apache/druid/segment/data/VSizeColumnarIntsTest.java
index fb14ffa2958..7fe775df04c 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/data/VSizeColumnarIntsTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/data/VSizeColumnarIntsTest.java
@@ -62,4 +62,21 @@ public class VSizeColumnarIntsTest
       Assertions.assertEquals(array[i], deserialized.get(i));
     }
   }
+
+  @Test
+  public void testEqualsAndHashCode()
+  {
+    final VSizeColumnarInts ints = VSizeColumnarInts.fromArray(new int[]{1, 2, 
3});
+    final VSizeColumnarInts equalInts = VSizeColumnarInts.fromArray(new 
int[]{1, 2, 3});
+    final VSizeColumnarInts differentValues = VSizeColumnarInts.fromArray(new 
int[]{1, 2, 4});
+    final VSizeColumnarInts differentWidth = VSizeColumnarInts.fromArray(new 
int[]{1, 2, 3}, 256);
+
+    Assertions.assertEquals(ints, ints);
+    Assertions.assertEquals(ints, equalInts);
+    Assertions.assertEquals(ints.hashCode(), equalInts.hashCode());
+    Assertions.assertNotEquals(ints, null);
+    Assertions.assertNotEquals(ints, "not columnar ints");
+    Assertions.assertNotEquals(ints, differentValues);
+    Assertions.assertNotEquals(ints, differentWidth);
+  }
 }
diff --git 
a/processing/src/test/java/org/apache/druid/segment/transform/RowFunctionTest.java
 
b/processing/src/test/java/org/apache/druid/segment/transform/RowFunctionTest.java
index fa7527a3ddf..9bf892c72fe 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/transform/RowFunctionTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/transform/RowFunctionTest.java
@@ -19,15 +19,14 @@
 
 package org.apache.druid.segment.transform;
 
+import com.google.common.collect.ImmutableMap;
+import org.apache.druid.data.input.MapBasedRow;
 import org.apache.druid.data.input.Row;
 import org.apache.druid.data.input.Rows;
-import org.joda.time.DateTime;
+import org.apache.druid.java.util.common.DateTimes;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import javax.annotation.Nullable;
-import java.util.List;
-
 public class RowFunctionTest implements RowFunction
 {
   @Override
@@ -39,46 +38,7 @@ public class RowFunctionTest implements RowFunction
   @Test
   public void defaultEvalDimensionTest()
   {
-    Row row = new Row()
-    {
-      @Override
-      public long getTimestampFromEpoch()
-      {
-        return 0;
-      }
-
-      @Override
-      public DateTime getTimestamp()
-      {
-        return null;
-      }
-
-      @Override
-      public List<String> getDimension(String dimension)
-      {
-        return null;
-      }
-
-      @Nullable
-      @Override
-      public Object getRaw(String dimension)
-      {
-        return dimension;
-      }
-
-      @Nullable
-      @Override
-      public Number getMetric(String metric)
-      {
-        return null;
-      }
-
-      @Override
-      public int compareTo(Row o)
-      {
-        return 0;
-      }
-    };
+    final Row row = new MapBasedRow(DateTimes.EPOCH, ImmutableMap.of());
     Assertions.assertEquals(Rows.objectToStrings(eval(row)), 
evalDimension(row));
   }
 }
diff --git 
a/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
 
b/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
index 1f8ec37ddf6..0d990a85014 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
@@ -26,7 +26,6 @@ import org.apache.druid.data.input.InputRow;
 import org.apache.druid.data.input.InputRowListPlusRawValues;
 import org.apache.druid.data.input.MapBasedInputRow;
 import org.apache.druid.data.input.MapBasedRow;
-import org.apache.druid.data.input.Row;
 import org.apache.druid.error.DruidExceptionMatcher;
 import org.apache.druid.java.util.common.CloseableIterators;
 import org.apache.druid.java.util.common.DateTimes;
@@ -42,7 +41,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-import javax.annotation.Nullable;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -518,52 +516,13 @@ public class TransformerTest extends 
InitializedNullHandlingTest
     Assert.assertEquals(row.getDimension("dim"), dimList);
     Assert.assertEquals(row.getRaw("dim"), dimList);
 
-    final InputRow actualTranformedRow = transformer.transform(new InputRow()
-    {
-      @Override
-      public List<String> getDimensions()
-      {
-        return new ArrayList<>(row.getEvent().keySet());
-      }
-
-      @Override
-      public long getTimestampFromEpoch()
-      {
-        return 0;
-      }
-
-      @Override
-      public DateTime getTimestamp()
-      {
-        return row.getTimestamp();
-      }
-
-      @Override
-      public List<String> getDimension(String dimension)
-      {
-        return row.getDimension(dimension);
-      }
-
-      @Nullable
-      @Override
-      public Object getRaw(String dimension)
-      {
-        return row.getRaw(dimension);
-      }
-
-      @Nullable
-      @Override
-      public Number getMetric(String metric)
-      {
-        return row.getMetric(metric);
-      }
-
-      @Override
-      public int compareTo(Row o)
-      {
-        return row.compareTo(o);
-      }
-    });
+    final InputRow actualTranformedRow = transformer.transform(
+        new MapBasedInputRow(
+            row.getTimestamp(),
+            new ArrayList<>(row.getEvent().keySet()),
+            row.getEvent()
+        )
+    );
     Assert.assertEquals(actualTranformedRow.getDimension("dim"), 
dimList.subList(0, 5));
     Assert.assertArrayEquals(dimList.subList(0, 5).toArray(), (Object[]) 
actualTranformedRow.getRaw("dim"));
     Assert.assertEquals(ImmutableList.of("a"), 
actualTranformedRow.getDimension("dim1"));
diff --git 
a/processing/src/test/java/org/apache/druid/timeline/partition/HashBasedNumberedShardSpecTest.java
 
b/processing/src/test/java/org/apache/druid/timeline/partition/HashBasedNumberedShardSpecTest.java
index 9996b0aeb82..b2da88ef5dc 100644
--- 
a/processing/src/test/java/org/apache/druid/timeline/partition/HashBasedNumberedShardSpecTest.java
+++ 
b/processing/src/test/java/org/apache/druid/timeline/partition/HashBasedNumberedShardSpecTest.java
@@ -397,11 +397,24 @@ public class HashBasedNumberedShardSpecTest
   {
     private final int hashcode;
 
-    HashInputRow(int hashcode)
+    HashInputRow(final int hashcode)
     {
       this.hashcode = hashcode;
     }
 
+    @Override
+    public boolean equals(final Object o)
+    {
+      if (this == o) {
+        return true;
+      }
+      if (!(o instanceof HashInputRow)) {
+        return false;
+      }
+      final HashInputRow that = (HashInputRow) o;
+      return hashcode == that.hashcode;
+    }
+
     @Override
     public int hashCode()
     {
@@ -445,9 +458,16 @@ public class HashBasedNumberedShardSpecTest
     }
 
     @Override
-    public int compareTo(Row o)
+    public int compareTo(final Row o)
     {
-      return 0;
+      if (o instanceof HashInputRow) {
+        return Integer.compare(hashcode, ((HashInputRow) o).hashcode);
+      }
+
+      final int timestampComparison = Long.compare(getTimestampFromEpoch(), 
o.getTimestampFromEpoch());
+      return timestampComparison != 0
+             ? timestampComparison
+             : getClass().getName().compareTo(o.getClass().getName());
     }
   }
 
diff --git 
a/server/src/main/java/org/apache/druid/metadata/BasicDataSourceExt.java 
b/server/src/main/java/org/apache/druid/metadata/BasicDataSourceExt.java
index cff9308a697..1140c7693a1 100644
--- a/server/src/main/java/org/apache/druid/metadata/BasicDataSourceExt.java
+++ b/server/src/main/java/org/apache/druid/metadata/BasicDataSourceExt.java
@@ -101,6 +101,8 @@ public class BasicDataSourceExt extends BasicDataSource
   }
 
   @VisibleForTesting
+  // This test accessor returns the properties tracked by this subclass; the 
superclass getter is package-private.
+  // codeql[java/non-overriding-package-private]
   public Properties getConnectionProperties()
   {
     return connectionProperties;
diff --git 
a/server/src/main/java/org/apache/druid/server/QueryResultPusher.java 
b/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
index cb958ea9857..6f0b3ee272a 100644
--- a/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
+++ b/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
@@ -249,6 +249,11 @@ public abstract class QueryResultPusher
       case TIMEOUT:
         counter.incrementTimedOut();
         break;
+      case CONFLICT:
+      case FORBIDDEN:
+      case NOT_FOUND:
+      case SERVICE_UNAVAILABLE:
+        break;
     }
   }
 
diff --git 
a/server/src/test/java/org/apache/druid/rpc/NoDelayScheduledExecutorService.java
 
b/server/src/test/java/org/apache/druid/rpc/NoDelayScheduledExecutorService.java
index 7574be33043..60fab93ed3e 100644
--- 
a/server/src/test/java/org/apache/druid/rpc/NoDelayScheduledExecutorService.java
+++ 
b/server/src/test/java/org/apache/druid/rpc/NoDelayScheduledExecutorService.java
@@ -30,6 +30,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * Used by {@link ServiceClientImplTest} so retries happen immediately.
@@ -75,7 +76,10 @@ public class NoDelayScheduledExecutorService extends 
ForwardingExecutorService i
 
   private static class NoDelayScheduledFuture<T> implements ScheduledFuture<T>
   {
+    private static final AtomicLong NEXT_SEQUENCE_NUMBER = new AtomicLong();
+
     private final Future<T> delegate;
+    private final long sequenceNumber = NEXT_SEQUENCE_NUMBER.getAndIncrement();
 
     public NoDelayScheduledFuture(final Future<T> delegate)
     {
@@ -89,9 +93,27 @@ public class NoDelayScheduledExecutorService extends 
ForwardingExecutorService i
     }
 
     @Override
-    public int compareTo(Delayed o)
+    public int compareTo(final Delayed o)
     {
-      return 0;
+      if (this == o) {
+        return 0;
+      }
+      if (o instanceof NoDelayScheduledFuture) {
+        return Long.compare(sequenceNumber, ((NoDelayScheduledFuture<?>) 
o).sequenceNumber);
+      }
+      return getClass().getName().compareTo(o.getClass().getName());
+    }
+
+    @Override
+    public boolean equals(final Object o)
+    {
+      return this == o;
+    }
+
+    @Override
+    public int hashCode()
+    {
+      return System.identityHashCode(this);
     }
 
     @Override
diff --git 
a/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java 
b/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
index 99559033ce2..4e12583b374 100644
--- a/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
+++ b/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
@@ -25,7 +25,6 @@ import com.google.common.collect.Iterators;
 import com.google.common.collect.Maps;
 import org.apache.druid.data.input.InputRow;
 import org.apache.druid.data.input.MapBasedInputRow;
-import org.apache.druid.data.input.Row;
 import 
org.apache.druid.data.input.impl.ClusteredValueGroupsBaseTableProjectionSpec;
 import org.apache.druid.data.input.impl.DimensionsSpec;
 import org.apache.druid.data.input.impl.LongDimensionSchema;
@@ -55,13 +54,11 @@ import 
org.apache.druid.timeline.partition.NumberedShardSpec;
 import org.apache.druid.timeline.partition.ShardSpec;
 import org.apache.druid.utils.CloseableUtils;
 import org.easymock.EasyMock;
-import org.joda.time.DateTime;
 import org.joda.time.Interval;
 import org.junit.Assert;
 import org.junit.Test;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -99,52 +96,7 @@ public class SinkTest extends InitializedNullHandlingTest
         TuningConfig.DEFAULT_APPENDABLE_INDEX.getDefaultMaxBytesInMemory()
     );
 
-    sink.add(
-        new InputRow()
-        {
-          @Override
-          public List<String> getDimensions()
-          {
-            return new ArrayList<>();
-          }
-
-          @Override
-          public long getTimestampFromEpoch()
-          {
-            return DateTimes.of("2013-01-01").getMillis();
-          }
-
-          @Override
-          public DateTime getTimestamp()
-          {
-            return DateTimes.of("2013-01-01");
-          }
-
-          @Override
-          public List<String> getDimension(String dimension)
-          {
-            return new ArrayList<>();
-          }
-
-          @Override
-          public Number getMetric(String metric)
-          {
-            return 0;
-          }
-
-          @Override
-          public Object getRaw(String dimension)
-          {
-            return null;
-          }
-
-          @Override
-          public int compareTo(Row o)
-          {
-            return 0;
-          }
-        }
-    );
+    sink.add(new MapBasedInputRow(DateTimes.of("2013-01-01"), 
ImmutableList.of(), ImmutableMap.of()));
 
     FireHydrant currHydrant = sink.getCurrHydrant();
     Assert.assertEquals(Intervals.of("2013-01-01/PT1M"), 
currHydrant.getIndex().getInterval());
@@ -152,52 +104,7 @@ public class SinkTest extends InitializedNullHandlingTest
 
     FireHydrant swapHydrant = sink.swap();
 
-    sink.add(
-        new InputRow()
-        {
-          @Override
-          public List<String> getDimensions()
-          {
-            return new ArrayList<>();
-          }
-
-          @Override
-          public long getTimestampFromEpoch()
-          {
-            return DateTimes.of("2013-01-01").getMillis();
-          }
-
-          @Override
-          public DateTime getTimestamp()
-          {
-            return DateTimes.of("2013-01-01");
-          }
-
-          @Override
-          public List<String> getDimension(String dimension)
-          {
-            return new ArrayList<>();
-          }
-
-          @Override
-          public Number getMetric(String metric)
-          {
-            return 0;
-          }
-
-          @Override
-          public Object getRaw(String dimension)
-          {
-            return null;
-          }
-
-          @Override
-          public int compareTo(Row o)
-          {
-            return 0;
-          }
-        }
-    );
+    sink.add(new MapBasedInputRow(DateTimes.of("2013-01-01"), 
ImmutableList.of(), ImmutableMap.of()));
 
     Assert.assertEquals(currHydrant, swapHydrant);
     Assert.assertNotSame(currHydrant, sink.getCurrHydrant());
diff --git 
a/server/src/test/java/org/apache/druid/server/coordinator/duty/CompactSegmentsTest.java
 
b/server/src/test/java/org/apache/druid/server/coordinator/duty/CompactSegmentsTest.java
index b4b070e77d0..cbdfec22e51 100644
--- 
a/server/src/test/java/org/apache/druid/server/coordinator/duty/CompactSegmentsTest.java
+++ 
b/server/src/test/java/org/apache/druid/server/coordinator/duty/CompactSegmentsTest.java
@@ -716,8 +716,7 @@ public class CompactSegmentsTest
   @Test
   public void 
testRunMultipleCompactionTaskSlotsWithUseAutoScaleSlotsOverMaxSlot()
   {
-    int maxCompactionSlot = 3;
-    Assert.assertTrue(maxCompactionSlot < MAXIMUM_CAPACITY_WITH_AUTO_SCALE);
+    final int maxCompactionSlot = 3;
     final TestOverlordClient overlordClient = new 
TestOverlordClient(JSON_MAPPER);
     final CompactSegments compactSegments = new CompactSegments(statusTracker, 
overlordClient);
     final CoordinatorRunStats stats =
@@ -736,8 +735,7 @@ public class CompactSegmentsTest
   @Test
   public void 
testRunMultipleCompactionTaskSlotsWithUseAutoScaleSlotsUnderMaxSlot()
   {
-    int maxCompactionSlot = 100;
-    Assert.assertFalse(maxCompactionSlot < MAXIMUM_CAPACITY_WITH_AUTO_SCALE);
+    final int maxCompactionSlot = 100;
     final TestOverlordClient overlordClient = new 
TestOverlordClient(JSON_MAPPER);
     final CompactSegments compactSegments = new CompactSegments(statusTracker, 
overlordClient);
     final CoordinatorRunStats stats =
diff --git 
a/server/src/test/java/org/apache/druid/server/coordinator/simulate/WrappingScheduledExecutorService.java
 
b/server/src/test/java/org/apache/druid/server/coordinator/simulate/WrappingScheduledExecutorService.java
index 334651ee30f..a497a1c1640 100644
--- 
a/server/src/test/java/org/apache/druid/server/coordinator/simulate/WrappingScheduledExecutorService.java
+++ 
b/server/src/test/java/org/apache/druid/server/coordinator/simulate/WrappingScheduledExecutorService.java
@@ -33,6 +33,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * Wraps an {@link ExecutorService} into a {@link ScheduledExecutorService}.
@@ -188,7 +189,10 @@ public class WrappingScheduledExecutorService implements 
ScheduledExecutorServic
    */
   private static class WrappingScheduledFuture<V> implements ScheduledFuture<V>
   {
+    private static final AtomicLong NEXT_SEQUENCE_NUMBER = new AtomicLong();
+
     private final Future<V> future;
+    private final long sequenceNumber = NEXT_SEQUENCE_NUMBER.getAndIncrement();
 
     private WrappingScheduledFuture(Future<V> future)
     {
@@ -202,9 +206,27 @@ public class WrappingScheduledExecutorService implements 
ScheduledExecutorServic
     }
 
     @Override
-    public int compareTo(Delayed o)
+    public int compareTo(final Delayed o)
     {
-      return 0;
+      if (this == o) {
+        return 0;
+      }
+      if (o instanceof WrappingScheduledFuture) {
+        return Long.compare(sequenceNumber, ((WrappingScheduledFuture<?>) 
o).sequenceNumber);
+      }
+      return getClass().getName().compareTo(o.getClass().getName());
+    }
+
+    @Override
+    public boolean equals(final Object o)
+    {
+      return this == o;
+    }
+
+    @Override
+    public int hashCode()
+    {
+      return System.identityHashCode(this);
     }
 
     @Override
diff --git a/sql/src/main/codegen/templates/Parser.jj 
b/sql/src/main/codegen/templates/Parser.jj
index 3f39b1f050e..5d68325134a 100644
--- a/sql/src/main/codegen/templates/Parser.jj
+++ b/sql/src/main/codegen/templates/Parser.jj
@@ -431,6 +431,8 @@ JAVACODE void checkQueryExpression(ExprContext exprContext)
     case ACCEPT_CURSOR:
         throw SqlUtil.newContextException(getPos(),
             RESOURCE.illegalQueryExpression());
+    default:
+        break;
     }
 }
 
@@ -440,6 +442,8 @@ JAVACODE void checkNonQueryExpression(ExprContext 
exprContext)
     case ACCEPT_QUERY:
         throw SqlUtil.newContextException(getPos(),
             RESOURCE.illegalNonQueryExpression());
+    default:
+        break;
     }
 }
 
@@ -834,6 +838,8 @@ SqlNode ParenthesizedExpression(ExprContext exprContext) :
         case ACCEPT_CURSOR:
             exprContext = ExprContext.ACCEPT_ALL;
             break;
+        default:
+            break;
         }
     }
     e = ExprOrJoinOrOrderedQuery(exprContext)
@@ -889,6 +895,8 @@ SqlNodeList ParenthesizedQueryOrCommaList(
         case ACCEPT_CURSOR:
             firstExprContext = ExprContext.ACCEPT_ALL;
             break;
+        default:
+            break;
         }
     }
     e = OrderedQueryOrExpr(firstExprContext) { list.add(e); }
@@ -930,6 +938,8 @@ SqlNodeList ParenthesizedQueryOrCommaListWithDefault(
         case ACCEPT_CURSOR:
             firstExprContext = ExprContext.ACCEPT_ALL;
             break;
+        default:
+            break;
         }
     }
     (


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to