@@ -46,27 +46,17 @@ public static void createViews(final PrintWriter writer,
46
46
+ PgDiffUtils .getQuotedName (newView .getName ())
47
47
+ " OWNER TO " + newView .getOwnerTo () + ";" );
48
48
}
49
+ writer .println ();
49
50
for (PgRelationPrivilege viewPrivilege : newView .getPrivileges ()) {
50
- writer .println ("REVOKE ALL ON TABLE "
51
- + PgDiffUtils .getQuotedName (newView .getName ())
52
- + " FROM " + viewPrivilege .getRoleName () + ";" );
53
- if (!"" .equals (viewPrivilege .getPrivilegesSQL (true ))) {
54
- writer .println ("GRANT "
55
- + viewPrivilege .getPrivilegesSQL (true )
56
- + " ON TABLE "
57
- + PgDiffUtils .getQuotedName (newView .getName ())
58
- + " TO " + viewPrivilege .getRoleName ()
59
- + " WITH GRANT OPTION;" );
60
- }
61
- if (!"" .equals (viewPrivilege .getPrivilegesSQL (false ))) {
62
- writer .println ("GRANT "
63
- + viewPrivilege .getPrivilegesSQL (false )
64
- + " ON TABLE "
65
- + PgDiffUtils .getQuotedName (newView .getName ())
66
- + " TO " + viewPrivilege .getRoleName () + ";" );
51
+ grantPrivileges (writer , newView , viewPrivilege );
52
+ }
53
+ writer .println ();
54
+ for (PgColumn newColumn : newView .getColumns ()) {
55
+ for (PgColumnPrivilege newColumnPrivilege : newColumn
56
+ .getPrivileges ()) {
57
+ grantColumnPrivileges (writer , newView , newColumn , newColumnPrivilege );
67
58
}
68
59
}
69
-
70
60
}
71
61
}
72
62
}
@@ -228,8 +218,10 @@ public static void alterViews(final PrintWriter writer,
228
218
+ PgDiffUtils .getQuotedName (newView .getName ())
229
219
+ " OWNER TO " + newView .getOwnerTo () + ";" );
230
220
}
231
- alterPrivileges (writer , oldView , newView , searchPathHelper );
232
- alterPrivilegesColumns (writer , oldView , newView , searchPathHelper );
221
+ if (!isViewModified (oldView , newView )){
222
+ alterPrivileges (writer , oldView , newView , searchPathHelper );
223
+ alterPrivilegesColumns (writer , oldView , newView , searchPathHelper );
224
+ } // else when view is modified, it is dropped and recreated with privileges in createView
233
225
}
234
226
}
235
227
@@ -298,6 +290,27 @@ private static void diffDefaultValues(final PrintWriter writer,
298
290
}
299
291
}
300
292
293
+ private static void grantPrivileges (final PrintWriter writer ,
294
+ final PgView view , final PgRelationPrivilege privilege ){
295
+ writer .println ("REVOKE ALL ON TABLE "
296
+ + PgDiffUtils .getQuotedName (view .getName ())
297
+ + " FROM " + privilege .getRoleName () + ";" );
298
+ if (!"" .equals (privilege .getPrivilegesSQL (true ))) {
299
+ writer .println ("GRANT "
300
+ + privilege .getPrivilegesSQL (true )
301
+ + " ON TABLE "
302
+ + PgDiffUtils .getQuotedName (view .getName ())
303
+ + " TO " + privilege .getRoleName ()
304
+ + " WITH GRANT OPTION;" );
305
+ }
306
+ if (!"" .equals (privilege .getPrivilegesSQL (false ))) {
307
+ writer .println ("GRANT "
308
+ + privilege .getPrivilegesSQL (false )
309
+ + " ON TABLE "
310
+ + PgDiffUtils .getQuotedName (view .getName ())
311
+ + " TO " + privilege .getRoleName () + ";" );
312
+ }
313
+ }
301
314
private static void alterPrivileges (final PrintWriter writer ,
302
315
final PgView oldView , final PgView newView ,
303
316
final SearchPathHelper searchPathHelper ) {
@@ -316,24 +329,7 @@ private static void alterPrivileges(final PrintWriter writer,
316
329
if (!emptyLinePrinted ) {
317
330
writer .println ();
318
331
}
319
- writer .println ("REVOKE ALL ON TABLE "
320
- + PgDiffUtils .getQuotedName (newView .getName ())
321
- + " FROM " + newViewPrivilege .getRoleName () + ";" );
322
- if (!"" .equals (newViewPrivilege .getPrivilegesSQL (true ))) {
323
- writer .println ("GRANT "
324
- + newViewPrivilege .getPrivilegesSQL (true )
325
- + " ON TABLE "
326
- + PgDiffUtils .getQuotedName (newView .getName ())
327
- + " TO " + newViewPrivilege .getRoleName ()
328
- + " WITH GRANT OPTION;" );
329
- }
330
- if (!"" .equals (newViewPrivilege .getPrivilegesSQL (false ))) {
331
- writer .println ("GRANT "
332
- + newViewPrivilege .getPrivilegesSQL (false )
333
- + " ON TABLE "
334
- + PgDiffUtils .getQuotedName (newView .getName ())
335
- + " TO " + newViewPrivilege .getRoleName () + ";" );
336
- }
332
+ grantPrivileges (writer , newView , newViewPrivilege );
337
333
} // else similar privilege will not be updated
338
334
}
339
335
for (PgRelationPrivilege newViewPrivilege : newView .getPrivileges ()) {
@@ -343,35 +339,53 @@ private static void alterPrivileges(final PrintWriter writer,
343
339
if (!emptyLinePrinted ) {
344
340
writer .println ();
345
341
}
346
- writer .println ("REVOKE ALL ON TABLE "
347
- + PgDiffUtils .getQuotedName (newView .getName ())
348
- + " FROM " + newViewPrivilege .getRoleName () + ";" );
349
- if (!"" .equals (newViewPrivilege .getPrivilegesSQL (true ))) {
350
- writer .println ("GRANT "
351
- + newViewPrivilege .getPrivilegesSQL (true )
352
- + " ON TABLE "
353
- + PgDiffUtils .getQuotedName (newView .getName ())
354
- + " TO " + newViewPrivilege .getRoleName ()
355
- + " WITH GRANT OPTION;" );
356
- }
357
- if (!"" .equals (newViewPrivilege .getPrivilegesSQL (false ))) {
358
- writer .println ("GRANT "
359
- + newViewPrivilege .getPrivilegesSQL (false )
360
- + " ON TABLE "
361
- + PgDiffUtils .getQuotedName (newView .getName ())
362
- + " TO " + newViewPrivilege .getRoleName () + ";" );
363
- }
342
+ grantPrivileges (writer , newView , newViewPrivilege );
364
343
}
365
344
}
366
345
}
367
346
347
+ private static void grantColumnPrivileges (final PrintWriter writer ,
348
+ final PgView view , final PgColumn column , final PgColumnPrivilege privilege ){
349
+
350
+ writer .println ("REVOKE ALL ("
351
+ + PgDiffUtils .getQuotedName (column .getName ())
352
+ + ") ON TABLE "
353
+ + PgDiffUtils .getQuotedName (view .getName ())
354
+ + " FROM " + privilege .getRoleName ()
355
+ + ";" );
356
+ if (!"" .equals (privilege .getPrivilegesSQL (
357
+ true ,
358
+ PgDiffUtils .getQuotedName (column .getName ())))) {
359
+ writer .println ("GRANT "
360
+ + privilege .getPrivilegesSQL (true ,
361
+ PgDiffUtils .getQuotedName (column
362
+ .getName ()))
363
+ + " ON TABLE "
364
+ + PgDiffUtils .getQuotedName (view
365
+ .getName ()) + " TO "
366
+ + privilege .getRoleName ()
367
+ + " WITH GRANT OPTION;" );
368
+ }
369
+ if (!"" .equals (privilege .getPrivilegesSQL (
370
+ false ,
371
+ PgDiffUtils .getQuotedName (column .getName ())))) {
372
+ writer .println ("GRANT "
373
+ + privilege .getPrivilegesSQL (
374
+ false , PgDiffUtils
375
+ .getQuotedName (column
376
+ .getName ()))
377
+ + " ON TABLE "
378
+ + PgDiffUtils .getQuotedName (view
379
+ .getName ()) + " TO "
380
+ + privilege .getRoleName () + ";" );
381
+ }
382
+ }
368
383
private static void alterPrivilegesColumns (final PrintWriter writer ,
369
384
final PgView oldView , final PgView newView ,
370
385
final SearchPathHelper searchPathHelper ) {
371
386
boolean emptyLinePrinted = false ;
372
387
for (PgColumn newColumn : newView .getColumns ()) {
373
388
final PgColumn oldColumn = oldView .getColumn (newColumn .getName ());
374
-
375
389
if (oldColumn != null ) {
376
390
for (PgColumnPrivilege oldColumnPrivilege : oldColumn
377
391
.getPrivileges ()) {
@@ -404,39 +418,7 @@ private static void alterPrivilegesColumns(final PrintWriter writer,
404
418
emptyLinePrinted = true ;
405
419
writer .println ();
406
420
}
407
- writer .println ("REVOKE ALL ("
408
- + PgDiffUtils .getQuotedName (newColumn .getName ())
409
- + ") ON TABLE "
410
- + PgDiffUtils .getQuotedName (newView .getName ())
411
- + " FROM " + newColumnPrivilege .getRoleName ()
412
- + ";" );
413
- if (!"" .equals (newColumnPrivilege .getPrivilegesSQL (
414
- true ,
415
- PgDiffUtils .getQuotedName (newColumn .getName ())))) {
416
- writer .println ("GRANT "
417
- + newColumnPrivilege .getPrivilegesSQL (true ,
418
- PgDiffUtils .getQuotedName (newColumn
419
- .getName ()))
420
- + " ON TABLE "
421
- + PgDiffUtils .getQuotedName (newView
422
- .getName ()) + " TO "
423
- + newColumnPrivilege .getRoleName ()
424
- + " WITH GRANT OPTION;" );
425
- }
426
- if (!"" .equals (newColumnPrivilege .getPrivilegesSQL (
427
- false ,
428
- PgDiffUtils .getQuotedName (newColumn .getName ())))) {
429
- writer .println ("GRANT "
430
- + newColumnPrivilege .getPrivilegesSQL (
431
- false , PgDiffUtils
432
- .getQuotedName (newColumn
433
- .getName ()))
434
- + " ON TABLE "
435
- + PgDiffUtils .getQuotedName (newView
436
- .getName ()) + " TO "
437
- + newColumnPrivilege .getRoleName () + ";" );
438
- }
439
-
421
+ grantColumnPrivileges (writer , newView , newColumn , newColumnPrivilege );
440
422
}
441
423
}
442
424
}
0 commit comments