Jolg42 / repro-prisma-vitess-error

Repro for `text type with an unknown/unsupported collation cannot be hashed` https://prisma-company.slack.com/archives/C01CUJDJ7UN/p1691584127937129

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Reproduction steps

docker-compose up -d vitess-8

npm i

# First time works
RUST_LOG=debug DEBUG=* npx prisma db push --force-reset

# Second time should fail
RUST_LOG=debug DEBUG=* npx prisma db push --force-reset

The query running can be found in the logs below and in the source code at https://github.com/prisma/prisma-engines/blob/13663010eb768a16c965c83f98b9b563d4866a14/schema-engine/sql-schema-describer/src/mysql.rs#L289C8-L302 I tried to run it separately using mysql or TablePlus and could not reproduce the error. The error only appears when using our Rust, Schema engine.

Note that removing BINARY from the query fixes the issue, you can try this by changing the Prisma packages version from 5.1.1 to 5.2.0-integration-engines-5-2-0-14-joel-basedon-vitess-docker-image-version-update-5a2d26a26c5f7f7ca0deb9908246abfafd259a65.1 Here are the changes in the PR that produced that version prisma/prisma-engines#4130

Full logs

 prisma:engines  binaries to download libquery-engine, schema-engine +0ms
  prisma:loadEnv  project root found at /Users/j42/Repros/vitess/package.json +0ms
  prisma:tryLoadEnv  Environment variables not found at null +0ms
  prisma:tryLoadEnv  Environment variables not found at undefined +0ms
  prisma:tryLoadEnv  No Environment variables loaded +0ms
  prisma:getConfig  Using getConfig Wasm +0ms
  prisma:getConfig  config data retrieved without errors in getConfig Wasm +1ms
  prisma:loadEnv  project root found at /Users/j42/Repros/vitess/package.json +3ms
  prisma:tryLoadEnv  Environment variables not found at null +2ms
  prisma:tryLoadEnv  Environment variables not found at undefined +0ms
  prisma:tryLoadEnv  No Environment variables loaded +0ms
Prisma schema loaded from prisma/schema.prisma
  prisma:getConfig  Using getConfig Wasm +1ms
  prisma:getConfig  config data retrieved without errors in getConfig Wasm +0ms
