tp: switch LIKE to GLOB in all metrics

Also ban LIKE as a presubmit check.

Change-Id: I79613410327e451a1802dcd54bb866a9e97f159c
Bug: 205302474
diff --git a/src/trace_processor/metrics/sql/android/android_batt.sql b/src/trace_processor/metrics/sql/android/android_batt.sql
index 070a518..9b8de86 100644
--- a/src/trace_processor/metrics/sql/android/android_batt.sql
+++ b/src/trace_processor/metrics/sql/android/android_batt.sql
@@ -25,7 +25,7 @@
   SELECT distinct(ts) AS ts
   FROM counter c
   JOIN counter_track t on c.track_id = t.id
-  WHERE name LIKE 'batt.%'
+  WHERE name GLOB 'batt.*'
 ) AS all_ts
 LEFT JOIN (
   SELECT ts, value AS current_avg_ua
@@ -78,7 +78,7 @@
                 true
             ) AS new_group
         FROM slice
-        WHERE slice.name LIKE 'WakeLock %' AND dur != -1
+        WHERE slice.name GLOB 'WakeLock *' AND dur != -1
     )
 )
 GROUP BY group_id;
diff --git a/src/trace_processor/metrics/sql/android/android_camera.sql b/src/trace_processor/metrics/sql/android/android_camera.sql
index f8ba2af..791c922 100644
--- a/src/trace_processor/metrics/sql/android/android_camera.sql
+++ b/src/trace_processor/metrics/sql/android/android_camera.sql
@@ -30,7 +30,7 @@
 JOIN (
   SELECT max(start_ts), upid
   FROM process
-  WHERE name LIKE '%GoogleCamera%'
+  WHERE name GLOB '*GoogleCamera*'
   LIMIT 1
 ) AS gca USING (upid);
 
@@ -42,7 +42,7 @@
 JOIN (
   SELECT max(start_ts), upid
   FROM process
-  WHERE name LIKE '%camera.provider%'
+  WHERE name GLOB '*camera.provider*'
   LIMIT 1
 ) AS hal USING (upid);
 
diff --git a/src/trace_processor/metrics/sql/android/android_dvfs.sql b/src/trace_processor/metrics/sql/android/android_dvfs.sql
index a5872df..d8162b1 100644
--- a/src/trace_processor/metrics/sql/android/android_dvfs.sql
+++ b/src/trace_processor/metrics/sql/android/android_dvfs.sql
@@ -25,7 +25,7 @@
       OVER (PARTITION by track.id ORDER BY ts)  - ts AS duration
   FROM counter
   LEFT JOIN track ON counter.track_id = track.id
-  WHERE track.name LIKE "% Frequency"
+  WHERE track.name GLOB "* Frequency"
   ORDER BY ts;
 
 DROP VIEW IF EXISTS freq_total_duration;
@@ -82,6 +82,7 @@
   GROUP BY track_id, freq_name
   ORDER BY freq_name;
 
