Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: expose MigrationBuilder to allow using as sql builder #1285

Merged
merged 1 commit into from
Mar 1, 2025

Conversation

wenerme
Copy link
Contributor

@wenerme wenerme commented Oct 10, 2024

fix #1283

@wenerme wenerme requested a review from Shinigami92 as a code owner October 10, 2024 02:40
@wenerme wenerme changed the title feat: expose createMigrationBuilder to allow using this lib as sql bu… feat: expose createMigrationBuilder to allow using this lib as sql builder Oct 10, 2024
Copy link

github-actions bot commented Oct 10, 2024

Coverage Report

Status Category Percentage Covered / Total
🟢 Lines 92.39% (🎯 90%)
⬆️ +0.12%
3195 / 3458
🟢 Statements 92.39% (🎯 90%)
⬆️ +0.12%
3195 / 3458
🟢 Functions 96.69% (🎯 90%)
⬆️ +0.37%
263 / 272
🟢 Branches 90.84% (🎯 85%)
⬆️ +0.13%
834 / 918
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
src/index.ts 100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
Unchanged Files
src/db.ts 83.18% 88.88% 87.5% 83.18% 90-92, 122, 125-137, 177-179
src/logger.ts 100% 100% 100% 100%
src/migration.ts 73.38% 87.27% 66.66% 73.38% 147-150, 171-187, 226-232, 237-275, 332-333, 359-361, 369-370, 387-390, 419-420
src/migrationBuilder.ts 96.18% 93.33% 100% 96.18% 824-828, 967-972
src/migrationOptions.ts 100% 100% 100% 100%
src/pgType.ts 100% 100% 100% 100%
src/runner.ts 78.79% 59.25% 100% 78.79% 181, 201-202, 211-212, 261-262, 304-307, 316-320, 333, 345-348, 371, 373-379, 382, 395, 407-420, 423-426, 446-448, 457, 459-468
src/sqlMigration.ts 85.36% 100% 80% 85.36% 54-60
src/operations/sql.ts 100% 100% 100% 100%
src/operations/casts/createCast.ts 100% 100% 100% 100%
src/operations/casts/dropCast.ts 100% 100% 100% 100%
src/operations/casts/index.ts 100% 100% 100% 100%
src/operations/domains/alterDomain.ts 100% 100% 100% 100%
src/operations/domains/createDomain.ts 100% 100% 100% 100%
src/operations/domains/dropDomain.ts 100% 100% 100% 100%
src/operations/domains/index.ts 100% 100% 100% 100%
src/operations/domains/renameDomain.ts 100% 100% 100% 100%
src/operations/domains/shared.ts 100% 100% 100% 100%
src/operations/extensions/createExtension.ts 100% 100% 100% 100%
src/operations/extensions/dropExtension.ts 100% 100% 100% 100%
src/operations/extensions/index.ts 100% 100% 100% 100%
src/operations/extensions/shared.ts 100% 100% 100% 100%
src/operations/functions/createFunction.ts 95.52% 94.44% 100% 95.52% 71-73
src/operations/functions/dropFunction.ts 100% 100% 100% 100%
src/operations/functions/index.ts 100% 100% 100% 100%
src/operations/functions/renameFunction.ts 100% 100% 100% 100%
src/operations/functions/shared.ts 100% 100% 100% 100%
src/operations/grants/grantOnSchemas.ts 100% 100% 100% 100%
src/operations/grants/grantOnTables.ts 100% 100% 100% 100%
src/operations/grants/grantRoles.ts 100% 100% 100% 100%
src/operations/grants/index.ts 100% 100% 100% 100%
src/operations/grants/revokeOnSchemas.ts 100% 100% 100% 100%
src/operations/grants/revokeOnTables.ts 100% 100% 100% 100%
src/operations/grants/revokeRoles.ts 100% 100% 100% 100%
src/operations/grants/shared.ts 95.45% 85.71% 100% 95.45% 71
src/operations/indexes/createIndex.ts 100% 100% 100% 100%
src/operations/indexes/dropIndex.ts 100% 100% 100% 100%
src/operations/indexes/index.ts 100% 100% 100% 100%
src/operations/indexes/shared.ts 88% 86.95% 100% 88% 23, 33-36, 48
src/operations/materializedViews/alterMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/createMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/dropMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/index.ts 100% 100% 100% 100%
src/operations/materializedViews/refreshMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/renameMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/renameMaterializedViewColumn.ts 100% 100% 100% 100%
src/operations/materializedViews/shared.ts 100% 87.5% 100% 100%
src/operations/operators/addToOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/createOperator.ts 100% 100% 100% 100%
src/operations/operators/createOperatorClass.ts 100% 83.33% 100% 100%
src/operations/operators/createOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/dropOperator.ts 100% 100% 100% 100%
src/operations/operators/dropOperatorClass.ts 100% 100% 100% 100%
src/operations/operators/dropOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/index.ts 100% 100% 100% 100%
src/operations/operators/removeFromOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/renameOperatorClass.ts 100% 100% 100% 100%
src/operations/operators/renameOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/shared.ts 85% 75% 100% 85% 24-25, 38
src/operations/policies/alterPolicy.ts 100% 100% 100% 100%
src/operations/policies/createPolicy.ts 100% 100% 100% 100%
src/operations/policies/dropPolicy.ts 100% 100% 100% 100%
src/operations/policies/index.ts 100% 100% 100% 100%
src/operations/policies/renamePolicy.ts 100% 100% 100% 100%
src/operations/policies/shared.ts 100% 100% 100% 100%
src/operations/roles/alterRole.ts 100% 100% 100% 100%
src/operations/roles/createRole.ts 100% 75% 100% 100%
src/operations/roles/dropRole.ts 100% 100% 100% 100%
src/operations/roles/index.ts 100% 100% 100% 100%
src/operations/roles/renameRole.ts 100% 100% 100% 100%
src/operations/roles/shared.ts 98.07% 76.92% 100% 98.07% 78
src/operations/schemas/createSchema.ts 100% 100% 100% 100%
src/operations/schemas/dropSchema.ts 100% 100% 100% 100%
src/operations/schemas/index.ts 100% 100% 100% 100%
src/operations/schemas/renameSchema.ts 100% 100% 100% 100%
src/operations/sequences/alterSequence.ts 93.75% 75% 100% 93.75% 23
src/operations/sequences/createSequence.ts 100% 100% 100% 100%
src/operations/sequences/dropSequence.ts 100% 100% 100% 100%
src/operations/sequences/index.ts 100% 100% 100% 100%
src/operations/sequences/renameSequence.ts 100% 100% 100% 100%
src/operations/sequences/shared.ts 78.57% 68.75% 100% 78.57% 41, 43-44, 49-50, 63-64, 69-70
src/operations/tables/addColumns.ts 100% 80% 100% 100%
src/operations/tables/addConstraint.ts 100% 100% 100% 100%
src/operations/tables/alterColumn.ts 89.33% 77.77% 100% 89.33% 69, 76-83
src/operations/tables/alterTable.ts 100% 100% 100% 100%
src/operations/tables/createTable.ts 88.52% 76.47% 100% 88.52% 50-54, 86-87
src/operations/tables/dropColumns.ts 100% 100% 100% 100%
src/operations/tables/dropConstraint.ts 100% 100% 100% 100%
src/operations/tables/dropTable.ts 100% 100% 100% 100%
src/operations/tables/index.ts 100% 100% 100% 100%
src/operations/tables/renameColumn.ts 100% 100% 100% 100%
src/operations/tables/renameConstraint.ts 100% 100% 100% 100%
src/operations/tables/renameTable.ts 100% 100% 100% 100%
src/operations/tables/shared.ts 83.15% 81.53% 80% 83.15% 155-156, 209-213, 239-240, 259-260, 285-286, 289-296, 299-300, 437-462
src/operations/triggers/createTrigger.ts 86.25% 68.18% 100% 86.25% 53-54, 66-67, 70-71, 74-77, 113
src/operations/triggers/dropTrigger.ts 100% 100% 100% 100%
src/operations/triggers/index.ts 100% 100% 100% 100%
src/operations/triggers/renameTrigger.ts 100% 100% 100% 100%
src/operations/triggers/shared.ts 100% 100% 100% 100%
src/operations/types/addTypeAttribute.ts 100% 100% 100% 100%
src/operations/types/addTypeValue.ts 100% 100% 100% 100%
src/operations/types/createType.ts 100% 100% 100% 100%
src/operations/types/dropType.ts 100% 100% 100% 100%
src/operations/types/dropTypeAttribute.ts 100% 100% 100% 100%
src/operations/types/index.ts 100% 100% 100% 100%
src/operations/types/renameType.ts 100% 100% 100% 100%
src/operations/types/renameTypeAttribute.ts 100% 100% 100% 100%
src/operations/types/renameTypeValue.ts 100% 100% 100% 100%
src/operations/types/setTypeAttribute.ts 100% 100% 100% 100%
src/operations/views/alterView.ts 100% 100% 100% 100%
src/operations/views/alterViewColumn.ts 100% 100% 100% 100%
src/operations/views/createView.ts 100% 100% 100% 100%
src/operations/views/dropView.ts 100% 100% 100% 100%
src/operations/views/index.ts 100% 100% 100% 100%
src/operations/views/renameView.ts 100% 100% 100% 100%
src/operations/views/shared.ts 100% 66.66% 100% 100%
src/utils/PgLiteral.ts 90.47% 100% 80% 90.47% 44-45
src/utils/StringIdGenerator.ts 100% 100% 100% 100%
src/utils/createSchemalize.ts 100% 100% 100% 100%
src/utils/createTransformer.ts 100% 100% 100% 100%
src/utils/decamelize.ts 100% 100% 100% 100%
src/utils/escapeValue.ts 100% 100% 100% 100%
src/utils/formatLines.ts 100% 100% 100% 100%
src/utils/formatParams.ts 100% 100% 100% 100%
src/utils/formatPartitionColumns.ts 100% 100% 100% 100%
src/utils/getMigrationTableSchema.ts 100% 100% 100% 100%
src/utils/getSchemas.ts 100% 100% 100% 100%
src/utils/identity.ts 100% 100% 100% 100%
src/utils/index.ts 100% 100% 100% 100%
src/utils/intersection.ts 100% 100% 100% 100%
src/utils/makeComment.ts 100% 100% 100% 100%
src/utils/quote.ts 100% 100% 100% 100%
src/utils/toArray.ts 100% 100% 100% 100%
src/utils/types.ts 100% 100% 100% 100%
Generated in workflow #1737 for commit 33a0f48 by the Vitest Coverage Report Action

