[Collab-qa-commits] r1873 - udd/sql
Andreas Tille
tille at alioth.debian.org
Thu Dec 23 11:23:38 UTC 2010
Author: tille
Date: 2010-12-23 11:23:33 +0000 (Thu, 23 Dec 2010)
New Revision: 1873
Modified:
udd/sql/versions_archs_components.sql
Log:
Use SQL instead of psql and include sorting according to release
Modified: udd/sql/versions_archs_components.sql
===================================================================
--- udd/sql/versions_archs_components.sql 2010-12-23 09:28:03 UTC (rev 1872)
+++ udd/sql/versions_archs_components.sql 2010-12-23 11:23:33 UTC (rev 1873)
@@ -8,37 +8,31 @@
* See below for an usage example. *
***********************************************************************************/
-CREATE OR REPLACE FUNCTION versions_archs_component (text) RETURNS SETOF RECORD AS $$
- Declare
- r RECORD;
- BEGIN
- FOR r IN
- SELECT release || CASE WHEN char_length(substring(distribution from '-.*')) > 0
+CREATE OR REPLACE FUNCTION versions_archs_component_sql (text) RETURNS SETOF RECORD AS $$
+ SELECT p.release, version, archs, component FROM
+ ( SELECT release || CASE WHEN char_length(substring(distribution from '-.*')) > 0
THEN substring(distribution from '-.*')
ELSE '' END AS release,
-- make *-volatile a "pseudo-release"
regexp_replace(version, '^[0-9]:', '') AS version,
- array_to_string(array_sort(array_accum(architecture)),','),
+ array_to_string(array_sort(array_accum(architecture)),',') AS archs,
component
FROM packages
WHERE package = $1
GROUP BY version, release, distribution, component
- ORDER BY version
- LOOP
- RETURN NEXT r;
- END LOOP;
- END; $$ LANGUAGE 'plpgsql';
+ ) p
+ JOIN releases ON releases.release = p.release
+ ORDER BY releases.sort, version;
+ $$ LANGUAGE 'SQL';
/***********************************************************************************
* Example of usage: Package seaview which has versions is in different components *
- SELECT r as release, version, archs, component
- FROM versions_archs_component('seaview') AS (r text, version text, archs text, component text)
+ SELECT * FROM versions_archs_component_sql('seaview') AS (release text, version text, archs text, component text);
-- you have to specify the column names because plain RECORD type is returned
- JOIN releases ON releases.release = r
- -- JOIN with release table to enable reasonable sorting
- WHERE r NOT LIKE '%-%'
+ WHERE release NOT LIKE '%-%'
-- ignore releases like *-security etc.
- ORDER BY releases.sort;
+ SELECT * FROM versions_archs_component_sql('libc6') AS (release text, version text, archs text, component text);
+
***********************************************************************************/
More information about the Collab-qa-commits
mailing list