aurora icon indicating copy to clipboard operation
aurora copied to clipboard

Unable to use Decimal @db.Money without including datasource in the partial schema file

Open rickdoesdev opened this issue 2 years ago • 2 comments

If I have a column type of Decimal @db.Money in one of the schemas I'm importing in my aurora.config.json to merge, I get a panic from rust

To Reproduce Steps to reproduce the behavior:

  1. Create prisma/base.prisma with contents:
datasource db {
  provider = "postgres"
  url      = env("DATABASE_URL")
}
generator client {
  provider = "prisma-client-js"
}
  1. Create ./prisma/model.prisma with content:
model MyModel {
  id String @id @default(cuid())
  value Decimal @db.Money
}
  1. Create aurora.config.json with
  "files": [
    "./prisma/base.prisma",
    "./prisma/model.prisma"
  ],
  "output": "./prisma/schema.prisma"
}
  1. Run aurora
  2. See error
Error: Command failed with exit code 101: /mnt/hdd/cloud/projects/code/apps/test-app/node_modules/@prisma/sdk/node_modules/@prisma/engines/prisma-fmt-debian-openssl-1.1.x format
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: DatamodelError(InvalidNativeType { native_type: "Money", span: Span { start: 186, end: 210 } })', libs/datamodel/core/src/transform/ast_to_dml/lift.rs:484:26
stack backtrace:
   0: rust_begin_unwind
             at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:498:5
   1: core::panicking::panic_fmt
             at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/panicking.rs:116:14
   2: core::result::unwrap_failed
             at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/result.rs:1690:5
   3: datamodel::transform::ast_to_dml::lift::LiftAstToDml::lift_scalar_field_type
   4: datamodel::transform::ast_to_dml::lift::LiftAstToDml::lift
   5: datamodel::reformat::reformat
   6: prisma_fmt::format::run
   7: prisma_fmt::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    at makeError (/mnt/hdd/cloud/projects/code/apps/test-app/node_modules/execa/lib/error.js:60:11)
    at handlePromise (/mnt/hdd/cloud/projects/code/apps/test-app/node_modules/execa/index.js:118:26)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async formatSchema (/mnt/hdd/cloud/projects/code/apps/test-app/node_modules/@prisma/sdk/dist/engine-commands/formatSchema.js:57:14) {
  shortMessage: 'Command failed with exit code 101: /mnt/hdd/cloud/projects/code/apps/test-app/node_modules/@prisma/sdk/node_modules/@prisma/engines/prisma-fmt-debian-openssl-1.1.x format',
  command: '/mnt/hdd/cloud/projects/code/apps/test-app/node_modules/@prisma/sdk/node_modules/@prisma/engines/prisma-fmt-debian-openssl-1.1.x format',
  escapedCommand: '"/mnt/hdd/cloud/projects/code/apps/test-app/node_modules/@prisma/sdk/node_modules/@prisma/engines/prisma-fmt-debian-openssl-1.1.x" format',
  exitCode: 101,
  signal: undefined,
  signalDescription: undefined,
  stdout: '',
  stderr: 'thread \'main\' panicked at \'called `Result::unwrap()` on an `Err` value: DatamodelError(InvalidNativeType { native_type: "Money", span: Span { start: 186, end: 210 } })\', libs/datamodel/core/src/transform/ast_to_dml/lift.rs:484:26\n' +
    'stack backtrace:\n' +
    '   0: rust_begin_unwind\n' +
    '             at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:498:5\n' +
    '   1: core::panicking::panic_fmt\n' +
    '             at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/panicking.rs:116:14\n' +
    '   2: core::result::unwrap_failed\n' +
    '             at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/result.rs:1690:5\n' +
    '   3: datamodel::transform::ast_to_dml::lift::LiftAstToDml::lift_scalar_field_type\n' +
    '   4: datamodel::transform::ast_to_dml::lift::LiftAstToDml::lift\n' +
    '   5: datamodel::reformat::reformat\n' +
    '   6: prisma_fmt::format::run\n' +
    '   7: prisma_fmt::main\n' +
    'note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.',
  failed: true,
  timedOut: false,
  isCanceled: false,
  killed: false
} Aurora could not parse the schema at ./prisma/model.prisma. Please ensure it is of a proper format.

Expected behavior I expect the ./prisma/schema.prisma to be generated correctly

Desktop (please complete the following information):

  • OS: Linux
  • Version 5.16.12-arch1-1

tool version "prisma-aurora": "^1.3.5",

Additional context I can work around this by including a duplicate datasource db { provider = "postgres" url = env("DATABASE_URL") } into the second schema file, but it does mean I'm now having to declare this in every file that might be using this extended native type

rickdoesdev avatar Mar 18 '22 13:03 rickdoesdev

Whats up Rick, my work around is to put the @db.Money or @db.Text in the base.prisma of the destination and exclude it from the imported model.

synerp avatar Sep 21 '22 05:09 synerp

While that obviously works because it all winds up merged at the end, it's now breaking the clean boundaries of having data domains split out that lead to using aurora in the first place!

rickdoesdev avatar Oct 04 '22 05:10 rickdoesdev