@@ -60,35 +60,31 @@ RETURNS SETOF record
6060AS ' MODULE_PATHNAME' ,' aqo_query_stat'
6161LANGUAGE C STRICT VOLATILE PARALLEL SAFE;
6262
63+ CREATE FUNCTION aqo_data (
64+ OUT fsbigint ,
65+ OUT fssinteger ,
66+ OUT nfeaturesinteger ,
67+ OUT featuresdouble precision [][],
68+ OUT targetsdouble precision [],
69+ OUT reliabilitydouble precision [],
70+ OUT oidsinteger []
71+ )
72+ RETURNS SETOF record
73+ AS ' MODULE_PATHNAME' ,' aqo_data'
74+ LANGUAGE C STRICT VOLATILE PARALLEL SAFE;
75+ CREATE FUNCTION aqo_data_remove (fsbigint , fssint ) RETURNS bool
76+ AS ' MODULE_PATHNAME'
77+ LANGUAGE C PARALLEL SAFE;
78+
6379CREATE VIEW aqo_query_stat AS SELECT * FROM aqo_query_stat();
6480CREATE VIEW aqo_query_texts AS SELECT * FROM aqo_query_texts();
81+ CREATE VIEW aqo_data AS SELECT * FROM aqo_data();
6582
6683CREATE FUNCTION aqo_stat_remove (fsbigint ) RETURNS bool
6784AS ' MODULE_PATHNAME'
6885LANGUAGE C STRICT PARALLEL SAFE;
6986
70- --
71- -- Re-create the aqo_data table.
72- -- The oids array contains oids of permanent tables only. It is used for cleanup
73- -- ML knowledge base from queries that refer to removed tables.
74- --
75- CREATE TABLE aqo_data (
76- fspace_hashbigint NOT NULL REFERENCES aqo_queriesON DELETE CASCADE ,
77- fsspace_hashint NOT NULL ,
78- nfeaturesint NOT NULL ,
79- featuresdouble precision [][],
80- targetsdouble precision [],
81-
82- -- oids of permanent tables only. It is used for cleanup
83- -- ML knowledge base from queries that refer to removed tables.
84- oidsoid [] DEFAULTNULL ,
85-
86- reliabilitydouble precision []
87- );
88- CREATE UNIQUE INDEX aqo_fss_access_idx ON aqo_data (fspace_hash, fsspace_hash);
89-
9087INSERT INTO aqo_queriesVALUES (0 , false, false,0 , false);
91- -- INSERT INTO aqo_query_texts VALUES (0, 'COMMON feature space (do not delete!)');
9288-- a virtual query for COMMON feature space
9389
9490CREATE TRIGGER aqo_queries_invalidate AFTERUPDATE OR DELETE OR TRUNCATE
@@ -155,29 +151,30 @@ COMMENT ON FUNCTION aqo_execution_time(boolean) IS
155151CREATE OR REPLACE FUNCTION aqo_drop_class (queryidbigint )
156152RETURNSinteger AS $$
157153DECLARE
158- fs bigint ;
154+ lfs bigint ;
159155 numinteger ;
160156BEGIN
161157 IF (queryid= 0 ) THEN
162158 raise EXCEPTION' [AQO] Cannot remove basic class %.' , queryid;
163159 END IF;
164160
165- SELECT fspace_hashFROM aqo_queriesWHERE (query_hash= queryid) INTOfs ;
161+ SELECT fspace_hashFROM aqo_queriesWHERE (query_hash= queryid) INTOlfs ;
166162
167- IF (fs ISNULL ) THEN
163+ IF (lfs ISNULL ) THEN
168164 raise WARNING' [AQO] Nothing to remove for the class %.' , queryid;
169165 RETURN0 ;
170166 END IF;
171167
172- IF (fs <> queryid) THEN
168+ IF (lfs <> queryid) THEN
173169 raise WARNING' [AQO] Removing query class has non-generic feature space value: id = %, fs = %.' , queryid, fs;
174170 END IF;
175171
176- SELECT count (* )FROM aqo_dataWHERE fspace_hash = fs INTO num;
172+ SELECT count (* )FROM aqo_dataWHERE fs = lfs INTO num;
177173
178174DELETE FROM aqo_queriesWHERE query_hash= queryid;
179175 PERFORM aqo_stat_remove(queryid);
180176 PERFORM aqo_qtexts_remove(queryid);
177+ PERFORM aqo_data_remove(lfs,NULL );
181178 RETURN num;
182179END;
183180$$ LANGUAGE plpgsql;
@@ -195,28 +192,29 @@ COMMENT ON FUNCTION aqo_drop_class(bigint) IS
195192CREATE OR REPLACE FUNCTION aqo_cleanup (OUT nfsinteger , OUT nfssinteger )
196193AS $$
197194DECLARE
198- fs bigint ;
199- fss integer ;
195+ lfs bigint ;
196+ lfss integer ;
200197BEGIN
201198-- Save current number of rows
202199SELECT count (* )FROM aqo_queries INTO nfs;
203200SELECT count (* )FROM aqo_data INTO nfss;
204201
205- FORfs,fss IN SELECT q1 .fs ,q1 .fss FROM (
206- SELECT fspace_hash fs, fsspace_hash fss, unnest(oids)AS reloid
202+ FORlfs,lfss IN SELECT q1 .fs ,q1 .fss FROM (
203+ SELECT fs, fss, unnest(oids)AS reloid
207204FROM aqo_data)AS q1
208205WHERE q1 .reloid NOTIN (SELECT oid FROM pg_class)
209206GROUP BY (q1 .fs ,q1 .fss )
210207 LOOP
211- IF (fs= 0 ) THEN
212- DELETE FROM aqo_dataWHERE fsspace_hash= fss;
213- continue;
214- END IF;
208+ -- IF (fs = 0) THEN
209+ -- DELETE FROM aqo_data WHERE fsspace_hash = fss;
210+ -- continue;
211+ -- END IF;
215212
216213-- Remove ALL feature space if one of oids isn't exists
217- DELETE FROM aqo_queriesWHERE fspace_hash= fs;
218- PERFORM* FROM aqo_stat_remove(fs);
219- PERFORM* FROM aqo_qtexts_remove(fs);
214+ DELETE FROM aqo_queriesWHERE fspace_hash= lfs;
215+ PERFORM aqo_stat_remove(lfs);
216+ PERFORM aqo_qtexts_remove(lfs);
217+ PERFORM aqo_data_remove(lfs,NULL );
220218 END LOOP;
221219
222220-- Calculate difference with previous state of knowledge base