Merge pull request #25 from fleetside72/rebuild_constraint
exit if inbound is not different, and rebuild constrint key on tps.tr…
This commit is contained in:
		
						commit
						8a7a597cf4
					
				| @ -7,7 +7,35 @@ DECLARE | ||||
|     _MESSAGE_TEXT text; | ||||
|     _PG_EXCEPTION_DETAIL text; | ||||
|     _PG_EXCEPTION_HINT text; | ||||
|     _rebuild BOOLEAN; | ||||
| BEGIN | ||||
| 
 | ||||
|     ---------test if anythign is changing-------------------------------------------------------------------------------------------- | ||||
| 
 | ||||
|     IF _defn = (SELECT defn FROM tps.srce WHERE srce = _defn->>'name') THEN | ||||
|          _message:=  | ||||
|         ( | ||||
|             $$ | ||||
|                 { | ||||
|                 "status":"complete", | ||||
|                 "message":"source was not different no action taken" | ||||
|                 } | ||||
|             $$::jsonb | ||||
|         ); | ||||
|         RETURN _message; | ||||
|     END IF; | ||||
| 
 | ||||
|     ---------if the constraint definition is changing, rebuild for existing records--------------------------------------------------- | ||||
| 
 | ||||
|     SELECT  | ||||
|         NOT (_defn->'constraint' = (SELECT defn->'constraint' FROM tps.srce WHERE srce = _defn->>'name')) | ||||
|     INTO | ||||
|         _rebuild; | ||||
| 
 | ||||
|     RAISE NOTICE '%',_rebuild::text; | ||||
| 
 | ||||
|     ---------do merge----------------------------------------------------------------------------------------------------------------- | ||||
| 
 | ||||
|     INSERT INTO | ||||
|         tps.srce (srce, defn, hist) | ||||
|     SELECT | ||||
| @ -35,8 +63,53 @@ BEGIN | ||||
|                         ,'{0,effective,1}'::text[] | ||||
|                         ,to_jsonb(CURRENT_TIMESTAMP) | ||||
|                     ); | ||||
|     --rebuild constraint key if necessary--------------------------------------------------------------------------------------- | ||||
| 
 | ||||
|     _message:=  | ||||
|     IF _rebuild THEN | ||||
|         WITH | ||||
|         rebuild AS ( | ||||
|             SELECT | ||||
|                 j.srce | ||||
|                 ,j.rec | ||||
|                 ,j.id | ||||
|                 --aggregate back to the record since multiple paths may be listed in the constraint | ||||
|                 ,tps.jsonb_concat_obj( | ||||
|                     jsonb_build_object( | ||||
|                         --the new json key is the path itself | ||||
|                         cons.path->>0 | ||||
|                         ,j.rec#>((cons.path->>0)::text[]) | ||||
|                     )  | ||||
|                 ) json_key | ||||
|             FROM | ||||
|                 tps.trans j | ||||
|                 INNER JOIN tps.srce s ON | ||||
|                     s.srce = j.srce | ||||
|                 JOIN LATERAL jsonb_array_elements(s.defn->'constraint') WITH ORDINALITY cons(path, seq)  ON TRUE | ||||
|             WHERE | ||||
|                 s.srce = _defn->>'name' | ||||
|             GROUP BY | ||||
|                 j.rec | ||||
|                 ,j.id | ||||
|         ) | ||||
|         UPDATE | ||||
|             tps.trans t | ||||
|         SET | ||||
|             ic = r.json_key | ||||
|         FROM | ||||
|             rebuild r | ||||
|         WHERE | ||||
|             t.id = r.id; | ||||
|          _message:=  | ||||
|         ( | ||||
|             $$ | ||||
|                 { | ||||
|                 "status":"complete", | ||||
|                 "message":"source set and constraint rebuilt on existing records" | ||||
|                 } | ||||
|             $$::jsonb | ||||
|         ); | ||||
|     ELSE | ||||
|         _message:=  | ||||
|         ( | ||||
|             $$ | ||||
|                 { | ||||
| @ -45,8 +118,12 @@ BEGIN | ||||
|                 } | ||||
|             $$::jsonb | ||||
|         ); | ||||
|     END IF; | ||||
| 
 | ||||
|     RETURN _message; | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|     EXCEPTION WHEN OTHERS THEN | ||||
|         GET STACKED DIAGNOSTICS  | ||||
|             _MESSAGE_TEXT = MESSAGE_TEXT, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user