Datasource "db": MySQL database "reprovitess" at "127.0.0.1:33807"
  prisma:getConfig  Using getConfig Wasm +2ms
  prisma:getConfig  config data retrieved without errors in getConfig Wasm +1ms

  prisma:schemaEngine:rpc  starting Schema engine with binary: /Users/j42/Repros/vitess/node_modules/@prisma/engines/schema-engine-darwin-arm64 +0ms
  prisma:schemaEngine:rpc  SENDING RPC CALL {"id":1,"jsonrpc":"2.0","method":"reset"} +5ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.904482Z","level":"INFO","fields":{"message":"Starting schema engine RPC server","git_hash":"6a3747c37ff169c90047725a05a6ef02e32ac97e"},"target":"schema_engine"} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.905034Z","level":"DEBUG","fields":{"message":"running the command","cmd":"\"reset\""},"target":"schema_core::rpc"} +1ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.905069Z","level":"DEBUG","fields":{"message":"Resetting the database."},"target":"schema_core::state"} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.912601Z","level":"DEBUG","fields":{"query_type":"query_raw","sql":"SELECT @@version, @@GLOBAL.version","params":"[]"},"target":"sql_schema_connector::flavour::mysql::connection","span":{"name":"Reset"},"spans":[{"name":"Reset"}]} +7ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.914029Z","level":"DEBUG","fields":{"query":"SELECT @@version, @@GLOBAL.version","params":"[]","result":"success","item_type":"query","is_query":true,"duration_ms":1},"target":"quaint::connector::metrics","span":{"db.statement":"SELECT @@version, @@GLOBAL.version","name":"quaint:query"},"spans":[{"name":"Reset"},{"db.statement":"SELECT @@version, @@GLOBAL.version","name":"quaint:query"}]} +2ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.914045Z","level":"DEBUG","fields":{"message":"quaint:query{db.statement: SELECT @@version, @@GLOBAL.version}: Span closed. Elapsed: 1.418709ms","span_timing_μs":1418},"target":"schema_core::timings","span":{"name":"Reset"},"spans":[{"name":"Reset"}]} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.914059Z","level":"DEBUG","fields":{"query_type":"query_raw","sql":"SELECT @@lower_case_table_names","params":"[]"},"target":"sql_schema_connector::flavour::mysql::connection","span":{"name":"Reset"},"spans":[{"name":"Reset"}]} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.915882Z","level":"DEBUG","fields":{"query":"SELECT @@lower_case_table_names","params":"[]","result":"success","item_type":"query","is_query":true,"duration_ms":1},"target":"quaint::connector::metrics","span":{"db.statement":"SELECT @@lower_case_table_names","name":"quaint:query"},"spans":[{"name":"Reset"},{"db.statement":"SELECT @@lower_case_table_names","name":"quaint:query"}]} +1ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.915899Z","level":"DEBUG","fields":{"message":"quaint:query{db.statement: SELECT @@lower_case_table_names}: Span closed. Elapsed: 1.833625ms","span_timing_μs":1833},"target":"schema_core::timings","span":{"name":"Reset"},"spans":[{"name":"Reset"}]} +1ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.915931Z","level":"INFO","fields":{"message":"Attempting best_effort_reset"},"target":"sql_schema_connector","span":{"namespaces":"None","name":"best_effort_reset"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"}]} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.917115Z","level":"DEBUG","fields":{"query":"SELECT @@GLOBAL.version version","params":"[]","result":"success","item_type":"query","is_query":true,"duration_ms":1},"target":"quaint::connector::metrics","span":{"db.statement":"SELECT @@GLOBAL.version version","name":"quaint:query"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"},{"name":"describe_schema"},{"schemas":"[\"reprovitess\"]","name":"describe"},{"db.statement":"SELECT @@GLOBAL.version version","name":"quaint:query"}]} +1ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.917126Z","level":"DEBUG","fields":{"message":"quaint:query{db.statement: SELECT @@GLOBAL.version version}: Span closed. Elapsed: 1.12025ms","span_timing_μs":1120},"target":"schema_core::timings","span":{"schemas":"[\"reprovitess\"]","name":"describe"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"},{"name":"describe_schema"},{"schemas":"[\"reprovitess\"]","name":"describe"}]} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.920354Z","level":"DEBUG","fields":{"query":"SELECT TABLE_NAME AS view_name, VIEW_DEFINITION AS view_sql\nFROM INFORMATION_SCHEMA.VIEWS\nWHERE TABLE_SCHEMA = ?;\n","params":"[\"reprovitess\"]","result":"success","item_type":"query","is_query":true,"duration_ms":3},"target":"quaint::connector::metrics","span":{"db.statement":"SELECT TABLE_NAME AS view_name, VIEW_DEFINITION AS view_sql\nFROM INFORMATION_SCHEMA.VIEWS\nWHERE TABLE_SCHEMA = ?;\n","name":"quaint:query"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"},{"name":"describe_schema"},{"schemas":"[\"reprovitess\"]","name":"describe"},{"schema":"reprovitess","name":"get_views"},{"db.statement":"SELECT TABLE_NAME AS view_name, VIEW_DEFINITION AS view_sql\nFROM INFORMATION_SCHEMA.VIEWS\nWHERE TABLE_SCHEMA = ?;\n","name":"quaint:query"}]} +3ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.920392Z","level":"DEBUG","fields":{"message":"quaint:query{db.statement: SELECT TABLE_NAME AS view_name, VIEW_DEFINITION AS view_sql\nFROM INFORMATION_SCHEMA.VIEWS\nWHERE TABLE_SCHEMA = ?;\n}: Span closed. Elapsed: 3.236709ms","span_timing_μs":3236},"target":"schema_core::timings","span":{"schema":"reprovitess","name":"get_views"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"},{"name":"describe_schema"},{"schemas":"[\"reprovitess\"]","name":"describe"},{"schema":"reprovitess","name":"get_views"}]} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.920414Z","level":"DEBUG","fields":{"message":"get_views{schema: \"reprovitess\"}: Span closed. Elapsed: 3.262542ms","span_timing_μs":3262},"target":"schema_core::timings","span":{"schemas":"[\"reprovitess\"]","name":"describe"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"},{"name":"describe_schema"},{"schemas":"[\"reprovitess\"]","name":"describe"}]} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.927824Z","level":"DEBUG","fields":{"query":"\n            SELECT DISTINCT\n              BINARY table_info.table_name AS table_name,\n              table_info.create_options AS create_options,\n              table_info.table_comment AS table_comment\n            FROM information_schema.tables AS table_info\n            JOIN information_schema.columns AS column_info\n                ON BINARY column_info.table_name = BINARY table_info.table_name\n            WHERE\n                table_info.table_schema = ?\n                AND column_info.table_schema = ?\n                -- Exclude views.\n                AND table_info.table_type = 'BASE TABLE'\n            ORDER BY BINARY table_info.table_name","params":"[\"reprovitess\",\"reprovitess\"]","result":"error","item_type":"query","is_query":true,"duration_ms":7},"target":"quaint::connector::metrics","span":{"db.statement":"\n            SELECT DISTINCT\n              BINARY table_info.table_name AS table_name,\n              table_info.create_options AS create_options,\n              table_info.table_comment AS table_comment\n            FROM information_schema.tables AS table_info\n            JOIN information_schema.columns AS column_info\n                ON BINARY column_info.table_name = BINARY table_info.table_name\n            WHERE\n                table_info.table_schema = ?\n                AND column_info.table_schema = ?\n                -- Exclude views.\n                AND table_info.table_type = 'BASE TABLE'\n            ORDER BY BINARY table_info.table_name","name":"quaint:query"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"},{"name":"describe_schema"},{"schemas":"[\"reprovitess\"]","name":"describe"},{"schema":"reprovitess","sql_schema":"SqlSchema { namespaces: [], tables: [], enums: [], enum_variants: [], table_columns: [], foreign_keys: [], table_default_values: [], view_default_values: [], foreign_key_columns: [], indexes: [], index_columns: [], check_constraints: [], views: [], view_columns: [], procedures: [], user_defined_types: [], connector_data: <ConnectorData> }","name":"get_table_names"},{"db.statement":"\n            SELECT DISTINCT\n              BINARY table_info.table_name AS table_name,\n              table_info.create_options AS create_options,\n              table_info.table_comment AS table_comment\n            FROM information_schema.tables AS table_info\n            JOIN information_schema.columns AS column_info\n                ON BINARY column_info.table_name = BINARY table_info.table_name\n            WHERE\n                table_info.table_schema = ?\n                AND column_info.table_schema = ?\n                -- Exclude views.\n                AND table_info.table_type = 'BASE TABLE'\n            ORDER BY BINARY table_info.table_name","name":"quaint:query"}]} +7ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.927855Z","level":"DEBUG","fields":{"message":"quaint:query{db.statement: \n            SELECT DISTINCT\n              BINARY table_info.table_name AS table_name,\n              table_info.create_options AS create_options,\n              table_info.table_comment AS table_comment\n            FROM information_schema.tables AS table_info\n            JOIN information_schema.columns AS column_info\n                ON BINARY column_info.table_name = BINARY table_info.table_name\n            WHERE\n                table_info.table_schema = ?\n                AND column_info.table_schema = ?\n                -- Exclude views.\n                AND table_info.table_type = 'BASE TABLE'\n            ORDER BY BINARY table_info.table_name}: Span closed. Elapsed: 7.38875ms","span_timing_μs":7388},"target":"schema_core::timings","span":{"schema":"reprovitess","sql_schema":"SqlSchema { namespaces: [], tables: [], enums: [], enum_variants: [], table_columns: [], foreign_keys: [], table_default_values: [], view_default_values: [], foreign_key_columns: [], indexes: [], index_columns: [], check_constraints: [], views: [], view_columns: [], procedures: [], user_defined_types: [], connector_data: <ConnectorData> }","name":"get_table_names"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"},{"name":"describe_schema"},{"schemas":"[\"reprovitess\"]","name":"describe"},{"schema":"reprovitess","sql_schema":"SqlSchema { namespaces: [], tables: [], enums: [], enum_variants: [], table_columns: [], foreign_keys: [], table_default_values: [], view_default_values: [], foreign_key_columns: [], indexes: [], index_columns: [], check_constraints: [], views: [], view_columns: [], procedures: [], user_defined_types: [], connector_data: <ConnectorData> }","name":"get_table_names"}]} +1ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.92787Z","level":"DEBUG","fields":{"message":"get_table_names{schema: \"reprovitess\", sql_schema: SqlSchema { namespaces: [], tables: [], enums: [], enum_variants: [], table_columns: [], foreign_keys: [], table_default_values: [], view_default_values: [], foreign_key_columns: [], indexes: [], index_columns: [], check_constraints: [], views: [], view_columns: [], procedures: [], user_defined_types: [], connector_data: <ConnectorData> }}: Span closed. Elapsed: 7.411625ms","span_timing_μs":7411},"target":"schema_core::timings","span":{"name":"describe_schema"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"},{"name":"describe_schema"}]} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.927875Z","level":"DEBUG","fields":{"message":"describe{schemas: [\"reprovitess\"]}: Span closed. Elapsed: 11.910333ms","span_timing_μs":11910},"target":"schema_core::timings","span":{"name":"describe_schema"},"spans":[{"name":"Reset"},{"namespaces":"None","name":"best_effort_reset"},{"name":"describe_schema"}]} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.927921Z","level":"DEBUG","fields":{"message":"describe_schema{}: Span closed. Elapsed: 11.984833ms","span_timing_μs":11984},"target":"schema_core::timings"} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.927924Z","level":"DEBUG","fields":{"message":"best_effort_reset{namespaces: None}: Span closed. Elapsed: 11.994625ms","span_timing_μs":11994},"target":"schema_core::timings"} +0ms
  prisma:schemaEngine:stderr  {"timestamp":"2023-08-10T15:40:33.927926Z","level":"DEBUG","fields":{"message":"Reset{}: Span closed. Elapsed: 22.726291ms","span_timing_μs":22726},"target":"schema_core::timings"} +0ms
  prisma:schemaEngine:rpc  {
  jsonrpc: '2.0',
  error: {
    code: 4466,
    message: 'An error happened. Check the data field for details.',
    data: {
      is_panic: false,
      message: 'The fallback method for database resets failed, meaning Migrate could not clean up the database entirely. Original error: \n' +
        'text type with an unknown/unsupported collation cannot be hashed\n' +
        '   0: sql_schema_connector::flavour::mysql::connection::describe_schema\n' +
        '             at schema-engine/connectors/sql-schema-connector/src/flavour/mysql/connection.rs:34\n' +
        '   1: sql_schema_connector::best_effort_reset\n' +
        '           with namespaces=None\n' +
        '             at schema-engine/connectors/sql-schema-connector/src/lib.rs:344\n' +
        '   2: schema_core::state::Reset\n' +
        '             at schema-engine/core/src/state.rs:428',
      meta: [Object],
      error_code: 'P3016'
    }
  },
  id: 1
} +27ms
Error: Error: P3016

