1 CREATE OR REPLACE FUNCTION public.compareversion(text, text DEFAULT split_part(version(), ' '::text, 2))
2 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple.
3 -- See www.xtuple.com/CPAL for the full text of the software license.
4 -- Returns 1 if the left version is greater than the right version
5 -- -1 if the right is greater than the left
6 -- 0 if the versions are equal.
7 -- parameter two defaults to current server version
11 _leftVersion ALIAS FOR $1;
12 _rightVersion ALIAS FOR $2;
20 DEBUG BOOLEAN := false;
24 SELECT substring(_leftVersion FROM $$(\d+)\.\d+\.\d+$$)::SMALLINT,
25 substring(_leftVersion FROM $$\d+\.(\d+)\.\d+$$)::SMALLINT,
26 substring(_leftVersion FROM $$\d+\.\d+\.(\d+)$$)::SMALLINT
27 INTO _leftMajor, _leftMinor, _leftPatch;
30 THEN RAISE NOTICE 'Left Version --> % Major --> % Minor --> % Patch --> % ', _leftVersion, _leftMajor, _leftMinor, _leftPatch;
34 SELECT substring(_rightVersion FROM $$(\d+)\.\d+\D+\d+$$)::SMALLINT,
35 substring(_rightVersion FROM $$\d+\.(\d+)\D+\d+$$)::SMALLINT,
36 substring(_rightVersion FROM $$\d+\.\d+\D+(\d+)$$)::SMALLINT
37 INTO _rightMajor, _rightMinor, _rightPatch;
40 THEN RAISE NOTICE 'Right Version --> % Major --> % Minor --> % Patch --> % ', _rightVersion, _rightMajor, _rightMinor, _rightPatch;
43 -- check major version
44 IF (_leftMajor > _rightMajor) THEN _returnCode := 1;
45 ELSIF (_leftMajor < _rightMajor) THEN _returnCode := -1;
46 ELSIF (_leftMajor = _rightMajor) THEN
47 -- if major is equal, check minor version
48 IF (_leftMinor > _rightMinor) THEN _returnCode := 1;
49 ELSIF (_leftMinor < _rightMinor) THEN _returnCode := -1;
50 ELSIF (_leftMinor = _rightMinor) THEN
51 -- if major and minor are equal, check patch version
52 IF (_leftPatch > _rightPatch) THEN _returnCode := 1;
53 ELSIF (_leftPatch < _rightPatch) THEN _returnCode := -1;
54 ELSIF (_leftPatch = _rightPatch) THEN _returnCode := 0;
57 -- if we somehow don't match those three operators it probably means someone passed in a version that wasn't in numerical major.minor.patch format
58 ELSE RAISE EXCEPTION 'One or more of the version parameters is invalid. Expected numerical Major.Minor.Patch version string. Left --> % Right --> %', _leftVersion, _rightVersion;
65 LANGUAGE plpgsql STABLE;
66 ALTER FUNCTION public.compareversion(text, text)