Escrito por

Artigo Evandro Wendt · 5 h atrás 3m read

Como personalizar os nomes de tabelas e campos SQL das classes no InterSystems IRIS

No InterSystems IRIS, ao compilar uma classe persistente, você obtém automaticamente uma tabela SQL. Às vezes, há situações que exigem ter nomes/opções ligeiramente (ou não tão ligeiramente) diferentes no SQL em comparação com o modelo de objetos. Aqui estão algumas das configurações que você pode alterar para que isso aconteça.

Configurações no nível da classe

Elas definem a “face” da sua classe quando ela aparece como uma tabela no catálogo SQL.

SqlTableName permite alterar o nome da tabela SQL que armazena os objetos da sua classe. Isso é especialmente útil quando o nome da sua classe usa palavras reservadas do SQL no nome, por exemplo, Group.

Modo de uso:

Class Banking.Group Extends %Persistent [ SqlTableName = Banking_Group ]
{ 

}

SqlRowIdName permite renomear a coluna padrão de chave primária para algo semanticamente mais significativo. Toda classe persistente possui um identificador único, e por padrão ele se chama ID. Nomeá-lo como PatientID ou OrderID torna-o muito mais legível e evita conflitos de nomenclatura em consultas complexas.

Modo de uso:

Class Banking.Account Extends %Persistent [ SqlRowIdName = AccID ]
{
    
}

DdlAllowed permite ou impede que o esquema da tabela seja alterado via SQL. Por exemplo, se você é um desenvolvedor “class-first”, não quer que um DBA execute acidentalmente um ALTER TABLE e desincronize a definição da classe. Definir isso como Not DdlAllowed (padrão) garante que a Classe seja a “fonte da verdade”. Definir como DdlAllowed permite que comandos padrão de DDL do SQL modifiquem a classe.

Modo de uso:

Class Banking.Transaction Extends %Persistent [ DdlAllowed ]
{
    
}
Class Banking.Account Extends %Persistent [ Not DdlAllowed ]
{
    
}

Configurações no nível da propriedade

Esses parâmetros alteram como pontos de dados individuais (propriedades) são projetados como colunas.

SqlFieldName permite fornecer um nome de coluna diferente do nome da propriedade.

Modo de uso:

Property CurrentAmount As %Float [ SqlFieldName = Amount ];

SqlListType e SqlListDelimiter permitem definir como coleções do tipo “List” são armazenadas e visualizadas no SQL. Como o SQL é inerentemente “plano”, ele tem dificuldade com listas. O objetivo dessas configurações é definir o método de armazenamento que melhor se adequa às suas necessidades de desempenho ao “desaninhar” os dados em consultas.

Existem vários valores possíveis para o SqlListType:

SUBNODE: Armazena os itens da lista em uma global separada, o que é mais eficiente para listas grandes (como um padrão para um array).

DELIMITED: Armazena os itens como uma única string com delimitadores definidos em SqlListDelimiter.

LIST: Armazena os itens no formato $List() na memória e em disco. Este é o padrão.

Modo de uso:

Property Currencies As list Of %String [ SqlListDelimiter = ";", SqlListType = DELIMITED ];

Existem várias outras configurações que você pode ajustar para alterar como seus dados SQL são representados em comparação ao modelo de objetos. Consulte a documentação para descobrir todas elas!