+DROP VIEW IF EXISTS android_dvfs_output;
 CREATE VIEW android_dvfs_output AS
   SELECT AndroidDVFSMetric(
     'freq_residencies', (
diff --git a/src/trace_processor/metrics/sql/android/android_fastrpc.sql b/src/trace_processor/metrics/sql/android/android_fastrpc.sql
index 81da811..e381668 100644
--- a/src/trace_processor/metrics/sql/android/android_fastrpc.sql
+++ b/src/trace_processor/metrics/sql/android/android_fastrpc.sql
@@ -9,7 +9,7 @@
   value
 FROM counter JOIN counter_track
   ON counter.track_id = counter_track.id
-WHERE (name LIKE 'mem.fastrpc[%');
+WHERE (name GLOB 'mem.fastrpc[[]*');
 
 DROP VIEW IF EXISTS fastrpc_subsystem_stats;
 CREATE VIEW fastrpc_subsystem_stats AS
@@ -29,7 +29,7 @@
   value AS instant_value,
   SUM(value) OVER win AS value
 FROM counter c JOIN thread_counter_track t ON c.track_id = t.id
-WHERE name LIKE 'mem.fastrpc_change%' AND value > 0
+WHERE name GLOB 'mem.fastrpc_change*' AND value > 0
 WINDOW win AS (
   PARTITION BY name ORDER BY ts
   ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
diff --git a/src/trace_processor/metrics/sql/android/android_hwui_metric.sql b/src/trace_processor/metrics/sql/android/android_hwui_metric.sql
index 585e515..1a33e22 100644
--- a/src/trace_processor/metrics/sql/android/android_hwui_metric.sql
+++ b/src/trace_processor/metrics/sql/android/android_hwui_metric.sql
@@ -39,7 +39,7 @@
   thread_track.utid as render_thread_id
 FROM slice
 INNER JOIN thread_track ON (thread_track.id = slice.track_id)
-WHERE slice.name LIKE 'DrawFrame%' AND slice.dur >= 0
+WHERE slice.name GLOB 'DrawFrame*' AND slice.dur >= 0
 GROUP BY thread_track.utid;
 
 DROP VIEW IF EXISTS hwui_flush_commands;
@@ -79,7 +79,7 @@
 FROM slice
 INNER JOIN thread_track ON (thread_track.id = slice.track_id)
 INNER JOIN thread ON (thread.name='GPU completion' AND thread.utid = thread_track.utid)
-WHERE slice.name LIKE 'waiting for GPU completion%' AND slice.dur >= 0
+WHERE slice.name GLOB 'waiting for GPU completion*' AND slice.dur >= 0
 GROUP BY thread_track.utid;
 
 DROP VIEW IF EXISTS hwui_ui_record;
diff --git a/src/trace_processor/metrics/sql/android/android_hwui_threads.sql b/src/trace_processor/metrics/sql/android/android_hwui_threads.sql
index 942005b..ee6a3ab 100644
--- a/src/trace_processor/metrics/sql/android/android_hwui_threads.sql
+++ b/src/trace_processor/metrics/sql/android/android_hwui_threads.sql
@@ -69,7 +69,7 @@
     *,
     CAST(STR_SPLIT(name, ' ', 1) AS INTEGER) as vsync
   FROM {{table_name_prefix}}_main_thread_slices
-  WHERE name LIKE 'Choreographer#doFrame%';
+  WHERE name GLOB 'Choreographer#doFrame*';
 
 DROP TABLE IF EXISTS {{table_name_prefix}}_render_thread_slices;
 CREATE TABLE {{table_name_prefix}}_render_thread_slices AS
@@ -89,7 +89,7 @@
     *,
     CAST(STR_SPLIT(name, ' ', 1) AS INTEGER) as vsync
   FROM {{table_name_prefix}}_render_thread_slices
-  WHERE name LIKE 'DrawFrame%';
+  WHERE name GLOB 'DrawFrame*';
 
 DROP VIEW IF EXISTS {{table_name_prefix}}_gpu_completion_slices;
 CREATE VIEW {{table_name_prefix}}_gpu_completion_slices AS
@@ -103,7 +103,7 @@
   FROM slice
   JOIN thread_track ON slice.track_id = thread_track.id
   JOIN {{table_name_prefix}}_gpu_completion_thread thread USING (utid)
-  WHERE slice.name LIKE 'waiting for GPU completion %'
+  WHERE slice.name GLOB 'waiting for GPU completion *'
   AND dur > 0;
 
 DROP VIEW IF EXISTS {{table_name_prefix}}_hwc_release_slices;
@@ -118,5 +118,5 @@
   FROM slice
   JOIN thread_track ON slice.track_id = thread_track.id
   JOIN {{table_name_prefix}}_hwc_release_thread thread USING (utid)
-  WHERE slice.name LIKE 'waiting for HWC release %'
+  WHERE slice.name GLOB 'waiting for HWC release *'
   AND dur > 0;
diff --git a/src/trace_processor/metrics/sql/android/android_ion.sql b/src/trace_processor/metrics/sql/android/android_ion.sql
index 93fe8ac..4d61843 100644
--- a/src/trace_processor/metrics/sql/android/android_ion.sql
+++ b/src/trace_processor/metrics/sql/android/android_ion.sql
@@ -28,7 +28,7 @@
   value
 FROM counter JOIN counter_track
   ON counter.track_id = counter_track.id
-WHERE (name LIKE 'mem.ion.%' OR name = 'mem.ion');
+WHERE (name GLOB 'mem.ion.*' OR name = 'mem.ion');
 
 DROP VIEW IF EXISTS ion_heap_stats;
 CREATE VIEW ion_heap_stats AS
@@ -51,7 +51,7 @@
   value AS instant_value,
   SUM(value) OVER win AS value
 FROM counter c JOIN thread_counter_track t ON c.track_id = t.id
-WHERE (name LIKE 'mem.ion_change.%' OR name = 'mem.ion_change') AND value > 0
+WHERE (name GLOB 'mem.ion_change.*' OR name = 'mem.ion_change') AND value > 0
 WINDOW win AS (
   PARTITION BY name ORDER BY ts
   ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
diff --git a/src/trace_processor/metrics/sql/android/android_jank.sql b/src/trace_processor/metrics/sql/android/android_jank.sql
index 44f7d81..9c2cc22 100644
--- a/src/trace_processor/metrics/sql/android/android_jank.sql
+++ b/src/trace_processor/metrics/sql/android/android_jank.sql
@@ -157,7 +157,7 @@
   ts,
   dur
 FROM android_jank_main_thread_slices
-WHERE name LIKE 'Choreographer#doFrame%'
+WHERE name GLOB 'Choreographer#doFrame*'
 AND dur >= 5000000;
 
 CREATE VIRTUAL TABLE IF NOT EXISTS android_jank_do_frame_slices_state_scheduled
@@ -213,7 +213,7 @@
   dur,
   'Expensive rendering with Canvas#saveLayer()' as alert_name
 FROM android_jank_render_thread_slices
-WHERE name LIKE '%alpha caused %saveLayer %'
+WHERE name GLOB '*alpha caused *saveLayer *'
 AND dur >= 1000000;
 
 -- Path texture churn
@@ -239,7 +239,7 @@
   dur,
   'Expensive Bitmap uploads' as alert_name
 FROM android_jank_render_thread_slices
-WHERE name LIKE 'Upload %x% Texture'
+WHERE name GLOB 'Upload *x* Texture'
 AND dur >= 3000000;
 
 -- Merge all alerts tables into one table
diff --git a/src/trace_processor/metrics/sql/android/android_lmk.sql b/src/trace_processor/metrics/sql/android/android_lmk.sql
index 8c66278..ca20c90 100644
--- a/src/trace_processor/metrics/sql/android/android_lmk.sql
+++ b/src/trace_processor/metrics/sql/android/android_lmk.sql
@@ -52,7 +52,7 @@
       slice.dur,
       CAST(STR_SPLIT(slice.name, ",", 1) AS INTEGER) AS pid
     FROM slice
-    WHERE slice.name LIKE 'lmk,%'
+    WHERE slice.name GLOB 'lmk,*'
 ),
 lmks_with_proc_name AS (
   SELECT
diff --git a/src/trace_processor/metrics/sql/android/android_powrails.sql b/src/trace_processor/metrics/sql/android/android_powrails.sql
index 656cb15..626f7c4 100644
--- a/src/trace_processor/metrics/sql/android/android_powrails.sql
+++ b/src/trace_processor/metrics/sql/android/android_powrails.sql
@@ -20,7 +20,7 @@
 SELECT value, ts/1000000 AS ts, name
 FROM counter c
 JOIN counter_track t on c.track_id = t.id
-WHERE name LIKE 'power.%';
+WHERE name GLOB 'power.*';
 
 DROP VIEW IF EXISTS avg_used_powers;
 CREATE VIEW avg_used_powers AS
diff --git a/src/trace_processor/metrics/sql/android/android_simpleperf.sql b/src/trace_processor/metrics/sql/android/android_simpleperf.sql
index fa58575..1b7f85c 100644
--- a/src/trace_processor/metrics/sql/android/android_simpleperf.sql
+++ b/src/trace_processor/metrics/sql/android/android_simpleperf.sql
@@ -23,7 +23,7 @@
   name,
   value
 FROM counters
-WHERE name LIKE 'slc/qurg2\___:lvl=0x_%' ESCAPE '\';
+WHERE name GLOB 'slc/qurg2_??:lvl=0x_*';
 
 -- Find all counters from track that satisfies regex 'slc/qurg2_(wr|rd):lvl=0x(1|3|7)%'
 DROP VIEW IF EXISTS non_zero_qurg2;
@@ -31,7 +31,7 @@
 SELECT
   *
 FROM all_qurg2
-WHERE name NOT LIKE 'slc/qurg2\___:lvl=0x0%' ESCAPE '\';
+WHERE name NOT GLOB 'slc/qurg2_??:lvl=0x0*';
 
 DROP VIEW IF EXISTS android_simpleperf_output;
 CREATE VIEW android_simpleperf_output AS
diff --git a/src/trace_processor/metrics/sql/android/android_startup.sql b/src/trace_processor/metrics/sql/android/android_startup.sql
index 20eaefe..c097ece 100644
--- a/src/trace_processor/metrics/sql/android/android_startup.sql
+++ b/src/trace_processor/metrics/sql/android/android_startup.sql
@@ -58,7 +58,7 @@
 DROP VIEW IF EXISTS zygote_fork_slice;
 CREATE VIEW zygote_fork_slice AS
 SELECT slice.ts, slice.dur, STR_SPLIT(slice.name, ": ", 1) AS process_name
-FROM slice WHERE name LIKE 'Start proc: %';
+FROM slice WHERE name GLOB 'Start proc: *';
 
 DROP TABLE IF EXISTS zygote_forks_by_id;
 CREATE TABLE zygote_forks_by_id AS
@@ -147,28 +147,28 @@
   'inflate',
   'ResourcesManager#getResources',
   'binder transaction')
-  OR slice.name LIKE 'performResume:%'
-  OR slice.name LIKE 'performCreate:%'
-  OR slice.name LIKE 'location=% status=% filter=% reason=%'
-  OR slice.name LIKE 'OpenDexFilesFromOat%'
-  OR slice.name LIKE 'VerifyClass%'
-  OR slice.name LIKE 'Choreographer#doFrame%'
-  OR slice.name LIKE 'JIT compiling%'
-  OR slice.name LIKE '%mark sweep GC'
-  OR slice.name LIKE '%concurrent copying GC'
-  OR slice.name LIKE '%semispace GC';
+  OR slice.name GLOB 'performResume:*'
+  OR slice.name GLOB 'performCreate:*'
+  OR slice.name GLOB 'location=* status=* filter=* reason=*'
+  OR slice.name GLOB 'OpenDexFilesFromOat*'
+  OR slice.name GLOB 'VerifyClass*'
+  OR slice.name GLOB 'Choreographer#doFrame*'
+  OR slice.name GLOB 'JIT compiling*'
+  OR slice.name GLOB '*mark sweep GC'
+  OR slice.name GLOB '*concurrent copying GC'
+  OR slice.name GLOB '*semispace GC';
 
 DROP TABLE IF EXISTS main_process_slice;
 CREATE TABLE main_process_slice AS
 SELECT
   launch_id,
   CASE
-    WHEN slice_name LIKE 'OpenDexFilesFromOat%' THEN 'OpenDexFilesFromOat'
-    WHEN slice_name LIKE 'VerifyClass%' THEN 'VerifyClass'
-    WHEN slice_name LIKE 'JIT compiling%' THEN 'JIT compiling'
-    WHEN slice_name LIKE '%mark sweep GC' THEN 'GC'
-    WHEN slice_name LIKE '%concurrent copying GC' THEN 'GC'
-    WHEN slice_name LIKE '%semispace GC' THEN 'GC'
+    WHEN slice_name GLOB 'OpenDexFilesFromOat*' THEN 'OpenDexFilesFromOat'
+    WHEN slice_name GLOB 'VerifyClass*' THEN 'VerifyClass'
+    WHEN slice_name GLOB 'JIT compiling*' THEN 'JIT compiling'
+    WHEN slice_name GLOB '*mark sweep GC' THEN 'GC'
+    WHEN slice_name GLOB '*concurrent copying GC' THEN 'GC'
+    WHEN slice_name GLOB '*semispace GC' THEN 'GC'
     ELSE slice_name
   END AS name,
   AndroidStartupMetric_Slice(
@@ -192,7 +192,7 @@
   JOIN slice ON (
     slice.track_id = thread_track.id
     AND slice.ts >= launches.ts)
-  WHERE slice.name LIKE 'reportFullyDrawn%'
+  WHERE slice.name GLOB 'reportFullyDrawn*'
   GROUP BY launches.id
 )
 SELECT
@@ -224,9 +224,9 @@
     launch_id
   FROM main_process_slice_unaggregated
   WHERE (
-    slice_name LIKE '%mark sweep GC'
-    OR slice_name LIKE '%concurrent copying GC'
-    OR slice_name LIKE '%semispace GC');
+    slice_name GLOB '*mark sweep GC'
+    OR slice_name GLOB '*concurrent copying GC'
+    OR slice_name GLOB '*semispace GC');
 
 DROP TABLE IF EXISTS gc_slices_by_state;
 CREATE VIRTUAL TABLE gc_slices_by_state
@@ -254,7 +254,7 @@
 CREATE TABLE activity_names_materialized AS
 SELECT launch_id, slice_name, slice_ts
 FROM main_process_slice_unaggregated
-WHERE (slice_name LIKE 'performResume:%' OR slice_name LIKE 'performCreate:%');
+WHERE (slice_name GLOB 'performResume:*' OR slice_name GLOB 'performCreate:*');
 
 DROP TABLE IF EXISTS jit_compiled_methods_materialized;
 CREATE TABLE jit_compiled_methods_materialized AS
@@ -263,7 +263,7 @@
   COUNT(1) as count
 FROM main_process_slice_unaggregated
 WHERE
-  slice_name LIKE 'JIT compiling%'
+  slice_name GLOB 'JIT compiling*'
   AND thread_name = 'Jit thread pool'
 GROUP BY launch_id;
 
@@ -306,7 +306,7 @@
   'PROTO', '
     SELECT slice_proto
     FROM main_process_slice s
-    WHERE s.launch_id = $launch_id AND name LIKE $name
+    WHERE s.launch_id = $launch_id AND name GLOB $name
     LIMIT 1
   ');
 
@@ -445,7 +445,7 @@
       'time_activity_start', MAIN_PROCESS_SLICE_PROTO(launches.id, 'activityStart'),
       'time_activity_resume', MAIN_PROCESS_SLICE_PROTO(launches.id, 'activityResume'),
       'time_activity_restart', MAIN_PROCESS_SLICE_PROTO(launches.id, 'activityRestart'),
-      'time_choreographer', MAIN_PROCESS_SLICE_PROTO(launches.id, 'Choreographer#doFrame%'),
+      'time_choreographer', MAIN_PROCESS_SLICE_PROTO(launches.id, 'Choreographer#doFrame*'),
       'time_inflate', MAIN_PROCESS_SLICE_PROTO(launches.id, 'inflate'),
       'time_get_resources', MAIN_PROCESS_SLICE_PROTO(launches.id, 'ResourcesManager#getResources'),
       'time_dex_open', MAIN_PROCESS_SLICE_PROTO(launches.id, 'OpenDexFilesFromOat'),
@@ -519,7 +519,7 @@
         'compilation_reason', STR_SPLIT(name, ' reason=', 1)
       ))
       FROM main_process_slice s
