Skip to content

Commit

Permalink
New_Revision() now makes use of the pov.pg_depend_definitions view.
Browse files Browse the repository at this point in the history
Objects are now dumped/restored in the proper order.
  • Loading branch information
gluefinance committed Jan 14, 2011
1 parent 6321209 commit 3f8dc7a
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 72 deletions.
12 changes: 9 additions & 3 deletions sql/install.sql
Expand Up @@ -39,11 +39,17 @@ SET LOCAL search_path TO pov;
\i sql/schema/pov/functions/Set_Revision.sql
\i sql/schema/pov/functions/Hash.sql
\i sql/schema/pov/functions/Sort_Array.sql
\i sql/schema/pov/functions/_format_type.sql
\i sql/schema/pov/functions/tsort.pl
\i sql/schema/pov/functions/pg_get_object_unique_columns.sql

-- Internal views
\i sql/schema/pov/views/View_Functions.sql
\i sql/schema/pov/views/View_Constraints.sql
\i sql/schema/pov/views/View_Views.sql
\i sql/schema/pov/views/pg_all_objects_unique_columns.sql
\i sql/schema/pov/views/pg_depend_remapped.sql
\i sql/schema/pov/views/pg_depend_oid_concat.sql
\i sql/schema/pov/views/pg_depend_dot.sql
\i sql/schema/pov/views/pg_depend_tsort.sql
\i sql/schema/pov/views/pg_depend_definitions.sql

SET LOCAL search_path TO public;

Expand Down
6 changes: 3 additions & 3 deletions sql/schema/pov/functions/New_Revision.sql
Expand Up @@ -15,9 +15,9 @@ SELECT Set_Revision(ObjectIDs) INTO STRICT _RevisionID FROM (
FROM (
-- Create new ObjectID for each function.
-- If a object already exists with the same content (function definition), its ObjectID will be selected.
SELECT Set_Object(ARRAY[CreateObject,DropObject],'function') AS ObjectID FROM View_Functions UNION
SELECT Set_Object(ARRAY[CreateObject,DropObject],'constraint') AS ObjectID FROM View_Constraints UNION
SELECT Set_Object(ARRAY[CreateObject,DropObject],'view') AS ObjectID FROM View_Views
SELECT Set_Object(ARRAY[create_definition,drop_definition],description) AS ObjectID FROM pov.pg_depend_definitions
WHERE create_definition IS NOT NULL AND drop_definition IS NOT NULL
ORDER BY row_number
) AS Objects
) AS Revision;

Expand Down
11 changes: 0 additions & 11 deletions sql/schema/pov/views/View_Constraints.sql

This file was deleted.

14 changes: 0 additions & 14 deletions sql/schema/pov/views/View_Functions.sql

This file was deleted.

13 changes: 0 additions & 13 deletions sql/schema/pov/views/View_Views.sql

This file was deleted.

