IDEMPIERE-420 Improve the way to register migration scripts applied

This commit is contained in:
Carlos Ruiz 2012-09-04 15:19:45 -05:00
parent 8bda458b0c
commit 14085d6218
4 changed files with 206 additions and 0 deletions

View File

@ -0,0 +1,47 @@
CREATE OR REPLACE FUNCTION register_migration_script
(
p_script IN VARCHAR2
)
RETURN VARCHAR2
IS
PRAGMA AUTONOMOUS_TRANSACTION;
v_return VARCHAR2(255);
v_scriptid INTEGER;
BEGIN
v_return := p_script || ' successfully registered';
UPDATE AD_System
SET LastMigrationScriptApplied=p_script
WHERE LastMigrationScriptApplied<p_script
OR LastMigrationScriptApplied IS NULL;
SELECT MAX(AD_MigrationScript_ID)
INTO v_scriptid
FROM AD_MigrationScript
WHERE Name = p_script;
IF (v_scriptid IS NULL)
THEN
INSERT INTO ad_migrationscript
(isapply, scriptroll, ad_migrationscript_uu,
status, projectname, releaseno,
name, filename, ad_client_id,
ad_org_id, created, createdby,
updated, updatedby, isactive,
ad_migrationscript_id)
VALUES
('Y', 'N', generate_uuid(),
'CO', 'iDempiere', (select releaseno from ad_system),
p_script, 'oracle/'||p_script, 0,
0, SYSDATE, 100,
SYSDATE, 100, 'Y',
nextidfunc(53081,'N'));
ELSE
v_return := p_script || ' was already applied';
DBMS_OUTPUT.PUT_LINE(v_return);
UPDATE ad_migrationscript
SET updated=SYSDATE, description = COALESCE(description, ' ') || ' reapplied'
WHERE ad_migrationscript_id = v_scriptid;
END IF;
COMMIT;
RETURN v_return;
END register_migration_script;
/

View File

@ -0,0 +1,53 @@
CREATE OR REPLACE FUNCTION register_migration_script(IN p_script character varying) RETURNS character varying AS
$BODY$
DECLARE
v_return CHARACTER VARYING;
v_scriptid INTEGER;
BEGIN
v_return := p_script || ' successfully registered';
UPDATE AD_System
SET LastMigrationScriptApplied=p_script
WHERE LastMigrationScriptApplied<p_script
OR LastMigrationScriptApplied IS NULL;
SELECT MAX(AD_MigrationScript_ID)
INTO v_scriptid
FROM AD_MigrationScript
WHERE Name = p_script;
IF (v_scriptid IS NULL)
THEN
INSERT INTO ad_migrationscript
(isapply, scriptroll, ad_migrationscript_uu,
status, projectname, releaseno,
name, filename, ad_client_id,
ad_org_id, created, createdby,
updated, updatedby, isactive,
ad_migrationscript_id)
VALUES
('Y', 'N', generate_uuid(),
'CO', 'iDempiere', (select releaseno from ad_system),
p_script, 'postgresql/'||p_script, 0,
0, now(), 100,
now(), 100, 'Y',
nextidfunc(53081,'N'));
ELSE
v_return := p_script || ' was already applied';
RAISE NOTICE '%', v_return;
UPDATE ad_migrationscript
SET updated=now(), description = COALESCE(description, ' ') || ' reapplied'
WHERE ad_migrationscript_id = v_scriptid;
END IF;
RETURN v_return;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TABLE dual ( dummy char );
INSERT INTO dual values ( 'X' );
CREATE OR REPLACE RULE insert_dual AS ON INSERT TO dual DO INSTEAD NOTHING;
CREATE OR REPLACE RULE update_dual AS ON UPDATE TO dual DO INSTEAD NOTHING;
CREATE OR REPLACE RULE delete_dual AS ON DELETE TO dual DO INSTEAD NOTHING;

View File

@ -0,0 +1,50 @@
CREATE OR REPLACE FUNCTION register_migration_script
(
p_script IN VARCHAR2
)
RETURN VARCHAR2
IS
PRAGMA AUTONOMOUS_TRANSACTION;
v_return VARCHAR2(255);
v_scriptid INTEGER;
BEGIN
v_return := p_script || ' successfully registered';
UPDATE AD_System
SET LastMigrationScriptApplied=p_script
WHERE LastMigrationScriptApplied<p_script
OR LastMigrationScriptApplied IS NULL;
SELECT MAX(AD_MigrationScript_ID)
INTO v_scriptid
FROM AD_MigrationScript
WHERE Name = p_script;
IF (v_scriptid IS NULL)
THEN
INSERT INTO ad_migrationscript
(isapply, scriptroll, ad_migrationscript_uu,
status, projectname, releaseno,
name, filename, ad_client_id,
ad_org_id, created, createdby,
updated, updatedby, isactive,
ad_migrationscript_id)
VALUES
('Y', 'N', generate_uuid(),
'CO', 'iDempiere', (select releaseno from ad_system),
p_script, 'oracle/'||p_script, 0,
0, SYSDATE, 100,
SYSDATE, 100, 'Y',
nextidfunc(53081,'N'));
ELSE
v_return := p_script || ' was already applied';
DBMS_OUTPUT.PUT_LINE(v_return);
UPDATE ad_migrationscript
SET updated=SYSDATE, description = COALESCE(description, ' ') || ' reapplied'
WHERE ad_migrationscript_id = v_scriptid;
END IF;
COMMIT;
RETURN v_return;
END register_migration_script;
/
SELECT register_migration_script('901_IDEMPIERE-420.sql') FROM dual
;

View File

@ -0,0 +1,56 @@
CREATE OR REPLACE FUNCTION register_migration_script(IN p_script character varying) RETURNS character varying AS
$BODY$
DECLARE
v_return CHARACTER VARYING;
v_scriptid INTEGER;
BEGIN
v_return := p_script || ' successfully registered';
UPDATE AD_System
SET LastMigrationScriptApplied=p_script
WHERE LastMigrationScriptApplied<p_script
OR LastMigrationScriptApplied IS NULL;
SELECT MAX(AD_MigrationScript_ID)
INTO v_scriptid
FROM AD_MigrationScript
WHERE Name = p_script;
IF (v_scriptid IS NULL)
THEN
INSERT INTO ad_migrationscript
(isapply, scriptroll, ad_migrationscript_uu,
status, projectname, releaseno,
name, filename, ad_client_id,
ad_org_id, created, createdby,
updated, updatedby, isactive,
ad_migrationscript_id)
VALUES
('Y', 'N', generate_uuid(),
'CO', 'iDempiere', (select releaseno from ad_system),
p_script, 'postgresql/'||p_script, 0,
0, now(), 100,
now(), 100, 'Y',
nextidfunc(53081,'N'));
ELSE
v_return := p_script || ' was already applied';
RAISE NOTICE '%', v_return;
UPDATE ad_migrationscript
SET updated=now(), description = COALESCE(description, ' ') || ' reapplied'
WHERE ad_migrationscript_id = v_scriptid;
END IF;
RETURN v_return;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TABLE dual ( dummy char );
INSERT INTO dual values ( 'X' );
CREATE OR REPLACE RULE insert_dual AS ON INSERT TO dual DO INSTEAD NOTHING;
CREATE OR REPLACE RULE update_dual AS ON UPDATE TO dual DO INSTEAD NOTHING;
CREATE OR REPLACE RULE delete_dual AS ON DELETE TO dual DO INSTEAD NOTHING;
SELECT register_migration_script('901_IDEMPIERE-420.sql') FROM dual
;