-      WHERE name LIKE 'location=% status=% filter=% reason=%'
+      WHERE name GLOB 'location=* status=* filter=* reason=*'
     )
   ) as startup
 FROM launches;
diff --git a/src/trace_processor/metrics/sql/android/android_surfaceflinger.sql b/src/trace_processor/metrics/sql/android/android_surfaceflinger.sql
index daa9fda..b00e491 100644
--- a/src/trace_processor/metrics/sql/android/android_surfaceflinger.sql
+++ b/src/trace_processor/metrics/sql/android/android_surfaceflinger.sql
@@ -53,7 +53,7 @@
   CAST(SUBSTR(s.name, 28) AS UINT32) AS fence_id,
   ts AS start_ts
 FROM slices s JOIN surfaceflinger_track t ON s.track_id = t.track_id
-WHERE s.name LIKE 'Trace GPU completion fence %';
+WHERE s.name GLOB 'Trace GPU completion fence *';
 
 DROP VIEW IF EXISTS gpu_waiting_end;
 CREATE VIEW gpu_waiting_end AS
@@ -62,7 +62,7 @@
   dur,
   ts+dur AS end_ts
 FROM slices s JOIN surfaceflinger_track t ON s.track_id = t.track_id
-WHERE s.name LIKE 'waiting for GPU completion %';
+WHERE s.name GLOB 'waiting for GPU completion *';
 
 DROP VIEW IF EXISTS gpu_waiting_span;
 CREATE VIEW gpu_waiting_span AS
diff --git a/src/trace_processor/metrics/sql/android/android_sysui_cuj.sql b/src/trace_processor/metrics/sql/android/android_sysui_cuj.sql
index 6b5c58d..073c247 100644
--- a/src/trace_processor/metrics/sql/android/android_sysui_cuj.sql
+++ b/src/trace_processor/metrics/sql/android/android_sysui_cuj.sql
@@ -30,11 +30,11 @@
   JOIN process USING (upid)
   JOIN process_metadata USING (upid)
   WHERE
-    slice.name LIKE 'J<%>'
+    slice.name GLOB 'J<*>'
     AND slice.dur > 0
     AND (
-      process.name LIKE 'com.google.android%'
-      OR process.name LIKE 'com.android.%')
+      process.name GLOB 'com.google.android*'
+      OR process.name GLOB 'com.android.*')
   ORDER BY ts desc
   LIMIT 1;
 
@@ -64,7 +64,7 @@
     CAST(actual.name as INTEGER) as vsync,
     actual.ts as ts_actual,
     actual.dur as dur_actual,
-    actual.jank_type LIKE '%App Deadline Missed%' as app_missed,
+    actual.jank_type GLOB '*App Deadline Missed*' as app_missed,
     actual.jank_type,
     actual.on_time_finish
   FROM android_sysui_cuj_last_cuj cuj