The fallback method for database resets failed, meaning Migrate could not clean up the database entirely. Original error:
text type with an unknown/unsupported collation cannot be hashed
   0: sql_schema_connector::flavour::mysql::connection::describe_schema
             at schema-engine/connectors/sql-schema-connector/src/flavour/mysql/connection.rs:34
   1: sql_schema_connector::best_effort_reset
           with namespaces=None
             at schema-engine/connectors/sql-schema-connector/src/lib.rs:344
   2: schema_core::state::Reset
             at schema-engine/core/src/state.rs:428

    at Object.<anonymous> (/Users/j42/Repros/vitess/node_modules/prisma/build/index.js:93540:25)
    at SchemaEngine.handleResponse (/Users/j42/Repros/vitess/node_modules/prisma/build/index.js:93388:36)
    at LineStream2.<anonymous> (/Users/j42/Repros/vitess/node_modules/prisma/build/index.js:93491:16)
    at LineStream2.emit (node:events:513:28)
    at addChunk (node:internal/streams/readable:315:12)
    at readableAddChunk (node:internal/streams/readable:289:9)
    at LineStream2.Readable.push (node:internal/streams/readable:228:10)
    at LineStream2._pushBuffer (/Users/j42/Repros/vitess/node_modules/prisma/build/index.js:93167:17)
    at LineStream2._transform (/Users/j42/Repros/vitess/node_modules/prisma/build/index.js:93161:8)
    at LineStream2.Transform._write (node:internal/streams/transform:205:23)

About

Repro for `text type with an unknown/unsupported collation cannot be hashed` https://prisma-company.slack.com/archives/C01CUJDJ7UN/p1691584127937129


Languages

Language:TypeScript 100.0%