Описание проблемы
Я работаю с AWS Amplify Gen 2 и RDS MySQL 8.0. В моих танках таблица я использую поля Integer , которые представляют логические биты значения. При использовании методов усиления по умолчанию я сталкиваюсь с следующей ошибкой: < /p>
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
текущая реализация
Вот определение моей схемы для таблицы танков:
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 будет очень полезна. оценил.
[b] Описание проблемы [/b] Я работаю с AWS Amplify Gen 2 и RDS MySQL 8.0. В моих танках таблица я использую поля Integer , которые представляют логические биты значения. При использовании методов усиления по умолчанию я сталкиваюсь с следующей ошибкой: < /p> [code]"Field ROAD has a type mismatch. Expected 'Integer', but got LinkedHashMap" [/code] Чтобы обойти эту проблему, я реализовал собственные SQL-запросы, используя CAST AS UNSIGNED: [code]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 [/code] [b] текущая реализация [/b] Вот определение моей схемы для таблицы танков: [code]"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"]), [/code] И моя собственная мутация: [code]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 [/code] [b]Текущие проблемы[/b] [list] [*]Если я использую .returns(a.json()) , я получаю только ответ «Затронутая строка» без обновленных данных. [*]Если я использую .returns(a.ref("TANKS")), все значения возвращаются как нулевые [*]Если я попытаюсь добавить SELECT после UPDATE в моем файле SQL, я получаю синтаксическую ошибку. [*]Сгенерированный по умолчанию метод обновления отлично работает с входными объектами и правильно возвращает данные, но я не могу его использовать из-за из-за несоответствия типов LinkedHashMap [/list] [b]Что я пробовал[/b] [list] [*]Использование пользовательских SQL-запросов с CAST AS UNSIGNED для запросов (работает для запросов, но не для мутаций) [*]Различные типы возвращаемых значений (a.json() и a.ref('TANKS')) [*]Добавление Операторы SELECT после UPDATE (приводят к синтаксическим ошибкам) [*]Использование сгенерированных по умолчанию методов обновления с входными объектами (работает для возврата данных, но не работает из-за несоответствия типов) < li>Раньше при использовании встроенной AppSync резолверов и ручных источников данных Lambda, этих проблем не возникало [/list] [b]Вопросы[/b] [list] [*]Как правильно обрабатывать преобразование логического/целочисленного типа в Amplify Gen 2? [*]Как правильно возвращать обновленные данные после мутации с помощью специального SQL?< /li> Следует ли использовать другой подход к обработчику для мутации? [*]Есть ли способ устранить ошибку LinkedHashMap без использования специального SQL? [/list] [b]Технический Среда[/b] [list] [*]AWS Amplify Gen 2 [*]RDS MySQL 8.0 < li>TypeScript [/list] [b]Дополнительный контекст[/b] Мутации, генерируемые Amplify по умолчанию, прекрасно работают для возврата данных, но несоответствие типов вынуждает меня использовать собственный SQL. При использовании собственных преобразователей AppSync я мог бы обрабатывать эти преобразования в шаблоне сопоставления ответов, но абстракция Amplify Gen 2 делает это менее простым. Мне нужно решение, которое: [list] [*]Правильно обрабатывает преобразования целочисленных и логических типов. [*]Возвращает полную обновленную запись после мутаций. [*]Сохраняет тип. безопасность [*]В идеале позволяет избежать синтаксических ошибок при объединении операторов UPDATE и SELECT. [/list] Любая информация о лучших методах обработки этих сценариев в Amplify Gen 2 будет очень полезна. оценил.