@@ -162,8 +162,8 @@
 CREATE TABLE android_sysui_cuj_jit_slices AS
 SELECT *
 FROM android_sysui_cuj_slices_in_cuj
-WHERE thread_name LIKE 'Jit thread pool%'
-AND name LIKE 'JIT compiling%'
+WHERE thread_name GLOB 'Jit thread pool*'
+AND name GLOB 'JIT compiling*'
 AND parent_id IS NULL;
 
 DROP TABLE IF EXISTS android_sysui_cuj_frames;
@@ -180,7 +180,7 @@
     JOIN android_sysui_cuj_render_thread_slices_in_cuj rts ON rts.ts < gcs.ts
     -- dispatchFrameCallbacks might be seen in case of
     -- drawing that happens on RT only (e.g. ripple effect)
-    WHERE (rts.name LIKE 'DrawFrame%' OR rts.name = 'dispatchFrameCallbacks')
+    WHERE (rts.name GLOB 'DrawFrame*' OR rts.name = 'dispatchFrameCallbacks')
     GROUP BY gcs.ts, gcs.ts_end, gcs.dur, gcs.idx
   ),
   frame_boundaries AS (
diff --git a/src/trace_processor/metrics/sql/android/cpu_info.sql b/src/trace_processor/metrics/sql/android/cpu_info.sql
index 1e04a3e..0f2c0f0 100644
--- a/src/trace_processor/metrics/sql/android/cpu_info.sql
+++ b/src/trace_processor/metrics/sql/android/cpu_info.sql
@@ -30,7 +30,7 @@
 FROM power_profile pp
 WHERE EXISTS (
   SELECT 1 FROM metadata
-  WHERE name = 'android_build_fingerprint' AND str_value LIKE '%' || pp.device || '%');
+  WHERE name = 'android_build_fingerprint' AND str_value GLOB '*' || pp.device || '*');
 
 DROP VIEW IF EXISTS core_cluster_per_cpu;
 CREATE VIEW core_cluster_per_cpu AS
diff --git a/src/trace_processor/metrics/sql/android/g2d_duration.sql b/src/trace_processor/metrics/sql/android/g2d_duration.sql
index b4a167b..653af6b 100644
--- a/src/trace_processor/metrics/sql/android/g2d_duration.sql
+++ b/src/trace_processor/metrics/sql/android/g2d_duration.sql
@@ -23,7 +23,7 @@
   value AS g2d_value,
   LEAD(value, 1, -1) OVER (PARTITION BY name ORDER BY ts) AS next_g2d_value
 FROM counter c JOIN thread_counter_track t ON t.id = c.track_id
-WHERE t.name LIKE 'g2d_frame_{{g2d_type}}%';
+WHERE t.name GLOB 'g2d_frame_{{g2d_type}}*';
 
 
 DROP VIEW IF EXISTS g2d_{{g2d_type}}_spans;
diff --git a/src/trace_processor/metrics/sql/android/power_drain_in_watts.sql b/src/trace_processor/metrics/sql/android/power_drain_in_watts.sql
index 1fbfec3..464da59 100644
--- a/src/trace_processor/metrics/sql/android/power_drain_in_watts.sql
+++ b/src/trace_processor/metrics/sql/android/power_drain_in_watts.sql
@@ -87,5 +87,4 @@
 FROM counter
   JOIN counter_track ON (counter.track_id = counter_track.id)
 WHERE counter_track.type = 'counter_track'
-  AND name LIKE "power.%";
-
+  AND name GLOB "power.*";
diff --git a/src/trace_processor/metrics/sql/android/process_metadata.sql b/src/trace_processor/metrics/sql/android/process_metadata.sql
index 6e0e6d3..6873bb2 100644
--- a/src/trace_processor/metrics/sql/android/process_metadata.sql
+++ b/src/trace_processor/metrics/sql/android/process_metadata.sql
@@ -32,7 +32,7 @@
       -- have seen a racy capture.
     WHEN length(process.name) = 15 AND (
       process.cmdline in ('zygote', 'zygote64', '<pre-initialized>')
-      OR process.cmdline like '%' || process.name)
+      OR process.cmdline GLOB '*' || process.name)
     THEN process.cmdline
     ELSE process.name
   END AS process_name,
@@ -51,7 +51,7 @@
     -- unique match
     uid_package_count.cnt = 1
     -- or process name starts with the package name
-    OR process.name LIKE plist.package_name || '%')
+    OR process.name GLOB plist.package_name || '*')
   );
 
 DROP VIEW IF EXISTS process_metadata;
diff --git a/src/trace_processor/metrics/sql/android/startup/hsc.sql b/src/trace_processor/metrics/sql/android/startup/hsc.sql
index 5c0a618..09db7d9 100644
--- a/src/trace_processor/metrics/sql/android/startup/hsc.sql
+++ b/src/trace_processor/metrics/sql/android/startup/hsc.sql
@@ -39,7 +39,7 @@
 FROM slices
 INNER JOIN process_track on slices.track_id = process_track.id
 INNER JOIN thread USING(upid)
-WHERE slices.name LIKE "animator%";
+WHERE slices.name GLOB "animator*";
 
 DROP VIEW IF EXISTS frame_times;
 CREATE VIEW frame_times AS
@@ -50,8 +50,8 @@
     launches.id AS launch_id,
     ROW_NUMBER() OVER(PARTITION BY launches.id ORDER BY functions.ts ASC) as number
 FROM functions
-INNER JOIN launches on launches.package LIKE '%' || functions.process_name || '%'
-WHERE functions.function_name LIKE "Choreographer#doFrame%" AND functions.ts > launches.ts;
+INNER JOIN launches on launches.package GLOB '*' || functions.process_name || '*'
+WHERE functions.function_name GLOB "Choreographer#doFrame*" AND functions.ts > launches.ts;
 
 DROP TABLE IF EXISTS hsc_based_startup_times;
 CREATE TABLE hsc_based_startup_times(package STRING, id INT, ts_total INT);
@@ -63,8 +63,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.number=2 AND frame_times.name LIKE "%roid.calcul%" AND frame_times.launch_id = launches.id;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.number=2 AND frame_times.name GLOB "*roid.calcul*" AND frame_times.launch_id = launches.id;
 
 -- Calendar
 INSERT INTO hsc_based_startup_times
@@ -73,9 +73,9 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.name LIKE "%id.calendar%" AND frame_times.launch_id = launches.id
-ORDER BY ABS(frame_times.ts_end - (SELECT ts + dur FROM functions WHERE function_name LIKE "DrawFrame%" AND process_name LIKE "%id.calendar" ORDER BY ts LIMIT 1)) LIMIT 1;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.name GLOB "*id.calendar*" AND frame_times.launch_id = launches.id
+ORDER BY ABS(frame_times.ts_end - (SELECT ts + dur FROM functions WHERE function_name GLOB "DrawFrame*" AND process_name GLOB "*id.calendar" ORDER BY ts LIMIT 1)) LIMIT 1;
 
 -- Camera
 INSERT INTO hsc_based_startup_times
@@ -84,8 +84,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.number=2 AND frame_times.name LIKE "%GoogleCamera%" AND frame_times.launch_id = launches.id;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.number=2 AND frame_times.name GLOB "*GoogleCamera*" AND frame_times.launch_id = launches.id;
 
 -- Chrome
 INSERT INTO hsc_based_startup_times
