killbill-aplcache

Merge branch 'work-for-release-0.19.x' of github.com:killbill/killbill

9/28/2017 6:47:19 PM

Details

diff --git a/util/src/main/resources/org/killbill/billing/util/ddl-postgresql.sql b/util/src/main/resources/org/killbill/billing/util/ddl-postgresql.sql
index 49d05f7..6fac566 100644
--- a/util/src/main/resources/org/killbill/billing/util/ddl-postgresql.sql
+++ b/util/src/main/resources/org/killbill/billing/util/ddl-postgresql.sql
@@ -45,3 +45,28 @@ CREATE OR REPLACE FUNCTION hour(ts TIMESTAMP WITH TIME ZONE) RETURNS INTEGER AS 
         RETURN result;
     END;
 $$ LANGUAGE plpgsql IMMUTABLE;
+
+/* Alter 'serial' columns to 'bigint' because 'serial' is 32bit in PG while 64bit in MySQL */
+CREATE OR REPLACE FUNCTION update_serial_to_bigint_oncreate()
+        RETURNS event_trigger LANGUAGE plpgsql AS $$
+DECLARE
+    r record;
+    matches text[];
+BEGIN
+    FOR r IN SELECT * FROM pg_event_trigger_ddl_commands()
+    LOOP
+	    SELECT regexp_matches(current_query(), E'\\m(\\w+)\\s+serial\\M') INTO matches;
+	    IF r.object_type = 'table' AND array_length(matches, 1) > 0 THEN
+            RAISE NOTICE 'Altering % % column % from serial to bigint',
+                     r.object_type,
+                     r.object_identity,
+                     matches[1];
+             EXECUTE 'ALTER TABLE ' || r.object_identity || ' ALTER COLUMN ' || matches[1] || ' TYPE bigint';
+        END IF;
+    END LOOP;
+END
+$$;
+
+CREATE EVENT TRIGGER update_serial_to_bigint_oncreate
+   ON ddl_command_end WHEN TAG IN ('CREATE TABLE')
+   EXECUTE PROCEDURE update_serial_to_bigint_oncreate();