From c3718da6d08eb559f85ef3a0e120572533c6719a Mon Sep 17 00:00:00 2001 From: Joris van Zwieten <zwieten@astron.nl> Date: Fri, 22 Dec 2006 12:25:36 +0000 Subject: [PATCH] BugID: 987 - API change: names of the columns returned by e.g. get_step() now match the names in the parset precisely. --- .../sql/create_blackboard_functions.sql | 133 +++++++++++------- .../sql/create_blackboard_tables.sql | 64 +++++---- 2 files changed, 117 insertions(+), 80 deletions(-) diff --git a/CEP/BB/BBSControl/sql/create_blackboard_functions.sql b/CEP/BB/BBSControl/sql/create_blackboard_functions.sql index cd4a1b3dafc..99cf69cb588 100644 --- a/CEP/BB/BBSControl/sql/create_blackboard_functions.sql +++ b/CEP/BB/BBSControl/sql/create_blackboard_functions.sql @@ -1,123 +1,156 @@ -- -------- -- -- STRATEGY -- -- -------- -- -CREATE OR REPLACE FUNCTION blackboard.set_strategy(data_set TEXT, local_sky_parmdb TEXT, instrument_parmdb TEXT, history_parmdb TEXT, stations TEXT[], input_column TEXT, work_domain_size DOUBLE PRECISION[2], correlation_selection TEXT, correlation_type TEXT[]) RETURNS VOID AS +-- Function: blackboard.set_strategy +-- Full signature: +-- blackboard.set_strategy("DataSet" TEXT, "ParmDB.LocalSky" TEXT, "ParmDB.Instrument" TEXT, "ParmDB.History" TEXT, "Stations" TEXT[], "InputData" TEXT, "WorkDomainSize.Freq" DOUBLE PRECISION, "WorkDomainSize.Time" DOUBLE PRECISION, "Correlation.Selection" TEXT, "Correlation.Type" TEXT[]) +CREATE OR REPLACE FUNCTION blackboard.set_strategy(TEXT, TEXT, TEXT, TEXT, TEXT[], TEXT, DOUBLE PRECISION, DOUBLE PRECISION, TEXT, TEXT[]) +RETURNS VOID AS $$ - INSERT INTO blackboard.strategy(data_set, local_sky_parmdb, instrument_parmdb, history_parmdb, stations, input_column, work_domain_size, correlation_selection, correlation_type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9); + INSERT INTO blackboard.strategy("DataSet", "ParmDB.LocalSky", "ParmDB.Instrument", "ParmDB.History", "Stations", "InputData", "WorkDomainSize.Freq", "WorkDomainSize.Time", "Correlation.Selection", "Correlation.Type") + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10); $$ LANGUAGE SQL; -CREATE OR REPLACE FUNCTION blackboard.get_strategy() RETURNS blackboard.strategy AS +CREATE OR REPLACE FUNCTION blackboard.get_strategy() +RETURNS blackboard.strategy AS $$ - SELECT * FROM blackboard.strategy LIMIT 1; + SELECT * + FROM blackboard.strategy + LIMIT 1; $$ LANGUAGE SQL; + -- ---------- -- -- WORK ORDER -- -- ---------- -- -CREATE OR REPLACE FUNCTION blackboard.add_work_order() RETURNS INTEGER AS +CREATE OR REPLACE FUNCTION blackboard.add_work_order() +RETURNS INTEGER AS $$ DECLARE _id INTEGER; BEGIN _id := nextval('blackboard.work_order_id_seq'); - INSERT INTO blackboard.work_order(id) VALUES (_id); + INSERT INTO blackboard.work_order(id) + VALUES (_id); + RETURN _id; END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION blackboard.get_next_work_order(current_work_order_id INTEGER) RETURNS blackboard.work_order AS +CREATE OR REPLACE FUNCTION blackboard.get_next_work_order(current_work_order_id INTEGER) +RETURNS blackboard.work_order AS $$ - SELECT * FROM blackboard.work_order WHERE id > $1 ORDER BY id LIMIT 1; + SELECT * + FROM blackboard.work_order + WHERE id > $1 + ORDER BY id LIMIT 1; $$ LANGUAGE SQL; + -- ---- -- -- STEP -- -- ---- -- -CREATE OR REPLACE FUNCTION blackboard.add_step(_name TEXT, _operation TEXT, _station1 TEXT[], _station2 TEXT[], _correlation_selection TEXT, _correlation_type TEXT[], _sources TEXT[], _instrument_model TEXT[], _output_column TEXT) RETURNS INTEGER AS +-- Function: blackboard.get_step +-- Full signature: +-- blackboard.get_step(_work_order_id INTEGER) +CREATE OR REPLACE FUNCTION blackboard.get_step(INTEGER) +RETURNS blackboard.step AS +$$ + + SELECT * + FROM blackboard.step + WHERE blackboard.step.work_order_id = $1; +$$ +LANGUAGE SQL; + + +-- Function: blackboard.add_step +-- Full signature: +-- blackboard.add_step("Name" TEXT, "Operation" TEXT, "Baselines.Station1" TEXT[], "Baselines.Station2" TEXT[], "Correlation.Selection" TEXT, "Correlation.Type" TEXT[], "Sources" TEXT[], "InstrumentModel" TEXT[], "OutputData" TEXT) +CREATE OR REPLACE FUNCTION blackboard.add_step(TEXT, TEXT, TEXT[], TEXT[], TEXT, TEXT[], TEXT[], TEXT[], TEXT) +RETURNS INTEGER AS $$ DECLARE _id INTEGER; _work_order_id INTEGER; BEGIN - _work_order_id := add_work_order(); + _work_order_id := blackboard.add_work_order(); _id := nextval('blackboard.step_id_seq'); - INSERT INTO blackboard.step(id, work_order_id, name, operation, station1, station2, correlation_selection, correlation_type, sources, instrument_model, output_column) VALUES (_id, _work_order_id, _name, _operation, _station1, _station2, _correlation_selection, _correlation_type, _sources, _instrument_model, _output_column); + INSERT INTO blackboard.step(id, work_order_id, "Name", "Operation", "Baselines.Station1", "Baselines.Station2", "Correlation.Selection", "Correlation.Type", "Sources", "InstrumentModel", "OutputData") + VALUES (_id, _work_order_id, $1, $2, $3, $4, $5, $6, $7, $8, $9); + RETURN _id; END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION blackboard.add_solve_step(_name TEXT, _station1 TEXT[], _station2 TEXT[], _correlation_selection TEXT, _correlation_type TEXT[], _sources TEXT[], _instrument_model TEXT[], _output_column TEXT, _max_iter INTEGER, _epsilon DOUBLE PRECISION, _min_converged DOUBLE PRECISION, _parms TEXT[], _excl_parms TEXT[], _solve_domain_size DOUBLE PRECISION[2]) RETURNS VOID AS +-- Function: blackboard.get_solve_arguments +-- Full signature: +-- blackboard.add_solve_arguments(_step_id INTEGER) +CREATE OR REPLACE FUNCTION blackboard.get_solve_arguments(INTEGER) +RETURNS blackboard.solve_arguments AS $$ DECLARE - _step_id INTEGER; + step blackboard.step%ROWTYPE; + arguments blackboard.solve_arguments%ROWTYPE; BEGIN - _step_id := add_step(_name, 'SOLVE', _station1, _station2, _correlation_selection, _correlation_type, _sources, _instrument_model, _output_column); - INSERT INTO blackboard.solve_arguments(step_id, max_iter, epsilon, min_converged, parms, excl_parms, solve_domain_size) VALUES (_step_id, _max_iter, _epsilon, _min_converged, _parms, _excl_parms, _solve_domain_size); - END; -$$ -LANGUAGE plpgsql; + SELECT * INTO step + FROM blackboard.step + WHERE id = $1; + IF NOT FOUND OR step."Operation" != 'SOLVE' THEN + RAISE EXCEPTION 'Step % either does not exist or is not a solve step.', $1; + END IF; -CREATE OR REPLACE FUNCTION blackboard.add_predict_step(_name TEXT, _station1 TEXT[], _station2 TEXT[], _correlation_selection TEXT, _correlation_type TEXT[], _sources TEXT[], _instrument_model TEXT[], _output_column TEXT) RETURNS VOID AS -$$ --- DECLARE --- _step_id INTEGER; - BEGIN --- _step_id := add_step(_name, 'PREDICT', _station1, _station2, _correlation_selection, _correlation_type, _sources, _instrument_model); --- INSERT INTO blackboard.predict_arguments(step_id, output_column) VALUES (_step_id, _output_column); - PERFORM add_step(_name, 'PREDICT', _station1, _station2, _correlation_selection, _correlation_type, _sources, _instrument_model, _output_column); + SELECT * INTO arguments + FROM blackboard.solve_arguments + WHERE step_id = $1; + + RETURN arguments; END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION blackboard.add_subtract_step(_name TEXT, _station1 TEXT[], _station2 TEXT[], _correlation_selection TEXT, _correlation_type TEXT[], _sources TEXT[], _instrument_model TEXT[], _output_column TEXT) RETURNS VOID AS +-- Function: blackboard.add_solve_arguments +-- Full signature: +-- blackboard.add_solve_arguments(step_id INTEGER, "MaxIter" INTEGER, "Epsilon" DOUBLE PRECISION, "MinConverged" DOUBLE PRECISION, "Parms" TEXT[], "ExclParms" TEXT[], "DomainSize.Freq" DOUBLE PRECISION, "DomainSize.Time" DOUBLE PRECISION) +CREATE OR REPLACE FUNCTION blackboard.add_solve_arguments(INTEGER, INTEGER, DOUBLE PRECISION, DOUBLE PRECISION, TEXT[], TEXT[], DOUBLE PRECISION, DOUBLE PRECISION) +RETURNS VOID AS $$ --- DECLARE --- _step_id INTEGER; - BEGIN --- _step_id := add_step(_name, 'SUBTRACT', _station1, _station2, _correlation_selection, _correlation_type, _sources, _instrument_model); --- INSERT INTO blackboard.subtract_arguments(step_id, output_column) VALUES (_step_id, _output_column); - PERFORM add_step(_name, 'SUBTRACT', _station1, _station2, _correlation_selection, _correlation_type, _sources, _instrument_model, _output_column); - END; + INSERT INTO blackboard.solve_arguments(step_id, "MaxIter", "Epsilon", "MinConverged", "Parms", "ExclParms", "DomainSize.Freq", "DomainSize.Time") + VALUES ($1, $2, $3, $4, $5, $6, $7, $8); $$ -LANGUAGE plpgsql; +LANGUAGE SQL; -CREATE OR REPLACE FUNCTION blackboard.add_correct_step(_name TEXT, _station1 TEXT[], _station2 TEXT[], _correlation_selection TEXT, _correlation_type TEXT[], _sources TEXT[], _instrument_model TEXT[], _output_column TEXT) RETURNS VOID AS -$$ --- DECLARE --- _step_id INTEGER; - BEGIN --- _step_id := add_step(_name, 'CORRECT', _station1, _station2, _correlation_selection, _correlation_type, _sources, _instrument_model); --- INSERT INTO blackboard.correct_arguments(step_id, output_column) VALUES (_step_id, _output_column); - PERFORM add_step(_name, 'CORRECT', _station1, _station2, _correlation_selection, _correlation_type, _sources, _instrument_model, _output_column); - END; -$$ -LANGUAGE plpgsql; -- ----------------- -- -- WORK ORDER STATUS -- -- ----------------- -- -CREATE OR REPLACE FUNCTION blackboard.set_status(work_order_id INTEGER, status_code INTEGER, message TEXT) RETURNS VOID AS +CREATE OR REPLACE FUNCTION blackboard.set_status(work_order_id INTEGER, status_code INTEGER, message TEXT) +RETURNS VOID AS $$ - INSERT INTO blackboard.status(work_order_id, status_code, status_message) VALUES ($1, $2, $3); + INSERT INTO blackboard.status(work_order_id, status_code, status_message) + VALUES ($1, $2, $3); $$ LANGUAGE SQL; + -- --- -- -- LOG -- -- --- -- -CREATE OR REPLACE FUNCTION blackboard.log(work_order_id INTEGER, level INTEGER, pid INTEGER, scope TEXT, line_no INTEGER, message TEXT) RETURNS VOID AS +CREATE OR REPLACE FUNCTION blackboard.log(work_order_id INTEGER, level INTEGER, pid INTEGER, scope TEXT, line_no INTEGER, message TEXT) +RETURNS VOID AS $$ - INSERT INTO blackboard.log(work_order_id, level, pid, scope, line_no, message) VALUES ($1, $2, $3, $4, $5, $6); + INSERT INTO blackboard.log(work_order_id, level, pid, scope, line_no, message) + VALUES ($1, $2, $3, $4, $5, $6); $$ LANGUAGE SQL; diff --git a/CEP/BB/BBSControl/sql/create_blackboard_tables.sql b/CEP/BB/BBSControl/sql/create_blackboard_tables.sql index 32057c57f7e..d2c722b1b68 100644 --- a/CEP/BB/BBSControl/sql/create_blackboard_tables.sql +++ b/CEP/BB/BBSControl/sql/create_blackboard_tables.sql @@ -1,17 +1,18 @@ CREATE TABLE blackboard.strategy ( - data_set TEXT NOT NULL, + "DataSet" TEXT NOT NULL, - local_sky_parmdb TEXT NOT NULL, - instrument_parmdb TEXT NOT NULL, - history_parmdb TEXT NOT NULL, - - stations TEXT[] DEFAULT '{}', - input_column TEXT DEFAULT 'DATA', - work_domain_size DOUBLE PRECISION[2] NOT NULL, + "ParmDB.LocalSky" TEXT NOT NULL, + "ParmDB.Instrument" TEXT NOT NULL, + "ParmDB.History" TEXT NOT NULL, + + "Stations" TEXT[] DEFAULT '{}', + "InputData" TEXT DEFAULT 'DATA', + "WorkDomainSize.Freq" DOUBLE PRECISION NOT NULL, + "WorkDomainSize.Time" DOUBLE PRECISION NOT NULL, - correlation_selection TEXT DEFAULT 'CROSS', - correlation_type TEXT[] DEFAULT '{"XX","XY","YX","YY"}' + "Correlation.Selection" TEXT DEFAULT 'CROSS', + "Correlation.Type" TEXT[] DEFAULT '{"XX","XY","YX","YY"}' ); @@ -22,8 +23,7 @@ CREATE TABLE blackboard.strategy CREATE SEQUENCE blackboard.work_order_id_seq; CREATE TABLE blackboard.work_order ( - id INTEGER PRIMARY KEY, - timestamp TIMESTAMP WITH TIME ZONE DEFAULT now() + id INTEGER PRIMARY KEY ); @@ -33,58 +33,61 @@ CREATE TABLE blackboard.step id INTEGER PRIMARY KEY, work_order_id INTEGER UNIQUE NOT NULL REFERENCES blackboard.work_order (id) ON DELETE CASCADE, - name TEXT NOT NULL, - operation TEXT NOT NULL, + "Name" TEXT NOT NULL, + "Operation" TEXT NOT NULL, - station1 TEXT[] DEFAULT '{}', - station2 TEXT[] DEFAULT '{}', + "Baselines.Station1" TEXT[] DEFAULT '{}', + "Baselines.Station2" TEXT[] DEFAULT '{}', - correlation_selection TEXT DEFAULT 'CROSS', - correlation_type TEXT[] DEFAULT '{"XX","XY","YX","YY"}', + "Correlation.Selection" TEXT DEFAULT 'CROSS', + "Correlation.Type" TEXT[] DEFAULT '{"XX","XY","YX","YY"}', - sources TEXT[] DEFAULT '{}', - instrument_model TEXT[] DEFAULT '{}', + "Sources" TEXT[] DEFAULT '{}', + "InstrumentModel" TEXT[] DEFAULT '{}', - output_column TEXT DEFAULT 'CORRECTED_DATA' + "OutputData" TEXT DEFAULT 'CORRECTED_DATA' ); CREATE TABLE blackboard.solve_arguments ( step_id INTEGER UNIQUE NOT NULL REFERENCES blackboard.step (id) ON DELETE CASCADE, - max_iter INTEGER DEFAULT 1, - epsilon DOUBLE PRECISION DEFAULT 1e-6, - min_converged DOUBLE PRECISION DEFAULT 100.0, - parms TEXT[] DEFAULT '{}', - excl_parms TEXT[] DEFAULT '{}', - solve_domain_size DOUBLE PRECISION[2] NOT NULL + + "MaxIter" INTEGER DEFAULT 1, + "Epsilon" DOUBLE PRECISION DEFAULT 1e-6, + "MinConverged" DOUBLE PRECISION DEFAULT 100.0, + "Parms" TEXT[] DEFAULT '{}', + "ExclParms" TEXT[] DEFAULT '{}', + "DomainSize.Freq" DOUBLE PRECISION NOT NULL, + "DomainSize.Time" DOUBLE PRECISION NOT NULL ); --CREATE TABLE blackboard.predict_arguments --( -- step_id INTEGER UNIQUE NOT NULL REFERENCES blackboard.step (id) ON DELETE CASCADE, --- output_column TEXT DEFAULT 'MODEL_DATA' +-- "OutputData" TEXT DEFAULT 'CORRECTED_DATA' --); --CREATE TABLE blackboard.subtract_arguments --( -- step_id INTEGER UNIQUE NOT NULL REFERENCES blackboard.step (id) ON DELETE CASCADE, --- output_column TEXT DEFAULT 'CORRECTED_DATA' +-- "OutputData" TEXT DEFAULT 'CORRECTED_DATA' --); --CREATE TABLE blackboard.correct_arguments --( -- step_id INTEGER UNIQUE NOT NULL REFERENCES blackboard.step (id) ON DELETE CASCADE, --- output_column TEXT DEFAULT 'CORRECTED_DATA' +-- "OutputData" TEXT DEFAULT 'CORRECTED_DATA' --); CREATE TABLE blackboard.status ( work_order_id INTEGER NOT NULL REFERENCES blackboard.work_order (id) ON DELETE CASCADE, + timestamp TIMESTAMP WITH TIME ZONE DEFAULT now(), node INET DEFAULT inet_client_addr(), status_code INTEGER DEFAULT 0, @@ -95,6 +98,7 @@ CREATE TABLE blackboard.status CREATE TABLE blackboard.log ( work_order_id INTEGER DEFAULT NULL REFERENCES blackboard.work_order (id) ON DELETE CASCADE, + timestamp TIMESTAMP WITH TIME ZONE DEFAULT now(), node INET DEFAULT inet_client_addr(), level INTEGER DEFAULT 7, -- GitLab