@@ -94,8 +94,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.number=1 AND frame_times.name LIKE "%chrome%" AND frame_times.launch_id = launches.id;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.number=1 AND frame_times.name GLOB "*chrome*" AND frame_times.launch_id = launches.id;
 
 -- Clock
 INSERT INTO hsc_based_startup_times
@@ -104,8 +104,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.ts > (SELECT ts + dur FROM animators WHERE animator_name="animator:translationZ" AND process_name LIKE "%id.deskclock" ORDER BY (ts+dur) DESC LIMIT 1) AND frame_times.name LIKE "%id.deskclock" AND frame_times.launch_id = launches.id
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.ts > (SELECT ts + dur FROM animators WHERE animator_name="animator:translationZ" AND process_name GLOB "*id.deskclock" ORDER BY (ts+dur) DESC LIMIT 1) AND frame_times.name GLOB "*id.deskclock" AND frame_times.launch_id = launches.id
 ORDER BY ts_total LIMIT 1;
 
 -- Contacts
@@ -115,8 +115,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.number=3 AND frame_times.name LIKE "%id.contacts" AND frame_times.launch_id=launches.id;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.number=3 AND frame_times.name GLOB "*id.contacts" AND frame_times.launch_id=launches.id;
 
 -- Dialer
 INSERT INTO hsc_based_startup_times
@@ -125,8 +125,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.number=1 AND frame_times.name LIKE "%id.dialer" AND frame_times.launch_id=launches.id;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.number=1 AND frame_times.name GLOB "*id.dialer" AND frame_times.launch_id=launches.id;
 
 -- Facebook
 INSERT INTO hsc_based_startup_times
@@ -135,8 +135,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.ts > (SELECT ts+dur FROM slices WHERE slices.name LIKE "fb_startup_complete" ORDER BY ts LIMIT 1) AND frame_times.name LIKE "%ok.katana" AND frame_times.launch_id = launches.id
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.ts > (SELECT ts+dur FROM slices WHERE slices.name GLOB "fb_startup_complete" ORDER BY ts LIMIT 1) AND frame_times.name GLOB "*ok.katana" AND frame_times.launch_id = launches.id
 ORDER BY ts_total LIMIT 1;
 
 -- Facebook Messenger
@@ -146,8 +146,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.ts > (SELECT ts+dur FROM slices WHERE slices.name LIKE "msgr_cold_start_to_cached_content" ORDER BY ts LIMIT 1) AND frame_times.name LIKE "%book.orca" AND frame_times.launch_id = launches.id
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.ts > (SELECT ts+dur FROM slices WHERE slices.name GLOB "msgr_cold_start_to_cached_content" ORDER BY ts LIMIT 1) AND frame_times.name GLOB "*book.orca" AND frame_times.launch_id = launches.id
 ORDER BY ts_total LIMIT 1;
 
 -- Gmail
@@ -157,8 +157,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.ts > (SELECT ts + dur FROM animators WHERE animator_name="animator:elevation" AND process_name LIKE "%android.gm" ORDER BY (ts+dur) DESC LIMIT 1) AND frame_times.name LIKE "%android.gm" AND frame_times.launch_id = launches.id
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.ts > (SELECT ts + dur FROM animators WHERE animator_name="animator:elevation" AND process_name GLOB "*android.gm" ORDER BY (ts+dur) DESC LIMIT 1) AND frame_times.name GLOB "*android.gm" AND frame_times.launch_id = launches.id
 ORDER BY ts_total LIMIT 1;
 
 -- Instagram
@@ -168,8 +168,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.ts > (SELECT ts+dur FROM slices WHERE slices.name LIKE "ig_cold_start_to_cached_content" ORDER BY ts LIMIT 1) AND frame_times.name LIKE "%gram.android" AND frame_times.launch_id = launches.id
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.ts > (SELECT ts+dur FROM slices WHERE slices.name GLOB "ig_cold_start_to_cached_content" ORDER BY ts LIMIT 1) AND frame_times.name GLOB "*gram.android" AND frame_times.launch_id = launches.id
 ORDER BY ts_total LIMIT 1;
 
 -- Maps
@@ -179,8 +179,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.number=1 AND frame_times.name LIKE "%maps%" AND frame_times.launch_id = launches.id;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.number=1 AND frame_times.name GLOB "*maps*" AND frame_times.launch_id = launches.id;
 
 -- Messages
 INSERT INTO hsc_based_startup_times
@@ -189,8 +189,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.ts_end > (SELECT ts + dur FROM animators WHERE animator_name="animator:translationZ" AND process_name LIKE "%apps.messaging%" ORDER BY ts LIMIT 1) AND frame_times.name LIKE "%apps.messaging%" AND frame_times.launch_id = launches.id
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.ts_end > (SELECT ts + dur FROM animators WHERE animator_name="animator:translationZ" AND process_name GLOB "*apps.messaging*" ORDER BY ts LIMIT 1) AND frame_times.name GLOB "*apps.messaging*" AND frame_times.launch_id = launches.id
 ORDER BY ts_total LIMIT 1;
 
 -- Netflix
@@ -200,8 +200,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.ts < (SELECT ts FROM animators WHERE animator_name LIKE "animator%" AND process_name LIKE "%lix.mediaclient" ORDER BY ts LIMIT 1) AND frame_times.name LIKE "%lix.mediaclient%" AND frame_times.launch_id = launches.id
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.ts < (SELECT ts FROM animators WHERE animator_name GLOB "animator*" AND process_name GLOB "*lix.mediaclient" ORDER BY ts LIMIT 1) AND frame_times.name GLOB "*lix.mediaclient*" AND frame_times.launch_id = launches.id
 ORDER BY ts_total DESC LIMIT 1;
 
 -- Photos
@@ -211,8 +211,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.number=1 AND frame_times.name LIKE "%apps.photos%" AND frame_times.launch_id = launches.id;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.number=1 AND frame_times.name GLOB "*apps.photos*" AND frame_times.launch_id = launches.id;
 
 -- Settings was deprecated in favor of reportFullyDrawn b/169694037.
 
@@ -223,8 +223,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.number=1 AND frame_times.name LIKE "%napchat.android" AND frame_times.launch_id = launches.id;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.number=1 AND frame_times.name GLOB "*napchat.android" AND frame_times.launch_id = launches.id;
 
 -- Twitter
 INSERT INTO hsc_based_startup_times
@@ -233,8 +233,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.ts_end > (SELECT ts FROM animators WHERE animator_name="animator" AND process_name LIKE "%tter.android" ORDER BY ts LIMIT 1) AND frame_times.name LIKE "%tter.android" AND frame_times.launch_id = launches.id
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.ts_end > (SELECT ts FROM animators WHERE animator_name="animator" AND process_name GLOB "*tter.android" ORDER BY ts LIMIT 1) AND frame_times.name GLOB "*tter.android" AND frame_times.launch_id = launches.id
 ORDER BY ts_total LIMIT 1;
 
 -- WhatsApp
@@ -244,8 +244,8 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.ts > (SELECT ts+dur FROM slices WHERE slices.name LIKE "wa_startup_complete" ORDER BY ts LIMIT 1) AND frame_times.name LIKE "%om.whatsapp" AND frame_times.launch_id = launches.id
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.ts > (SELECT ts+dur FROM slices WHERE slices.name GLOB "wa_startup_complete" ORDER BY ts LIMIT 1) AND frame_times.name GLOB "*om.whatsapp" AND frame_times.launch_id = launches.id
 ORDER BY ts_total LIMIT 1;
 
 -- Youtube
