Nepotistic Pontifex Maximus

    prisma-upgrade
    TypeScript icon, indicating that this package has built-in type declarations

    0.0.43 • Public • Published

    Prisma Upgrade

    Prisma Upgrade is a CLI tool to help Prisma 1 users using MySQL or Postgres to upgrade to Prisma 2.0.

    Scope

    We spent a lot of time on this tool and are happy with the results. It's well-tested and working as intended. It's not perfect though, so you may need to make some manual adjustments after upgrading to clean up your final Prisma 2 schema. See this issue for more details.

    We recommend you download the Prisma 2 VSCode extension to help with your transition.

    You should always run the SQL generated by this tool on your test or staging databases before running it on production.

    Usage

    $ npx prisma-upgrade

    See our documentation for more information about how to upgrade your Prisma 1 datamodel to Prisma 2.

    Current features

    This table reflects the current feature set of the upgrade CLI and will be updated continuously. Read below for a more detailled explanation of each column. You can also find more info about each of these feautures in the docs.

    Name MySQL PostgreSQL Prisma schema Prisma 1 compatible
    Default values Yes Yes Yes Yes
    Missing UNIQUE for inline 1-1 Yes Yes Yes Yes
    JSON Yes Yes Yes Yes
    Enums Yes Yes Yes Yes
    @createdAt Yes Yes Yes Yes
    Generated IDs with @default(cuid()) n/a n/a Yes Yes
    @updatedAt n/a n/a Yes Yes
    @map and @@map n/a n/a Yes Yes
    Maintain required 1-1-relations n/a n/a Yes Yes
    Maintain order of models and fields n/a n/a Not yet Yes
    Maintain relation names n/a n/a Not yet Yes
    Relation tables are all m-n Not yet Not yet Not yet No
    Scalar lists have extra table Not yet Not yet Not yet No
    Cascading deletes No No No No

    What do the columns mean?

    • MySQL: Does the CLI generate the correct MySQL statements to solve the problem?
    • PostgreSQL: Does the CLI generate correct PostgreSQL statements to solve the problem?
    • Prisma schema: Does the final Prisma schema I get from the CLI reflect the right solution?
    • Prisma 1 compatible: Does the SQL change to the schema maintain Prisma 1 compatibility?

    How Prisma Upgrade (Technically) Works

    We parse your Prisma 1 datamodel and your Prisma 2.0 schema and run both ASTs through a set of rules. These rules produce operations. The operations are printed into SQL commands for you to run on your database.

    Prisma upgrade is idempotent, so you can run it as many times as you want and it will produce the same result each time. Prisma upgrade only shows you commands you still need to run, it does not show you commands you've already run.

    You'll also notice that we never connect to your database, we simply look at your Prisma 1 files and your Prisma 2.0 schema and generate from there!

    Tests

    Testing consists of 2 parts: a Local SQL Dump and Running Tests

    Local SQL Dump

    Requirements: MySQL@5, Docker

    Since it's cumbersome to run Prisma 1 in CI, we need to locally setup test cases first

    Setting up MySQL for examples

    mysqladmin -h localhost -u root create prisma
    mysql -h localhost -u root prisma < ./examples/mysql-ablog/dump.sql
    mysqladmin -h localhost -u root drop prisma -f
    

    Development

    To add a new test, follow the following steps:

    1. Create a new folder with one of the following prefixes: postgres-, mysql-, postgres1- or mysql1-. Use postgres- and mysql- for Prisma Prisma 1.34, postgres1 and mysql1- for versions before that.
    2. Add a prisma.yml and datamodel.graphql
    3. Run node scripts/sqldump.js. This should product a dump.sql file and a schema.prisma.
    4. Add an expected.sql. This is the commands you expect to prisma-upgrade to guide you to do. Often, I first leave this blank, see what prisma-upgrade does and then tweak.
    5. Add an expected.prisma. This is the final state the schema should be in. Often, I first leave this blank, see what prisma-upgrade does and then tweak.

    Security

    If you have a security issue to report, please contact us at security@prisma.io

    Keywords

    none

    Install

    npm i prisma-upgrade

    DownloadsWeekly Downloads

    189

    Version

    0.0.43

    License

    ISC

    Unpacked Size

    148 kB

    Total Files

    21

    Last publish

    Collaborators

    • mattmueller