На языке М есть функция Type.ForRecord
, которую можно использовать для динамического создания типа записи.
// These two expressios are exchangeable
type [A = Int64.Type, optional B = text]
Type.ForRecord(
[
A = [Type = type number, Optional = false],
B = [Type = type text, Optional = true]
],
false
)
Используя это, мы можем создать новый тип записи на основе существующего типа. с дополнительным полем, как показано ниже.
// These two expressions are exchangeable
type [A = Int64.Type, optional B = text, optional C = date]
let
existingType = [A = Int64.Type, optional B = text],
newFieldName = "C",
newFieldType = type date
in
Type.ForRecord(
Record.AddField(
Type.RecordFields(existingType),
newFieldName,
[Type = newFieldType, Optional = true]
),
false
)
Теперь я ищу способ сделать то же самое с типами таблиц. Я хочу иметь возможность изменить существующий тип таблицы, добавив новый столбец. Имя и тип нового столбца динамически определяются во время выполнения.
// I want this result
type table [A = Int64.Type, B = text, C = date]
// How can I create a new table type adding column `C = date`?
let
existingType = type table [A = Int64.Type, B = text],
newColumnName = "C",
newColumnType = type date
in
...
Я ожидал, что есть такая функция, как Type.ForTable
, но я не смог ее найти. Есть ли идея?