@@ -255,5 +255,5 @@
     launches.id as id,
     frame_times.ts_end - launches.ts as ts_total
 FROM frame_times
-INNER JOIN launches on launches.package LIKE '%' || frame_times.name || '%'
-WHERE frame_times.number=2 AND frame_times.name LIKE "%id.youtube" AND frame_times.launch_id = launches.id;
+INNER JOIN launches on launches.package GLOB '*' || frame_times.name || '*'
+WHERE frame_times.number=2 AND frame_times.name GLOB "*id.youtube" AND frame_times.launch_id = launches.id;
diff --git a/src/trace_processor/metrics/sql/android/startup/launches.sql b/src/trace_processor/metrics/sql/android/startup/launches.sql
index 104ec40..c3be64c 100644
--- a/src/trace_processor/metrics/sql/android/startup/launches.sql
+++ b/src/trace_processor/metrics/sql/android/startup/launches.sql
@@ -49,7 +49,7 @@
 FROM slice s
 JOIN process_track t ON s.track_id = t.id
 JOIN process USING(upid)
-WHERE s.name LIKE 'launching: %'
+WHERE s.name GLOB 'launching: *'
 AND (process.name IS NULL OR process.name = 'system_server');
 
 -- Filter activity_intent_recv_spans, keeping only the ones that triggered
diff --git a/src/trace_processor/metrics/sql/chrome/chrome_processes.sql b/src/trace_processor/metrics/sql/chrome/chrome_processes.sql
index dd3be51..a7b378b 100644
--- a/src/trace_processor/metrics/sql/chrome/chrome_processes.sql
+++ b/src/trace_processor/metrics/sql/chrome/chrome_processes.sql
@@ -64,8 +64,6 @@
 FROM prefix,
   suffix;
 
--- Use GLOB here instead of LIKE as it's case-sensitive which means we don't
--- match the Android system zygote.
 DROP VIEW IF EXISTS all_chrome_processes;
 CREATE VIEW all_chrome_processes AS
 SELECT upid, m.type AS process_type
diff --git a/src/trace_processor/metrics/sql/chrome/gesture_jank.sql b/src/trace_processor/metrics/sql/chrome/gesture_jank.sql
index 981e246..c13a051 100644
--- a/src/trace_processor/metrics/sql/chrome/gesture_jank.sql
+++ b/src/trace_processor/metrics/sql/chrome/gesture_jank.sql
@@ -47,15 +47,15 @@
       SELECT COUNT(*) >= 3 FROM (
         SELECT name FROM chrome_process
         WHERE
-          name LIKE "Browser" OR
-          name LIKE "Renderer" OR
-          name LIKE "Gpu" OR
-          name LIKE 'com.android.chrome%' OR
-          name LIKE 'com.chrome.beta%' OR
-          name LIKE 'com.chrome.dev%' OR
-          name LIKE 'com.chrome.canary%' OR
-          name LIKE 'com.google.android.apps.chrome%' OR
-          name LIKE 'org.chromium.chrome%'
+          name GLOB "Browser" OR
+          name GLOB "Renderer" OR
+          name GLOB "Gpu" OR
+          name GLOB 'com.android.chrome*' OR
+          name GLOB 'com.chrome.beta*' OR
+          name GLOB 'com.chrome.dev*' OR
+          name GLOB 'com.chrome.canary*' OR
+          name GLOB 'com.google.android.apps.chrome*' OR
+          name GLOB 'org.chromium.chrome*'
         GROUP BY name
     )) END AS have_enough_chrome_processes;
 
diff --git a/src/trace_processor/metrics/sql/chrome/rail_modes.sql b/src/trace_processor/metrics/sql/chrome/rail_modes.sql
index d86c25f..d28f665 100644
--- a/src/trace_processor/metrics/sql/chrome/rail_modes.sql
+++ b/src/trace_processor/metrics/sql/chrome/rail_modes.sql
@@ -352,7 +352,7 @@
   ts,
   dur
 FROM slice s
-WHERE name LIKE "InputLatency::%"
+WHERE name GLOB "InputLatency::*"
   AND NOT EXISTS (
     SELECT 1
     FROM slice
diff --git a/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_blocking_task.sql b/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_blocking_task.sql
index d061413..14ddd83 100644
--- a/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_blocking_task.sql
+++ b/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_blocking_task.sql
@@ -57,8 +57,8 @@
   track_id AS id
 FROM slice
 WHERE
-  EXTRACT_ARG(arg_set_id, "task.posted_from.file_name") LIKE
-      "%gpu/command_buffer/service/scheduler.cc"
+  EXTRACT_ARG(arg_set_id, "task.posted_from.file_name") GLOB
+      "*gpu/command_buffer/service/scheduler.cc"
 LIMIT 1;
 
 -- TODO(nuskos): Determine a good way to get all the renderer track_ids (each
@@ -178,8 +178,8 @@
     ) AND
     track_id = (SELECT id FROM browser_main_track_id)
   ) OR (
-    EXTRACT_ARG(arg_set_id, "task.posted_from.file_name") LIKE
-        "%components/viz/common/frame_sinks/copy_output_request.cc" AND
+    EXTRACT_ARG(arg_set_id, "task.posted_from.file_name") GLOB
+        "*components/viz/common/frame_sinks/copy_output_request.cc" AND
     track_id = (SELECT id FROM viz_compositor_track_id)
   ) OR (
     name = "SkiaOutputSurfaceImplOnGpu::CopyOutput" AND
diff --git a/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_queuing_delay.sql b/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_queuing_delay.sql
index a57fe70..a45ac79 100644
--- a/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_queuing_delay.sql
+++ b/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_queuing_delay.sql
@@ -76,10 +76,10 @@
         slice.ts + slice.dur > queuing.ancestor_end AND
         queuing.maybe_next_ancestor_ts > slice.ts AND
         slice.track_id = queuing.next_track_id AND
-        queuing.description NOT LIKE
-            "InputLatency.LatencyInfo.%ank.STEP_DRAW_AND_SWAP-to-End" AND
-        queuing.description NOT LIKE
-            "InputLatency.LatencyInfo.%ank.STEP_FINISHED_SWAP_BUFFERS-to-End"
+        queuing.description NOT GLOB
+            "InputLatency.LatencyInfo.*ank.STEP_DRAW_AND_SWAP-to-End" AND
+        queuing.description NOT GLOB
+            "InputLatency.LatencyInfo.*ank.STEP_FINISHED_SWAP_BUFFERS-to-End"
   WHERE
     queuing_time_ns IS NOT NULL AND
     queuing_time_ns > 0;
diff --git a/src/trace_processor/metrics/sql/experimental/blink_gc_metric.sql b/src/trace_processor/metrics/sql/experimental/blink_gc_metric.sql
index 096d9c3..c260332 100644
--- a/src/trace_processor/metrics/sql/experimental/blink_gc_metric.sql
+++ b/src/trace_processor/metrics/sql/experimental/blink_gc_metric.sql
@@ -83,7 +83,7 @@
   INNER JOIN thread ON thread_track.utid = thread.id
   WHERE
     slice.dur >= 0 AND (
-    slice.name LIKE "V8.GC%" OR (slice.name LIKE "BlinkGC%" AND NOT forced)
+    slice.name GLOB "V8.GC*" OR (slice.name GLOB "BlinkGC*" AND NOT forced)
   )
 );
 