52 changes: 24 additions & 28 deletions sql/schema/public/functions/pov.sql
Expand Up @@ -25,7 +25,7 @@ END IF;
-- Deactivate existing pov, if any. (might affect 0 rows, it's not a bug we lack IF NOT FOUND here)
UPDATE Snapshots SET Active = 0 WHERE Active = 1;

-- Create a new FSnapshotID. The RevisionID might be identical to a previous pov.
-- Create a new SnapshotID. The RevisionID might be identical to a previous pov.
INSERT INTO Snapshots (RevisionID) VALUES (_RevisionID) RETURNING SnapshotID INTO STRICT _SnapshotID;

-- Return _SnapshotID and _RevisionID
Expand All @@ -50,14 +50,18 @@ _ObjectIDs text[];
_FunctionID oid;
_ObjectID text;
_SQL text;
_ObjectType text;

_CurrentSnapshotID bigint;
_CurrentRevisionID text;
_CurrentObjectIDs text[];

_RestoredRevisionID text;
_TYPE integer := 1;
_CREATE integer := 2;
_DROP integer := 3;
_i integer;
_Num_Objects integer;
BEGIN

-- Disable check_function_bodies to allow creation of sql functions depending on not-yet-created functions,
Expand All @@ -75,44 +79,36 @@ IF NOT FOUND THEN
RAISE EXCEPTION 'ERROR_FSNAPSHOT_REVISION_NOT_FOUND RevisionID %', _CurrentRevisionID;
END IF;

-- Lookup RevisionID and ObjectIDs for FSnapshotID to restore
-- Lookup RevisionID and ObjectIDs for SnapshotID to restore
SELECT Snapshots.RevisionID, Revisions.ObjectIDs INTO _RevisionID, _ObjectIDs FROM Snapshots
INNER JOIN Revisions ON (Revisions.RevisionID = Snapshots.RevisionID)
WHERE Snapshots.SnapshotID = _RestoreSnapshotID;
IF NOT FOUND THEN
RAISE EXCEPTION 'ERROR_FSNAPSHOT_SNAPSHOT_NOT_FOUND FSnapshotID %', _RestoreSnapshotID;
RAISE EXCEPTION 'ERROR_FSNAPSHOT_SNAPSHOT_NOT_FOUND SnapshotID %', _RestoreSnapshotID;
END IF;

-- Drop objects not part of the revision.
FOR _ObjectID IN
SELECT DropObjects.ObjectID FROM (
SELECT unnest AS ObjectID FROM unnest(_CurrentObjectIDs)
EXCEPT
SELECT unnest AS ObjectID FROM unnest(_ObjectIDs)
) AS DropObjects
INNER JOIN Objects ON (Objects.ObjectID = DropObjects.ObjectID)
INNER JOIN ObjectTypes ON (ObjectTypes.Name = Objects.Content[1])
ORDER BY ObjectTypes.ObjectTypeID DESC
_Num_Objects := array_upper(_CurrentObjectIDs,1);
FOR _i IN 1.._Num_Objects
LOOP
SELECT Content[_DROP] INTO STRICT _SQL FROM Objects WHERE ObjectID = _ObjectID;
RAISE DEBUG E'\n-%\n%', _ObjectID, '- ' || replace(_SQL,E'\n',E'\n- ');
EXECUTE _SQL;
_ObjectID := _CurrentObjectIDs[_Num_Objects-_i+1];
IF NOT _ObjectID <@ _ObjectIDs THEN
SELECT Content[_TYPE], Content[_DROP] INTO STRICT _ObjectType, _SQL FROM Objects WHERE ObjectID = _ObjectID;
RAISE DEBUG E'\n-%\n%\n%', _ObjectID, '- ' || _ObjectType, '- ' || replace(_SQL,E'\n',E'\n- ');
-- EXECUTE _SQL;
END IF;
END LOOP;

-- Create objects not in the current revision.
FOR _ObjectID IN
SELECT CreateObjects.ObjectID FROM (
SELECT unnest AS ObjectID FROM unnest(_ObjectIDs)
EXCEPT
SELECT unnest AS ObjectID FROM unnest(_CurrentObjectIDs)
) AS CreateObjects
INNER JOIN Objects ON (Objects.ObjectID = CreateObjects.ObjectID)
INNER JOIN ObjectTypes ON (ObjectTypes.Name = Objects.Content[1])
ORDER BY ObjectTypes.ObjectTypeID ASC
-- Create unpresent objects part of the revision.
_Num_Objects := array_upper(_ObjectIDs,1);
FOR _i IN 1.._Num_Objects
LOOP
SELECT Content[_CREATE] INTO STRICT _SQL FROM Objects WHERE ObjectID = _ObjectID;
RAISE DEBUG E'\n+%\n%', _ObjectID, '+ ' || replace(_SQL,E'\n',E'\n+ ');
EXECUTE _SQL;
_ObjectID := _CurrentObjectIDs[_Num_Objects];
IF NOT _ObjectID <@ _CurrentObjectIDs THEN
SELECT Content[_TYPE], Content[_CREATE] INTO STRICT _ObjectType, _SQL FROM Objects WHERE ObjectID = _ObjectID;
RAISE DEBUG E'\n-%\n%\n%', _ObjectID, '+ ' || _ObjectType, '+ ' || replace(_SQL,E'\n',E'\n+ ');
-- EXECUTE _SQL;
END IF;
END LOOP;

SET LOCAL search_path TO public;
Expand Down

0 comments on commit 3f8dc7a

Please sign in to comment.