5.4. Meta-Informação Da Fonte de Dados

Todas fontes de dados devem prover funções que dêem acesso a suas meta-informações. Se a fonte de dados é um banco de dados, tal meta-informação é o nome das tableas, colunas, permissões dos usuários, etc. O resultado de uma consulta a meta-informação de uma fonte de dados é representada através do GdaRecordset. O problema é que na maioria das vezes o cliente está interessado em apenas parte dessa informação. O cliente quer consultar a fonte de dados sobre os índices de uma tabela, e não de todas as tabelas. Por isso é possível passar limitantes na consulta a meta-informações. Isso se complica mais ainda pelo fato de que cada consulta pode querer impor diferentes limitantes. A listagem a seguir mostra que tipos de consultas são implementadas e quais limitantes são válidos para cada consulta. Os limitantes são passados em pares de nome-valores. O nome é um enum e o valor é uma string. A função que implementa a consulta é uma função com números de argumentos variáveis e a lista de argumentos deve ser fechada com um enum de valor 0.

A tabela a seguir mosta os limitantes mais usados e quando usá-los. Alguns esquemas podem requerer que você aplique um limitante.

Table 5-1. Significado dos principais limitantes padrões

LimitantesUsoObservações
GDA_Connection_OBJECT_CATALOGUsado para especificar-se o banco de dados 
GDA_Connection_OBJECT_SCHEMAUsado para especificar-se o dono 
GDA_Connection_OBJECT_NAMEUsado para especificar-se o nome do objeto a consultar (tabela, ...) 
GDA_Connection_EXTRA_INFOAtive-o para obter informação detalhada do provedorUse uma string não nula (exemplo: "")

A tabela que segue mostra os esquemas "padrões" que devem ser suportados por cada provedor GDA, entretanto um provedor específico pode não suportar alguns desses. Para testar se um esquema é suportado, veja a função gda_connection_supports().

Table 5-2. Esquemas padrões e limitantes suportados

Tipo de ObjetoIdentificador GDALimitantes SuportadosCampos RetornadosInformação Extra
TabelasGDA_Connection_GDCN_SCHEMA_TABLESGDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFOnome, comentáriosnome, dono, comentários, definição SQL
Tabelas pais (para provedores que suportam parentesco)GDA_Connection_GDCN_SCHEMA_TAB_PARENTSGDA_Connection_OBJECT_NAME (required), GDA_Connection_OBJECT_CATALOGnome, ordem de parentescoNão Suportado
ViewsGDA_Connection_GDCN_SCHEMA_VIEWSGDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFOnome, comentáriosnome, dono, comentários, definição SQL
Colunas de uma tabela (ou view)GDA_Connection_GDCN_SCHEMA_COLUMNSGDA_Connection_OBJECT_NAME (required), GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_COLUMN_NAMEnome, tipo, tamanho, precisão, anulável (poder ser nulo), é chave, valor padrão, comentáriosNão suportado
SequênciasGDA_Connection_GDCN_SCHEMA_SEQUENCESGDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFOnome, comentáriosnome, dono, comentários, definição SQL
ProcedimentosGDA_Connection_GDCN_SCHEMA_PROCSGDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFOnome, Id do objeto, comentáriosnome, Id do objeto, dono, comentários, número de argumentos, definição SQL
Parâmetros para procedimentosGDA_Connection_GDCN_SCHEMA_PROC_PARAMSGDA_Connection_OBJECT_NAME (necessário)Uso(entrada, saída or entrada/saída), tipoNão Suportado
AgregadosGDA_Connection_GDCN_SCHEMA_AGGREGATESGDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFOnome, Id do objeto, tipo entrada, comentáriosnome, Id do objeto, tipo entrada, dono, comentários, definição SQL
TiposGDA_Connection_GDCN_SCHEMA_PROV_TYPESGDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFOnome, dono, comentários, tipo Gda, tipo provedornome, comentários

Você deve prestar atenção especial para os limitantes usados (em aplicações clientes e em provedores GDA), porque é necessários que os limitantes retornem um erro se um limitante inválido for passado ao servidor. Isto é especialmente importante, uma vez que há esquemas que podem ter significados diferentes dependendo no conjunto de limitantes usado. Como você pode imaginar, isso pode levar a uma situação onde o cliente acaba recendo dados que ele não solicitou.