Explicação de erro Oslo “M2037: Erro SQL geração interna: Gerador faltante por variável”?

StackOverflow https://stackoverflow.com/questions/253746

  •  05-07-2019
  •  | 
  •  

Pergunta

Em Microsoft Oslo SDK CTP 2008 (usando IntelliPad) o seguinte compila o código bem:

module T {

    type A {
        Id : Integer32 = AutoNumber();
    } where identity Id;

    As : A*;

    type B {
        Id : Integer32 = AutoNumber();
//        A : A;
//    } where A in As && identity Id;
    } where identity Id;

    Bs : B*;

    type C {
        Id : Integer32 = AutoNumber();
        B : B;
    } where B in Bs && identity Id;

    Cs : C*;

}

e resulta na seguinte saída Alcance SQL:

set xact_abort on;
go

begin transaction;
go

set ansi_nulls on;
go

create schema [T];
go

create table [T].[As]
(
    [Id] int not null identity,
    constraint [PK_As] primary key clustered ([Id])
);
go

create table [T].[Bs]
(
    [Id] int not null identity,
    constraint [PK_Bs] primary key clustered ([Id])
);
go

create table [T].[Cs]
(
    [Id] int not null identity,
    [B] int not null,
    constraint [PK_Cs] primary key clustered ([Id]),
    constraint [FK_Cs_B_T_Bs] foreign key ([B]) references [T].[Bs] ([Id])
);
go

commit transaction;
go

Mas depois de mudar a linha comentada no T módulo da seguinte maneira

        A : A;
    } where A in As && identity Id;
//    } where identity Id;

a mensagem de erro "M2037: SQL geração interna Erro: Falta gerador para a variável 'A'". É exibido (em Janela Alcance SQL do IntelliPad)

Alguma idéia?

Regards, Tamberg

Foi útil?

Solução

Eu acho que o que você quer é:

type A {
    Id : Integer32 = AutoNumber();
} where identity Id;

As : A*;

type B {
    Id : Integer32 = AutoNumber();
    A : A;
} where identity Id;

Bs : (B where value.A in As)*;

type C {
    Id : Integer32 = AutoNumber();
    B : B;
} where identity Id && B in Bs;

Cs : (C where value.B in Bs)*;

Note que as restrições estão nas externs, não os tipos aqui. Eu era capaz de obter um código semelhante, quando as restrições onde na tipos, mas não são capazes de ir mais de uma relação profunda. Movê-los para os externs parece correto e gera o esperado Alcance SQL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top