Files
cc-1c-skills/tests/skills/cases/meta-edit/eds-add-table.json
T
Nick ShirokovandClaude Opus 5 123d6e326b feat(meta-edit): таблица и функция добавляются в существующий внешний источник
Дыра в сценарии: добавить таблицу или функцию к уже существующему источнику было нечем.
Совет «пересоберите источник целиком через meta-compile» оказался вредным — повторная
компиляция заменяет файл источника, выдаёт объекту НОВЫЙ uuid и оставляет файлы не
упомянутых таблиц сиротами: в ChildObjects их уже нет, а на диске они остались.

meta-edit на файле источника принимает add.tables и add.functions. Таблица — единственная
операция навыка, создающая файл: <Источник>/Tables/<Имя>.xml плюс имя в ChildObjects.
Синтаксис тот же, что у meta-compile.

Формат файла таблицы обязан быть один и тот же, кем бы файл ни был создан, поэтому эмиттеры
скопированы из meta-compile механически и зарегистрированы в check-inline-drift.mjs — гард
теперь сверяет семь функций между двумя навыками. Чтобы копии не тянули за собой пол-navыка,
две из них развязаны от эмиттеров-специфик: Build-EdsTableXml принимает готовый XML полей,
Emit-EdsFunction — готовый XML типа. Каждый навык рендерит их своим эмиттером, вывод не изменился.

meta-compile теперь предупреждает о перезаписи существующего объекта — для всех видов, не только
внешних источников: молчаливая замена uuid ломает ссылки, а узнать об этом было неоткуда.

Раундтрип на платформе 8.3.24.1691: таблица, добавленная через meta-edit, возвращается из
выгрузки байт в байт.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
2026-09-06 13:55:01 +03:00

49 lines
1.6 KiB
JSON

{
"name": "Таблица и функция в существующий внешний источник",
"setup": "empty-config",
"preRun": [
{
"script": "meta-compile/scripts/meta-compile",
"input": {
"type": "ExternalDataSource",
"name": "PG",
"tables": { "products": { "keyFields": ["id"], "fields": ["id: Number(10,0)"] } }
},
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
}
],
"params": { "objectPath": "ExternalDataSources/PG.xml" },
"input": {
"add": {
"tables": {
"sales": {
"nameInDataSource": "eds.public.sales",
"tableDataType": "ObjectData",
"keyFields": ["id"],
"fields": ["id: Number(10,0)", "summa: Number(15,2)", "comment: String(0) | nullable"]
}
},
"functions": { "nextKey": "NEXT VALUE FOR public.seq_key" }
}
},
"expect": {
"stdoutContains": ["Added table: sales", "Added function: nextKey"],
"files": ["ExternalDataSources/PG/Tables/sales.xml", "ExternalDataSources/PG/Tables/products.xml"],
"fileContains": [
{
"file": "ExternalDataSources/PG.xml",
"text": ["<Table>products</Table>", "<Table>sales</Table>", "NEXT VALUE FOR public.seq_key"]
},
{
"file": "ExternalDataSources/PG/Tables/sales.xml",
"text": [
"<NameInDataSource>eds.public.sales</NameInDataSource>",
"<TableDataType>ObjectData</TableDataType>",
"<xr:Field>ExternalDataSource.PG.Table.sales.Field.id</xr:Field>",
"<xr:GeneratedType name=\"ExternalDataSourceTableRef.PG.sales\" category=\"Ref\">"
]
}
]
}
}