@anthonyalayo/drizzle-kit 1.0.2 → 1.0.5
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.
- package/api.d.mts +2891 -0
- package/api.d.ts +2891 -0
- package/api.js +47534 -0
- package/api.mjs +47521 -0
- package/bin.cjs +80043 -0
- package/{src/index.ts → index-Z-1TKnbX.d.mts} +123 -141
- package/index-Z-1TKnbX.d.ts +308 -0
- package/index.d.mts +2 -0
- package/index.d.ts +2 -0
- package/index.js +32 -0
- package/index.mjs +7 -0
- package/package.json +2 -2
- package/utils.js +6056 -0
- package/utils.mjs +6032 -0
- package/.gitignore +0 -25
- package/build.dev.ts +0 -51
- package/build.ts +0 -112
- package/imports-checker/analyze.ts +0 -78
- package/imports-checker/checker.ts +0 -296
- package/imports-checker/grammar/grammar.ohm +0 -121
- package/imports-checker/grammar/grammar.ohm-bundle.d.ts +0 -164
- package/imports-checker/grammar/grammar.ohm-bundle.js +0 -753
- package/imports-checker/index.ts +0 -48
- package/patches/difflib@0.2.4.patch +0 -31
- package/src/@types/utils.ts +0 -58
- package/src/api.ts +0 -504
- package/src/cli/commands/_es5.ts +0 -2
- package/src/cli/commands/check.ts +0 -52
- package/src/cli/commands/drop.ts +0 -60
- package/src/cli/commands/introspect.ts +0 -772
- package/src/cli/commands/libSqlPushUtils.ts +0 -355
- package/src/cli/commands/migrate.ts +0 -1526
- package/src/cli/commands/mysqlIntrospect.ts +0 -53
- package/src/cli/commands/mysqlPushUtils.ts +0 -352
- package/src/cli/commands/mysqlUp.ts +0 -102
- package/src/cli/commands/pgIntrospect.ts +0 -55
- package/src/cli/commands/pgPushUtils.ts +0 -269
- package/src/cli/commands/pgUp.ts +0 -217
- package/src/cli/commands/push.ts +0 -637
- package/src/cli/commands/singlestoreIntrospect.ts +0 -53
- package/src/cli/commands/singlestorePushUtils.ts +0 -456
- package/src/cli/commands/singlestoreUp.ts +0 -1
- package/src/cli/commands/sqliteIntrospect.ts +0 -96
- package/src/cli/commands/sqlitePushUtils.ts +0 -322
- package/src/cli/commands/sqliteUp.ts +0 -52
- package/src/cli/commands/utils.ts +0 -858
- package/src/cli/connections.ts +0 -914
- package/src/cli/index.ts +0 -48
- package/src/cli/schema.ts +0 -794
- package/src/cli/selector-ui.ts +0 -38
- package/src/cli/utils.ts +0 -112
- package/src/cli/validations/cli.ts +0 -79
- package/src/cli/validations/common.ts +0 -193
- package/src/cli/validations/libsql.ts +0 -27
- package/src/cli/validations/mysql.ts +0 -61
- package/src/cli/validations/outputs.ts +0 -91
- package/src/cli/validations/postgres.ts +0 -83
- package/src/cli/validations/singlestore.ts +0 -61
- package/src/cli/validations/sqlite.ts +0 -104
- package/src/cli/validations/studio.ts +0 -24
- package/src/cli/views.ts +0 -658
- package/src/extensions/getTablesFilterByExtensions.ts +0 -16
- package/src/extensions/vector.ts +0 -10
- package/src/global.ts +0 -61
- package/src/introspect-mysql.ts +0 -1030
- package/src/introspect-pg.ts +0 -1435
- package/src/introspect-singlestore.ts +0 -913
- package/src/introspect-sqlite.ts +0 -533
- package/src/jsonDiffer.js +0 -882
- package/src/jsonStatements.ts +0 -3590
- package/src/loader.mjs +0 -57
- package/src/migrationPreparator.ts +0 -217
- package/src/schemaValidator.ts +0 -23
- package/src/serializer/index.ts +0 -142
- package/src/serializer/mysqlImports.ts +0 -38
- package/src/serializer/mysqlSchema.ts +0 -423
- package/src/serializer/mysqlSerializer.ts +0 -999
- package/src/serializer/pgImports.ts +0 -106
- package/src/serializer/pgSchema.ts +0 -937
- package/src/serializer/pgSerializer.ts +0 -2223
- package/src/serializer/singlestoreImports.ts +0 -38
- package/src/serializer/singlestoreSchema.ts +0 -257
- package/src/serializer/singlestoreSerializer.ts +0 -767
- package/src/serializer/sqliteImports.ts +0 -41
- package/src/serializer/sqliteSchema.ts +0 -352
- package/src/serializer/sqliteSerializer.ts +0 -931
- package/src/serializer/studio.ts +0 -694
- package/src/serializer/utils.ts +0 -45
- package/src/simulator.ts +0 -157
- package/src/snapshotsDiffer.ts +0 -4398
- package/src/sqlgenerator.ts +0 -4212
- package/src/statementCombiner.ts +0 -597
- package/src/utils/certs.ts +0 -44
- package/src/utils/words.ts +0 -1333
- package/src/utils.ts +0 -370
- package/tests/bin.test.ts +0 -58
- package/tests/cli/d1http.config.ts +0 -12
- package/tests/cli/drizzle.config.ts +0 -9
- package/tests/cli/durable-sqlite.config.ts +0 -7
- package/tests/cli/expo.config.ts +0 -7
- package/tests/cli/postgres.config.ts +0 -13
- package/tests/cli/postgres2.config.ts +0 -17
- package/tests/cli/schema.ts +0 -1
- package/tests/cli/turso.config.ts +0 -10
- package/tests/cli-export.test.ts +0 -79
- package/tests/cli-generate.test.ts +0 -259
- package/tests/cli-migrate.test.ts +0 -103
- package/tests/cli-push.test.ts +0 -126
- package/tests/common.ts +0 -15
- package/tests/indexes/common.ts +0 -21
- package/tests/indexes/pg.test.ts +0 -245
- package/tests/introspect/libsql.test.ts +0 -35
- package/tests/introspect/mysql.test.ts +0 -319
- package/tests/introspect/pg.test.ts +0 -894
- package/tests/introspect/singlestore.test.ts +0 -275
- package/tests/introspect/sqlite.test.ts +0 -122
- package/tests/libsql-checks.test.ts +0 -308
- package/tests/libsql-statements.test.ts +0 -989
- package/tests/libsql-views.test.ts +0 -218
- package/tests/migrate/libsq-schema.ts +0 -6
- package/tests/migrate/libsql-migrate.test.ts +0 -58
- package/tests/migrate/migrations/0000_little_blizzard.sql +0 -4
- package/tests/migrate/migrations/0001_nebulous_storm.sql +0 -10
- package/tests/migrate/migrations/meta/0000_snapshot.json +0 -40
- package/tests/migrate/migrations/meta/0001_snapshot.json +0 -40
- package/tests/migrate/migrations/meta/_journal.json +0 -20
- package/tests/mysql-checks.test.ts +0 -291
- package/tests/mysql-generated.test.ts +0 -1290
- package/tests/mysql-schemas.test.ts +0 -156
- package/tests/mysql-views.test.ts +0 -553
- package/tests/mysql.test.ts +0 -863
- package/tests/pg-array.test.ts +0 -368
- package/tests/pg-checks.test.ts +0 -329
- package/tests/pg-columns.test.ts +0 -484
- package/tests/pg-domains.test.ts +0 -306
- package/tests/pg-enums.test.ts +0 -751
- package/tests/pg-generated.test.ts +0 -529
- package/tests/pg-identity.test.ts +0 -447
- package/tests/pg-schemas.test.ts +0 -105
- package/tests/pg-sequences.test.ts +0 -298
- package/tests/pg-tables.test.ts +0 -1021
- package/tests/pg-views.test.ts +0 -1929
- package/tests/push/common.ts +0 -58
- package/tests/push/libsql.test.ts +0 -1400
- package/tests/push/mysql-push.test.ts +0 -345
- package/tests/push/mysql.test.ts +0 -788
- package/tests/push/pg.test.ts +0 -4341
- package/tests/push/singlestore-push.test.ts +0 -894
- package/tests/push/singlestore.test.ts +0 -444
- package/tests/push/sqlite.test.ts +0 -1613
- package/tests/rls/pg-policy.test.ts +0 -1656
- package/tests/rls/pg-role.test.ts +0 -234
- package/tests/schemaDiffer.ts +0 -2852
- package/tests/singlestore-generated.test.ts +0 -1290
- package/tests/singlestore-schemas.test.ts +0 -155
- package/tests/singlestore.test.ts +0 -978
- package/tests/sqlite-checks.test.ts +0 -308
- package/tests/sqlite-columns.test.ts +0 -1049
- package/tests/sqlite-generated.test.ts +0 -1726
- package/tests/sqlite-tables.test.ts +0 -637
- package/tests/sqlite-views.test.ts +0 -218
- package/tests/statements-combiner/libsql-statements-combiner.test.ts +0 -1812
- package/tests/statements-combiner/singlestore-statements-combiner.test.ts +0 -882
- package/tests/statements-combiner/sqlite-statements-combiner.test.ts +0 -1211
- package/tests/test/sqlite.test.ts +0 -39
- package/tests/testsinglestore.ts +0 -29
- package/tests/validations.test.ts +0 -869
- package/tests/wrap-param.test.ts +0 -16
- package/tsconfig.build.json +0 -4
- package/tsconfig.cli-types.json +0 -9
- package/tsconfig.json +0 -28
- package/vitest.config.ts +0 -34
|
@@ -1,894 +0,0 @@
|
|
|
1
|
-
import { PGlite } from '@electric-sql/pglite';
|
|
2
|
-
import { SQL, sql } from 'drizzle-orm';
|
|
3
|
-
import {
|
|
4
|
-
bigint,
|
|
5
|
-
bigserial,
|
|
6
|
-
boolean,
|
|
7
|
-
char,
|
|
8
|
-
check,
|
|
9
|
-
cidr,
|
|
10
|
-
date,
|
|
11
|
-
doublePrecision,
|
|
12
|
-
inet,
|
|
13
|
-
integer,
|
|
14
|
-
interval,
|
|
15
|
-
json,
|
|
16
|
-
jsonb,
|
|
17
|
-
macaddr,
|
|
18
|
-
macaddr8,
|
|
19
|
-
numeric,
|
|
20
|
-
pgEnum,
|
|
21
|
-
pgMaterializedView,
|
|
22
|
-
pgPolicy,
|
|
23
|
-
pgRole,
|
|
24
|
-
pgSchema,
|
|
25
|
-
pgTable,
|
|
26
|
-
pgView,
|
|
27
|
-
real,
|
|
28
|
-
serial,
|
|
29
|
-
smallint,
|
|
30
|
-
smallserial,
|
|
31
|
-
text,
|
|
32
|
-
time,
|
|
33
|
-
timestamp,
|
|
34
|
-
uuid,
|
|
35
|
-
varchar,
|
|
36
|
-
} from 'drizzle-orm/pg-core';
|
|
37
|
-
import fs from 'fs';
|
|
38
|
-
import { introspectPgToFile } from 'tests/schemaDiffer';
|
|
39
|
-
import { expect, test } from 'vitest';
|
|
40
|
-
|
|
41
|
-
if (!fs.existsSync('tests/introspect/postgres')) {
|
|
42
|
-
fs.mkdirSync('tests/introspect/postgres');
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
test('basic introspect test', async () => {
|
|
46
|
-
const client = new PGlite();
|
|
47
|
-
|
|
48
|
-
const schema = {
|
|
49
|
-
users: pgTable('users', {
|
|
50
|
-
id: integer('id').notNull(),
|
|
51
|
-
email: text('email'),
|
|
52
|
-
}),
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
56
|
-
client,
|
|
57
|
-
schema,
|
|
58
|
-
'basic-introspect',
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
expect(statements.length).toBe(0);
|
|
62
|
-
expect(sqlStatements.length).toBe(0);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
test('basic identity always test', async () => {
|
|
66
|
-
const client = new PGlite();
|
|
67
|
-
|
|
68
|
-
const schema = {
|
|
69
|
-
users: pgTable('users', {
|
|
70
|
-
id: integer('id').generatedAlwaysAsIdentity(),
|
|
71
|
-
email: text('email'),
|
|
72
|
-
}),
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
76
|
-
client,
|
|
77
|
-
schema,
|
|
78
|
-
'basic-identity-always-introspect',
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
expect(statements.length).toBe(0);
|
|
82
|
-
expect(sqlStatements.length).toBe(0);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
test('basic identity by default test', async () => {
|
|
86
|
-
const client = new PGlite();
|
|
87
|
-
|
|
88
|
-
const schema = {
|
|
89
|
-
users: pgTable('users', {
|
|
90
|
-
id: integer('id').generatedByDefaultAsIdentity(),
|
|
91
|
-
email: text('email'),
|
|
92
|
-
}),
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
96
|
-
client,
|
|
97
|
-
schema,
|
|
98
|
-
'basic-identity-default-introspect',
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
expect(statements.length).toBe(0);
|
|
102
|
-
expect(sqlStatements.length).toBe(0);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
test('identity always test: few params', async () => {
|
|
106
|
-
const client = new PGlite();
|
|
107
|
-
|
|
108
|
-
const schema = {
|
|
109
|
-
users: pgTable('users', {
|
|
110
|
-
id: integer('id').generatedAlwaysAsIdentity({
|
|
111
|
-
startWith: 100,
|
|
112
|
-
name: 'custom_name',
|
|
113
|
-
}),
|
|
114
|
-
email: text('email'),
|
|
115
|
-
}),
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
119
|
-
client,
|
|
120
|
-
schema,
|
|
121
|
-
'identity-always-few-params-introspect',
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
expect(statements.length).toBe(0);
|
|
125
|
-
expect(sqlStatements.length).toBe(0);
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
test('identity by default test: few params', async () => {
|
|
129
|
-
const client = new PGlite();
|
|
130
|
-
|
|
131
|
-
const schema = {
|
|
132
|
-
users: pgTable('users', {
|
|
133
|
-
id: integer('id').generatedByDefaultAsIdentity({
|
|
134
|
-
maxValue: 10000,
|
|
135
|
-
name: 'custom_name',
|
|
136
|
-
}),
|
|
137
|
-
email: text('email'),
|
|
138
|
-
}),
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
142
|
-
client,
|
|
143
|
-
schema,
|
|
144
|
-
'identity-default-few-params-introspect',
|
|
145
|
-
);
|
|
146
|
-
|
|
147
|
-
expect(statements.length).toBe(0);
|
|
148
|
-
expect(sqlStatements.length).toBe(0);
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
test('identity always test: all params', async () => {
|
|
152
|
-
const client = new PGlite();
|
|
153
|
-
|
|
154
|
-
const schema = {
|
|
155
|
-
users: pgTable('users', {
|
|
156
|
-
id: integer('id').generatedAlwaysAsIdentity({
|
|
157
|
-
startWith: 10,
|
|
158
|
-
increment: 4,
|
|
159
|
-
minValue: 10,
|
|
160
|
-
maxValue: 10000,
|
|
161
|
-
cache: 100,
|
|
162
|
-
cycle: true,
|
|
163
|
-
}),
|
|
164
|
-
email: text('email'),
|
|
165
|
-
}),
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
169
|
-
client,
|
|
170
|
-
schema,
|
|
171
|
-
'identity-always-all-params-introspect',
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
expect(statements.length).toBe(0);
|
|
175
|
-
expect(sqlStatements.length).toBe(0);
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
test('identity by default test: all params', async () => {
|
|
179
|
-
const client = new PGlite();
|
|
180
|
-
|
|
181
|
-
const schema = {
|
|
182
|
-
users: pgTable('users', {
|
|
183
|
-
id: integer('id').generatedByDefaultAsIdentity({
|
|
184
|
-
startWith: 10,
|
|
185
|
-
increment: 4,
|
|
186
|
-
minValue: 10,
|
|
187
|
-
maxValue: 10000,
|
|
188
|
-
cache: 100,
|
|
189
|
-
cycle: true,
|
|
190
|
-
}),
|
|
191
|
-
email: text('email'),
|
|
192
|
-
}),
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
196
|
-
client,
|
|
197
|
-
schema,
|
|
198
|
-
'identity-default-all-params-introspect',
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
expect(statements.length).toBe(0);
|
|
202
|
-
expect(sqlStatements.length).toBe(0);
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
test('generated column: link to another column', async () => {
|
|
206
|
-
const client = new PGlite();
|
|
207
|
-
|
|
208
|
-
const schema = {
|
|
209
|
-
users: pgTable('users', {
|
|
210
|
-
id: integer('id').generatedAlwaysAsIdentity(),
|
|
211
|
-
email: text('email'),
|
|
212
|
-
generatedEmail: text('generatedEmail').generatedAlwaysAs(
|
|
213
|
-
(): SQL => sql`email`,
|
|
214
|
-
),
|
|
215
|
-
}),
|
|
216
|
-
};
|
|
217
|
-
|
|
218
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
219
|
-
client,
|
|
220
|
-
schema,
|
|
221
|
-
'generated-link-column',
|
|
222
|
-
);
|
|
223
|
-
|
|
224
|
-
expect(statements.length).toBe(0);
|
|
225
|
-
expect(sqlStatements.length).toBe(0);
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
test('instrospect all column types', async () => {
|
|
229
|
-
const client = new PGlite();
|
|
230
|
-
|
|
231
|
-
const myEnum = pgEnum('my_enum', ['a', 'b', 'c']);
|
|
232
|
-
const schema = {
|
|
233
|
-
enum_: myEnum,
|
|
234
|
-
// NOTE: Types from extensions aren't tested due to PGlite not supporting at the moment
|
|
235
|
-
columns: pgTable('columns', {
|
|
236
|
-
enum: myEnum('my_enum').default('a'),
|
|
237
|
-
smallint: smallint('smallint').default(10),
|
|
238
|
-
integer: integer('integer').default(10),
|
|
239
|
-
numeric: numeric('numeric', { precision: 3, scale: 1 }).default('99.9'),
|
|
240
|
-
numeric2: numeric('numeric2', { precision: 1, scale: 1 }).default('99.9'),
|
|
241
|
-
numeric3: numeric('numeric3').default('99.9'),
|
|
242
|
-
bigint: bigint('bigint', { mode: 'number' }).default(100),
|
|
243
|
-
boolean: boolean('boolean').default(true),
|
|
244
|
-
text: text('test').default('abc'),
|
|
245
|
-
varchar: varchar('varchar', { length: 25 }).default('abc'),
|
|
246
|
-
char: char('char', { length: 3 }).default('abc'),
|
|
247
|
-
serial: serial('serial'),
|
|
248
|
-
bigserial: bigserial('bigserial', { mode: 'number' }),
|
|
249
|
-
smallserial: smallserial('smallserial'),
|
|
250
|
-
doublePrecision: doublePrecision('doublePrecision').default(100),
|
|
251
|
-
real: real('real').default(100),
|
|
252
|
-
json: json('json').$type<{ attr: string }>().default({ attr: 'value' }),
|
|
253
|
-
jsonb: jsonb('jsonb').$type<{ attr: string }>().default({ attr: 'value' }),
|
|
254
|
-
time1: time('time1').default('00:00:00'),
|
|
255
|
-
time2: time('time2').defaultNow(),
|
|
256
|
-
timestamp1: timestamp('timestamp1', { withTimezone: true, precision: 6 }).default(new Date()),
|
|
257
|
-
timestamp2: timestamp('timestamp2', { withTimezone: true, precision: 6 }).defaultNow(),
|
|
258
|
-
timestamp3: timestamp('timestamp3', { withTimezone: true, precision: 6 }).default(
|
|
259
|
-
sql`timezone('utc'::text, now())`,
|
|
260
|
-
),
|
|
261
|
-
date1: date('date1').default('2024-01-01'),
|
|
262
|
-
date2: date('date2').defaultNow(),
|
|
263
|
-
date3: date('date3').default(sql`CURRENT_TIMESTAMP`),
|
|
264
|
-
uuid1: uuid('uuid1').default('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'),
|
|
265
|
-
uuid2: uuid('uuid2').defaultRandom(),
|
|
266
|
-
inet: inet('inet').default('127.0.0.1'),
|
|
267
|
-
cidr: cidr('cidr').default('127.0.0.1/32'),
|
|
268
|
-
macaddr: macaddr('macaddr').default('00:00:00:00:00:00'),
|
|
269
|
-
macaddr8: macaddr8('macaddr8').default('00:00:00:ff:fe:00:00:00'),
|
|
270
|
-
interval: interval('interval').default('1 day 01:00:00'),
|
|
271
|
-
}),
|
|
272
|
-
};
|
|
273
|
-
|
|
274
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
275
|
-
client,
|
|
276
|
-
schema,
|
|
277
|
-
'introspect-all-columns-types',
|
|
278
|
-
);
|
|
279
|
-
|
|
280
|
-
expect(statements.length).toBe(0);
|
|
281
|
-
expect(sqlStatements.length).toBe(0);
|
|
282
|
-
});
|
|
283
|
-
|
|
284
|
-
test('instrospect all column array types', async () => {
|
|
285
|
-
const client = new PGlite();
|
|
286
|
-
|
|
287
|
-
const myEnum = pgEnum('my_enum', ['a', 'b', 'c']);
|
|
288
|
-
const schema = {
|
|
289
|
-
enum_: myEnum,
|
|
290
|
-
// NOTE: Types from extensions aren't tested due to PGlite not supporting at the moment
|
|
291
|
-
columns: pgTable('columns', {
|
|
292
|
-
enum: myEnum('my_enum').array().default(['a', 'b']),
|
|
293
|
-
smallint: smallint('smallint').array().default([10, 20]),
|
|
294
|
-
integer: integer('integer').array().default([10, 20]),
|
|
295
|
-
numeric: numeric('numeric', { precision: 3, scale: 1 }).array().default(['99.9', '88.8']),
|
|
296
|
-
bigint: bigint('bigint', { mode: 'number' }).array().default([100, 200]),
|
|
297
|
-
boolean: boolean('boolean').array().default([true, false]),
|
|
298
|
-
text: text('test').array().default(['abc', 'def']),
|
|
299
|
-
varchar: varchar('varchar', { length: 25 }).array().default(['abc', 'def']),
|
|
300
|
-
char: char('char', { length: 3 }).array().default(['abc', 'def']),
|
|
301
|
-
doublePrecision: doublePrecision('doublePrecision').array().default([100, 200]),
|
|
302
|
-
real: real('real').array().default([100, 200]),
|
|
303
|
-
json: json('json').$type<{ attr: string }>().array().default([{ attr: 'value1' }, { attr: 'value2' }]),
|
|
304
|
-
jsonb: jsonb('jsonb').$type<{ attr: string }>().array().default([{ attr: 'value1' }, { attr: 'value2' }]),
|
|
305
|
-
time: time('time').array().default(['00:00:00', '01:00:00']),
|
|
306
|
-
timestamp: timestamp('timestamp', { withTimezone: true, precision: 6 })
|
|
307
|
-
.array()
|
|
308
|
-
.default([new Date(), new Date()]),
|
|
309
|
-
date: date('date').array().default(['2024-01-01', '2024-01-02']),
|
|
310
|
-
uuid: uuid('uuid').array().default([
|
|
311
|
-
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11',
|
|
312
|
-
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12',
|
|
313
|
-
]),
|
|
314
|
-
inet: inet('inet').array().default(['127.0.0.1', '127.0.0.2']),
|
|
315
|
-
cidr: cidr('cidr').array().default(['127.0.0.1/32', '127.0.0.2/32']),
|
|
316
|
-
macaddr: macaddr('macaddr').array().default(['00:00:00:00:00:00', '00:00:00:00:00:01']),
|
|
317
|
-
macaddr8: macaddr8('macaddr8').array().default(['00:00:00:ff:fe:00:00:00', '00:00:00:ff:fe:00:00:01']),
|
|
318
|
-
interval: interval('interval').array().default(['1 day 01:00:00', '1 day 02:00:00']),
|
|
319
|
-
}),
|
|
320
|
-
};
|
|
321
|
-
|
|
322
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
323
|
-
client,
|
|
324
|
-
schema,
|
|
325
|
-
'introspect-all-columns-array-types',
|
|
326
|
-
);
|
|
327
|
-
|
|
328
|
-
expect(statements.length).toBe(0);
|
|
329
|
-
expect(sqlStatements.length).toBe(0);
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
test('introspect columns with name with non-alphanumeric characters', async () => {
|
|
333
|
-
const client = new PGlite();
|
|
334
|
-
const schema = {
|
|
335
|
-
users: pgTable('users', {
|
|
336
|
-
'not:allowed': integer('not:allowed'),
|
|
337
|
-
'nuh--uh': integer('nuh-uh'),
|
|
338
|
-
'1_nope': integer('1_nope'),
|
|
339
|
-
valid: integer('valid'),
|
|
340
|
-
}),
|
|
341
|
-
};
|
|
342
|
-
|
|
343
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
344
|
-
client,
|
|
345
|
-
schema,
|
|
346
|
-
'introspect-column-with-name-with-non-alphanumeric-characters',
|
|
347
|
-
);
|
|
348
|
-
|
|
349
|
-
expect(statements.length).toBe(0);
|
|
350
|
-
expect(sqlStatements.length).toBe(0);
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
test('introspect enum from different schema', async () => {
|
|
354
|
-
const client = new PGlite();
|
|
355
|
-
|
|
356
|
-
const schema2 = pgSchema('schema2');
|
|
357
|
-
const myEnumInSchema2 = schema2.enum('my_enum', ['a', 'b', 'c']);
|
|
358
|
-
const schema = {
|
|
359
|
-
schema2,
|
|
360
|
-
myEnumInSchema2,
|
|
361
|
-
users: pgTable('users', {
|
|
362
|
-
col: myEnumInSchema2('col'),
|
|
363
|
-
}),
|
|
364
|
-
};
|
|
365
|
-
|
|
366
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
367
|
-
client,
|
|
368
|
-
schema,
|
|
369
|
-
'introspect-enum-from-different-schema',
|
|
370
|
-
['public', 'schema2'],
|
|
371
|
-
);
|
|
372
|
-
|
|
373
|
-
expect(statements.length).toBe(0);
|
|
374
|
-
expect(sqlStatements.length).toBe(0);
|
|
375
|
-
});
|
|
376
|
-
|
|
377
|
-
test('introspect enum with same names across different schema', async () => {
|
|
378
|
-
const client = new PGlite();
|
|
379
|
-
|
|
380
|
-
const schema2 = pgSchema('schema2');
|
|
381
|
-
const myEnumInSchema2 = schema2.enum('my_enum', ['a', 'b', 'c']);
|
|
382
|
-
const myEnum = pgEnum('my_enum', ['a', 'b', 'c']);
|
|
383
|
-
const schema = {
|
|
384
|
-
schema2,
|
|
385
|
-
myEnumInSchema2,
|
|
386
|
-
myEnum,
|
|
387
|
-
users: pgTable('users', {
|
|
388
|
-
col1: myEnumInSchema2('col1'),
|
|
389
|
-
col2: myEnum('col2'),
|
|
390
|
-
}),
|
|
391
|
-
};
|
|
392
|
-
|
|
393
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
394
|
-
client,
|
|
395
|
-
schema,
|
|
396
|
-
'introspect-enum-with-same-names-across-different-schema',
|
|
397
|
-
['public', 'schema2'],
|
|
398
|
-
);
|
|
399
|
-
|
|
400
|
-
expect(statements.length).toBe(0);
|
|
401
|
-
expect(sqlStatements.length).toBe(0);
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
test('introspect enum with similar name to native type', async () => {
|
|
405
|
-
const client = new PGlite();
|
|
406
|
-
|
|
407
|
-
const timeLeft = pgEnum('time_left', ['short', 'medium', 'long']);
|
|
408
|
-
const schema = {
|
|
409
|
-
timeLeft,
|
|
410
|
-
auction: pgTable('auction', {
|
|
411
|
-
col: timeLeft('col1'),
|
|
412
|
-
}),
|
|
413
|
-
};
|
|
414
|
-
|
|
415
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
416
|
-
client,
|
|
417
|
-
schema,
|
|
418
|
-
'introspect-enum-with-similar-name-to-native-type',
|
|
419
|
-
);
|
|
420
|
-
|
|
421
|
-
expect(statements.length).toBe(0);
|
|
422
|
-
expect(sqlStatements.length).toBe(0);
|
|
423
|
-
});
|
|
424
|
-
|
|
425
|
-
test('instrospect strings with single quotes', async () => {
|
|
426
|
-
const client = new PGlite();
|
|
427
|
-
|
|
428
|
-
const myEnum = pgEnum('my_enum', ['escape\'s quotes " ']);
|
|
429
|
-
const schema = {
|
|
430
|
-
enum_: myEnum,
|
|
431
|
-
columns: pgTable('columns', {
|
|
432
|
-
enum: myEnum('my_enum').default('escape\'s quotes " '),
|
|
433
|
-
text: text('text').default('escape\'s quotes " '),
|
|
434
|
-
varchar: varchar('varchar').default('escape\'s quotes " '),
|
|
435
|
-
}),
|
|
436
|
-
};
|
|
437
|
-
|
|
438
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
439
|
-
client,
|
|
440
|
-
schema,
|
|
441
|
-
'introspect-strings-with-single-quotes',
|
|
442
|
-
);
|
|
443
|
-
|
|
444
|
-
expect(statements.length).toBe(0);
|
|
445
|
-
expect(sqlStatements.length).toBe(0);
|
|
446
|
-
});
|
|
447
|
-
|
|
448
|
-
test('introspect checks', async () => {
|
|
449
|
-
const client = new PGlite();
|
|
450
|
-
|
|
451
|
-
const schema = {
|
|
452
|
-
users: pgTable('users', {
|
|
453
|
-
id: serial('id'),
|
|
454
|
-
name: varchar('name'),
|
|
455
|
-
age: integer('age'),
|
|
456
|
-
}, (table) => ({
|
|
457
|
-
someCheck: check('some_check', sql`${table.age} > 21`),
|
|
458
|
-
})),
|
|
459
|
-
};
|
|
460
|
-
|
|
461
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
462
|
-
client,
|
|
463
|
-
schema,
|
|
464
|
-
'introspect-checks',
|
|
465
|
-
);
|
|
466
|
-
|
|
467
|
-
expect(statements.length).toBe(0);
|
|
468
|
-
expect(sqlStatements.length).toBe(0);
|
|
469
|
-
});
|
|
470
|
-
|
|
471
|
-
test('introspect checks from different schemas with same names', async () => {
|
|
472
|
-
const client = new PGlite();
|
|
473
|
-
|
|
474
|
-
const mySchema = pgSchema('schema2');
|
|
475
|
-
const schema = {
|
|
476
|
-
mySchema,
|
|
477
|
-
users: pgTable('users', {
|
|
478
|
-
id: serial('id'),
|
|
479
|
-
age: integer('age'),
|
|
480
|
-
}, (table) => ({
|
|
481
|
-
someCheck: check('some_check', sql`${table.age} > 21`),
|
|
482
|
-
})),
|
|
483
|
-
usersInMySchema: mySchema.table('users', {
|
|
484
|
-
id: serial('id'),
|
|
485
|
-
age: integer('age'),
|
|
486
|
-
}, (table) => ({
|
|
487
|
-
someCheck: check('some_check', sql`${table.age} < 1`),
|
|
488
|
-
})),
|
|
489
|
-
};
|
|
490
|
-
|
|
491
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
492
|
-
client,
|
|
493
|
-
schema,
|
|
494
|
-
'introspect-checks-diff-schema-same-names',
|
|
495
|
-
['public', 'schema2'],
|
|
496
|
-
);
|
|
497
|
-
|
|
498
|
-
expect(statements.length).toBe(0);
|
|
499
|
-
expect(sqlStatements.length).toBe(0);
|
|
500
|
-
});
|
|
501
|
-
|
|
502
|
-
test('introspect view #1', async () => {
|
|
503
|
-
const client = new PGlite();
|
|
504
|
-
|
|
505
|
-
const users = pgTable('users', {
|
|
506
|
-
id: serial('id').primaryKey().notNull(),
|
|
507
|
-
name: varchar('users'),
|
|
508
|
-
});
|
|
509
|
-
|
|
510
|
-
const view = pgView('some_view').as((qb) => qb.select().from(users));
|
|
511
|
-
const schema = {
|
|
512
|
-
view,
|
|
513
|
-
users,
|
|
514
|
-
};
|
|
515
|
-
|
|
516
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
517
|
-
client,
|
|
518
|
-
schema,
|
|
519
|
-
'introspect-view',
|
|
520
|
-
);
|
|
521
|
-
|
|
522
|
-
expect(statements.length).toBe(0);
|
|
523
|
-
expect(sqlStatements.length).toBe(0);
|
|
524
|
-
});
|
|
525
|
-
|
|
526
|
-
test('introspect view #2', async () => {
|
|
527
|
-
const client = new PGlite();
|
|
528
|
-
|
|
529
|
-
const users = pgTable('users', {
|
|
530
|
-
id: serial('id').primaryKey().notNull(),
|
|
531
|
-
name: varchar('users'),
|
|
532
|
-
});
|
|
533
|
-
|
|
534
|
-
const view = pgView('some_view', { id: integer('asd') }).with({ checkOption: 'cascaded' }).as(
|
|
535
|
-
sql`SELECT * FROM ${users}`,
|
|
536
|
-
);
|
|
537
|
-
const schema = {
|
|
538
|
-
view,
|
|
539
|
-
users,
|
|
540
|
-
};
|
|
541
|
-
|
|
542
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
543
|
-
client,
|
|
544
|
-
schema,
|
|
545
|
-
'introspect-view-2',
|
|
546
|
-
);
|
|
547
|
-
|
|
548
|
-
expect(statements.length).toBe(0);
|
|
549
|
-
expect(sqlStatements.length).toBe(0);
|
|
550
|
-
});
|
|
551
|
-
|
|
552
|
-
test('introspect view in other schema', async () => {
|
|
553
|
-
const client = new PGlite();
|
|
554
|
-
|
|
555
|
-
const newSchema = pgSchema('new_schema');
|
|
556
|
-
const users = pgTable('users', {
|
|
557
|
-
id: serial('id').primaryKey().notNull(),
|
|
558
|
-
name: varchar('users'),
|
|
559
|
-
});
|
|
560
|
-
|
|
561
|
-
const view = newSchema.view('some_view', { id: integer('asd') }).with({ checkOption: 'cascaded' }).as(
|
|
562
|
-
sql`SELECT * FROM ${users}`,
|
|
563
|
-
);
|
|
564
|
-
const schema = {
|
|
565
|
-
view,
|
|
566
|
-
users,
|
|
567
|
-
newSchema,
|
|
568
|
-
};
|
|
569
|
-
|
|
570
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
571
|
-
client,
|
|
572
|
-
schema,
|
|
573
|
-
'introspect-view-in-other-schema',
|
|
574
|
-
['new_schema'],
|
|
575
|
-
);
|
|
576
|
-
|
|
577
|
-
expect(statements.length).toBe(0);
|
|
578
|
-
expect(sqlStatements.length).toBe(0);
|
|
579
|
-
});
|
|
580
|
-
|
|
581
|
-
test('introspect materialized view in other schema', async () => {
|
|
582
|
-
const client = new PGlite();
|
|
583
|
-
|
|
584
|
-
const newSchema = pgSchema('new_schema');
|
|
585
|
-
const users = pgTable('users', {
|
|
586
|
-
id: serial('id').primaryKey().notNull(),
|
|
587
|
-
name: varchar('users'),
|
|
588
|
-
});
|
|
589
|
-
|
|
590
|
-
const view = newSchema.materializedView('some_view', { id: integer('asd') }).with({ autovacuumEnabled: true }).as(
|
|
591
|
-
sql`SELECT * FROM ${users}`,
|
|
592
|
-
);
|
|
593
|
-
const schema = {
|
|
594
|
-
view,
|
|
595
|
-
users,
|
|
596
|
-
newSchema,
|
|
597
|
-
};
|
|
598
|
-
|
|
599
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
600
|
-
client,
|
|
601
|
-
schema,
|
|
602
|
-
'introspect-mat-view-in-other-schema',
|
|
603
|
-
['new_schema'],
|
|
604
|
-
);
|
|
605
|
-
|
|
606
|
-
expect(statements.length).toBe(0);
|
|
607
|
-
expect(sqlStatements.length).toBe(0);
|
|
608
|
-
});
|
|
609
|
-
|
|
610
|
-
test('introspect materialized view #1', async () => {
|
|
611
|
-
const client = new PGlite();
|
|
612
|
-
|
|
613
|
-
const users = pgTable('users', {
|
|
614
|
-
id: serial('id').primaryKey().notNull(),
|
|
615
|
-
name: varchar('users'),
|
|
616
|
-
});
|
|
617
|
-
|
|
618
|
-
const view = pgMaterializedView('some_view').using('heap').withNoData().as((qb) => qb.select().from(users));
|
|
619
|
-
const schema = {
|
|
620
|
-
view,
|
|
621
|
-
users,
|
|
622
|
-
};
|
|
623
|
-
|
|
624
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
625
|
-
client,
|
|
626
|
-
schema,
|
|
627
|
-
'introspect-materialized-view',
|
|
628
|
-
);
|
|
629
|
-
|
|
630
|
-
expect(statements.length).toBe(0);
|
|
631
|
-
expect(sqlStatements.length).toBe(0);
|
|
632
|
-
});
|
|
633
|
-
|
|
634
|
-
test('introspect materialized view #2', async () => {
|
|
635
|
-
const client = new PGlite();
|
|
636
|
-
|
|
637
|
-
const users = pgTable('users', {
|
|
638
|
-
id: serial('id').primaryKey().notNull(),
|
|
639
|
-
name: varchar('users'),
|
|
640
|
-
});
|
|
641
|
-
|
|
642
|
-
const view = pgMaterializedView('some_view', { id: integer('asd') }).with({ autovacuumFreezeMinAge: 1 }).as(
|
|
643
|
-
sql`SELECT * FROM ${users}`,
|
|
644
|
-
);
|
|
645
|
-
const schema = {
|
|
646
|
-
view,
|
|
647
|
-
users,
|
|
648
|
-
};
|
|
649
|
-
|
|
650
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
651
|
-
client,
|
|
652
|
-
schema,
|
|
653
|
-
'introspect-materialized-view-2',
|
|
654
|
-
);
|
|
655
|
-
|
|
656
|
-
expect(statements.length).toBe(0);
|
|
657
|
-
expect(sqlStatements.length).toBe(0);
|
|
658
|
-
});
|
|
659
|
-
|
|
660
|
-
test('basic policy', async () => {
|
|
661
|
-
const client = new PGlite();
|
|
662
|
-
|
|
663
|
-
const schema = {
|
|
664
|
-
users: pgTable('users', {
|
|
665
|
-
id: integer('id').primaryKey(),
|
|
666
|
-
}, () => ({
|
|
667
|
-
rls: pgPolicy('test'),
|
|
668
|
-
})),
|
|
669
|
-
};
|
|
670
|
-
|
|
671
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
672
|
-
client,
|
|
673
|
-
schema,
|
|
674
|
-
'basic-policy',
|
|
675
|
-
);
|
|
676
|
-
|
|
677
|
-
expect(statements.length).toBe(0);
|
|
678
|
-
expect(sqlStatements.length).toBe(0);
|
|
679
|
-
});
|
|
680
|
-
|
|
681
|
-
test('basic policy with "as"', async () => {
|
|
682
|
-
const client = new PGlite();
|
|
683
|
-
|
|
684
|
-
const schema = {
|
|
685
|
-
users: pgTable('users', {
|
|
686
|
-
id: integer('id').primaryKey(),
|
|
687
|
-
}, () => ({
|
|
688
|
-
rls: pgPolicy('test', { as: 'permissive' }),
|
|
689
|
-
})),
|
|
690
|
-
};
|
|
691
|
-
|
|
692
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
693
|
-
client,
|
|
694
|
-
schema,
|
|
695
|
-
'basic-policy-as',
|
|
696
|
-
);
|
|
697
|
-
|
|
698
|
-
expect(statements.length).toBe(0);
|
|
699
|
-
expect(sqlStatements.length).toBe(0);
|
|
700
|
-
});
|
|
701
|
-
|
|
702
|
-
test.todo('basic policy with CURRENT_USER role', async () => {
|
|
703
|
-
const client = new PGlite();
|
|
704
|
-
|
|
705
|
-
const schema = {
|
|
706
|
-
users: pgTable('users', {
|
|
707
|
-
id: integer('id').primaryKey(),
|
|
708
|
-
}, () => ({
|
|
709
|
-
rls: pgPolicy('test', { to: 'current_user' }),
|
|
710
|
-
})),
|
|
711
|
-
};
|
|
712
|
-
|
|
713
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
714
|
-
client,
|
|
715
|
-
schema,
|
|
716
|
-
'basic-policy',
|
|
717
|
-
);
|
|
718
|
-
|
|
719
|
-
expect(statements.length).toBe(0);
|
|
720
|
-
expect(sqlStatements.length).toBe(0);
|
|
721
|
-
});
|
|
722
|
-
|
|
723
|
-
test('basic policy with all fields except "using" and "with"', async () => {
|
|
724
|
-
const client = new PGlite();
|
|
725
|
-
|
|
726
|
-
const schema = {
|
|
727
|
-
users: pgTable('users', {
|
|
728
|
-
id: integer('id').primaryKey(),
|
|
729
|
-
}, () => ({
|
|
730
|
-
rls: pgPolicy('test', { as: 'permissive', for: 'all', to: ['postgres'] }),
|
|
731
|
-
})),
|
|
732
|
-
};
|
|
733
|
-
|
|
734
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
735
|
-
client,
|
|
736
|
-
schema,
|
|
737
|
-
'basic-policy-all-fields',
|
|
738
|
-
);
|
|
739
|
-
|
|
740
|
-
expect(statements.length).toBe(0);
|
|
741
|
-
expect(sqlStatements.length).toBe(0);
|
|
742
|
-
});
|
|
743
|
-
|
|
744
|
-
test('basic policy with "using" and "with"', async () => {
|
|
745
|
-
const client = new PGlite();
|
|
746
|
-
|
|
747
|
-
const schema = {
|
|
748
|
-
users: pgTable('users', {
|
|
749
|
-
id: integer('id').primaryKey(),
|
|
750
|
-
}, () => ({
|
|
751
|
-
rls: pgPolicy('test', { using: sql`true`, withCheck: sql`true` }),
|
|
752
|
-
})),
|
|
753
|
-
};
|
|
754
|
-
|
|
755
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
756
|
-
client,
|
|
757
|
-
schema,
|
|
758
|
-
'basic-policy-using-withcheck',
|
|
759
|
-
);
|
|
760
|
-
|
|
761
|
-
expect(statements.length).toBe(0);
|
|
762
|
-
expect(sqlStatements.length).toBe(0);
|
|
763
|
-
});
|
|
764
|
-
|
|
765
|
-
test('multiple policies', async () => {
|
|
766
|
-
const client = new PGlite();
|
|
767
|
-
|
|
768
|
-
const schema = {
|
|
769
|
-
users: pgTable('users', {
|
|
770
|
-
id: integer('id').primaryKey(),
|
|
771
|
-
}, () => ({
|
|
772
|
-
rls: pgPolicy('test', { using: sql`true`, withCheck: sql`true` }),
|
|
773
|
-
rlsPolicy: pgPolicy('newRls'),
|
|
774
|
-
})),
|
|
775
|
-
};
|
|
776
|
-
|
|
777
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
778
|
-
client,
|
|
779
|
-
schema,
|
|
780
|
-
'multiple-policies',
|
|
781
|
-
);
|
|
782
|
-
|
|
783
|
-
expect(statements.length).toBe(0);
|
|
784
|
-
expect(sqlStatements.length).toBe(0);
|
|
785
|
-
});
|
|
786
|
-
|
|
787
|
-
test('multiple policies with roles', async () => {
|
|
788
|
-
const client = new PGlite();
|
|
789
|
-
|
|
790
|
-
client.query(`CREATE ROLE manager;`);
|
|
791
|
-
|
|
792
|
-
const schema = {
|
|
793
|
-
users: pgTable('users', {
|
|
794
|
-
id: integer('id').primaryKey(),
|
|
795
|
-
}, () => ({
|
|
796
|
-
rls: pgPolicy('test', { using: sql`true`, withCheck: sql`true` }),
|
|
797
|
-
rlsPolicy: pgPolicy('newRls', { to: ['postgres', 'manager'] }),
|
|
798
|
-
})),
|
|
799
|
-
};
|
|
800
|
-
|
|
801
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
802
|
-
client,
|
|
803
|
-
schema,
|
|
804
|
-
'multiple-policies-with-roles',
|
|
805
|
-
);
|
|
806
|
-
|
|
807
|
-
expect(statements.length).toBe(0);
|
|
808
|
-
expect(sqlStatements.length).toBe(0);
|
|
809
|
-
});
|
|
810
|
-
|
|
811
|
-
test('basic roles', async () => {
|
|
812
|
-
const client = new PGlite();
|
|
813
|
-
|
|
814
|
-
const schema = {
|
|
815
|
-
usersRole: pgRole('user'),
|
|
816
|
-
};
|
|
817
|
-
|
|
818
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
819
|
-
client,
|
|
820
|
-
schema,
|
|
821
|
-
'basic-roles',
|
|
822
|
-
['public'],
|
|
823
|
-
{ roles: { include: ['user'] } },
|
|
824
|
-
);
|
|
825
|
-
|
|
826
|
-
expect(statements.length).toBe(0);
|
|
827
|
-
expect(sqlStatements.length).toBe(0);
|
|
828
|
-
});
|
|
829
|
-
|
|
830
|
-
test('role with properties', async () => {
|
|
831
|
-
const client = new PGlite();
|
|
832
|
-
|
|
833
|
-
const schema = {
|
|
834
|
-
usersRole: pgRole('user', { inherit: false, createDb: true, createRole: true }),
|
|
835
|
-
};
|
|
836
|
-
|
|
837
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
838
|
-
client,
|
|
839
|
-
schema,
|
|
840
|
-
'roles-with-properties',
|
|
841
|
-
['public'],
|
|
842
|
-
{ roles: { include: ['user'] } },
|
|
843
|
-
);
|
|
844
|
-
|
|
845
|
-
expect(statements.length).toBe(0);
|
|
846
|
-
expect(sqlStatements.length).toBe(0);
|
|
847
|
-
});
|
|
848
|
-
|
|
849
|
-
test('role with a few properties', async () => {
|
|
850
|
-
const client = new PGlite();
|
|
851
|
-
|
|
852
|
-
const schema = {
|
|
853
|
-
usersRole: pgRole('user', { inherit: false, createRole: true }),
|
|
854
|
-
};
|
|
855
|
-
|
|
856
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
857
|
-
client,
|
|
858
|
-
schema,
|
|
859
|
-
'roles-with-few-properties',
|
|
860
|
-
['public'],
|
|
861
|
-
{ roles: { include: ['user'] } },
|
|
862
|
-
);
|
|
863
|
-
|
|
864
|
-
expect(statements.length).toBe(0);
|
|
865
|
-
expect(sqlStatements.length).toBe(0);
|
|
866
|
-
});
|
|
867
|
-
|
|
868
|
-
test('multiple policies with roles from schema', async () => {
|
|
869
|
-
const client = new PGlite();
|
|
870
|
-
|
|
871
|
-
const usersRole = pgRole('user_role', { inherit: false, createRole: true });
|
|
872
|
-
|
|
873
|
-
const schema = {
|
|
874
|
-
usersRole,
|
|
875
|
-
|
|
876
|
-
users: pgTable('users', {
|
|
877
|
-
id: integer('id').primaryKey(),
|
|
878
|
-
}, () => ({
|
|
879
|
-
rls: pgPolicy('test', { using: sql`true`, withCheck: sql`true` }),
|
|
880
|
-
rlsPolicy: pgPolicy('newRls', { to: ['postgres', usersRole] }),
|
|
881
|
-
})),
|
|
882
|
-
};
|
|
883
|
-
|
|
884
|
-
const { statements, sqlStatements } = await introspectPgToFile(
|
|
885
|
-
client,
|
|
886
|
-
schema,
|
|
887
|
-
'multiple-policies-with-roles-from-schema',
|
|
888
|
-
['public'],
|
|
889
|
-
{ roles: { include: ['user_role'] } },
|
|
890
|
-
);
|
|
891
|
-
|
|
892
|
-
expect(statements.length).toBe(0);
|
|
893
|
-
expect(sqlStatements.length).toBe(0);
|
|
894
|
-
});
|