Skip to content

Commit

Permalink
Merge pull request #943 from selenamarie/v26-storedprocs
Browse files Browse the repository at this point in the history
v26 Stored proc changes
  • Loading branch information
rhelmer committed Nov 15, 2012
2 parents aafc820 + 4efe933 commit ac95e80
Showing 1 changed file with 104 additions and 97 deletions.
201 changes: 104 additions & 97 deletions sql/schema.sql
Expand Up @@ -2645,19 +2645,19 @@ WHERE "date" = updateday
LIMIT 1;

IF NOT FOUND THEN
IF checkdata THEN
RAISE EXCEPTION 'raw_adu not updated for %',updateday;
ELSE
RETURN FALSE;
END IF;
IF checkdata THEN
RAISE EXCEPTION 'raw_adu not updated for %',updateday;
ELSE
RETURN FALSE;
END IF;
END IF;

-- check if ADU has already been run for the date
PERFORM 1 FROM product_adu
WHERE adu_date = updateday LIMIT 1;
IF FOUND THEN
IF checkdata THEN
RAISE NOTICE 'update_adu has already been run for %', updateday;
RAISE NOTICE 'update_adu has already been run for %', updateday;
END IF;
RETURN FALSE;
END IF;
Expand All @@ -2667,96 +2667,99 @@ END IF;
-- and that we need to strip the {} out of the guids

INSERT INTO product_adu ( product_version_id, os_name,
adu_date, adu_count )
SELECT product_version_id, coalesce(os_name,'Unknown') as os,
updateday,
coalesce(sum(adu_count), 0)
adu_date, adu_count )
SELECT product_version_id
, coalesce(os_name,'Unknown') as os
, updateday
, coalesce(sum(adu_count), 0)
FROM product_versions
LEFT OUTER JOIN (
SELECT COALESCE(prodmap.product_name, raw_adu.product_name)::citext
as product_name, raw_adu.product_version::citext as product_version,
raw_adu.build_channel::citext as build_channel,
raw_adu.adu_count,
os_name_matches.os_name
FROM raw_adu
LEFT OUTER JOIN product_productid_map as prodmap
ON raw_adu.product_guid = btrim(prodmap.productid, '{}')
LEFT OUTER JOIN os_name_matches
ON raw_adu.product_os_platform ILIKE os_name_matches.match_string
WHERE raw_adu.date = updateday
) as prod_adu
ON product_versions.product_name = prod_adu.product_name
AND product_versions.version_string = prod_adu.product_version
AND product_versions.build_type = prod_adu.build_channel
WHERE updateday BETWEEN build_date AND ( sunset_date + 1 )
AND product_versions.build_type IN ('release','nightly','aurora')
LEFT OUTER JOIN (
SELECT COALESCE(prodmap.product_name, raw_adu.product_name)::citext
as product_name, raw_adu.product_version::citext as product_version,
raw_adu.build_channel::citext as build_channel,
raw_adu.adu_count,
os_name_matches.os_name
FROM raw_adu
LEFT OUTER JOIN product_productid_map as prodmap
ON raw_adu.product_guid = btrim(prodmap.productid, '{}')
LEFT OUTER JOIN os_name_matches
ON raw_adu.product_os_platform ILIKE os_name_matches.match_string
WHERE raw_adu.date = updateday
) as prod_adu
ON product_versions.product_name = prod_adu.product_name
AND product_versions.version_string = prod_adu.product_version
AND product_versions.build_type = prod_adu.build_channel
WHERE product_versions.build_type IN ('release','nightly','aurora')
AND product_versions.build_date >= ( current_date - interval '2 years' )
GROUP BY product_version_id, os;

-- insert ESRs
-- need a separate query here because the ESR version number doesn't match

INSERT INTO product_adu ( product_version_id, os_name,
adu_date, adu_count )
SELECT product_version_id, coalesce(os_name,'Unknown') as os,
updateday,
coalesce(sum(adu_count), 0)
adu_date, adu_count )
SELECT product_version_id
, coalesce(os_name,'Unknown') as os
, updateday
, coalesce(sum(adu_count), 0)
FROM product_versions
LEFT OUTER JOIN (
SELECT COALESCE(prodmap.product_name, raw_adu.product_name)::citext
as product_name, raw_adu.product_version::citext as product_version,
raw_adu.build_channel::citext as build_channel,
raw_adu.adu_count,
os_name_matches.os_name
FROM raw_adu
LEFT OUTER JOIN product_productid_map as prodmap
ON raw_adu.product_guid = btrim(prodmap.productid, '{}')
LEFT OUTER JOIN os_name_matches
ON raw_adu.product_os_platform ILIKE os_name_matches.match_string
WHERE raw_adu.date = updateday
and raw_adu.build_channel ILIKE 'esr'
) as prod_adu
ON product_versions.product_name = prod_adu.product_name
AND product_versions.version_string
= ( prod_adu.product_version || 'esr' )
AND product_versions.build_type = prod_adu.build_channel
WHERE updateday BETWEEN build_date AND ( sunset_date + 1 )
AND product_versions.build_type = 'ESR'
LEFT OUTER JOIN (
SELECT COALESCE(prodmap.product_name, raw_adu.product_name)::citext
as product_name, raw_adu.product_version::citext as product_version,
raw_adu.build_channel::citext as build_channel,
raw_adu.adu_count,
os_name_matches.os_name
FROM raw_adu
LEFT OUTER JOIN product_productid_map as prodmap
ON raw_adu.product_guid = btrim(prodmap.productid, '{}')
LEFT OUTER JOIN os_name_matches
ON raw_adu.product_os_platform ILIKE os_name_matches.match_string
WHERE raw_adu.date = updateday
and raw_adu.build_channel = 'esr'
) as prod_adu
ON product_versions.product_name = prod_adu.product_name
AND product_versions.version_string
= ( prod_adu.product_version || 'esr' )
AND product_versions.build_type = prod_adu.build_channel
WHERE product_versions.build_type = 'ESR'
AND product_versions.build_date >= ( current_date - interval '2 years' )
GROUP BY product_version_id, os;

