@mikro-orm/sql 7.1.16-dev.1 → 7.1.16-dev.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -94,6 +94,10 @@ export class SqlSchemaGenerator extends AbstractSchemaGenerator {
94
94
  this.append(ret, fks, true);
95
95
  }
96
96
  }
97
+ // RLS policies are deferred until every table exists, so a policy expression can reference another table
98
+ for (const table of toSchema.getTables()) {
99
+ this.append(ret, this.helper.getRlsCreateSQL(table));
100
+ }
97
101
  const sortedViews = this.sortViewsByDependencies(toSchema.getViews());
98
102
  for (const view of sortedViews) {
99
103
  this.appendViewCreation(ret, view);
@@ -351,6 +355,7 @@ export class SqlSchemaGenerator extends AbstractSchemaGenerator {
351
355
  for (const trigger of newTable.getTriggers()) {
352
356
  this.append(sql, this.helper.createTrigger(newTable, trigger));
353
357
  }
358
+ this.append(sql, this.helper.getRlsCreateSQL(newTable));
354
359
  this.append(ret, sql, true);
355
360
  }
356
361
  }
@@ -410,6 +415,9 @@ export class SqlSchemaGenerator extends AbstractSchemaGenerator {
410
415
  }
411
416
  preAlterTable(diff, safe) {
412
417
  const ret = [];
418
+ // removed/changed policies must be dropped before any column type alter, including the pre-alter
419
+ // uuid-to-text cast on postgres — a policy expression blocks type changes on the columns it references
420
+ this.append(ret, this.helper.getRlsDropSQL(diff, safe));
413
421
  this.append(ret, this.helper.getPreAlterTable(diff, safe));
414
422
  for (const foreignKey of Object.values(diff.removedForeignKeys)) {
415
423
  ret.push(this.helper.dropForeignKey(diff.toTable.getShortestName(), foreignKey.constraintName));
package/typings.d.ts CHANGED
@@ -114,6 +114,15 @@ export interface CheckDef<T = unknown> {
114
114
  definition?: string;
115
115
  columnName?: string;
116
116
  }
117
+ /** Resolved row level security policy for schema operations (all callbacks resolved to strings). */
118
+ export interface SqlPolicyDef {
119
+ name: string;
120
+ command: 'select' | 'insert' | 'update' | 'delete' | 'all';
121
+ type: 'permissive' | 'restrictive';
122
+ roles: string[];
123
+ using?: string;
124
+ check?: string;
125
+ }
117
126
  /** Resolved trigger definition for schema operations (all callbacks resolved to strings). */
118
127
  export interface SqlTriggerDef {
119
128
  name: string;
@@ -191,6 +200,13 @@ export interface TableDifference {
191
200
  addedTriggers: Dictionary<SqlTriggerDef>;
192
201
  changedTriggers: Dictionary<SqlTriggerDef>;
193
202
  removedTriggers: Dictionary<SqlTriggerDef>;
203
+ addedPolicies: Dictionary<SqlPolicyDef>;
204
+ /** Changed policies surface as `removedPolicies` + `addedPolicies` pairs (drop + recreate). */
205
+ removedPolicies: Dictionary<SqlPolicyDef>;
206
+ /** New RLS enable state, present only when it changed. */
207
+ changedRlsEnabled?: boolean;
208
+ /** New RLS force state, present only when it changed. */
209
+ changedRlsForced?: boolean;
194
210
  addedForeignKeys: Dictionary<ForeignKey>;
195
211
  changedForeignKeys: Dictionary<ForeignKey>;
196
212
  removedForeignKeys: Dictionary<ForeignKey>;