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 Gda_Recordset. 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
Limitantes | Uso | Observações |
---|---|---|
GDA_Connection_OBJECT_CATALOG | Usado para especificar-se o banco de dados | |
GDA_Connection_OBJECT_SCHEMA | Usado para especificar-se o dono | |
GDA_Connection_OBJECT_NAME | Usado para especificar-se o nome do objeto a consultar (tabela, ...) | |
GDA_Connection_EXTRA_INFO | Ative-o para obter informação detalhada do provedor | Use 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 Objeto | Identificador GDA | Limitantes Suportados | Campos Retornados | Informação Extra |
---|---|---|---|---|
Tabelas | GDA_Connection_GDCN_SCHEMA_TABLES | GDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFO | nome, comentários | nome, dono, comentários, definição SQL |
Tabelas pais (para provedores que suportam parentesco) | GDA_Connection_GDCN_SCHEMA_TAB_PARENTS | GDA_Connection_OBJECT_NAME (required), GDA_Connection_OBJECT_CATALOG | nome, ordem de parentesco | Não Suportado |
Views | GDA_Connection_GDCN_SCHEMA_VIEWS | GDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFO | nome, comentários | nome, dono, comentários, definição SQL |
Colunas de uma tabela (ou view) | GDA_Connection_GDCN_SCHEMA_COLUMNS | GDA_Connection_OBJECT_NAME (required), GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_COLUMN_NAME | nome, tipo, tamanho, precisão, anulável (poder ser nulo), é chave, valor padrão, comentários | Não suportado |
Sequências | GDA_Connection_GDCN_SCHEMA_SEQUENCES | GDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFO | nome, comentários | nome, dono, comentários, definição SQL |
Procedimentos | GDA_Connection_GDCN_SCHEMA_PROCS | GDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFO | nome, Id do objeto, comentários | nome, Id do objeto, dono, comentários, número de argumentos, definição SQL |
Parâmetros para procedimentos | GDA_Connection_GDCN_SCHEMA_PROC_PARAMS | GDA_Connection_OBJECT_NAME (necessário) | Uso(entrada, saída or entrada/saída), tipo | Não Suportado |
Agregados | GDA_Connection_GDCN_SCHEMA_AGGREGATES | GDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFO | nome, Id do objeto, tipo entrada, comentários | nome, Id do objeto, tipo entrada, dono, comentários, definição SQL |
Tipos | GDA_Connection_GDCN_SCHEMA_PROV_TYPES | GDA_Connection_OBJECT_NAME, GDA_Connection_OBJECT_CATALOG, GDA_Connection_OBJECT_SCHEMA, GDA_Connection_EXTRA_INFO | nome, dono, comentários, tipo Gda, tipo provedor | nome, 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.