- Find classes without equals/hashCode
WITH
-- Step 1: Find classes with equals
classes_with_equals AS (
SELECT DISTINCT m.class_id
FROM java.methods m
WHERE m.name = 'equals'
),
-- Step 2: Find classes with hashCode
classes_with_hashcode AS (
SELECT DISTINCT m.class_id
FROM java.methods m
WHERE m.name = 'hashCode'
),
-- Step 3: Find classes without either
classes_missing_methods AS (
SELECT
c.id,
c.fully_qualified_name,
c.file_path,
ce.class_id AS has_equals,
ch.class_id AS has_hashcode
FROM java.classes c
LEFT JOIN classes_with_equals ce ON ce.class_id = c.id
LEFT JOIN classes_with_hashcode ch ON ch.class_id = c.id
)
SELECT fully_qualified_name, file_path
FROM classes_missing_methods
WHERE has_equals IS NULL OR has_hashcode IS NULL;
- Find deep call chains
WITH
-- Step 1: Calculate path lengths between all method pairs
method_paths AS (
SELECT
m1.id AS caller_id,
m2.id AS callee_id,
m1.signature AS caller_sig,
m2.signature AS callee_sig,
path_length(m1.id, m2.id, 'calls') AS depth
FROM java.methods m1
CROSS JOIN java.methods m2
WHERE path_length(m1.id, m2.id, 'calls') >= 5
),
-- Step 2: Filter and rank
deep_chains AS (
SELECT
caller_sig,
callee_sig,
depth
FROM method_paths
WHERE depth >= 5
)
SELECT
caller_sig AS start_method,
callee_sig AS end_method,
depth AS chain_length
FROM deep_chains
ORDER BY depth DESC
LIMIT 50;