Сопоставить набор записей jdbc с типом записи с вложенными типами в Ballerina - PullRequest
1 голос
/ 06 июня 2019

Так я хочу использовать вложенную запись и загрузить ее из набора записей sql / jdbc в Ballerina.

Если у нас есть:

type Foo record{
  string bar;
  string baz;
}

, мы можем напрямую создавать записи Foo изНабор результатов с соответствующей формой:

table<Foo>|error dt = testDB->select("SELECT bar,baz FROM ferble",Foo);

, но есть ли способ сделать это ...

type Foo record{
  string bar;
  Baz baz;
}

type Baz record{
  string qux;
  string quxx;
}

table<Foo>|error dt = testDB->select("SELECT bar,qux,quxx FROM ferble",Foo);

Хотя это легко сделать в коде, когда результаты широкие, он получаеточень утомительноЕсли вы пытаетесь создать запись, которую можно преобразовать в схему, определенную JSON, было бы неплохо иметь.

1 Ответ

0 голосов
/ 10 июня 2019
type Foo record {
  string bar;
  Baz baz;
}

type Baz record {
  string qux;
  string quxx;
}

table<Foo>|error dt = testDB->select("SELECT bar,qux,quxx FROM ferble",Foo);

Это не разрешено в Балерина.Кроме того, было бы семантически неверно разрешить это, потому что тип записи представляет схему таблицы, где каждый тип столбца сопоставляется с типом поля записи Ballerina.Этот запрос возвращает набор результатов, который имеет 3 столбца с типом, связанным с каждым столбцом.Тогда запись «Балерина», с которой вы пытаетесь сопоставить данную строку, должна иметь соответствующие типы в качестве типов полей.

Но если вы выбираете, как показано ниже,

table<Foo>|error dt = testDB->select("SELECT bar,baz FROM ferble",Foo);

, где baz являетсяОпределяемый пользователем тип / тип структуры в базе данных с полями qux и quxx, тогда сопоставление этого с вышеупомянутой записью Foo будет правильным.

...