`introspect` fails on SQLite
janpio opened this issue · comments
prisma/schema.prisma
:
datasource db {
provider = "sqlite"
url = "sqlite:./../1093.db"
}
generator client {
provider = "prisma-client-js"
}
Zipped 1093.db
file to put in root of project:
1093.zip
(originally via #1093 (comment))
When I run prisma2 introspect
I get this:
C:\Users\Jan\Documents\throwaway\1093>prisma2 introspect
Introspecting based on datasource defined in prisma\schema.prisma …
Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
at doWrite (_stream_writable.js:413:19)
at writeOrBuffer (_stream_writable.js:401:5)
at Socket.Writable.write (_stream_writable.js:301:11)
at C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\build\index.js:2:884310
at new Promise (<anonymous>)
at IntrospectionEngine.<anonymous> (C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\build\index.js:2:883015)
at Generator.next (<anonymous>)
at fulfilled (C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\build\index.js:2:877318)
at processTicksAndRejections (internal/process/task_queues.js:85:5)
ERROR Oops, an unexpected error occured!
[src\libcore\option.rs:1188:5] to
More info:
C:\Users\Jan\Documents\throwaway\1093>set DEBUG=*
C:\Users\Jan\Documents\throwaway\1093>prisma2 introspect
prisma .env loaded from ./prisma/.env +0ms
getos { platform: 'win32', libssl: undefined } +0ms
cleanupCache Error: ENOENT: no such file or directory, scandir 'C:\Users\Jan\AppData\Roaming\Prisma\alpha' +0ms
download Setting binary path for query-engine windows to C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\query-engine-windows.exe +0ms
download Setting binary path for migration-engine windows to C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\migration-engine-windows.exe +1ms
download Setting binary path for introspection-engine windows to C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\introspection-engine-windows.exe +1ms
Introspecting based on datasource defined in prisma\schema.prisma …
getos { platform: 'win32', libssl: undefined } +47ms
IntrospectionEngine:rpc starting introspection engine with binary: C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\introspection-engine-windows.exe +0ms
IntrospectionEngine:rpc SENDING RPC CALL {"id":1,"jsonrpc":"2.0","method":"introspect","params":[{"schema":"// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ndatasource db {\n provider = \"sqlite\"\n
url = \"sqlite:./../1093.db\"\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n}\n"}]} +14ms
IntrospectionEngine:stderr {"is_panic":true,"message":"[src\\libcore\\option.rs:1188:5] to","backtrace":" 0: backtrace::backtrace::trace\n 1: backtrace::capture::Backtrace::new\n 2: user_facing_errors::Error::new_in_panic_hook\n 3: user_facing_errors::panic_hook::set_panic_hook::{{closure}}\n 4: std::panicking::rust_panic_with_hook\n at src\\libstd/panicking.rs:475\n 5: rust_begin_unwind\n at src\\libstd/panicking.rs:375\n 6: core::panicking::panic_fmt\n at src\\libcore/panicking.rs:84\n 7: core::option::expect_failed\n at src\\libcore/option.rs:1188\n 8: sql_schema_describer::sqlite::SqlSchemaDescriber::get_table::{{closure}}\n 9: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 10: std::future::poll_with_tls_context\n 11: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 12: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 13: <futures_util::compat::compat03as01::Compat<Fut> as futures::future::Future>::poll\n 14: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 15: <futures::future::map_err::MapErr<A,F> as futures::future::Future>::poll\n 16: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 17: <futures::future::lazy::Lazy<F,R> as futures::future::Future>::poll\n 18: futures::future::chain::Chain<A,B,C>::poll\n 19: <futures::future::then::Then<A,B,F> as futures::future::Future>::poll\n 20: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 21: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 22: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 23: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 24: futures::task_impl::std::set\n 25: <futures_util::compat::compat01as03::Compat01As03<Fut> as core::future::future::Future>::poll\n 26: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 27: tokio::runtime::enter::Enter::block_on\n 28: tokio::runtime::thread_pool::ThreadPool::block_on\n 29: tokio::runtime::context::enter\n 30: tokio::runtime::handle::Handle::enter\n 31: introspection_engine::main\n 32: std::rt::lang_start::{{closure}}\n 33: std::rt::lang_start_internal::{{closure}}\n at src\\libstd/rt.rs:52\n std::panicking::try::do_call\n at src\\libstd/panicking.rs:292\n 34: __rust_maybe_catch_panic\n at src\\libpanic_unwind/lib.rs:78\n 35: std::panicking::try\n at src\\libstd/panicking.rs:270\n std::panic::catch_unwind\n
at src\\libstd/panic.rs:394\n std::rt::lang_start_internal\n at src\\libstd/rt.rs:51\n 36: main\n 37: _tmainCRTStartup\n 38: mainCRTStartup\n 39: sqlite3GenerateConstraintChecks\n 40: sqlite3GenerateConstraintChecks\n"} +0ms
IntrospectionEngine:rpc SENDING RPC CALL {"id":2,"jsonrpc":"2.0","method":"getDatabaseDescription","params":[{"schema":"// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ndatasource db {\n provider = \"sqlite\"\n url = \"sqlite:./../1093.db\"\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n}\n"}]} +92ms
Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
at doWrite (_stream_writable.js:413:19)
at writeOrBuffer (_stream_writable.js:401:5)
at Socket.Writable.write (_stream_writable.js:301:11)
at C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\build\index.js:2:884310
at new Promise (<anonymous>)
at IntrospectionEngine.<anonymous> (C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\build\index.js:2:883015)
at Generator.next (<anonymous>)
at fulfilled (C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\build\index.js:2:877318)
at processTicksAndRejections (internal/process/task_queues.js:85:5)
IntrospectionEngine:stdin Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
IntrospectionEngine:stdin at doWrite (_stream_writable.js:413:19)
IntrospectionEngine:stdin at writeOrBuffer (_stream_writable.js:401:5)
IntrospectionEngine:stdin at Socket.Writable.write (_stream_writable.js:301:11)
IntrospectionEngine:stdin at C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\build\index.js:2:884310
IntrospectionEngine:stdin at new Promise (<anonymous>)
IntrospectionEngine:stdin at IntrospectionEngine.<anonymous> (C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\build\index.js:2:883015)
IntrospectionEngine:stdin at Generator.next (<anonymous>)
IntrospectionEngine:stdin at fulfilled (C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\build\index.js:2:877318)
IntrospectionEngine:stdin at processTicksAndRejections (internal/process/task_queues.js:85:5) +0ms
ERROR Oops, an unexpected error occured!
[src\libcore\option.rs:1188:5] to
(preview 22 on Windows, but Harshit could reproduce on other platform)
I can reproduce Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
It looks like the error is from the introspection engine, here is the SQL for this database from sqlite3 prisma/1093.db .dump > 1093.sql
When I create a new sqlite database from this .sql I get the same error.
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "Group"
(
id integer not null
primary key autoincrement,
name varchar(255)
);
CREATE TABLE User
(
id integer not null
primary key autoincrement,
email varchar(255) not null,
password varchar(255) not null,
created_at datetime,
updated_at datetime
);
CREATE TABLE GroupToUser
(
user_id integer
references User,
group_id integer
references "Group"
);
DELETE FROM sqlite_sequence;
COMMIT;
I think "Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed" is a follow up error when the Engine crashes. We might want to handle that better - you have a nice reproduction here ;)
With DEBUG on here is the PANIC message (at the end)
From alpha 907
j42@Pluto ~/D/repro-prisma2-1648-sqlitedb-introspect> env DEBUG="*" npx prisma2@alpha introspect
getos { platform: 'darwin', libssl: undefined } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/377df4fe30aa992f13f1ba152cf83d5770bdbc85/darwin/query-engine'
download } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/377df4fe30aa992f13f1ba152cf83d5770bdbc85/darwin/migration-engine'
download } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/377df4fe30aa992f13f1ba152cf83d5770bdbc85/darwin/introspection-engine'
download } +0ms
download { needsToBeDownloaded: false } +38ms
download { needsToBeDownloaded: false } +8ms
download { needsToBeDownloaded: false } +3ms
prisma .env not loaded +0ms
getos { platform: 'darwin', libssl: undefined } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/377df4fe30aa992f13f1ba152cf83d5770bdbc85/darwin/query-engine'
download } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/377df4fe30aa992f13f1ba152cf83d5770bdbc85/darwin/migration-engine'
download } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/377df4fe30aa992f13f1ba152cf83d5770bdbc85/darwin/introspection-engine'
download } +0ms
download { cachedFileSize: 16221152, targetFileSize: 16221152 } +1ms
download { cachedFileSize: 14601456, targetFileSize: 14601456 } +6ms
download { cachedFileSize: 10950528, targetFileSize: 10950528 } +3ms
download Getting version of /Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/query-engine-darwin. Result: {
command: '/Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/query-engine-darwin --version',
exitCode: 0,
stdout: 'prisma 377df4fe30aa992f13f1ba152cf83d5770bdbc85',
stderr: '',
all: undefined,
failed: false,
timedOut: false,
isCanceled: false,
killed: false
} +152ms
download Getting version of /Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/query-engine-darwin. Result: prisma 377df4fe30aa992f13f1ba152cf83d5770bdbc85 +1ms
download { works: true } +0ms
download { needsToBeDownloaded: false } +0ms
download Getting version of /Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/migration-engine-darwin. Result: {
command: '/Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/migration-engine-darwin --version',
exitCode: 0,
stdout: 'migration-engine-cli 377df4fe30aa992f13f1ba152cf83d5770bdbc85',
stderr: '',
all: undefined,
failed: false,
timedOut: false,
isCanceled: false,
killed: false
} +121ms
download Getting version of /Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/migration-engine-darwin. Result: migration-engine-cli 377df4fe30aa992f13f1ba152cf83d5770bdbc85 +0ms
download { works: true } +0ms
download { needsToBeDownloaded: false } +0ms
download Getting version of /Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/introspection-engine-darwin. Result: {
command: '/Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/introspection-engine-darwin --version',
exitCode: 0,
stdout: 'introspection-core 377df4fe30aa992f13f1ba152cf83d5770bdbc85',
stderr: '',
all: undefined,
failed: false,
timedOut: false,
isCanceled: false,
killed: false
} +98ms
download Getting version of /Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/introspection-engine-darwin. Result: introspection-core 377df4fe30aa992f13f1ba152cf83d5770bdbc85 +0ms
download { works: true } +0ms
download { needsToBeDownloaded: false } +0ms
Introspecting based on datasource defined in prisma/schema.prisma …
getos { platform: 'darwin', libssl: undefined } +388ms
IntrospectionEngine:rpc starting introspection engine with binary: /Users/j42/.npm/_npx/37584/lib/node_modules/prisma2/introspection-engine-darwin +0ms
IntrospectionEngine:rpc SENDING RPC CALL {"id":1,"jsonrpc":"2.0","method":"introspect","params":[{"schema":"datasource db {\n provider = \"sqlite\"\n // url = \"sqlite:./1093.db\"\n url = \"sqlite:./1093import.db\"\n // url = \"sqlite:./1233.db\"\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n}"}]} +4ms
IntrospectionEngine:stderr {"is_panic":true,"message":"[src/libcore/option.rs:1188:5] to","backtrace":" 0: backtrace::backtrace::trace\n 1: backtrace::capture::Backtrace::new\n 2: user_facing_errors::Error::new_in_panic_hook\n 3: user_facing_errors::panic_hook::set_panic_hook::{{closure}}\n 4: std::panicking::rust_panic_with_hook\n 5: rust_begin_unwind\n 6: core::panicking::panic_fmt\n 7: core::option::expect_failed\n 8: sql_schema_describer::sqlite::SqlSchemaDescriber::get_table::{{closure}}\n 9: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 10: std::future::poll_with_tls_context\n 11: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 12: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 13: <futures_util::compat::compat03as01::Compat<Fut> as futures::future::Future>::poll\n 14: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 15: <futures::future::map_err::MapErr<A,F> as futures::future::Future>::poll\n 16: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 17: <futures::future::lazy::Lazy<F,R> as futures::future::Future>::poll\n 18: futures::future::chain::Chain<A,B,C>::poll\n 19: <futures::future::then::Then<A,B,F> as futures::future::Future>::poll\n 20: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 21: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 22: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 23: futures::task_impl::std::set\n 24: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 25: tokio::runtime::enter::Enter::block_on\n 26: tokio::runtime::context::enter\n 27: tokio::runtime::handle::Handle::enter\n 28: introspection_engine::main\n 29: std::rt::lang_start::{{closure}}\n 30: std::panicking::try::do_call\n 31: __rust_maybe_catch_panic\n 32: std::rt::lang_start_internal\n 33: main\n"} +0ms
ERROR Oops, an unexpected error occured!
[src/libcore/option.rs:1188:5] to
Please help us improve Prisma 2 by submitting an error report.
Error reports never contain personal or other sensitive information.
Learn more: https://pris.ly/d/telemetry
The output changed on alpha 927, I see "libs/sql-schema-describer/src/sqlite.rs:309:37" that wasn't there before.
env DEBUG="*" npx prisma2@alpha introspect > test2.log
getos { platform: 'darwin', libssl: undefined } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/a50009b3729b0c9187c88c8cf6cebd268881c9bb/darwin/query-engine'
download } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/a50009b3729b0c9187c88c8cf6cebd268881c9bb/darwin/migration-engine'
download } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/a50009b3729b0c9187c88c8cf6cebd268881c9bb/darwin/introspection-engine'
download } +1ms
download { needsToBeDownloaded: false } +33ms
download { needsToBeDownloaded: false } +8ms
download { needsToBeDownloaded: false } +3ms
prisma2:download Error: ENOENT: no such file or directory, unlink '/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/download-lock'
prisma2:download at Object.unlinkSync (fs.js:1035:3)
prisma2:download at cleanupLockFile (/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/download-build/index.js:1:73091)
prisma2:download at process.<anonymous> (/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/download-build/index.js:1:74109)
prisma2:download at process.emit (events.js:223:5) +0ms
prisma .env not loaded +0ms
getos { platform: 'darwin', libssl: undefined } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/a50009b3729b0c9187c88c8cf6cebd268881c9bb/darwin/query-engine'
download } +0ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/a50009b3729b0c9187c88c8cf6cebd268881c9bb/darwin/migration-engine'
download } +1ms
download {
download cachedFile: '/Users/j42/.cache/prisma/master/a50009b3729b0c9187c88c8cf6cebd268881c9bb/darwin/introspection-engine'
download } +0ms
download { cachedFileSize: 16390640, targetFileSize: 16390640 } +0ms
download { cachedFileSize: 14694784, targetFileSize: 14694784 } +6ms
download { cachedFileSize: 11045144, targetFileSize: 11045144 } +3ms
download Getting version of /Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/query-engine-darwin. Result: {
command: '/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/query-engine-darwin --version',
exitCode: 0,
stdout: 'prisma a50009b3729b0c9187c88c8cf6cebd268881c9bb',
stderr: '',
all: undefined,
failed: false,
timedOut: false,
isCanceled: false,
killed: false
} +201ms
download Getting version of /Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/query-engine-darwin. Result: prisma a50009b3729b0c9187c88c8cf6cebd268881c9bb +0ms
download { works: true } +0ms
download { needsToBeDownloaded: false } +0ms
download Getting version of /Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/migration-engine-darwin. Result: {
command: '/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/migration-engine-darwin --version',
exitCode: 0,
stdout: 'migration-engine-cli a50009b3729b0c9187c88c8cf6cebd268881c9bb',
stderr: '',
all: undefined,
failed: false,
timedOut: false,
isCanceled: false,
killed: false
} +125ms
download Getting version of /Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/migration-engine-darwin. Result: migration-engine-cli a50009b3729b0c9187c88c8cf6cebd268881c9bb +0ms
download { works: true } +1ms
download { needsToBeDownloaded: false } +0ms
download Getting version of /Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/introspection-engine-darwin. Result: {
command: '/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/introspection-engine-darwin --version',
exitCode: 0,
stdout: 'introspection-core a50009b3729b0c9187c88c8cf6cebd268881c9bb',
stderr: '',
all: undefined,
failed: false,
timedOut: false,
isCanceled: false,
killed: false
} +159ms
download Getting version of /Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/introspection-engine-darwin. Result: introspection-core a50009b3729b0c9187c88c8cf6cebd268881c9bb +0ms
download { works: true } +0ms
download { needsToBeDownloaded: false } +0ms
getos { platform: 'darwin', libssl: undefined } +502ms
IntrospectionEngine:rpc starting introspection engine with binary: /Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/introspection-engine-darwin +0ms
IntrospectionEngine:rpc SENDING RPC CALL {"id":1,"jsonrpc":"2.0","method":"introspect","params":[{"schema":"datasource db {\n provider = \"sqlite\"\n url = \"sqlite:./1093.db\"\n // url = \"sqlite:./1093import.db\"\n // url = \"sqlite:./1233.db\"\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n}"}]} +4ms
IntrospectionEngine:stderr {"is_panic":true,"message":"[libs/sql-schema-describer/src/sqlite.rs:309:37] to","backtrace":" 0: backtrace::backtrace::trace\n 1: backtrace::capture::Backtrace::new\n 2: user_facing_errors::Error::new_in_panic_hook\n 3: user_facing_errors::panic_hook::set_panic_hook::{{closure}}\n 4: std::panicking::rust_panic_with_hook\n 5: rust_begin_unwind\n 6: core::panicking::panic_fmt\n 7: core::option::expect_failed\n 8: sql_schema_describer::sqlite::SqlSchemaDescriber::get_table::{{closure}}\n 9: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 10: std::future::poll_with_tls_context\n 11: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 12: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 13: <futures_util::compat::compat03as01::Compat<Fut> as futures::future::Future>::poll\n 14: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 15: <futures::future::map_err::MapErr<A,F> as futures::future::Future>::poll\n 16: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 17: <futures::future::lazy::Lazy<F,R> as futures::future::Future>::poll\n 18: futures::future::chain::Chain<A,B,C>::poll\n 19: <futures::future::then::Then<A,B,F> as futures::future::Future>::poll\n 20: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 21: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 22: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 23: futures::task_impl::std::set\n 24: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 25: tokio::runtime::enter::Enter::block_on\n 26: tokio::runtime::context::enter\n 27: tokio::runtime::handle::Handle::enter\n 28: introspection_engine::main\n 29: std::rt::lang_start::{{closure}}\n 30: std::panicking::try::do_call\n 31: __rust_maybe_catch_panic\n 32: std::rt::lang_start_internal\n 33: main\n"} +0ms
Error: Error: [libs/sql-schema-describer/src/sqlite.rs:309:37] to
at ChildProcess.<anonymous> (/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/build/index.js:2:1297485)
at ChildProcess.emit (events.js:223:5)
at ChildProcess.EventEmitter.emit (domain.js:475:20)
at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)
prisma Error: Can't execute {"id":2,"jsonrpc":"2.0","method":"getDatabaseDescription","params":[{"schema":"datasource db {\n provider = \"sqlite\"\n url = \"sqlite:./1093.db\"\n // url = \"sqlite:./1093import.db\"\n // url = \"sqlite:./1233.db\"\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n}"}]} because introspection engine is destroyed.
prisma at /Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/build/index.js:2:1300056
prisma at new Promise (<anonymous>)
prisma at IntrospectionEngine.<anonymous> (/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/build/index.js:2:1298790)
prisma at Generator.next (<anonymous>)
prisma at fulfilled (/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/build/index.js:2:1293093)
prisma at processTicksAndRejections (internal/process/task_queues.js:94:5) +550ms
Unrelated:
prisma2:download Error: ENOENT: no such file or directory, unlink '/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/download-lock'
prisma2:download at Object.unlinkSync (fs.js:1035:3)
prisma2:download at cleanupLockFile (/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/download-build/index.js:1:73091)
prisma2:download at process. (/Users/j42/.npm/_npx/1060/lib/node_modules/prisma2/download-build/index.js:1:74109)
prisma2:download at process.emit (events.js:223:5) +0ms
Is this a problem caused by unrelated changes form @timsuchanek ? If so, please create a new issue for this @Jolg42
@janpio this download-lock
is something Tim added to avoid concurrency problems, it's not really an issue here. It means that there was not lock when the cleanup function was called.
I just changed it to check if the file exists before doing unlink to avoid this noisy message.
Introspecting the SQL from #1648 (comment) I now got an error prompt:
https://prisma-errors.netlify.com/report/2289
With DEBUG=*
I get this output now:
C:\Users\Jan\Documents\throwaway\1648>prisma2 introspect
prisma .env loaded from ./prisma/.env +0ms
getos { platform: 'win32', libssl: undefined } +0ms
download Getting version of C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\query-engine-windows.exe. Result: {
command: 'C:\\ProgramData\\nvm\\v12.6.0\\node_modules\\prisma2\\query-engine-windows.exe --version',
exitCode: 0,
stdout: 'prisma 00c64c12cd73d8943c479d708b3a73003d611413',
stderr: '',
all: undefined,
failed: false,
timedOut: false,
isCanceled: false,
killed: false
} +0ms
download Getting version of C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\query-engine-windows.exe. Result: prisma 00c64c12cd73d8943c479d708b3a73003d611413 +5ms
download { works: true } +1ms
download { needsToBeDownloaded: false } +0ms
download Getting version of C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\migration-engine-windows.exe. Result: {
command: 'C:\\ProgramData\\nvm\\v12.6.0\\node_modules\\prisma2\\migration-engine-windows.exe --version',
exitCode: 0,
stdout: 'migration-engine-cli 00c64c12cd73d8943c479d708b3a73003d611413',
stderr: '',
all: undefined,
failed: false,
timedOut: false,
isCanceled: false,
killed: false
} +5ms
download Getting version of C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\migration-engine-windows.exe. Result: migration-engine-cli 00c64c12cd73d8943c479d708b3a73003d611413 +25ms
download { works: true } +1ms
download { needsToBeDownloaded: false } +1ms
download Getting version of C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\introspection-engine-windows.exe. Result: {
command: 'C:\\ProgramData\\nvm\\v12.6.0\\node_modules\\prisma2\\introspection-engine-windows.exe --version',
exitCode: 0,
stdout: 'introspection-core 00c64c12cd73d8943c479d708b3a73003d611413',
stderr: '',
all: undefined,
failed: false,
timedOut: false,
isCanceled: false,
killed: false
} +2ms
download Getting version of C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\introspection-engine-windows.exe. Result: introspection-core 00c64c12cd73d8943c479d708b3a73003d611413 +4ms
download { works: true } +1ms
download { needsToBeDownloaded: false } +0ms
Introspecting based on datasource defined in prisma\schema.prisma …
getos { platform: 'win32', libssl: undefined } +167ms
IntrospectionEngine:rpc starting introspection engine with binary: C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\introspection-engine-windows.exe +0ms
IntrospectionEngine:rpc SENDING RPC CALL {"id":1,"jsonrpc":"2.0","method":"introspect","params":[{"schema":"// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ndatasource db {\n provider = \"sqlite\"\n url = \"file:dev.db\"\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n}\n"}]} +7ms
IntrospectionEngine:stderr {"is_panic":true,"message":"[libs/sql-schema-describer/src/sqlite.rs:309:37] to","backtrace":" 0: backtrace::backtrace::trace\n 1: backtrace::capture::Backtrace::new\n 2: user_facing_errors::Error::new_in_panic_hook\n 3: user_facing_errors::panic_hook::set_panic_hook::{{closure}}\n 4: std::panicking::rust_panic_with_hook\n
at src\\libstd/panicking.rs:476\n 5: rust_begin_unwind\n at src\\libstd/panicking.rs:380\n 6: core::panicking::panic_fmt\n at src\\libcore/panicking.rs:85\n 7: core::option::expect_failed\n at src\\libcore/option.rs:1191\n 8: sql_schema_describer::sqlite::SqlSchemaDescriber::get_table::{{closure}}\n 9: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 10: std::future::poll_with_tls_context\n 11: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 12: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 13: <futures_util::compat::compat03as01::Compat<Fut> as futures::future::Future>::poll\n 14: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 15: <futures::future::map_err::MapErr<A,F> as futures::future::Future>::poll\n 16: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 17: <futures::future::lazy::Lazy<F,R> as futures::future::Future>::poll\n 18: futures::future::chain::Chain<A,B,C>::poll\n 19: <futures::future::then::Then<A,B,F> as futures::future::Future>::poll\n 20: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 21: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 22: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 23: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 24: futures::task_impl::std::set\n 25: <futures_util::compat::compat01as03::Compat01As03<Fut> as core::future::future::Future>::poll\n 26: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 27: tokio::runtime::enter::Enter::block_on\n 28: tokio::runtime::context::enter\n 29: tokio::runtime::Runtime::block_on\n 30: introspection_engine::main\n 31: std::rt::lang_start::{{closure}}\n 32: std::rt::lang_start_internal::{{closure}}\n at src\\libstd/rt.rs:52\n std::panicking::try::do_call\n at src\\libstd/panicking.rs:305\n 33: __rust_maybe_catch_panic\n at src\\libpanic_unwind/lib.rs:86\n 34: std::panicking::try\n at src\\libstd/panicking.rs:281\n std::panic::catch_unwind\n at src\\libstd/panic.rs:394\n std::rt::lang_start_internal\n at src\\libstd/rt.rs:51\n 35: main\n 36: _tmainCRTStartup\n 37: mainCRTStartup\n 38: sqlite3GenerateConstraintChecks\n 39: sqlite3GenerateConstraintChecks\n"} +0ms
ERROR Oops, an unexpected error occured!
Please help us improve Prisma 2 by submitting an error report.
Error reports never contain personal or other sensitive information.
Learn more: https://pris.ly/d/telemetry
┌─ Submit error report ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ > Yes Send error report once │
│ No Don't send error report │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
ERROR Oops, an unexpected error occured!
Please help us improve Prisma 2 by submitting an error report.
Error reports never contain personal or other sensitive information.
Learn more: https://pris.ly/d/telemetry
┌─ Submit error report ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ Yes Send error report once │
│ > No Don't send error report │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Relevant bit:
C:\ProgramData\nvm\v12.6.0\node_modules\prisma2\introspection-engine-windows.exe +0ms
IntrospectionEngine:rpc SENDING RPC CALL {"id":1,"jsonrpc":"2.0","method":"introspect","params":[{"schema":"// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ndatasource db {\n provider = \"sqlite\"\n url = \"file:dev.db\"\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n}\n"}]} +7ms
IntrospectionEngine:stderr {"is_panic":true,"message":"[libs/sql-schema-describer/src/sqlite.rs:309:37] to","backtrace":" 0: backtrace::backtrace::trace\n 1: backtrace::capture::Backtrace::new\n 2: user_facing_errors::Error::new_in_panic_hook\n 3: user_facing_errors::panic_hook::set_panic_hook::{{closure}}\n 4: std::panicking::rust_panic_with_hook\n
at src\\libstd/panicking.rs:476\n 5: rust_begin_unwind\n at src\\libstd/panicking.rs:380\n 6: core::panicking::panic_fmt\n at src\\libcore/panicking.rs:85\n 7: core::option::expect_failed\n at src\\libcore/option.rs:1191\n 8: sql_schema_describer::sqlite::SqlSchemaDescriber::get_table::{{closure}}\n 9: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 10: std::future::poll_with_tls_context\n 11: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 12: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 13: <futures_util::compat::compat03as01::Compat<Fut> as futures::future::Future>::poll\n 14: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 15: <futures::future::map_err::MapErr<A,F> as futures::future::Future>::poll\n 16: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 17: <futures::future::lazy::Lazy<F,R> as futures::future::Future>::poll\n 18: futures::future::chain::Chain<A,B,C>::poll\n 19: <futures::future::then::Then<A,B,F> as futures::future::Future>::poll\n 20: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 21: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 22: <futures::future::either::Either<A,B> as futures::future::Future>::poll\n 23: <futures::future::map::Map<A,F> as futures::future::Future>::poll\n 24: futures::task_impl::std::set\n 25: <futures_util::compat::compat01as03::Compat01As03<Fut> as core::future::future::Future>::poll\n 26: <std::future::GenFuture<T> as core::future::future::Future>::poll\n 27: tokio::runtime::enter::Enter::block_on\n 28: tokio::runtime::context::enter\n 29: tokio::runtime::Runtime::block_on\n 30: introspection_engine::main\n 31: std::rt::lang_start::{{closure}}\n 32: std::rt::lang_start_internal::{{closure}}\n at src\\libstd/rt.rs:52\n std::panicking::try::do_call\n at src\\libstd/panicking.rs:305\n 33: __rust_maybe_catch_panic\n at src\\libpanic_unwind/lib.rs:86\n 34: std::panicking::try\n at src\\libstd/panicking.rs:281\n std::panic::catch_unwind\n at src\\libstd/panic.rs:394\n std::rt::lang_start_internal\n at src\\libstd/rt.rs:51\n 35: main\n 36: _tmainCRTStartup\n 37: mainCRTStartup\n 38: sqlite3GenerateConstraintChecks\n 39: sqlite3GenerateConstraintChecks\n"} +0ms
(Much better formatted in the error report link above)
I haven't managed to get a readable error from the JS cli, but running the introspection engine directly, I get Error: Some(Object({"is_panic": Bool(false), "message": String("The introspected database was empty: sqlite:./../1093.db"), "meta": Object({"connection_string": String("sqlite:./../1093.db")}), "error_code": String("P4001")}))
(with the database from the .zip Jan posted in the description), so it looks like this should be reported as a known error?
This was caused by a shortcut in the Sqlite foreign key definition btw.
They allow you to write:
userid Int References user
instead of userid Int References user(id)
Unfortunately the meta information calls then don't automatically provide the Information about the referenced column which caused the crash. This is now being handled.
Awesome @do4gr 🚀