-- insert betas

INSERT INTO product_adu ( product_version_id, os_name,
adu_date, adu_count )
SELECT product_version_id, coalesce(os_name,'Unknown') as os,
updateday,
coalesce(sum(adu_count), 0)
adu_date, adu_count )
SELECT product_version_id
, coalesce(os_name,'Unknown') as os
, updateday
, coalesce(sum(adu_count), 0)
FROM product_versions
JOIN products USING ( product_name )
LEFT OUTER JOIN (
SELECT COALESCE(prodmap.product_name, raw_adu.product_name)::citext
as product_name, raw_adu.product_version::citext as product_version,
raw_adu.build_channel::citext as build_channel,
raw_adu.adu_count,
os_name_matches.os_name,
build_numeric(raw_adu.build) as build_id
FROM raw_adu
LEFT OUTER JOIN product_productid_map as prodmap
ON raw_adu.product_guid = btrim(prodmap.productid, '{}')
LEFT OUTER JOIN os_name_matches
ON raw_adu.product_os_platform ILIKE os_name_matches.match_string
WHERE raw_adu.date = updateday
AND raw_adu.build_channel = 'beta'
) as prod_adu
ON product_versions.product_name = prod_adu.product_name
AND product_versions.release_version = prod_adu.product_version
AND product_versions.build_type = prod_adu.build_channel
WHERE updateday BETWEEN build_date AND ( sunset_date + 1 )
AND product_versions.build_type = 'Beta'
LEFT OUTER JOIN (
SELECT COALESCE(prodmap.product_name, raw_adu.product_name)::citext
as product_name, raw_adu.product_version::citext as product_version,
raw_adu.build_channel::citext as build_channel,
raw_adu.adu_count,
os_name_matches.os_name,
build_numeric(raw_adu.build) as build_id
FROM raw_adu
LEFT OUTER JOIN product_productid_map as prodmap
ON raw_adu.product_guid = btrim(prodmap.productid, '{}')
LEFT OUTER JOIN os_name_matches
ON raw_adu.product_os_platform ILIKE os_name_matches.match_string
WHERE raw_adu.date = updateday
AND raw_adu.build_channel = 'beta'
) as prod_adu
ON product_versions.product_name = prod_adu.product_name
AND product_versions.release_version = prod_adu.product_version
AND product_versions.build_type = prod_adu.build_channel
WHERE product_versions.build_type = 'Beta'
AND EXISTS ( SELECT 1
FROM product_version_builds
WHERE product_versions.product_version_id = product_version_builds.product_version_id
AND product_version_builds.build_id = prod_adu.build_id
)
AND product_versions.build_date >= ( current_date - interval '2 years' )
GROUP BY product_version_id, os;


Expand Down Expand Up @@ -3037,27 +3040,28 @@ INSERT INTO crashes_by_user
( product_version_id, report_date,
report_count, adu,
os_short_name, crash_type_id )
SELECT product_version_id, updateday,
coalesce(report_count,0), coalesce(adu_sum, 0),
os_short_name, crash_type_id
SELECT product_version_id
, updateday
, coalesce(report_count,0)
, coalesce(adu_sum, 0)
, os_short_name
, crash_type_id
FROM ( select product_versions.product_version_id,
count(reports_clean.uuid) as report_count,
os_names.os_name, os_short_name, crash_type_id
FROM product_versions
CROSS JOIN crash_types
CROSS JOIN os_names
LEFT OUTER JOIN reports_clean ON
product_versions.product_version_id = reports_clean.product_version_id
and utc_day_is(date_processed, updateday)
AND reports_clean.process_type = crash_types.process_type
AND ( reports_clean.hang_id IS NOT NULL ) = crash_types.has_hang_id
AND reports_clean.os_name = os_names.os_name
WHERE
-- only keep accumulating data for a year
build_date >= ( current_date - interval '1 year' )
CROSS JOIN crash_types
CROSS JOIN os_names
LEFT OUTER JOIN reports_clean ON
product_versions.product_version_id = reports_clean.product_version_id
and utc_day_is(date_processed, updateday)
AND reports_clean.process_type = crash_types.process_type
AND ( reports_clean.hang_id IS NOT NULL ) = crash_types.has_hang_id
AND reports_clean.os_name = os_names.os_name
WHERE product_versions.build_date >= ( current_date - interval '2 years' )
GROUP BY product_versions.product_version_id,
os_names.os_name, os_short_name, crash_type_id
) as count_reports
os_names.os_name, os_short_name, crash_type_id
) as count_reports
JOIN
( select product_version_id,
sum(adu_count) as adu_sum,
Expand All @@ -3073,13 +3077,16 @@ INSERT INTO crashes_by_user
( product_version_id, report_date,
report_count, adu,
os_short_name, crash_type_id )
SELECT product_versions.rapid_beta_id, updateday,
sum(report_count), sum(adu),
os_short_name, crash_type_id
SELECT product_versions.rapid_beta_id
, updateday
, sum(report_count)
, sum(adu)
, os_short_name
, crash_type_id
FROM crashes_by_user
JOIN product_versions USING ( product_version_id )
JOIN product_versions USING ( product_version_id )
WHERE rapid_beta_id IS NOT NULL
AND report_date = updateday
AND report_date = updateday
GROUP BY rapid_beta_id, os_short_name, crash_type_id;

RETURN TRUE;
Expand Down

0 comments on commit ac95e80

Please sign in to comment.