Add support for roles.

This commit is contained in:
Damian Bodnar 2020-01-10 15:31:07 +01:00
parent 0298606bf5
commit 6a402bc808
3 changed files with 20 additions and 4 deletions

View File

@ -19,6 +19,8 @@ THINGS = [
"collations",
"rlspolicies",
"triggers",
"roles",
"memberships",
]
PK = "PRIMARY KEY"

View File

@ -48,6 +48,13 @@ def parse_args(args):
default=False,
help="Also output privilege differences (ie. grant/revoke statements)",
)
parser.add_argument(
"--with-roles",
dest="with_roles",
action="store_true",
default=False,
help='Also output "create/drop role" statements.',
)
parser.add_argument(
"--force-utf8",
dest="force_utf8",
@ -75,7 +82,7 @@ def run(args, out=None, err=None):
if args.create_extensions_only:
m.add_extension_changes(drops=False)
else:
m.add_all_changes(privileges=args.with_privileges)
m.add_all_changes(privileges=args.with_privileges, roles=args.with_roles)
try:
if m.statements:
if args.force_utf8:

View File

@ -1,8 +1,7 @@
from __future__ import unicode_literals
from sqlbag import raw_execute
from schemainspect import DBInspector, get_inspector
from sqlbag import raw_execute
from .changes import Changes
from .statements import Statements
@ -62,7 +61,13 @@ class Migration(object):
if drops:
self.add(self.changes.extensions(drops_only=True))
def add_all_changes(self, privileges=False):
def add_all_changes(self, privileges=False, roles=False):
if roles:
if privileges:
self.add(self.changes.memberships(drops_only=True))
self.add(self.changes.roles(drops_only=True))
self.add(self.changes.roles(creations_only=True))
self.add(self.changes.schemas(creations_only=True))
self.add(self.changes.extensions(creations_only=True))
@ -87,6 +92,8 @@ class Migration(object):
self.add(self.changes.non_pk_constraints(creations_only=True))
if privileges:
self.add(self.changes.privileges(creations_only=True))
if roles:
self.add(self.changes.memberships(creations_only=True))
self.add(self.changes.rlspolicies(creations_only=True))
self.add(self.changes.triggers(creations_only=True))
self.add(self.changes.collations(drops_only=True))