@@ -100,7 +100,7 @@
   blink_non_aggregated_gc_event_name AS event_name ON
       event_name.name = blink_gc_cpu_slice.name
 WHERE
-  blink_gc_cpu_slice.name LIKE "BlinkGC%" AND NOT forced;
+  blink_gc_cpu_slice.name GLOB "BlinkGC*" AND NOT forced;
 
 -- This groups all the events by name and epoch for from "blink_slice" for easy
 -- access.
@@ -245,7 +245,7 @@
     -- This subquery replaces metrics.v8.utils.isGarbageCollectionEvent().
     SELECT name FROM ANCESTOR_SLICE(blink_gc_cpu_slice.id) AS ancestor
     WHERE
-      ancestor.name LIKE "V8.GC%" AND
+      ancestor.name GLOB "V8.GC*" AND
       ancestor.name != 'V8.GCLowMemoryNotification'
     LIMIT 1
   ) IS NULL
diff --git a/src/trace_processor/metrics/sql/experimental/frame_times.sql b/src/trace_processor/metrics/sql/experimental/frame_times.sql
index 4e0ccdb..488963f 100644
--- a/src/trace_processor/metrics/sql/experimental/frame_times.sql
+++ b/src/trace_processor/metrics/sql/experimental/frame_times.sql
@@ -17,7 +17,7 @@
 CREATE VIEW InteractionEvents AS
 SELECT
   ts, dur, ts AS ts_ir, dur AS dur_ir
-FROM slice WHERE name LIKE 'Interaction.%';
+FROM slice WHERE name GLOB 'Interaction.*';
 
 DROP VIEW IF EXISTS GestureLegacyEvents;
 CREATE VIEW GestureLegacyEvents AS
diff --git a/src/trace_processor/metrics/sql/experimental/reported_by_page.sql b/src/trace_processor/metrics/sql/experimental/reported_by_page.sql
index 2685433..9936b31 100644
--- a/src/trace_processor/metrics/sql/experimental/reported_by_page.sql
+++ b/src/trace_processor/metrics/sql/experimental/reported_by_page.sql
@@ -23,7 +23,7 @@
 SELECT ts, name, EXTRACT_ARG(arg_set_id, "debug.data.navigationId") as nav_id
 FROM slice
 WHERE category = 'blink.user_timing' AND
-    (name = 'navigationStart' OR name LIKE 'telemetry:reported_by_page:%')
+    (name = 'navigationStart' OR name GLOB 'telemetry:reported_by_page:*')
 ORDER BY nav_id, ts ASC;
 
 --------------------------------------------------------------------------------