@wenerme wenerme force-pushed the features/expose-builder branch from 25573f2 to 9df3929 Compare October 10, 2024 03:53
@Shinigami92 Shinigami92 added c: feature Request for new feature p: 1-normal Nothing urgent labels Oct 13, 2024
@Shinigami92 Shinigami92 added this to the v7.x milestone Oct 13, 2024
@Shinigami92
Copy link
Collaborator

Sorry for the late response, but life... you know

What is the purpose of this PR? You wrote about not having file accesses. Potentially we need to go another route and provide an option to not write files and just output to stdio for example 🤔

Also we definitely need tests...

@wenerme
Copy link
Contributor Author

wenerme commented Nov 5, 2024

I want to use node-pg-migrate as dsl builder instead migration tool

  1. I want to get the sql and provide the sql to knex/kysely, let them execute the migration
  2. I want to get the final sql as a reference, instead of the dsl in code

@wenerme wenerme force-pushed the features/expose-builder branch from 9df3929 to b9a601d Compare November 5, 2024 08:01
Copy link
Collaborator

@Shinigami92 Shinigami92 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I cannot accept this PR right now, because it exposes something fully new I personally don't want to maintain in the long run. Also it would throw errors on a second run when e.g. a select/query would get executed, like calling for a lock.

We would need to implement it in a totally different like adding a new option parameter to RunnerOption and then use the logger to do something like a dry-run.

