1-- 2-- Copyright 2019 The Android Open Source Project 3-- 4-- Licensed under the Apache License, Version 2.0 (the "License"); 5-- you may not use this file except in compliance with the License. 6-- You may obtain a copy of the License at 7-- 8-- https://www.apache.org/licenses/LICENSE-2.0 9-- 10-- Unless required by applicable law or agreed to in writing, software 11-- distributed under the License is distributed on an "AS IS" BASIS, 12-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13-- See the License for the specific language governing permissions and 14-- limitations under the License. 15-- 16 17SELECT IMPORT('android.process_metadata'); 18 19DROP VIEW IF EXISTS process_metadata_table; 20CREATE VIEW process_metadata_table AS 21SELECT android_process_metadata.*, pid FROM android_process_metadata 22JOIN process USING(upid); 23 24DROP VIEW IF EXISTS uid_package_count; 25CREATE VIEW uid_package_count AS 26SELECT * FROM internal_uid_package_count; 27 28DROP VIEW IF EXISTS process_metadata; 29CREATE VIEW process_metadata AS 30WITH upid_packages AS ( 31 SELECT 32 upid, 33 RepeatedField(AndroidProcessMetadata_Package( 34 'package_name', package_list.package_name, 35 'apk_version_code', package_list.version_code, 36 'debuggable', package_list.debuggable 37 )) AS packages_for_uid 38 FROM process 39 JOIN package_list ON process.android_appid = package_list.uid 40 GROUP BY upid 41) 42SELECT 43 upid, 44 NULL_IF_EMPTY(AndroidProcessMetadata( 45 'name', process_name, 46 'uid', uid, 47 'pid', pid, 48 'package', NULL_IF_EMPTY(AndroidProcessMetadata_Package( 49 'package_name', package_name, 50 'apk_version_code', version_code, 51 'debuggable', debuggable 52 )), 53 'packages_for_uid', packages_for_uid 54 )) AS metadata 55FROM process_metadata_table 56LEFT JOIN upid_packages USING (upid); 57 58-- Given a process name, return if it is debuggable. 59SELECT CREATE_FUNCTION( 60 'IS_PROCESS_DEBUGGABLE(process_name STRING)', 61 'BOOL', 62 ' 63 SELECT p.debuggable 64 FROM process_metadata_table p 65 WHERE p.process_name = $process_name 66 LIMIT 1 67 ' 68); 69