@@ -38,8 +38,8 @@
       nav_id = p.nav_id AND
       ts < p.ts AND (
         -- Viewable/interactive markers measure time from nav start.
-        (p.name LIKE 'telemetry:reported_by_page:%' AND
-         p.name NOT LIKE 'telemetry:reported_by_page:benchmark%' AND
+        (p.name GLOB 'telemetry:reported_by_page:*' AND
+         p.name NOT GLOB 'telemetry:reported_by_page:benchmark*' AND
          name = 'navigationStart') OR
         -- Benchmark end markers measure time from the most recent begin marker.
         (p.name = 'telemetry:reported_by_page:benchmark_end' AND
diff --git a/src/trace_processor/metrics/sql/webview/webview_power_usage.sql b/src/trace_processor/metrics/sql/webview/webview_power_usage.sql
index 96104fc..29dad50 100644
--- a/src/trace_processor/metrics/sql/webview/webview_power_usage.sql
+++ b/src/trace_processor/metrics/sql/webview/webview_power_usage.sql
@@ -32,8 +32,8 @@
   SELECT *
   FROM slice WHERE
   depth = 0 AND
-  ((category like '%toplevel%' OR category = 'Java') AND
-  name NOT LIKE '%looper%');
+  ((category GLOB '*toplevel*' OR category = 'Java') AND
+  name NOT GLOB '*looper*');
 
 DROP TABLE IF EXISTS webview_browser_slices;
 
@@ -55,8 +55,8 @@
   ON thread.upid = process.upid
   INNER JOIN thread
   ON thread_track.utid = thread.utid
-  WHERE process.name NOT LIKE '%SandboxedProcessService%'
-  AND process.name NOT LIKE '%chrome%'
+  WHERE process.name NOT GLOB '*SandboxedProcessService*'
+  AND process.name NOT GLOB '*chrome*'
   AND app_name IS NOT NULL;
 
 DROP TABLE IF EXISTS webview_browser_slices_power;
@@ -87,7 +87,7 @@
   FROM process
   INNER JOIN thread
   ON thread.upid = process.upid
-  WHERE process.name LIKE '%webview%SandboxedProcessService%'
+  WHERE process.name GLOB '*webview*SandboxedProcessService*'
   AND app_name IS NOT NULL;
 
 DROP TABLE IF EXISTS webview_renderer_power_summary;
@@ -136,8 +136,8 @@
   JOIN process ON thread.upid = process.upid
   WHERE thread.upid IN
     (SELECT DISTINCT(webview_browser_slices.upid) FROM webview_browser_slices)
-  AND process.name NOT LIKE '%SandboxedProcessService%'
-  AND process.name NOT LIKE '%chrome%'
+  AND process.name NOT GLOB '*SandboxedProcessService*'
+  AND process.name NOT GLOB '*chrome*'
   AND app_name IS NOT NULL;
 
 DROP TABLE IF EXISTS host_app_power_summary;
@@ -175,9 +175,9 @@
 CREATE TABLE webview_only_threads AS
 SELECT *
 FROM host_app_threads
-  WHERE name LIKE 'Chrome%' OR name LIKE 'CookieMonster%'
-  OR name LIKE 'CompositorTileWorker%' OR name LIKE 'ThreadPool%ground%'
-  OR NAME LIKE 'ThreadPoolService%' OR  name like 'VizCompositorThread%'
+  WHERE name GLOB 'Chrome*' OR name GLOB 'CookieMonster*'
+  OR name GLOB 'CompositorTileWorker*' OR name GLOB 'ThreadPool*ground*'
+  OR NAME GLOB 'ThreadPoolService*' OR  name GLOB 'VizCompositorThread*'
   OR name IN ('AudioThread', 'DedicatedWorker thread', 'GpuMemoryThread',
   'JavaBridge', 'LevelDBEnv.IDB', 'MemoryInfra', 'NetworkService', 'VizWebView');
 
diff --git a/src/trace_processor/trace_processor_impl.cc b/src/trace_processor/trace_processor_impl.cc
index 70213e4..ca3725d 100644
--- a/src/trace_processor/trace_processor_impl.cc
+++ b/src/trace_processor/trace_processor_impl.cc
@@ -654,6 +654,23 @@
   }
 };
 
+struct Glob : public SqlFunction {
+  static base::Status Run(void*,
+                          size_t,
+                          sqlite3_value** argv,
+                          SqlValue& out,
+                          Destructors&) {
+    const char* pattern =
+        reinterpret_cast<const char*>(sqlite3_value_text(argv[0]));
+    const char* text =
+        reinterpret_cast<const char*>(sqlite3_value_text(argv[1]));
+    if (pattern && text) {
+      out = SqlValue::Long(sqlite3_strglob(pattern, text) == 0);
+    }
+    return base::OkStatus();
+  }
+};
+
 void SetupMetrics(TraceProcessor* tp,
                   sqlite3* db,
                   std::vector<metrics::SqlMetricFile>* sql_metrics,
@@ -742,6 +759,7 @@
   db_.reset(std::move(db));
 
   // New style function registration.
+  RegisterFunction<Glob>(db, "glob", 2);
   RegisterFunction<Hash>(db, "HASH", -1);
   RegisterFunction<Demangle>(db, "DEMANGLE", 1);
   RegisterFunction<SourceGeq>(db, "SOURCE_GEQ", -1);
diff --git a/test/trace_processor/graphics/clock_sync.sql b/test/trace_processor/graphics/clock_sync.sql
index 227767b..ac9e48a 100644
--- a/test/trace_processor/graphics/clock_sync.sql
+++ b/test/trace_processor/graphics/clock_sync.sql
@@ -15,4 +15,4 @@
 --
 select ts, cast(value as integer) as int_value
 from counters
-where name like 'gpu_counter%'
\ No newline at end of file
+where name GLOB 'gpu_counter*'
\ No newline at end of file
diff --git a/test/trace_processor/parsing/android_log_counts.sql b/test/trace_processor/parsing/android_log_counts.sql
index 09fc250..35a2a47 100644
--- a/test/trace_processor/parsing/android_log_counts.sql
+++ b/test/trace_processor/parsing/android_log_counts.sql
@@ -17,6 +17,6 @@
 select count(*) as cnt from android_logs where prio = 3 union all
 select count(*) as cnt from android_logs where prio > 4 union all
 select count(*) as cnt from android_logs where tag = 'screen_toggled' union all
-select count(*) as cnt from android_logs where tag like '%_pss' union all
-select count(*) as cnt from android_logs where msg like '%i2c_write%' or msg like '%I2C_Write%' union all
+select count(*) as cnt from android_logs where tag GLOB '*_pss' union all
+select count(*) as cnt from android_logs where msg GLOB '*i2c?write*' or msg GLOB '*I2C?Write*' union all
 select count(*) as cnt from android_logs where ts >= 1510113924391 and ts < 1512610021879;
diff --git a/test/trace_processor/parsing/android_log_msgs.sql b/test/trace_processor/parsing/android_log_msgs.sql
index 9b46f43..1666095 100644
--- a/test/trace_processor/parsing/android_log_msgs.sql
+++ b/test/trace_processor/parsing/android_log_msgs.sql
@@ -20,7 +20,7 @@
 create view v3 as
 select tag, count(*)
 from android_logs
-where msg like '%wakelock%' or msg like '%Wakelock%' or msg like '%WakeLock%' or msg like '%wakeLock%'
+where msg GLOB '*wakelock*' or msg GLOB '*Wakelock*' or msg GLOB '*WakeLock*' or msg GLOB '*wakeLock*'
 group by tag;
 
 create view v4 as select msg, 1 from android_logs limit 10;
diff --git a/test/trace_processor/parsing/args_string_filter_null.sql b/test/trace_processor/parsing/args_string_filter_null.sql
index 50f90e1..c42e2f3 100644
--- a/test/trace_processor/parsing/args_string_filter_null.sql
+++ b/test/trace_processor/parsing/args_string_filter_null.sql
@@ -39,7 +39,7 @@
 UNION
 select string_value
 from args
-where string_value LIKE NULL
+where string_value GLOB NULL
 UNION
 select string_value
 from args
diff --git a/test/trace_processor/parsing/ion_stat.sql b/test/trace_processor/parsing/ion_stat.sql
index 1032ac6..5cdc8d0 100644
--- a/test/trace_processor/parsing/ion_stat.sql
+++ b/test/trace_processor/parsing/ion_stat.sql
@@ -1,4 +1,4 @@
 SELECT t.name, c.ts, c.value
 FROM counter c
 JOIN track t ON c.track_id = t.id
-WHERE t.name LIKE 'mem.ion%';
+WHERE t.name GLOB 'mem.ion*';
diff --git a/test/trace_processor/parsing/mm_event.sql b/test/trace_processor/parsing/mm_event.sql
index 5130db6..56d4eab 100644
--- a/test/trace_processor/parsing/mm_event.sql
+++ b/test/trace_processor/parsing/mm_event.sql
@@ -17,6 +17,6 @@
 from counter
 inner join process_counter_track
   on counter.track_id = process_counter_track.id
-where name like 'mem.mm.%'
+where name GLOB 'mem.mm.*'
 order by ts
 limit 40
diff --git a/test/trace_processor/parsing/stats.sql b/test/trace_processor/parsing/stats.sql
index d68b28f..02316b2 100644
--- a/test/trace_processor/parsing/stats.sql
+++ b/test/trace_processor/parsing/stats.sql
@@ -14,4 +14,4 @@
 -- limitations under the License.
 --
 select name, idx, severity, source, value
-from stats where name like 'ftrace_cpu_%' or name like 'traced_buf_%';
\ No newline at end of file
+from stats where name GLOB 'ftrace_cpu_*' or name GLOB 'traced_buf_*';
\ No newline at end of file
diff --git a/test/trace_processor/power/power_rails.sql b/test/trace_processor/power/power_rails.sql
index c095608..31af227 100644
--- a/test/trace_processor/power/power_rails.sql
+++ b/test/trace_processor/power/power_rails.sql
@@ -15,6 +15,6 @@
 --
 select name, AVG(value), COUNT(*)
 from counters
-where name like "power.%"
+where name GLOB "power.*"
 group by name
 limit 20
\ No newline at end of file
diff --git a/test/trace_processor/power/power_rails_event.sql b/test/trace_processor/power/power_rails_event.sql
index 9a1a254..ca04ce2 100644
--- a/test/trace_processor/power/power_rails_event.sql
+++ b/test/trace_processor/power/power_rails_event.sql
@@ -15,5 +15,5 @@
 --
 select ts, value
 from counters
-where name like "power.%"
+where name GLOB "power.*"
 limit 20
diff --git a/tools/check_sql_metrics.py b/tools/check_sql_metrics.py
index 2fe57df..65dcff2 100755
--- a/tools/check_sql_metrics.py
+++ b/tools/check_sql_metrics.py
@@ -31,6 +31,7 @@
   with open(path) as f:
     lines = [l.strip() for l in f.readlines()]
 
+  # Check that CREATE VIEW/TABLE has a matching DROP VIEW/TABLE before it.
   errors = 0
   d_type, d_name = None, None
   for line in lines:
@@ -43,15 +44,29 @@
       continue
     type, name = m.group(1), m.group(2)
     if type != d_type or name != d_name:
-      sys.stderr.write(('%s:\n  "%s" vs %s %s\n') % (path, line, d_type, d_name))
+      sys.stderr.write(
+          ('Missing DROP %s before CREATE %s\n') % (d_type, d_type))
+      sys.stderr.write(('%s:\n"%s" vs %s %s\n') % (path, line, d_type, d_name))
       errors += 1
     d_type, d_name = None, None
+
+  # Ban the use of LIKE in non-comment lines.
+  for line in lines:
+    if line.startswith('--'):
+      continue
+
+    if 'like' in line.casefold():
+      sys.stderr.write(
+          'LIKE is banned in trace processor metrics. Prefer GLOB instead.')
+      errors += 1
+
   return errors
 
 
 def main():
   errors = 0
-  metrics_sources = os.path.join(ROOT_DIR, 'src', 'trace_processor', 'metrics')
+  metrics_sources = os.path.join(ROOT_DIR, 'src', 'trace_processor', 'metrics',
+                                 'sql')
   for root, _, files in os.walk(metrics_sources, topdown=True):
     for f in files:
       path = os.path.join(root, f)