export async function runner(options: RunnerOption): Promise<RunMigration[]> {

runner is getting also called from the CLI, so that would also then be a new option to the CLI.

@wenerme
Copy link
Contributor Author

wenerme commented Nov 12, 2024

Would it make sense to expose this under unstable_createMigrationBuilder and return MigrationBuilder instead of MigrationBuilderImpl for now? If a dry-run mode is implemented for the runner, the builder could later incorporate additional methods for SQL generation. Feel free to close this issue if you feel the timing isn’t right.

@Shinigami92
Copy link
Collaborator

I don't feel safe with that approach. Even unstable would be used and required some day and depend on.
I personally don't like to expose MigrationBuilderImpl because it could be renamed to MigrationBuilder (like the interface right now) in a later major and merged with it's interface.

What I could suggest right now as a quick solution for you:
try out patch-package and patch node-pg-migrate by exposing MigrationBuilderImpl and then write the createMigrationBuilder in your own codebase.

I know this is an unsatisfying solution, but it is a solution 😅

@Shinigami92 Shinigami92 force-pushed the features/expose-builder branch from b9a601d to 33a0f48 Compare March 1, 2025 12:44
@Shinigami92 Shinigami92 changed the title feat: expose createMigrationBuilder to allow using this lib as sql builder feat: expose MigrationBuilder to allow using as sql builder Mar 1, 2025
@Shinigami92 Shinigami92 modified the milestones: v7.x, v8.0 Mar 1, 2025
@Shinigami92 Shinigami92 merged commit cb4ee2b into salsita:main Mar 1, 2025
36 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c: feature Request for new feature p: 1-normal Nothing urgent
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Expose migration builder impl, make node-pg-migrate can used as a schema builder library
2 participants