AWS Amplify Gen2: проблемы несоответствия типов в логических полях MySQL 8.0 и пользовательские мутации SQLMySql

Форум по Mysql
Ответить
Anonymous
 AWS Amplify Gen2: проблемы несоответствия типов в логических полях MySQL 8.0 и пользовательские мутации SQL

Сообщение Anonymous »

Описание проблемы
Я работаю с AWS Amplify Gen 2 и RDS MySQL 8.0. В моих танках таблица я использую поля Integer , которые представляют логические биты значения. При использовании методов усиления по умолчанию я сталкиваюсь с следующей ошибкой: < /p>

Код: Выделить всё

"Field ROAD has a type mismatch. Expected 'Integer', but got LinkedHashMap"
Чтобы обойти эту проблему, я реализовал собственные SQL-запросы, используя CAST AS UNSIGNED:

Код: Выделить всё

SELECT
ID,
CREATED_AT,
STATUS,
UPDATED_AT,
DESCRIPTION,
LATITUDE,
LONGTITUDE,
NAME,
PHOTO,
FIRM,
LASTLOCATION,
CAST(BATCH as UNSIGNED) as BATCH,
CAPACITY,
CAST(GO as UNSIGNED) as GO,
-- ... other fields
CAST(ACTIVE as UNSIGNED) as ACTIVE,
CAST(AUTO as UNSIGNED) as AUTO,
CAST(FILL as UNSIGNED) as FILL,
CAST(FLOW as UNSIGNED) as FLOW
FROM TANKS
текущая реализация
Вот определение моей схемы для таблицы танков:

Код: Выделить всё

"TANKS": a.model({
ID: a.integer().required(),
CREATED_AT: a.datetime().required(),
STATUS: a.integer(),
DESCRIPTION: a.string(),
LATITUDE: a.string(),
LONGTITUDE: a.string(),
NAME: a.string(),
PHOTO: a.string(),
FIRM: a.integer().required(),
BATCH: a.integer(),
GO: a.integer(),
ROAD: a.integer(),
ACTIVE: a.integer(),
AUTO: a.integer(),
FILL: a.integer(),
FLOW: a.integer(),
// ... other fields
}).identifier(["ID"]),
И моя собственная мутация:

Код: Выделить всё

putTankWithBooleans: a
.mutation()
.arguments({
ID: a.integer().required(),
STATUS: a.string(),
DESCRIPTION: a.string(),
// ... other fields
ACTIVE: a.integer(),
AUTO: a.integer(),
FILL: a.integer(),
FLOW: a.integer(),
})
.returns(a.ref('TANKS'))
.handler(a.handler.sqlReference('./mutations/putTankWithBooleans.sql'))
< /code>
Обновление sql: < /p>
UPDATE TANKS
SET
STATUS = COALESCE(:STATUS, STATUS),
DESCRIPTION = COALESCE(:DESCRIPTION, DESCRIPTION),
-- ... other fields
ACTIVE = COALESCE(:ACTIVE, ACTIVE),
AUTO = COALESCE(:AUTO, AUTO),
UPDATED_AT = NOW()
WHERE ID = :ID
Текущие проблемы
  • Если я использую .returns(a.json()) , я получаю только ответ «Затронутая строка» без обновленных данных.
  • Если я использую .returns(a.ref("TANKS")), все значения возвращаются как нулевые
  • Если я попытаюсь добавить SELECT после UPDATE в моем файле SQL, я получаю синтаксическую ошибку.
  • Сгенерированный по умолчанию метод обновления отлично работает с входными объектами и правильно возвращает данные, но я не могу его использовать из-за из-за несоответствия типов LinkedHashMap
Что я пробовал
  • Использование пользовательских SQL-запросов с CAST AS UNSIGNED для запросов (работает для запросов, но не для мутаций)
  • Различные типы возвращаемых значений (a.json() и a.ref('TANKS'))
  • Добавление Операторы SELECT после UPDATE (приводят к синтаксическим ошибкам)
  • Использование сгенерированных по умолчанию методов обновления с входными объектами (работает для возврата данных, но не работает из-за несоответствия типов)
    < li>Раньше при использовании встроенной AppSync резолверов и ручных источников данных Lambda, этих проблем не возникало
Вопросы
  • Как правильно обрабатывать преобразование логического/целочисленного типа в Amplify Gen 2?
  • Как правильно возвращать обновленные данные после мутации с помощью специального SQL?< /li>
    Следует ли использовать другой подход к обработчику для мутации?
  • Есть ли способ устранить ошибку LinkedHashMap без использования специального SQL?
Технический Среда
  • AWS Amplify Gen 2
  • RDS MySQL 8.0
    < li>TypeScript
Дополнительный контекст
Мутации, генерируемые Amplify по умолчанию, прекрасно работают для возврата данных, но несоответствие типов вынуждает меня использовать собственный SQL. При использовании собственных преобразователей AppSync я мог бы обрабатывать эти преобразования в шаблоне сопоставления ответов, но абстракция Amplify Gen 2 делает это менее простым.
Мне нужно решение, которое:
  • Правильно обрабатывает преобразования целочисленных и логических типов.
  • Возвращает полную обновленную запись после мутаций.
  • Сохраняет тип. безопасность
  • В идеале позволяет избежать синтаксических ошибок при объединении операторов UPDATE и SELECT.
Любая информация о лучших методах обработки этих сценариев в Amplify Gen 2 будет очень полезна. оценил.

Подробнее здесь: https://stackoverflow.com/questions/793 ... and-custom
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»