( imports: Record<string, unknown>, drizzleInstance: PgDatabase<any>, schemaFilters?: string[], tablesFilter?: string[], extensionsFilters?: Config['extensionsFilters'], )
| 123 | }; |
| 124 | |
| 125 | export const pushSchema = async ( |
| 126 | imports: Record<string, unknown>, |
| 127 | drizzleInstance: PgDatabase<any>, |
| 128 | schemaFilters?: string[], |
| 129 | tablesFilter?: string[], |
| 130 | extensionsFilters?: Config['extensionsFilters'], |
| 131 | ) => { |
| 132 | const { applyPgSnapshotsDiff } = await import('./snapshotsDiffer'); |
| 133 | const { sql } = await import('drizzle-orm'); |
| 134 | const filters = (tablesFilter ?? []).concat( |
| 135 | getTablesFilterByExtensions({ extensionsFilters, dialect: 'postgresql' }), |
| 136 | ); |
| 137 | |
| 138 | const db: DB = { |
| 139 | query: async (query: string, params?: any[]) => { |
| 140 | const res = await drizzleInstance.execute(sql.raw(query)); |
| 141 | return res.rows; |
| 142 | }, |
| 143 | }; |
| 144 | |
| 145 | const cur = generateDrizzleJson(imports); |
| 146 | const { schema: prev } = await pgPushIntrospect( |
| 147 | db, |
| 148 | filters, |
| 149 | schemaFilters ?? ['public'], |
| 150 | undefined, |
| 151 | ); |
| 152 | |
| 153 | const validatedPrev = pgSchema.parse(prev); |
| 154 | const validatedCur = pgSchema.parse(cur); |
| 155 | |
| 156 | const squashedPrev = squashPgScheme(validatedPrev, 'push'); |
| 157 | const squashedCur = squashPgScheme(validatedCur, 'push'); |
| 158 | |
| 159 | const { statements } = await applyPgSnapshotsDiff( |
| 160 | squashedPrev, |
| 161 | squashedCur, |
| 162 | schemasResolver, |
| 163 | enumsResolver, |
| 164 | sequencesResolver, |
| 165 | policyResolver, |
| 166 | indPolicyResolver, |
| 167 | roleResolver, |
| 168 | tablesResolver, |
| 169 | columnsResolver, |
| 170 | viewsResolver, |
| 171 | validatedPrev, |
| 172 | validatedCur, |
| 173 | 'push', |
| 174 | ); |
| 175 | |
| 176 | const { shouldAskForApprove, statementsToExecute, infoToPrint } = await pgSuggestions(db, statements); |
| 177 | |
| 178 | return { |
| 179 | hasDataLoss: shouldAskForApprove, |
| 180 | warnings: infoToPrint, |
| 181 | statementsToExecute, |
| 182 | apply: async () => { |
nothing calls this directly
no test coverage detected