BRPI0708827A2 - linguagem de consulta extensÍvel com suporte para tipos de dados ricos - Google Patents
linguagem de consulta extensÍvel com suporte para tipos de dados ricos Download PDFInfo
- Publication number
- BRPI0708827A2 BRPI0708827A2 BRPI0708827-2A BRPI0708827A BRPI0708827A2 BR PI0708827 A2 BRPI0708827 A2 BR PI0708827A2 BR PI0708827 A BRPI0708827 A BR PI0708827A BR PI0708827 A2 BRPI0708827 A2 BR PI0708827A2
- Authority
- BR
- Brazil
- Prior art keywords
- query
- expression
- collection
- clause
- select
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/40—Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/84—Mapping; Conversion
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
LINGUAGEM DE CONSULTA EXTENSÍVEL COM SUPORTE PARA TIPOS DE DADOS RICOS. É fornecida uma linguagem de consulta com suporte para tipos de dados ricos. Um sistema pode compreender uma aplicação configurada para gerar consultas de acordo com a linguagem de consulta. Também é fornecida uma plataforma para tratar de consultas que são geradas de acordo com a linguagem de consulta fornecida. A plataforma compreende genericamente uma camada de serviços de objeto, uma camada de provedor de mapa, e uma camada de ponte que pode realizar interface finalmente com uma variedade de bancos de dados comercialmente disponíveis.
Description
"LINGUAGEM DE CONSULTA EXTENSÍVEL COM SUPORTE PARA TIPOS DEDADOS RICOS"
Referência remissiva a pedidos relacionados"
Esse pedido reivindica prioridade para o pedido provisional US número 60/784.510,depositado em 20 de março de 2006.
Antecedentes
Dados se tornaram um bem importante em quase toda aplicação, quer seja por e-xemplo, uma aplicação de Linha de Negócio (LOB) que navega em produtos e gera pedidosou uma aplicação de Gerenciamento de Informações pessoais (PIM) que programa umareunião entre pessoas. Aplicações estão se tornando cada vez mais cêntricas em dados -planejam uma porção significativa de sua experiência em run-time e desenho sobre consul-tar, manipular e apresentar dados. Muitas dessas aplicações lidam com dados que são ricosem semântica, como integridade estrutural, limitações de dados, relações entre dados, eassim por diante. As aplicações hoje em dia gastam esforço significativo em código de pro-cedimento para conservar a semântica de dados.
Considere, por exemplo, uma aplicação LOB. Tipicamente, uma tal aplicação lidacom Clientes, Pedidos, Linhas de Pedidos, Fornecedores, Produtos, Funcionários, Transpor-tadores, Faturas, e assim por diante. Cada uma dessas noções representa um tipo de dadosricos separado com uma estrutura específica. Por exemplo, o tipo Cliente tem coisas comoID de Cliente, Nome da companhia, Nome do contato e Endereço; o tipo Pedido tem coisascomo ID de Pedido, ID de Cliente, Data do pedido, Linhas de pedido, Data de vencimento,etc. Qualquer um dos acima pode ter exigências adicionais, por exemplo, Endereço podeexigir um Código Postal que, quando nos EUA, deve ser um código postal que tenha cincocaracteres de comprimento, e cada caractere é um dígito entre zero e nove. No Canadá, oCódigo Postal deve ser da forma "ANA NAN" onde A é uma letra e N é um número. Ao mo-delar códigos postais, desse modo não é suficiente simplesmente especificar que é umasérie; limitações adicionais devem ser colocadas nessa série para limitar a gama de valorespossíveis que pode assumir. Além disso, há normalmente relações entre os dados. Por e-xemplo, um Pedido pode ter sempre um Cliente associado ao mesmo; essa é uma relaçãode muitos (Pedido)-para-Um (Cliente). Os Produtos e Fornecedores contêm uma relação demuitos-para-muitos porque múltiplos produtos podem ser fornecidos por um único fornece-dor, e múltiplos fornecedores podem abranger o mesmo produto.
Um modelo de dados descreve a estrutura e semântica de, e relações entre, os vá-rios pedaços de dados nos quais uma aplicação está interessada. Embora modelos e siste-mas de relação tenham sido muito bem sucedidos em gerenciamento de dados, eles falha-ram em capturar os modelos de dados de aplicação. As aplicações cliente-servidor tradicio-nais relegam operações de persistência e consulta em seus dados para sistemas de bancode dados. O sistema de banco de dados opera em dados na forma de linhas e tabelas, en-quanto a aplicação opera em dados em termos de construções de linguagem de programa-ção de nível mais elevado como classes e tipos de dados ricos. O descasamento de impe-dância nos serviços de manipulação de dados entre a aplicação e nível de banco de dadosera tolerável em sistemas tradicionais. Com o advento de arquiteturas orientadas para servi-ço (SOA), servidores de aplicação e aplicações de multi-níveis, a necessidade de serviçosde manipulação e acesso de dados ricos que sejam bem integrados com ambientes de pro-gramação e possam operar em qualquer nível aumentou tremendamente.
A maioria das aplicações e estruturas de aplicação rola seu próprio modelo de da-dos no topo de sistemas baseados em modelo de dados relacionais para unir o descasa-mento de impedância entre os dados e o ambiente de programação de aplicação. Isso éporque a maioria das aplicações, quer LOB1 PIM, Information Worker, ou de outro modo,exigem conceitos de modelo de dados como estrutura rica, relações, comportamentos ecapacidade de extensão. Esses conceitos de modelo de dados não são adequadamentesuportados por modelos de dados existentes, e além disso linguagens de consulta adequa-das não existem atualmente para acessar dados se fossem para ser organizados de acordocom o modelo de dados mais avançado.
Candidatos modernos exemplares para um meta-modelo de dados incluem a ver-são de 1999 da Structured Query Language (SQL99), Common Language Runtime (CLR),Unified Modeling Language (UML) e XML Schema Definition (XSD). Entretanto, o CLR é umruntime de programação imperativa, orientada para objeto, e não tem modelo de dados nati-vos ou noções de limitações de integridade, relações, ou persistência. SQL99 não tem con-ceitos de modelar dados como relações, e não tem boa integração de linguagem de pro-gramação. A especificação XSD não suporta conceitos como chaves, relações e persistên-cia, e é complexa e tem mapeamento incômodo tanto para runtime como para modelos debanco de dados relacionais. A UML é geral em demasia: requer que desenvolvedores deaplicação adicionem semântica precisa, especialmente para persistência.
Há uma necessidade não atendida na indústria para um modelo de dados e estrutu-ra de suporte correspondente que forneça melhor acesso de aplicação a tipos de dados ri-cos. Há uma necessidade adicional para uma linguagem de consulta extensível com suportepara tipos de dados ricos que possa ser suportada por um tal modelo de dados.
Sumário
Em consideração das desvantagens acima identificadas da técnica, a presente in-venção provê uma linguagem de consulta extensível com suporte para tipos de dados ricos.Várias características exemplares da linguagem de consulta fornecida são discutidas aqui.Além disso, o sistema pode compreender uma aplicação configurada para gerar consultasde acordo com a linguagem de consulta. Também é fornecida uma plataforma para tratar de-consultas que sejam geradas de acordo com a linguagem de consulta fornecida. A platafor-ma compreende genericamente uma camada de serviços de objeto, uma camada de prove-dor de mapa, e uma camada de ponte que pode finalmente realizar interface com uma vari-edade de bancos de dados comercialmente disponíveis.
Breve descrição dos desenhos
Os sistemas e métodos para uma linguagem de consulta extensível com suportepara tipos de dados ricos, de acordo com a presente invenção, são adicionalmente descritoscom referência aos desenhos em anexo, nos quais:
A figura 1 ilustra uma arquitetura de suporte de aplicação para aplicações que a-cessam dados, de acordo com os sistemas e métodos fornecidos aqui.
A figura 2 ilustra os componentes principais de uma arquitetura CDP e em particu-lar, descreve a canalização de consulta como pode conduzir consultas feitas utilizando alinguagem de consulta extensível para tipos de dados ricos, discutidos em maior detalheabaixo.
A figura 3 ilustra uma vista de grupo Outlook por data para uma vista de agrupa-mento favorável gerada utilizando um método calculado de acordo com a invenção.
Descrição detalhada
Certos detalhes específicos são expostos na descrição e figuras a seguir para for-necer compreensão completa de várias modalidades da invenção. Certos detalhes bem co-nhecidos freqüentemente associados à tecnologia de software e computação não são ex-postos na revelação a seguir, entretanto, para evitar obscurecer desnecessariamente asvárias modalidades da invenção. Além disso, aqueles com conhecimentos comuns na técni-ca relevante entenderão que podem pôr em prática outras modalidades da invenção semum ou mais dos detalhes descritos abaixo. Finalmente, embora vários métodos sejam des-critos com referência a etapas e seqüências na revelação a seguir, a descrição como tal épara fornecer uma implementação clara de modalidades da invenção, e as etapas e se-qüências de etapas não devem ser tomadas como exigido para pôr em prática a presenteinvenção.
Primeiramente, essa descrição provê um modelo de dados exemplar e mecanismosde suporte de dados relacionados como podem ser utilizados em modalidades exemplaresde sistemas e métodos que incorporam uma linguagem de consulta com suporte para tiposde dados ricos como descrito aqui. A seguir, uma variedade de características e aspectosnovos da linguagem de consulta exemplar exposta aqui é destacada e discutida. Uma espe-cificação detalhada para uma linguagem de consulta exemplar é exposta no Apêndice A eextensões do mesmo são expostas no Apêndice B. As implementações detalhadas incluemum host de características novas e úteis como será reconhecido por aqueles versados natécnica.Modelo de dados exemplar e mecanismos de suporte de dados relacionadosUm modelo de dados exemplar e os mecanismos de suporte de dados relacionadospodem ser incorporados em um conjunto de tecnologias como a plataforma Active X DataObjects para código gerenciado (ADO.NET), que é projetada para fornecer acesso consis-tente a fontes de dados como o Servidor Structured Query Language (SQL) da MICRO-SOFT®, bem como fontes de dados expostas através de Object Linking and Embedding forDatabases (OLE DB) e Extensible Markup Language (XML). Aplicações de consumidor departilhar de dados podem utilizar ADO.NET para conectar-se a essas fontes de dados e re-cuperar, manipular e atualizar dados.
ADO.NET fatora de forma limpa acesso a dados a partir de manipulação de dadosem componentes discretos que podem ser utilizados separadamente ou em tandem. A-DO.NET inclui provedores de dados de Estrutura .NET para conectar-se a um banco de da-dos, executar comandos, e recuperar resultados. Esses resultados são processados direta-mente, ou colocados em um objeto de Conjunto de dados (DataSet) ADO.NET para seremexpostos para o usuário em um modo ad-hoc, combinado com dados a partir de múltiplasfontes, ou remotos entre níveis. O objeto DataSet ADO.NET pode ser utilizado também in-dependentemente de um provedor de dados de Estrutura .NET para gerenciar dados locaispara a aplicação ou fornecidos a partir de XML. Desse modo, ADO.NET provê funcionalida-de para desenvolvedores que gravam código gerenciado similar à funcionalidade fornecidapara desenvolvedores COM nativos pela tecnologia de Active X Data Objects (ADO) familiarpara aqueles versados na técnica.
Em uma modalidade, a plataforma ADO.Net pode ser estendida para fornecer umconjunto rico de serviços de dados para aplicações - através de uma variedade de estrutu-ras de aplicação como estruturas PIM e estruturas LOB - para acessar, manipular e geren-ciar dados em um modo que é bem integrado com o ambiente de programação de aplica-ção. A figura 1 ilustra a colocação dessa funcionalidade em uma arquitetura de suporte deaplicação. A Plataforma de Dados Comum (CDP) 100 pode implementar um conjunto detecnologias como a plataforma ADO.Net. A Plataforma de Dados Comum (CDP) 100 e tec-nologias relacionadas são discutidas em detalhe no pedido de patente US 11/171905.
A arquitetura de suporte de aplicação da figura 1 pode incluir, por exemplo, umafonte de dados 110 como um banco de dados SQL SERVER®, WinFS®, ou ORACLE®;uma CDP 100 que provê serviços de dados ricos para aplicações e estruturas de aplicação;um conjunto de serviços de estrutura, por exemplo, UAF 120 e Estrutura de LOB 130 queestendem e aumentam a funcionalidade de CDP 100; um conjunto de classes de dados, porexemplo, 122, 132, 140 que encapsulam funcionalidade de estrutura e lógica de aplicaçãogeral; e qualquer número de aplicações 150, 160, 170 que consomem funcionalidade forne-cida pela CDP 100 e estruturas 120, 130 e/ou classes 122, 132, 140.Um modelo de dados que é suportado pela CDP 100 pode compreender, por e-xemplo, o Modelo de dados de entidade (EDM) desenvolvido pela MICROSOFT® Corpora-tion de Redmond1 WA. O EDM estende o modelo de dados relacionais para acomodar múl-tiplas estruturas de aplicação como LOB1 PIM1Gerenciamento, e assim por diante. O EDMdefine abstração de objeto rico para dados, modelos ricos em semântica como relações dedados, minimiza o descasamento entre as estruturas de aplicação e o modelo de dados,suporta certos comportamentos de aplicação, suporta conceitos relacionais básicos, tiposricos com herança, e relações, e provê genericamente conceitos de modelagem que captu-ram semântica de dados independente das armazenagens de dados e níveis de uso. OEDM pode ser incorporado em tecnologias como ADO.NET.
A figura 2 ilustra os componentes principais da arquitetura de CDP 100 e em parti-cular descreve a canalização de consulta como pode conduzir consultas feitas utilizando alinguagem de consulta extensível para tipos de dados ricos em maior detalhe abaixo. O ter-mo "eSQL" será utilizado aqui para se referir a uma linguagem de consulta extensível paratipos de dados ricos, cuja modalidade é exposta em detalhe abaixo. A figura 2 também ilus-tra como uma consulta flui através de diferentes componentes da CDP 100.
Primeiramente, uma aplicação 200 emite uma consulta contra o provedor de servi-ços de objeto 210 como uma consulta eSQL. O provedor de serviços de objeto 210 podecompreender um serviço analisador 211 que analisa a consulta e converte a mesma emuma árvore canônica, e transformações de mapeamento 212 que executam quaisquer tra-duções de mapeamento (a partir de um modelo de dados de aplicação para um EDM comofornecido aqui) na árvore canônica. O provedor de serviços de objeto pode passar então aárvore canônica para baixo para o provedor de mapa 220.
O provedor de mapa 220 encapsula a funcionalidade de mapeamento relacionai deobjeto. Compreende transformações de mapeamento 222 que executam traduções de ma-peamento na árvore canônica. O provedor de mapa passa a árvore canônica para a ponte230 para serviços de mediação.
A ponte 230 pode compreender um componente de serviços de compensação deconsulta 231 que fatora a árvore canônica e executa quaisquer compensações de modelode dados, então passa para baixo uma ou mais árvores canônicas para o provedor de ar-mazenagem 240.
O provedor de armazenagem 240 traduz a árvore canônica em seu dialeto nativo,por exemplo, em um dialeto SQL como SQL 2000 ou SQL 2005, ou um WinFS ou formatode banco de dados incorporado. O provedor de armazenagem 240 executa a consulta eretorna uma mensagem, por exemplo, uma mensagem que pode ser formatada para serpassada para ou a partir de uma interface de DataReader (uma "DataReader" (Leitora dedados)) para a ponte 230.A ponte 230 compreende um serviço de conjunto de vâlor/resultado 232 que reúne,se necessário, resultados a partir de potencialmente múltiplas DataReaders retornadas peloprovedor de armazenagem 240. O resultado dessa operação executada por 232 é uma Da-taReader única em termos do espaço EDM.
O provedor de mapa 220 simplesmente retorna a seguir a DataReader a partir daponte 230 para o provedor de serviços de objeto 210. Os serviços de objeto 210 traduzemresultados a partir do provedor de mapa 220 em espaço de objeto. O provedor de serviçosde objeto 221 compreende um componente 213 que materializa opcionalmente resultadoscomo objetos, e caches os objetos no mapa de identidade. Finalmente, a aplicação 200consome a DataReader resultante.
Voltando para vários aspectos salientes da EDM mais especificamente, o EDM égenericamente construído de acordo com quatro conceitos de núcleo: tipos, instâncias, enti-dades e relações. Esses conceitos podem ser ilustrados utilizando o exemplo de uma apli-cação LOB típica. Uma tal aplicação lida com tipos diferentes de dados, por exemplo, pedi-do, cliente, linhas de pedido, endereço, fornecedor, produto, empregado,e assim por diante.
Em um uso exemplar do EDM, dados de Cliente podem ser considerados uma enti-dade. Uma entidade representa uma unidade de dados de nível superior com a qual umaaplicação trabalha. O Cliente pode ter vários campos: CustomerlD, CompanyName, Con-tactName, Address e Phone. Cada campo tem um tipo, que determina a estrutura dos dadosque entram naquele campo. Por exemplo, CustomerlD pode ser uma série de um compri-mento fixo. Os campos CompanyName e ContactName podem ser também um tipo de sé-rie. O próprio Cliente tem também um tipo; como Cliente é uma entidade, esse tipo pode sermencionado como um tipo de entidade.
Um campo Address pode ser diferente dos outros campos: possui estrutura internana forma de outros campos como Cidade, Estado e Código postal. Em EDM, o tipo de umcampo como Address é denominado tipo complexo. Ao contrário, o tipo de CustomerlD,CompanyName e ContactName podem ser todos tipos simples.
O campo Phone pode consistir em vários números de telefone, cada um dos quaisé uma série. Isso é denominado um tipo de coleção.
O tipo especifica a estrutura de dados e certas limitações sobre os valores. Dadosefetivos são armazenados em instâncias desses tipos. Qualquer pessoa familiarizada comprogramação orientada para objeto traçará a analogia óbvia: tipos e instâncias são similaresa classes e objetos respectivamente.
Tanto Cliente como Endereço são similares no sentido de que ambos têm estruturainterna: são compostos de múltiplos campos. Porém semântica e operacionalmente, umCliente é diferente de um Endereço. Cliente atua como a unidade para consulta, operaçõesde troca de dados, transações, persistência e partilha. Um Address, por outro lado, semprevide em um Cliente e não pode ser mencionado ou de outro modo influenciado independen-temente. No EDM1 os requerentes denominam essas unidades de dados de nível superiorcomo entidades. Todos os outros dados são considerados como estando em linha com asentidades.
Considere agora os dados exemplares de Pedido. Regras comerciais podem exigirque todo pedido tenha um cliente correspondente. Isso é modelado por uma relação entre aentidade Pedido e a entidade Cliente. Há tipos diferentes de relações suportadas pelo EDM.Uma entre um Pedido e um Cliente é denominada como uma associação. Associações sãotipicamente uitlizadas para modelar relações não hierarquizadas entre entidades.
Cada pedido pode ser composto de várias linhas de pedido. Por exemplo, se vocêpedir cinco livros na AMAZON.COM®, então as informações sobre cada livro são uma linhade pedido. Isso é modelado como outro tipo de relação, uma composição. Cada OrderLinena composição é uma entidade.
Características novas exemplares de eSQL
A seguir, uma variedade de características e aspectos novos de uma linguagem deconsulta exemplar é destacada e discutida. Em geral, a linguagem eSQL e extensões damesma, como fornecido abaixo, podem ser implementadas em um sistema tal como aqueledescrito acima com referência às figuras 1 e 2, embora aqueles versados na técnica reco-nhecerão que vários sistemas e métodos novos associados à modalidade exemplar abaixopodem ser implementados em outros contextos também.
A especificação eSQL exposta abaixo compreende uma variedade de característi-cas novas, que incluem porém não são limitadas a representar consultas e instruções deLinguagem de Manipulação de Dados (DMLs - o termo "consulta, como utilizado aqui, serefere a consultas e DMLs) em termos de uma linguagem de modelagem de dados com su-porte para tipos de dados ricos (uma linguagem de modelagem de dados ricos) como oEDM, árvores de comando canônicas (Ctrees) que representam o modo programático paraespecificar consultas e DMLs em termos de uma linguagem de modelagem de dados ricos,funcionalidade de ponte que compensa provedores específicos por manipular as consultascanônicas, uso de desdobrar vista para unificar de forma elegante a estratégia de mapea-mento OR através de toda uma semântica de linguagem de modelagem de dados ricos comconsulta e atualizações. E a capacidade de estender a linguagem de consulta de núcleoatravés de extensões que são acionadas a partir de metadados. Além disso, aspectos novosexemplares das especificações eSQL expostas abaixo incluem o que se segue.
Suporte de primeira classe para coleções: A modalidade eSQL exemplar fornecidaaqui é projetada para ser similar a SQL, e fornece vantagens em relação a SQL. Em geral,versões iniciais de SQL (SQL-92 e anterior) eram intensamente cêntricas em tabela. As ta-belas foram tratadas como cidadãos de primeira classe, e linhas/colunas foram tratadas co-mo segunda clase. E evidentemente, não havia noção de coleções. SQL-99 e dialetos pos-teriores fornecem suporte para coleções, porém esse suporte foi retroencaixado em SQL-99.Witness por exemplo, adições clunky como não aninhar, aplicar e similares.
Ao contrário, em uma modalidade, eSQL trata coleções como entidades de primeiraclasse. Por exemplo, expressões de coleção são legais na cláusula a partir de. Não há ne-cessidade de uitlizar sintaxes não aninhadas. Subconsultas "em" e "existe" foram generali-zadas para tratar de quaisquer coleções - uma subconsulta é simplesmente um tipo de co-leção. "e1 em e2' e "existe(e)" são as construções eSQL para executar essas operações.Além disso, muitas das operações definidas (união, interseção, exceto) operam em cole-ções. Junções operam também em coleções.
Tudo é uma expressão: SQL padrão sempre teve um sistema de dois níveis - sub-consultas (tabelas) e expressões (linhas, colunas). Em uma modalidade, para fornecer su-porte de primeira classe para coleções e coleções aninhadas, eSQL adota um modelo muitomais simples - tudo é uma expressão. Por exemplo, o que segue são todas consultas eSQLlegais:
1+2*3"abe"
row(1 as a, 2 as b){1,3, 5}e1 union ali e2
distinct(el)
Tratamento uniforme de subconsultas. Operando a partir de sua visão do mundo,cêntrica em tabela, SQL tipicamente tendeu a executar interpretação contextual de subcon-sultas. Por exemplo, em SQL, uma subconsulta na cláusula a partir de é considerada comosendo um multiconjunto (tabela), enquanto a mesma subconsulta utilizada na cláusula sele-cionar é considerada como sendo uma subconsulta escalar. Ao longo de linhas similares,uma subconsulta utilizada no lado esquerdo de um operador in é considerada como sendouma subconsulta escalar, enquanto se espera que o lado direito seja uma subconsulta demulticonjuntos.
Em uma modalidade, eSQL elimina essas diferenças. Uma expressão tem uma in-terpretação uniforme que não depende do contexto no qual é utilizada. ESQL pode conside-rar todas as subconsultas como sendo subconsultas de multiconjunto. Se um valor escalarfor desejado a partir da subconsulta, eSQL pode fornecer o operador elemento que operaem uma coleção (nesse caso, a subconsulta) e extrair o valor singleto a partir da coleção.
Evitar coerções implícitas desnecessárias: um efeito colateral relacionado do pro-blema descrito acima é a noção de conversão implícita de subconsultas em valores escala-res. Especificamente, em SQL, um multiconjunto de linhas com um único campo é implici-tamente convertido em um valor escalar cujo tipo de dados é aquele do campo. Ao contrário,modalidades de eSQL não suportam essa coerção implícita. ESQL pode fornecer o opera-dor elemento para extrair um valor singleto a partir de uma coleção, e uma cláusula selecio-nar valor para evitar criar um row-wrapper durante uma expressão de consulta.
Select_Value - evitar o wrapper de linha implícito: SQL é de um certo modo ambí-guo sobre o tratamento do resultado a partir de uma consulta. A cláusula selecionar em umasubconsulta SQL cria implicitamente um row wrapper em torno dos itens na cláusula. Isso,evidentemente, quer dizer que não podemos criar coleções de escalares ou objetos - todacoleção é uma coleção de linhas (com um campo, se necessário). SQL disfarça esse pro-blema permitindo uma coerção implícita entre um tipo de linha com um campo, e um valorsingleto do mesmo tipo de dados.
Em uma modalidade, eSQL provê a cláusula selecionar valor para pular a constru-ção de linha implícita. Somente um item pode ser especificado em uma cláusula selecionarvalor. Quando uma tal cláusula é utilizada, nenhum wrapper de linha é construído em tornodos itens na cláusula selecionar, e uma coleção do formato desejado pode ser produzida.ESQL também provê o construtor row para construir linhas arbitrárias. Assim, uma linha se-lecionar valor (e1, e2,...) é extremamente equivalente a selecionar e1, e2,...
Em outra modalidade, a semântica de selecionar poderia evitar a construção de li-nha para o caso de item único, e utilizar o construtor row explicitamente se necessário. Se acláusula selecionar contiver múltiplos itens, continuaria a se comportar como em SQL.
Uma abordagem alternativa e mais elegante é não permitir construções da forma"select e1, e2 from..." e em vez disso forçar as pessoas a utilizarem "select row(e1, e2)from.." sempre.
Correlação esquerda e aliasing: em SQL padrão, expressões em um dado escopo(uma cláusula única como selecionar, a partir de etc.) não podem referenciar expressõesdefinidas anteriormente no mesmo escopo. Alguns dialetos de SQL, incluindo T-SQL, supor-tam efetivamente formas limitadas desses na cláusula a partir de, porém a sintaxe para utili-zar tais construções é clunky e requer operações aplicar e não aninhar.
Em uma modalidade, eSQL generaliza correlações esquerdas na cláusula a partirde, e trata as mesmas de forma uniforme. Expressão na cláusula a partir de podem referen-ciar definições anteriores (definições à esquerda) na mesma cláusula sem a necessidade desintaxe especial. ESQL também impõe restrições adicionais em consultas que envolvemcláusulas agrupar por. Expressões na cláusula selecionar, cláusula ter, etc. dessas consul-tas podem se referir somente a chaves agrupar por via seus aliases. Construções como asque se seguem - que eram legais em SQL - são ilegais em eSQL:
Select t.x + t.y from T as t group by t.x + t.y
Q modo correto para fazer isso em eSQL é:Select k from T as t group by (t.x + t.y) as k
Referenciar colunas (propriedades) de tabelas (coleções): Em uma modalidade, to-das as referências de coluna em eSQL devem ser qualificadas com a alias de tabela. A se-guinte construção (considerando que "a" é uma coluna legal da tabela "T") é legal em SQL,porém não em eSQL:
Select a from TA forma aprova eSQL é:Select t.a as a from T as t
Referências não qualificadas apresentam vários problemas. Podem ser ambíguas.Sofrem de questões de captura interna/externa durante evolução de esquemas, e além dis-so, complicam a implementação. Consultas bem projetadas em SQL já utilizam referênciasde coluna qualificadas para trabalhar em torno desses problemas. O que eSQL faz é sim-plesmente executar essa diretriz, e isso não torna a linguagem mais complexa.
Navegação através de objetos: SQL utiliza a notação "." Para referenciar colunas de(uma linha de) uma tabela. E uma modalidade, eSQL estende essa notação (novamentetomada emprestada intensamente a partir de linguagens de programação) para suportarnavegação através de propriedades de um objeto. Por exemplo, se "p" for uma expressãodo tipo Pessoa:
p.Address.City
é a sintaxe eSQL para referenciar a cidade do endereço dessa pessoa. Muitos dia-letos de SQL já suportam essa sintaxe.
Navegação através de coleções: SQL não fornece um mecanismo fácil para nave-gação através de coleções aninhadas. Em uma modalidade, eSQL provê atalhos sintáticospara tratar desses casos. O .. operador em eSQL permite projeção de uma expressão a par-tir de uma coleção. Por exemplo, "a..b" é realmente 'syntactic sugar' para "select value t.bfrom a as t". Similarmente, "a..b(c*2)" é 'syntactic sugar' para "select value t2.c*2 from a ast1, tl.b as t2"
O operador".?" Em eSQL permite que usuários podem elementos a partir de umacoleção. Isso é similar ao operador"[]" em XPath. Uma construção da forma "a.?p" é real-mente um atalho para "select value t from a as t where p". Por exemplo, "p.?(id = 1)" real-mente significa "select value pO form ρ as pO where pO.id = 1"
Ao trabalhar com herança, é freqüentemente útil ser capaz de selecionar instânciasde um subtipo a partir de uma coleção de instâncias de supertipo. O operador oftype emeSQL (similar a oftype em Seqüências C#) provê essa capacidade. Logicamente, oftype(c,T)é equivalente a "select value treat(x as T) (from c as χ where χ is of T"
Eliminar o *: SQL suporta a sintaxe * não qualificada como uma alias para a linhainteira, e a * syntax (t.*) qualificada como um atalho para os campos daquela tabela. Alémdisso, SQL permite um agregado count(*) especial, que inclui nulos. Consultas bem projeta-das em SQL não utilizam tais sintaxes (pelo menos as variantes "select*" e "select t.*"). Utili-zar "*" é perigoso na presença de evolução de esquemas. Parte do problema é que SQL nãotinha meio para os usuários selecionarem a partir de linhas inteiras.
Em uma modalidade, eSQL não suporta a construção "*". Consultas de SQL daforma "select * from T" e "select T1.* from T1, T2..." podem ser expressas em eSQL como"select value t from T as t" e "select value t1 from T1 as t1, T2 as t2..." respectivamente. Adi-cionalmente, essas construções tratam de herança (capacidade de substituição de valor)graciosamente, enquanto as variantes "select*" são limitadas a propriedades de nível supe-rior do tipo declarado. As modalidades de eSQL não suportam também o agregado count(*).Em vez disso, suporta a construção count(group) para tratar desse caso.
Alterações no grupo por: Como descrito anteriormente, em uma modalidade, eSQLsuporta aliasing de chaves agrupar por, e correlações esquerdas entre essas chaves. Narealidade, as expressões na cláusula select e cláusula ter devem se referir às chaves agru-par por através dessas aliases. A cláusula agrupar por produz implicitamente um agregadoaninhar para cada partição de agrupar por - essa expressão é mencionada como "group".Funções de agregado na lista de seleção etc. devem se referir a essa expressão para exe-cutar agregação. Por exemplo:
Select kl, count(group), sum(group..(t.a))
From T as t
Group by t.b + t.c as k1
É a sintaxe eSQL para a seguinte consulta SQL:
Select b + c, count(*), sum (a)
From T
Group by b + c
Agregados baseados em coleção: agregados SQL são difíceis de entender. Emuma modalidade, eSQL suporta dois tipos de agregados. Agregados baseados em coleçãooperam em coleções, e produzem o resultado agregado. Esses podem aparecer em qual-quer lugar na consulta, e não exigem a necessidade de uma cláusula agrupar por. Por e-xemplo, a seguinte consulta eSQL é lega:
Select t.a as a, count({1,2,3}) as b from T as t
Em uma modalidade, eSQL também suporta agregados do estilo SQL, e converteimplicitamente os mesmos em agregados baseados em coleção (com base na coleção de"grupo".) Por exemplo, a seguinte consulta em eSQL é legal:
Select a, sum(t.b) from T as t group by t.a as a;
E é internamente traduzido em uma consulta da forma:
Select a, sum(group..(t.b)) as b from T as t group by t.a as a;Em uma modalidade, eSQL não suporta o agregado count(*). Utilize a construçãocount(group) em vez disso.
Inserção: em uma modalidade, instrução INSERT..VALUES de eSQL diferente deT-SQL. Ao contrário de T-SQL, eSQL não permite que uma lista de coluna seja especificadaem um inserto. Há dois motivos para isso. Primeiramente, o EDM não tem conceito de valo-res default para colunas; em segundo lugar, a abordagem de lista de coluna não se prestabem a manipular herança (capacidade de substituição de valor).
Deletar, atualizar: ao contrário de T-SQL, em uma modalidade, eSQL não permiteuma clausula from adicional em instruções de deletar e atualizar. Para instruções deletar,isso não apresenta um problema, uma vez que a consulta pode ser gravada com uma sub-consulta. Para instruções de atualizar, entretanto, a cláusula a partir de adicional tambémajuda a produzir novos valores a serem utilizados na cláusula Set.
Métodos e Propriedades levantados: A Query Language Do WINDOWS® (WinQL)permite navegação através de coleções via o operador".", se a própria coleção não tiveruma propriedade do mesmo nome. WinQL também permite filtração de elementos de umacoleção via a construção "[]" - similar a OPath. Em uma modalidade, eSQL utiliza o opera-dor ".." e ".?" para essa finalidade. Novamente, evolução de esquemas (e captura interna) éa principal razão que eSQL escolhe para distinguir entre navegação de coleção e navega-ção de objeto. E eSQL evita deliberadamente o uso de "[]" para predicados para evitar ques-tões de ambigüidade.
Semântica de ordenar por: WinQL especifica que a cláusula ordenar por é proces-sada antes da cláusula select. Isso é diferente de SQL onde a cláusula ordenar por é logi-camente processada após a cláusula select. Em uma modalidade, eSQL pode estar maispróximo a SQL nesse aspecto, enquanto WinQL toma uma abordagem mais semelhante aXquery. Qualquer abordagem é razoável e em alguns modos, o modelo WinQL é melhor;entretanto, a abordagem WinQL pode não ser suficientemente melhor para justificar umaalteração em comportamento para usuários de SQL.
SQL-92 limita na realidade a cláusula ordenar por para conter somente referênciasa itens na cláusula select. A maioria das implementações permite que a cláusula ordenar porreferencie outros itens que estão no escopo atualmente. Em uma modalidade, eSQL podeseguir o estilo mencionado por último.
Além das implementações específicas explicitamente expostas aqui, outros aspec-tos e implementações serão evidentes para aqueles versados na arte a partir da considera-ção do relatório descritivo revelado aqui. Pretende-se que o relatório descritivo e implemen-tações ilustradas sejam considerados somente como exemplos, com um espírito e escopoverdadeiros das reivindicações que se seguem.
Apêndice A: Especificação detalhada para Linguagem de consulta exemplarO que se segue é uma especificação exemplar, não limitadora para uma linguagemde consulta exemplar como considerado aqui. Após a especificação abaixo se encontra umaespecificação exemplar para extensões para uma tal linguagem de consulta.
1. Resumo funcional
1.1 Descrição de espaço problema
O CDP provê uma infra-estrutura de mapeamento relacionai de objeto que pode serconsumida por aplicações e estruturas. WinFS provê uma experiência de armazenagemintegrada para uma ampla variedade de aplicações de mesa. Tanto WinFS como CDP sãoconstruídos sobre o Modelo de Dados de entidade (EDM). O EDM é um modelo de dadosrelacionais estendido que suporta conceitos relacionais básicos, tipos ricos com herança erelações. Os usuários necessitam a capacidade de emitir consultas ricas contra seus dadosexpressos em termos do EDM.
Embora SQL tenha sido historicamente a linguagem de.consulta de escolha paraacesso a banco de dados, apresenta muitas desvantagens. Falta de suporte para tipos ri-cos, construções não ortogonais etc., são somente algumas dessas. ESQL tenta tratar mui-tos desses problemas com SQL. ESQL é projetado para ser similar a SQL e fornece algumainfra-estrutura adicional e aperfeiçoamentos em relação a SQL.
Tanto WinSF como CDP alavanca tecnologias de acesso de dados .NET existentes- ADO .NET - para acessar e manipular dados. Um Provedor de Dados .NET provê um mo-do de um certo modo uniforme para acessar dados a partir de qualquer fonte de dados viaConexões, Comandos, DataReaders e outros tais objetos. Comandos para um Provedor dedados .NET são expressos como séries, e devem estar no dialeto nativo do provedor (maisespecificamente, a fonte de dados que é fronteado pelo provedor). Como parte dos esforçosde CDP/WinFS, três novos provedores - o Provedor de Objeto, o Provedor EDM, e o Prove-dor WinFS - serão fornecidos, e todos esses utilizarão eSQL como o dialeto nativo.
2. Visão geral e Princípios de desenho
2.1 Princípios de desenho
Suporte de primeira classe para coleções e objetoseSQL deve tornar fácil para os usuários consultar continuamente seus objetos e co-leções.
Ortogonalidade
Construções em eSQL devem ser ortogonais. Não haverá interpretações contextu-ais sobre o uso de uma dada construção.
Capacidade de composição
Construções em eSQL devem ser componíveis em outras construções.
Similaridade com SQL
eSQL deve permanecer uma linguagem semelhante a SQL o máximo possível. Amenos que o desvio de SQL seja necessário (por exemplo, quando exigido pelo raciocínioacima), eSQL deve manter fidelidade com construções SQL.
3 Visão geral de linguagem
eSQL inclui a noção de uma expressão. Uma expressão, como em outras Iingua-gens de programação, é uma construção que pode ser avaliada para produzir um valor.Uma consulta eSQL é qualquer expressão legal. eSQL provê os seguintes tipos de expres-sões.
3.1 Literais
Um literal, como na maioria das linguagens de programação, é simplesmente umvalor constante. eSQL provê suporte nativo para literais numéricos e de série, e o literal nuloespecial (que tem um tipo de dados de flutuação livre).
3.2 Parâmetros
Parâmetros em eSQL permitem expressões (e consultas) para valores de referên-cia definidos fora da consulta.
3.3 Referências variáveis
Referências variáveis em eSQL permitem que expressões se refiram a outras ex-pressões que foram definidas (e denominadas) anteriormente no mesmo escopo.
3.4 Operadores Bultin
eSQL provê um pequeno conjunto de operadores incorporados. Isso inclui operado-res aritméticos como +,-,*,/, operadores de comparação (<,>,..), operadores lógicos (e, ou,não etc.), e alguns operadores diversos (caso, entre, etc.).
3.5 Funções
eSQL não define nenhuma função incorporada própria. Expressões de função eS-QL permitem o uso de qualquer função definida por usuário (que é visível para eSQL).
3.6 Navegação de objeto. Métodos
Essas expressões eSQL permitem que propriedades de objeto e métodos sejam re-ferenciados e manipulados naturalmente.
3.7. Funções agregadas
Funções agregadas em eSQL, como suas cópias SQL, permitem operações de do- brar em coleções. eSQL suporta um agregado aninhar, e qualquer agregado definido porusuário. Funções de agregado eSQL são baseadas em coleção em que podem ser utiliza-das em qualquer lugar em uma expressão. eSQL também suporta agregados baseados emgrupo como SQL que são somente utilizáveis em expressões de consulta.
3.8 Construções
eSQL provê três tipos de construtores. Construtores de linha podem ser utilizadospara criar um valor de tipo estrutural (registro) anônimo. Construtores de objeto (construto-res em C# etc.) podem ser utilizados para construir (denominados) objetos definidos porusuário. Construtores de multiconjunto podem ser utilizados para construir muIticonjuntos deoutros valores.
3.9 Operações de tipo
eSQL provê operações que permitem que o tipo de uma expressão (valor) sejaconsultado e manipulado. Isso inclui operações de interrogação como is of (similar à expres-são is em C#), casts de subtipo-supertipo como tratar (a expressão as em C#) e oftype (ométodo OfTYpe em Seqüências C#), e operadores de conversões como cast.
3.10 Operadores set
eSQL provê um conjunto rico de operações set. Isso inclui operadores set comoSQL como união, interseção, exceto e existe. Além disso, eSQL suporta que operadoresdupliquem eliminação (distinto), teste de qualidade de membro (in), junções (junção).
3.11 Expressões de consulta
Expressões de consulta representam consultas SQL select-from-where-... clássicas.
4. Detalhes de linguagem - expressões eSQL
4.1 Literais
Nulo
O literal nulo é utilizado para representar o valor nulo para qualquer tipo. Um literalnulo é considerado como sendo de flutuação livre (i.e.) é compatível com qualquer tipo. Nu-los digitados podem ser criados via um operador Cast sobre um literal nulo:
Select Foo (nul.l, v. a + v. b,) from values as ν —regular null literal
select cast (null as Int16) from values as ν -
typed null
Vide a seção 9.6 para regras ou onde literais nulos de flutuação livre podem ser uti-lizados.
Booleano
Literais Booleanos são representados pelas palavras-chave verdadeiro e falso.
Número inteiro (Int32, Int64)
Literais de número inteiro podem ser do tipo Int32 ou Int64. Um literal Int32 é umasérie de caracteres numéricos. Um literal Int64 é série de caracteres numéricos seguida porum L em letra maiúscula.
Decimal
Um número de ponto fixo (decimal) é uma série de caracteres numéricos, um perí-odo '.' e outra série de caracteres numéricos seguida por um M em letra maiúscula.
Flutuar, dobro
Um número de ponto flutuante de precisão dupla é uma série de caracteres numéri-cos, um período '.' e outra série de caracteres numéricos possivelmente seguidos por umexpoente. Um número de ponto flutuante de precisão única (ou flutuante) é uma sintaxe denúmero de ponto flutuante de precisão dupla seguido pelo f em letra minúscula.Série
Uma série é uma série de caracteres encerrados em aspas. Aspas podem ser as-pas únicas (') ou aspas duplas ("). Identificadores com aspas podem ser representados com[ ] ou "". Por default, somente o estilo [ ] é permitido, e construções "" são tratadas como lite-rais de série. O analisador eSQL pode permitir identificadores com aspas de estilo "" (queserão controlados por opções de analisador - fora do escopo desse documento); nesse ca-so, literais de série podem utilizar somente aspas únicas. Vide a seção 9.1.2 para mais in-formações sobre isso:'hello'"x"
"This is a sting"'so is THIS'
Outros literais
eSQL não suporta literais de outros tipos de dados de forma nativa (DataTime, Guid
etc.).
4.2 Parâmetros
Parâmetros são variáveis que são definidas fora da linguagem de consulta, nor-malmente via um API de ligação utilizado por uma linguagem hospedeira. Cada parâmetrotem um nome e um tipo. Nomes de parâmetro são descritos com o símbolo como umprefixo antes do nome para remover ambigüidades dos mesmos a partir dos nomes de pro-priedades ou outros nomes definidos na consulta. O API de ligação de linguagem hospedei-ra provê APIs para parâmetros de ligação. O seguinte exemplo mostra o uso de um parâme-tro em uma expressão:
Select c from customers as c where c.Name = @name
4.3 Variável
Uma expressão Variável é uma referência a uma expressão (denominada) definidaanteriormente no escopo atual. Uma referência de variável deve ser um identificador válidocomo definido em 6. O seguinte exemplo mostra o uso de uma variável em uma expressão:Select c from customers as c
4.4 Operadores incorporados
eSQL provê um número de operadores incorporados, como a seguir.
4.4.1 Aritmética
Operação SímboloSoma +<table>table see original document page 18</column></row><table>
Operadores aritméticos são definidos para primitivos numéricos como Int32, Int16,Int64, Dobro, Único e decimal. Para operadores binários, promoção de tipo implícito ocorrepara os operandos antes da aplicação do operador. Os tipos de resultado de todos os ope-radores aritméticos são iguais aos tipos de operando promovido. A soma também é definidapara série e atua como concatenação.4.4.2 Comparação
<table>table see original document page 18</column></row><table>
Operadores de comparação são definidos para primitivos numéricos como Byte,Int32, Int16, Int64, Dobro,Único e Decimal; série e DateTime. A promoção do tipo implícitoocorre para os operandos antes da aplicação do operador de comparação. Os operadoresde comparação sempre fornecem Booleano.
Igualdade e desigualdade são definidos para o tipo Booleano e qualquer tipo de ob-jeto que tenha identidade. Objetos não primitivos com identidade são considerados iguaissem partilharem a mesma identidade.
4.4.3 Lógico
<table>table see original document page 18</column></row><table>
Operadores lógicos são definidos para tipos Booleanos somente -e sempre retor-nam um tipo Booleano.4.4.4 Caso
A expressão caso tem semântica similar à expressão de caso TSQL. A expressãode caso é utilizada para fazer uma série de testes condicionais para determinar qual expres-são fornecerá o resultado apropriado.
Se b1, b2..... bn-1 forem expressões do tipo Booleano e e1, e2.....en forem ex-pressões de algum tipo S, então a seguinte expressão é uma expressão de caso válido quefornece um único valor do tipo S.
case
when bl then elwhen hl then e2
[ else vn ]
end
Essa forma da expressão de caso aplica uma série de uma ou mais expressõesBooleanas para determinar a expressão resultante correta. A primeira expressão quando aavaliar para o valor verdadeiro fornece a expressão-então correspondente. As expressõesrestantes não são avaliadas. Se nenhuma das condições quando for satisfeita, o resultado éo resultado de avaliar a expressão else (se uma existir) ou nula (se não houver expressãoelse). Observe, promoção do tipo implícito pode ocorrer entre expressões de resultado dife-rentes (e1, e2,... en, vn) para determinar o tipo de resultado efetivo da expressão de caso.
4.4.5 Entre
A expressão entre tem a mesma semântica que a expressão entre SQL. Determinase uma dada expressão resulta em um valor entre um limite inferior e um limite superior:
E1 between e2 and e3
Se e1, e2 e e3 forem todas expressões de algum tipo T, então a expressão acima éuma expressão válida de operador entre. A expressão entre é uma abreviatura de escreverdois operadores de comparação sobre o mesmo valor. A sintaxe entre é útil se e1 for umaexpressão complexa:
e1 >= e2 e e1 <= e3
A expressão não entre pode ser utilizada para indicar o inverso da expressão entre:
e1 não entre e2 e e3e1 < e2 ou e1 > e3
4.4.6 Como
A expressão como tema mesma semântica como definido para TSQL. Determina seuma série casa com um padrão, resolvendo verdadeiro se a série casa e falso se não casa.
Se casar, padrão e escape são todas expressões tendo tipo Série, então o que se seguesão expressões como válidas que fornecem um valor Booleano:
match Ilke patternmatch not Ilke patternmatch Iike pattern escape escapematch not Iike pattern escape escape
A sintaxe de série padrão é igual à sintaxe de série padrão TSQL.
4.4.7 Teste nulo (é nulo)
O operador é nulo é utilizado para determinar se uma expressão resulta no valornulo. Se a expressão resultar no valor nulo a expressão resulta no valor verdadeiro. De ou-tro modo a expressão resulta no valor falso. Se e for uma expressão, as seguintes expres-sões são expressões válidas que fornecem um Booleano:
e is nulle is not null
Use o operador é nulo para determinar se o elemento de uma junção externa não énulo:
select c £rom
CS St'S c Xeffc oiter jjoin as ds dlwfeere d is not null and d. χ - Qk
Use o operador é nulo para determinar se um membro tem um valor efetivo ou não:seieçt c from cs, as c where is not mill
4.5 Acesso a membro
O acesso a membro também é comumente conhecido como o operador de ponto.Use o operador de acesso a membro para fornecer o valor de uma propriedade ou campode uma instância de objeto. Se m for um membro do tipo T que tem tipo M1 e t for uma ins-tância do tipo T1 então t.m é uma expressão de acesso a membro legal que fornece um valorde tipo M:
select ρ, Narne. FirstMame from Person as p;
4.6 Invocação de método
Invocação de método é uma chamada explícita a um método. Fornece o resultadoda chamada de método. Os métodos podem ser métodos de instância de um tipo, métodosestágios de um tipo, ou métodos estáticos globais (ie) de função independente.
Se m for um método do tipo T que retorna o tipo M e tem parâmetros de tipos (P1,P2, ..., Pn), e t é uma instância de tipo T e e1 é uma expressão do tipo P1 e assim por dian-10 te, então t.m (e1, e2, ..., en) é uma invocação de método válido que fornece um valor de tipoM.
Se m for um método do tipo T que retorna tipo M e tem parâmetros de tipos (P1,P2, ..., Pn), e qn é um nome qualificado que se refere ao tipo T e e1 é uma expressão dotipo P1 e assim por diante, então qn.m(e1, e2, ..., en) é uma invocação de método estágio15 válido que fornece um valor do tipo M.
Se m é um método T que retorna o tipo M e tem parâmetros de tipos (P1, P2, ...,Pn), e qn é um nome qualificado que se refere ao prefixo de espaço de nome do método, ee1 é uma expressão do tipo P1 e assim por diante, então qn.m(e1, e2, ..., en) é uma invoca-ção de método estágio válido que fornece um valor do tipo M.
Um exemplo de uma invocação de método que poderia aparecer em uma consultaeSQL poderia ser o uso de métodos incorporados em tipos de dados primitivos:seleet t sql. s Ubstring (_ç; Natne,. .0, 2) from cvstomers c4.6.4 Resolução de sobrecarga
Mais de um método pode ser definido com o mesmo nome. Para determinar qualmétodo é referenciado por uma dada expressão, siga essas regras. A primeira regra aplica-da em sucessão que fornece somente um único método é o método resolvido.
1. Um método com o mesmo número de parâmetros existe.
2. um método onde cada tipo de argumento casa exatamente com o tipo de parâ-metro ou é o literal nulo.
3. Um método onde cada tipo de argumento casa exatamente ou é um subtipo dotipo de parâmetro ou o argumento é o literal nulo. O método com o número mínimo de con-versões de subtipo vence.
4. Um método onde cada tipo de argumento casa exatamente, é um subtipo de, oupode ser promovido para o tipo de parâmetro ou argumento é o literal nulo. O método com onúmero mínimo de conversões de subtipo e promoções vence.
5. A expressão de invocação de método é ambígua.
Observe que mesmo se um único método puder ser extraído utilizando essas re-gras, os argumentos ainda podem não casar com os parâmetros. Se esse for o caso, entãoos argumentos estão em erro.
4.7 Enums
Enums são valores numéricos integrais digitados fortemente que são mencionadospelo nome. Um enum é especificado utilizando um nome qualificado para consultar o tipo deenum seguido por um operador de ponto e o nome do enum. Se qn for o nome qualificadopara algum enum E, e en for o nome de um valor da enumeração, então qn.en é uma refe-rência de enum válida:
Color. Red
4.8 Operações de tipoeSQL provê um número de operações para trabalhar com tipos de valores de ex-pressão.
4.8.1 IsOf
A expressão Is of verifica se uma expressão é uma instância de um tipo especifica-do.
e is ©I ( Γ )Θ· is nofc oü ( T >e. '±& of ( only T )e ±s noü o£ { only T )
Se e for de algum tipo de compilar tempo S, e S é um subtipo/supertipo de T, entãoas expressões acima são expressões válidas, e retornam um resultado do tipo Booleano. Seo tipo de e for determinado em runtime como sendo T (ou algum subtipo de T), então e is ofT retorna Verdadeiro. Se e for nulo em runtime, essa expressão retorna nulo; de outro modoo resultado dessa expressão é falso.
Se o modificador único for especificado, então a expressão retorna verdadeiro so-mente se e era exatamente do tipo T, e não qualquer de seus subtipos. As expressões e isnot of (T) e e is not of (only T) são equivalentes de forma sintática a not (e is of (T)), e not(eis of (only T)) respectivamente. Se S não for um subtipo ou um supertipo de T, então essaexpressão origina um erro de compilar tempo.4.8.1.1 Tratar
A expressão tratar tenta redigitar uma dada expressão em termos de um superti-po/subtipo:
treat ( e as T )
Se e tiver tipo S e T for um subtipo de S ou S for um subtipo de T1 então a expres-são acima é uma expressão treat válida e fornece um valor de tipo T. Se nem S ou T for umsubtipo do outro, a expressão resulta em um erro de compilar tempo. Se e tiver tipo Funcio-nário e Gerente for um subtipo de Funcionário então a seguinte expressão fornece o mesmovalor de e, porém digitado como Gerente em vez de Funcionário:
Treat( e as Manager}
Se o valor de e não for na realidade do tipo Gerente, então a expressão fornece ovalor nulo.
4.8.1.2 Cast
A expressão cast tem semântica similar à expressão converter TSQL. A expressãocast é utilizada para converter um valor de um tipo em um valor de outro tipo. Somente con-versões de certos tipos são suportadas pela linguagem:
Cast( e as T )
Se e for de algum tipo S e S for convertível em T então a expressão acima é umaexpressão cast válida. T deve ser um primitivo (tipo escalar). O uso de uma expressão casté considerada uma conversão explícita. Conversões explícitas podem truncar dados ou per-der precisão. A lista de casts válidos suportados por eSQL é descrita na seção 10.5.
4.8.1.3 OfType
Uma expressão OfType especifica uma expressão de tipo que é utilizada para exe-cutar um teste de tipo contra cada elemento de uma coleção. A expressão OfType produzuma nova coleção do tipo especificado contendo somente aqueles elementos que eram e-quivalentes àquele tipo ou um subtipo do mesmo.
Se ts for uma coleção de tipo collection<S> e T for um subtipo de S, então OfTy-pe(ts, T) é uma expressão de tipo collection <T>, que fornece uma coleção de todos os ele-mentos e de ts onde o tipo individual de e, Te, é um subtipo de T. Uma expressão OfType éuma abreviatura da seguinte expressão de consulta:
Select value treat (t as T) from ts as t where t is of TDado que um Gerente é um subtipo de Funcionário, a seguinte expressão produzuma coleção somente de gerentes a partir de uma coleção de funcionários:
OfType (employees, Manager)
Também é possível up castt uma coleção utilizando o filtro de tipo:
OfTYpe (executives, Manager)
Uma vez que todos os executivos são gerentes, a coleção resultante contém aindatodos os executivos originais, embora a coleção seja agora digitada como uma coleção degerentes. Não é possível fazer um castt de tipo ilegal conhecido. A seguinte expressão ori-ginará um erro de compilar tempo. (Considerando evidentemente, que Endereço não é umsubtipo/supertipo de Funcionário):
OfType (employees, Address)
4.9 Referências
eSQL suporta os seguintes operadores para referências.
4.9.1 Ref
O operador Ref quando aplicado à variável de correlação para um entityset produz;uma referência a uma entidade a partir daquela coleção. Por exemplo, a seguinte consulta
retorna referências a cada Pedido:
Select ref(o) from Orders as o
O que se segue são usos ilegais do operador ref - a variável de correlação deveresolver para um conjunto de entidade no escopo atual:
Select ref(o) from (select value o from Orders as o)
4.9.2 CreateRef
O operador CreateRef pode ser utilizado para fabricar referências a uma entidadeem um entityset. O primeiro argumento para o operador é o identificador de entityset (nãouma literal de série), e o segundo argumento é uma expressão digitada de registro que cor-responde às propriedades chave do tipo entidade:
Select ref(BadOrders, row(o.ld)) from Orders as oA expressão digitada de registro deve ser estruturalmente equivalente ao tipo chavepara a entidade (ie) deve ter o mesmo número e tipos de campos na mesma ordem que aschaves de entidade - os nomes dos campos são irrelevantes.
4.9.3 Chave
O operador Chave é o inverso do operador CreateRef1 e pode ser utilizado para ex-trair a porção chave de uma expressão com ref de tipo. O tipo retorno do operador Chave éum tipo de registro - com um campo para cada chave da entidade, e na mesma ordem:
Select key( ref(BadOrders, row(o.ld))) from Orders as o
4.9.4. DeRef
O operador Deref desreferencia um valor de referência, e produz o resultado da-quela desreferência:
Select deref (o.CustRef) from Orders as o
Se r for uma referência do tipo ref<T>, então Deref(r) é uma expressão de tipo Tque fornece a entidade referenciada por r. Se o valor de referência for nulo, ou estiver pen-dente (ie) o alvo da referência não existe, o resultado do operador Deref é nulo.
4.9.4 Desreferenciar atributo
Pode-se navegar através de uma referência via operador".".O seguinte snippet extrai a propriedade Id (do Cliente) por navegar através da pro-priedade CustRef:
Select o.CustRef. Id from Orders as o
Se o valor de referência for nulo, ou estiver pendente (i.e.) o alvo da referência nãoexiste, o resultado é nulo.
4.10 Construtores
eSQL provê 3 tipos de construtores - construtores de linha, construtores de objetoe construtores de multiconjunto.
4.10.1 Construtores de linha
Construtores de linha podem ser utilizados para construir um registro estruturalmen-te digitado anônimo de um ou mais valores. O tipo de resultado de um construtor de linha éum tipo de linha - cujos tipos de campo correspondem aos tipos dos valores utilizados paraconstruir a linha. Por exemplo, a expressão abaixo:row(1 as a, "abe" as b, a+34 as c)produz um valor de tipo Record(a int, b string, c int).
Todas as expressões no construtor de linha devem ser aliased - se nenhum alias éfornecido, então eSQL tenta gerar um alias via as regras de aliasing especificadas em 0>Expressões no construtor de linha podem não se referir a aliases definidas anteriormente (àesquerda) no mesmo construtor.
t é ilegal para duas expressões no mesmo construtor de linha para ter a mesma ali-as. O operador dot(.) pode ser utilizado para extrair campos a partir de um registro (similar àextração de propriedades de um objeto).
4.10.2 Construtores NamedType (Inicializadores NamedType)eSQL permite que construtores do tipo denominado (inicializadores) sejam utiliza-dos para criar instâncias de tipos complexos denominados e/ou tipos de entidade. A expres-são abaixo cria uma instância de um tipo Pessoa (considerando que o tipo Pessoa tenhaaqueles atributos):
person ("abe", 12)
Os argumentos para o construtor são considerados como estando na mesma or-dem que a declaração dos atributos do tipo.
4.10.3 Construtores de coleção
O construtor de multiconjunto cria uma instância de um multiconjunto a partir deuma lista de valores. Todos os valores no construtor devem ser do tipo T mutuamente com-patível, e o construtor produz uma coleção do tipo Multiset<T>. As expressões abaixo criamum multiconjunto de números inteiros:
Multiset(1, 2, 3){1,2, 3}
4.11 Operações do conjunto
Essa seção contém uma variedade de operadores de conjunto.4.11.1 Distinto
A expressão distinta é utilizada para converter uma coleção de objetos em um con-25 junto fornecendo uma nova coleção com todas as referências duplicatas removidas. Se c foruma coleção do tipo collection<T> então distinct(c) é uma expressão distinta válida que for-nece uma coleção do tipo collection<T> que não tem duplicatas. O tipo T deve ser compará-vel igual. A expressão distinta é uma abreviatura de uma expressão selecionar:Distinct(c) -> select value distinct c from c
4.11.2 Flatten
A expressão alisar é utilizada para converter uma coleção de coleções em uma co-leção alisada com todos os elementos iguais, apenas sem a estrutura aninhada. Se c foruma coleção do tipo collection<collection<T» então flatten(c) é uma expressão alisar válida5 que fornece uma nova coleção de tipo collection<T>. A expressão alisar é uma abreviaturade utilizar a expressão select:
Flatten(c) -> select value c2 from c as c1, c1 .it as c2
4.11.3 Existe
A expressão existe tem a mesma semântica que a expressão existe TSQL. Deter-mina se uma coleção está vazia ou não. Se a coleção não estiver vazia, a expressão existe10 retorna verdadeira, de outro modo retorna falsa. Se c for uma coleção do tipo Collection<T>,então exists(c) é uma expressão existe válida que fornece um único valor do tipo Booleano.
4.11.4 In
O operador in é utilizado para testar um valor para qualidade de membro em umacoleção. O valor da expressão no lado esquerdo da palavra chave 'in' é buscado na coleção15 representada pela expressão no lado direito. Se e for uma expressão com tipo T e ts for umacoleção com tipo Collection<S>, e S e T tiverem uma relação de supertipo/subtipo, então asseguintes expressões são expressões de operador-in válido:
e in ts
e not in ts
No exemplo, a seguir, o nome "Bob" é buscado no conjunto de nomes de clientes:
'Bob' in customerNames
Se o valor for encontrado na coleção, o operador-in fornece o valor verdadeiro. Se o20 valor for nulo ou a coleção for nula, o operador-in fornece o valor nulo. De outro modo, ooperador-in fornece o valor falso. A forma não do operador fornece o oposto.
4.11.5 Union. Union ali
As expressões union e union ali em eSQL têm a mesma semântica que seus equi-valentes TSQL. UnionAII produz uma coleção que contém o conteúdo combinado das duas25 coleções (com duplicatas). Union produz uma coleção com duplicatas removidas.Se c1 for uma coleção do tipo Collection<T>, e c2 for uma coleção do tipo Collecti-on<S>, onde M é o supertipo comum de T e S1 então c1 union c2 e c1 union ali c2 são ex-pressões de união válidas que fornecem uma coleção do tipo Collection<M>.
O exemplo a seguir identifica o conjunto de todos os clientes que moram em Wa-5 shington, ou são bons clientes. A primeira expressão elimina quaisquer duplicatas (por e-xemplo, um bom cliente que também mora em Washington), enquanto a segunda expressãopreserva todas as duplicatas:
GoodCustomers union WashingtonCustomers
GoodCustomers union ali WashingtonCustomers
4.11.6 Interseção
A expressão Interseção tem a mesma semântica que a expressão interseção TS-10 QL. Determina a interação de duas coleções. Se c1 for uma coleção de tipo Collection<T>, ec2 for uma coleção do tipo Collection<S>, onde M é o supertipo comum de T e S, então c1intersect c2 é uma expressão de interseção válida que fornece uma coleção do tipo Collecti-on<M>. O exemplo a seguir identifica o conjunto de todos os clientes que moram em Wa-shington e são bons clientes:
I
GoodCustomers intersect WashingtonCustomers
15 4.11.7 Exceto
A expressão Exceto tem a mesma semântica que a expressão exceto TSQL. de-termina a diferença em um sentido de duas coleções. Se c1 for uma coleção do tipo Collec-tion<T>, e c2 for uma coleção do tipo Collection <S>, onde M é o supertipo comum de T e S,então c1 except c2 é uma expressão exceto válida fornecendo uma coleção do tipo Collecti-20 on <T>. No exemplo a seguir, o conjunto de todos os clientes que não são clientes ruins éidentificado:
AlICustomers except badCustomers
4.11.8 Sobreposições
A expressão sobreposições determina se duas coleções têm um elemento comum.Se c1 for uma coleção do tipo Collection<T>, e c2 for uma coleção do tipo Collection<S>,25 onde M é o supertipo comum de T e S, então c1 overlaps c2 é uma expressão de sobrepo-sições válida que fornece um resultado do tipo booleano. O exemplo a seguir verifica se al-gum cliente de Washington é um bom cliente:WashingtonCustomers overlaps goodCustomersE é um atalho sintático para:
exists (WashingtonCustomers intersect goodCustomers)4.11.9 Elemento
A expressão elemento extrai o elemento a partir de uma coleção singleto. Se c foruma coleção do tipo Collection<T>, então element(c) é uma expressão de elemento válida5 que fornece uma instância do tipo Τ. O exemplo a seguir tenta extrair o elemento singleto apartir de um conjunto de clientes ruins:
Element ( badCustomers )
Se a coleção estiver vazia,ou tiver mais de um elemento, então a expressão ele-mento retorna um nulo.
4.12 Navegação de coleção
eSQL provê um número de construções sintáticas que permitem manipulação maisfácil de coleções.
4.12.1 Proteção
O operador ..(collection-project) é utilizado para projetar elementos através de umacoleção. Se c for uma coleção do tipo Collection<T>, e ρ for uma propriedade de T com tipoQ, então c..p produz uma coleção de tipo Collection<Q>. Mais genericamente, se c for umacoleção do tipo Collection<T>, e e for alguma expressão de tipo Q, então c..e produz umacoleção do tipo Collection<Q> contendo o resultado de avaliar e para cada elemento de c. Oseguinte exemplo obtém os nomes com letra maiúscula de todos os departamentos:
Departments..(upper(name))
E é um atalho para a seguinte consulta:
select value upper (d.name) from Departments as d
20 4.12.2 Filtracão
O operador .?(collection-filter) é utilizado para filtrar elementos a partir de uma cole-ção. Se c for uma coleção do tipo Collection<T>, e e é uma expressão booleana com tipo Q,então c.?e produz uma coleção do tipo Collection<T> contendo somente aqueles elementos
10
1V
15de c que satisfaziam o predicado e. O seguinte exemplo obtém o conjunto de todos os de-partamentos que são baseados em Seattle:
Departments.?(location = 'Seattle')
E é um atalho para a seguinte consulta:
select value d from Departments as d where
d.Iocation = 'Seattle'
4.12.3 Projeção alisada
5 O operador ...(flattened collection-project) é utilizado para projetar elementos atra-
vés de uma coleção aninhada. Mais genericamente, se c for uma coleção do tipo Collecti-on<Collection<T», e e é alguma expressão do tipo Q1 então c...e produz uma coleção dotipo Collection<Q> contendo o resultado do primeiro alisamento c, e então avaliar e paracada elemento de c. O exemplo a seguir obtém os nomes com letra maiúscula de todos os10 funcionários, considerando que Funcionários é uma propriedade de valor definido de Depar-tamento:
Departments.Employees...(upper(Name))
E é um atalho para a seguinte consulta:
select value upper(e.name) from Departments as d,
d.Employees as e
4.12.4 Filtração alisada
O operador ..?(flattened collection-filter) é utilizado para filtrar elementos a partir de15 uma coleção aninhada. Mais genericamente, se c for uma coleção de tipo Collecti-on<Collection<T», e e for alguma expressão booleana, então c..?e produz uma coleção dotipo Collection<T> contendo o resultado do primeiro alisamento c, e então filtrando aqueleselementos do resultado que não satisfazem e. O seguinte exemplo obtém o conjunto de to-dos os funcionários cujo salário seja maior do que 10000, considerando que Funcionários é20 uma propriedade de valor definido do Departamento:
Departments. Employees..?(salary > 10000)E é um atalho para a seguinte consulta:
seIect value e
from Departments as d, d. Employees as eWhejfe- e. sa Iary > 10000
Regras de abrangência
Em todos os casos acima, ao navegar através de uma coleção do tipo Collecti-on<T>, um novo escopo é criado, e o elemento de coleção atual é ligado à variável it. Paraconveniência sintática, as propriedades (e métodos) de T são também consideradas comoestando em escopo, porém são consideradas como sendo atalhos para acesso a membroatravés da variável it. Por exemplo:
Departments ..Name -> Departments ..(it.Name)
4.13 Funções de agregados
Agregados são expressões que reduzem uma série de valores de entrada (normal-mente porém não necessariamente em um valor único). São normalmente utilizados emcombinação com a cláusula agrupar por da expressão selecionar, e têm limitações sobreonde podem ser na realidade utilizados. Cada operação de agregado é definida para um oumais tipos. eSQL não define um conjunto de agregados. Simplesmente se baseia em espa-ço de metadados circundante para tratar funções de agregados.
Agregados à base de coleção
Agregados baseados em coleção são agregados calculados sobre um conjunto es-pecífico de valores. Por exemplo, dado que pedidos é uma coleção de todos os pedidos,pode-se calcular a data de transporte mais cedo com a seguinte expressão:
min(orders..ShipDate)
Expressões nos agregados baseados em coleção são avaliadas utilizando o escopode resolução de nome ambiente atual.
Agregados baseados em grupo
Agregados baseados em grupo são calculados sobre um grupo como definido pelacláusula agrupar por. Para cada grupo no resultado, um agregado separado é calculadoutilizando os elementos em cada grupo como entradas para o cálculo agregado. Quandouma cláusula agrupar por é utilizada em uma expressão selecionar, somente nomes de ex-pressão de agrupamento, agregados ou expressões constantes podem estar presentes naprojeção ou cláusula ordenar por. O seguinte exemplo calcula a quantidade média enco-mendada para cada produto:
select p, avg(ol.QuaritIty) from orderLines as olgroup by ol.Product as ρ
Agregados baseados em grupo são simplesmente atalhos (para preservar compati-bilidade com SQL) para expressões baseadas em coleção. Os exemplos acima realmentetraduzirão em:
select p, avg(group.. <ol.Quantity) )' from•orderLines as ol
group by ol.Product as ρ
Onde a expressão grupo se refere ao agregado aninhar implicitamente produzidopela cláusula agrupar por. É possível ter um agregado baseado em grupo sem uma cláusulaagrupar por explícita na expressão selecionada. Todos os elementos serão tratados comoum grupo único, equivalente ao caso de especificar um agrupamento baseado em constan-te:
select avçr(ol.Quantity) from orderLines as ol
select avg(group..(oí.Quantity)) from orderLines asol group by 1
Expressões no agregado baseado em grupo são avaliadas utilizando o escopo deresolução de nome que seria visível para a expressão de cláusula onde.
Para preservar aparência e sensação de SQL, agregados baseados em grupo tam-bém podem especificar um modificador ali ou distinct em sua entrada. Se o modificador dis-tinct for especificado, duplicatas são eliminadas a partir da coleção de entrada de agregado, antes do agregado ser computado. Se o modificador ali for especificado (ou nenhum modifi-cado for especificado), então nenhuma eliminação de duplicata é executada. O modificadordistinct é realmente uma abreviação sintática para o operador distinct:
Avg (distinct ol.quantity)Avg (distinctc (ol.quantity))
Distinção entre agregados baseados em coleção e baseados em grupoAgregados baseados em coleção são o modo preferido de especificar agregadosem eSQL. Entretanto, agregados baseados em grupo são também suportados para diminuiras dores de transição para usuários SQL. Similarmente, a especificação de distinct (ou ali)como modificadores para a entrada de agregado é suportada para comportamento seme-lhante a SQL, porém o mecanismo preferido deve utilizar o operador distinctQ em vez disso.
A diferença em programas de resolução de nome entre agregados baseados em grupo ebaseados em coleção pode exigir que uma implementação faça tentativas de avaliação sobos dois escopos. A estratégia é favorecer a interpretação como um agregado baseado emcoleção primeiramente e um agregado baseado em grupo em segundo lugar.4.14 Expressões não suportadas
4.14.1 Predicadosquantificados
SQL permite construções da forma:
sal > ali (select. salary .from ernployees}sal > amy (select:salary from ernployees)
eSQL não suporta tais construções. As expressões acima podem ser expressas emeSQL como:
not exists (ernployees.?(sal > it.salary))exists (ernployees.? (sal > it.salary))ou:
not exists (select 0 from ernployees as e where sal > e.salary)exists (select 0 from ernployees as e where sal > e.salary)
eSQL poderia ser estendido com expressões quantificadas.15 4.14.2*
SQL suporta o uso do "*" como um atalho sintático na cláusula selecionar para indi-car que todas as colunas necessitam ser projetadas para fora.5. Detalhes de linguagem - expressões de consulta
A expressão consulta é a expressão eSQL de propósito mais geral e é a mais co-20 mum para programadores familiarizados com SQL. Combina juntos muitos operadores deconsulta diferentes em uma única sintaxe. Muitos desses operadores podem ser especifica-dos individualmente; entretanto nenhum é tão expressivo como quando combinado na ex-pressão de consulta. A menos que especificado de outro modo, a expressão selecionarcomporta similarmente à instrução de selecionar TSQL.25 A expressão consultar é composta de uma série de cláusulas que aplicam opera-
ções sucessivas a uma coleção de objetos. São baseados nas mesmas cláusulas encontra-das em instrução de selecionar SQL padrão; selecionar, a partir de, onde, grupo por, ter epedido por.
Em sua forma mais simples, a expressão de consulta é especificada pela palavra-chave select seguida por uma lista de projeção, a palavra-chave from, uma expressão defonte, a palavra-chave where e finalmente uma condição de filtrar:
Select m from c where e
Nesse exemplo, c é uma coleção de objetos de algum tipo T, m é um membro de Tcom tipo M e e é uma expressão booleana que pode se referir a um ou mais membros de T.A consulta produz uma nova coleção de objetos com o tipo M.
5.1 Cláusula a partir de
Para a maior parte, a cláusula-a partir de tem a mesma semântica como descritopara TSQL. Entretanto, é muito menos restritivo em sintaxe, permitindo qualquer expressãode linguagem que forneça uma linguagem para ser uma fonte legal. Uma cláusula-a partir deé uma lista separada por vírgula de um ou mais itens da cláusula-a partir de. A cláusula-apartir de pode ser utilizada para especificar uma ou mais fontes para a expressão select. A15 forma mais simples de uma cláusula-a partir de é uma expressão única que identifica umacoleção e um alias:
From C as c
Genericamente, a expressão selecionar opera em cada elemento da coleção defonte em ordem. Isso é mencionado como iteração. Expressões na lista selecionar ou cláu-sula-onde podem se referir a propriedades do elemento atual utilizando a alias da coleçãocomo uma variável que se refere ao elemento.5.1.1 Item da cláusula a partir de
Cada item da cláusula a partir de se refere a uma coleção de fonte na consulta.eSQL suporta as seguintes classes de itens de cláusula a partir de.5.1.1.1 Item de cláusula a partir de simples
O item de cláusula a partir de mais simples é uma expressão única que identificauma coleção e um alias:
C como c
A especificação alias é opcional - uma especificação alternativa do item de cláusulaa partir de acima poderia ser:
20
25C
Se nenhum alias for especificado, então eSQL tenta gerar um alias com base naexpressão de coleção. Vide 0 descrito posteriormente.5.1.1.2 Item da cláusula a partir de Junção
Um Join FromCIauseItem representa uma junção entre dois itens da cláusula a par-tir de. eSQL suporta junções cruzadas, junções internas, junções externas esquerda e direi-ta e junções externas completas - tudo em modo similar a T-SQL. Como em T-SQL1 os doisitens de cláusula a partir de envolvidos na junção devem ser independentes - não podemser correlacionados. Um CrossAppIy/OuterAppIy pode ser utilizado para esses casos.Junções cruzadas
Uma expressão junção cruzada produz o produto cartesiano das duas coleções:C as c cross join D as dJunção interna
Uma junção interna produz um produto cartesiano limitado a duas coleções:C as c [inner] join D as d on e
Essa expressão processa uma combinação de todo elemento da coleção do ladoesquerdo emparelhada contra todo elemento da coleção do lado direito onde a condição on15 é verdadeira. Uma condição on deve ser sempre especificada.
Junção externa esquerda. Junção externa direita
Uma expressão de junção externa produz um produto cartesiano limitado das duascoleções:
C as c Ieft outer join D as d on e
A expressão processa uma combinação de todo elemento da coleção do lado es-querdo contra todo elemento da coleção do lado direito onde a condição on é verdadeira. Sea condição on for falsa, a expressão ainda processa uma única instância do elemento dolado esquerdo emparelhado contra o elemento do lado direito com o valor nulo. Junçõesexternos direitos podem ser expressos em um modo similar.Junção externa completa
Uma junção externa completa explícita produz um produto cartesiano limitado dasduas coleções:
5
10
20
25C as c full outer join D as d on e
A expressão processa uma combinação de todo elemento da coleção do lado es-querdo emparelhado contra todo elemento da coleção do lado direito onde a condição on éverdadeira. Se a condição on for falsa, a expressão ainda processa uma instância do ele-mento do lado esquerdo emparelhado contra o elemento do lado direito com o valor nulo, euma instância do elemento do lado direito emparelhado contra o elemento do lado esquerdocom o valor nulo.
Observações:
para preservar compatibilidade com Sql-92, TSqI1 a palavra-chave outer é opcio-nal. Assim, "junção esquerda", "junção direita" e "junção completa" são sinônimos para "jun-ção externa esquerda", "junção externa direita" e "junção.externa completa".
a cláusula ON deve ser utilizada para junções interna e externa; é ilegal para jun-ções cruzadas.
5.1.1.3 Item da Cláusula Applv from
eSQL suporta dois tipos de Apply - CrossAppIy e OuterAppIy. Um cross apply pro-duz um emparelhamento exclusivo de cada elemento da coleção do lado esquerdo com umelemento da coleção produzida por avaliação da expressão do lado direito. Com um crossapply a expressão do lado direito é uma função do elemento do lado esquerdo:
select s, f from C as c cross apply fn(c) as f
O comportamento de cross apply é similar àquele descrito para a lista junção. Se aexpressão do lado direito avaliar para uma coleção vazia, a cross apply não produz empare-Ihamentos para aquela instância do elemento do lado esquerdo.
Um outer apply é similar a um cross apply, exceto um emparelhamento é aindaproduzido mesmo quando a expressão do lado direito avalia para uma coleção vazia:
Select c, f from C as c outer apply fn(c) as f
Observação: Diferente de TSql, não há necessidade de uma etapa não aninhadaexplícita.
5.1.2 Coleções múltiplas na cláusula a partir de
A cláusula a partir de pode conter mais de uma especificação de coleção, separadapor vírgulas. Em tais casos, as coleções são assumidas como sendo unidas juntas. Pensenessas como uma junção cruzada de n-sentido.5.1.3 Correlação esquerda
Itens na cláusula a partir de podem se referir a itens especificados anteriormente.No exemplo abaixo, CeD são coleções independentes, enquanto c.Names depende de C:
From C as c, D as d, c.Names as e
Isso é logicamente equivalente a:
From (C as c join D as d) cross apply c.Names as e
5.1.4 Semântica
Logicamente, as coleções da cláusula a partir de são assumidas como sendo partede uma junção cruzada de n-sentido - o caso degenerado sendo uma junção cruzada de 1sentido. Aliases na cláusula a partir de são processados esquerda para a direita, e são adi-cionados ao escopo atual para referências posteriores. A cláusula a partir de é assumida10 como produzindo um multiconjunto de linhas - com um campo para cada item na cláusula apartir de, e representando um único elemento a partir daquele item de coleção.
___________ No exemplo acima, a cláusula a partir de produz logicamente um multiconjunto de
linhas de tipo Row(c, d, e) onde os campos c, d e e são assumidos como sendo do tipo deelemento de C, D e c.Names. eSQL introduz um alias para cada item de cláusula a partir de. 15 simples em escopo. Por exemplo, na consulta abaixo:
From (C as c join D as d) cross apply c.Names as e
Os nomes introduzidos no escopo são c, d e e. Diferente de SQL, a cláusula a partirde somente introduz as aliases no escopo. Quaisquer referências a colunas (propriedades)dessas coleções devem ser qualificadas com a alias.
5.2 Cláusula Where
20 A cláusula-onde tem a mesma semântica como descrito para TSQL. Restringe os
objetos produzidos pela expressão consulta por limitar os elementos das coleções de fonteàquelas que passam a condição:
Select c from cs as c where e
A expressão e deve ter o tipo Booleano. A cláusula-onde é aplicada diretamenteapós a cláusula a partir de, antes de agrupar, ordenar ou projeção. Todos os nomes de ele-25 mentos definidos na cláusula a partir de são visíveis para a expressão da cláusula-onde.5.3 Cláusula qroup by
A cláusula agrupar por tem a semântica similar como descrito para TSQL. Pode-seespecificar uma ou mais expressões cujos valores são utilizados para agrupar elementos defonte juntos para fins de avaliar agregados:
Selectel1 count(c.dl) from cgroup by e1, e2,.., en
Cada expressão na cláusula agrupar por deve avaliar para algum tipo que pode sercomparado para igualdade. Esses tipos são genericamente primitivos escalares como nú-meros, séries e datas. É possível utilizar tipos complexos como condições agrupar por, des-de que os tipos definam uma noção de igualdade. Não se pode agrupar por uma coleção.
Após uma cláusula de grupo ser especificada, explícita ou implicitamente (em virtu-de de uma cláusula ter na consulta), o escopo atual é oculto, e um novo escopo é introduzi-do.
A cláusula selecionar, a cláusula ter e a cláusula ordenar por não mais serão capa-zes de se referir a nomes de elementos específicos na cláusula a partir de. Pode se referirsomente às próprias expressões de agrupamento. Para fazer isso, pode-se atribuir novosnomes (aliases) a cada expressão de agrupamento. Se nenhum alias for especificado parauma expressão de agrupamento, eSQL tenta gerar uma via as regras de geração alias emO:
select glr gZP gn from c as cl
garoup by ei as gl, &2 as g2, .„, en as gn
Expressões na cláusula agrupar por podem não se referir a nomes definidos anteri-ormente na mesma cláusula agrupar por.
Além de agrupar nomes pode-se especificar também agregados na cláusula-selecionar, cláusula-ter e cláusula ordenar por. Um agregado contém uma expressão que éavaliada para cada elemento do grupo. O operador de agregado reduz os valores de todasessas expressões (normalmente, porém nem sempre, em um único valor). A expressão deagregado pode fazer referência aos nomes de elementos originais visíveis no escopo deorigem, ou a qualquer um dos novos nomes introduzidos pela própria cláusula agrupar-por.Embora os agregados apareçam na cláusula selecionar, cláusula ter e cláusula ordenar por,são na realizado avaliados sob o mesmo escopo que as expressões de agrupamento:
select name, sum<o, Price * o.Quantityj as total• from orderLines as o
gr©up by o. Procluct as nameEssa consulta utiliza a cláusula agrupar-por para produzir um relatório do custo detodos os produtos encomendados, divididos por produção. Fornece o nome 'nome' ao pro-duto como parte da expressão de agrupamento, e então referencia aquele nome na listaselecionar. Também especifica a 'soma' de agregado na lista selecionar que referencia in-ternamente o preço e quantidade da linha do pedido.
Grupos denominados
Os próprios grupos podem ter nomes. Quando um grupo é nomeado introduz umnovo nome no escopo que se refere à coleção de objetos que formam uma instância de gru-po. O próprio grupo é um agregado - agregado aninhar - que simplesmente agrega todosos itens que casam os critérios para o grupo em um multiconjunto. Logicamente, a cláusulaagrupar por executa agrupamento com base nas chaves, e um agregado aninhar implícito -um para cada grupo - que contém a coleção de colunas não chave para aquele grupo.
Referências subseqüentes a agregados - agregados baseados em grupo - são tra-duzidas em agregados baseados em coleção, onde a coleção em questão é o agregadoaninhar produzido pela cláusula agrupar por:
select name., sum.(o. Priee * o.-Quantity) as total,mygroup
from orderLines óg-roup mygroup by o. PrQduct as narne
Nesse exemplo, o grupo mygroup é identificado na cláusula agrupar-por e referen-ciado na lista selecionar. O nome mygroup se refere a uma coleção de instâncias de Order-Line que formam um único grupo. Cada linha da coleção resultante terá três propriedades;nome, total e mygroup.
É desnecessário sempre definir seu próprio nome para um grupo. Mesmo sem es-pecificar um o grupo pode ser sempre acessado utilizando o nome grupo:
select n-amè, (o. Pirice * o.Quantity) as total,
group
from ordèrLínes^ogroup by o.Product as -narne
5.4 Cláusula ter
A cláusula ter é utilizada para especificar uma condição de filtração adicional no re-sultado de um agrupamento. Se nenhuma cláusula agrupar por for especificada na consulta,um implícito "group by 1" - grupo de conjunto único - é assumido. A cláusula ter trabalhaexatamente como a cláusula where, exceto que é aplicada após a operação agrupar-por.Isso significa que a cláusula ter pode somente fazer referência a aliases de agrupamento eagregados:
Sdlect namer sxam(o. Price. * o.Quantity) as totalfroiii ordarLi-nes ogroup o. Product as ri amehaving sum(o.Quantiry> > 1
Esse exemplo é igual ao exemplo agrupar por, exceto que a cláusula ter limita osgrupos somente aqueles tendo mais de uma unidade de produto nos mesmos.5.5 Cláusula selecionar
A lista de uma ou mais expressões após a palavra-chave selecionar é conhecidacomo a lista selecionar ou mais formalmente como a projeção. A forma de projeção maisgeral é uma única expressão. Se você selecionar algum membro m a partir de uma coleçãoc, então você produzirá uma nova coleção de todos os valores m para cada elemento de c:
Select c.m. from c
Por exemplo, se clientes for uma coleção do tipo cliente que tenha uma propriedade10 Nome que e do tipo série, então selecionar Nome a partir de clientes fornecerá urna coleçãode séries:
Select c.Name from customers as c
Cláusulas selecionar valor e linha
eQL suporta duas variantes da cláusula selecionar. A primeira variante - selecionarlinha - e identificada pela palavra-chave selecionar, e pode ser utilizada para especificar umou mais itens que devem ser projetados para fora. Implicitamente, um wrapper de linha éadicionado em torno dos itens, com o resultado de que o resultado da expressão de consul-ta é sempre um multiconjunto de linhas - com os campos apropriados. Cada expressão emuma selecionar linha deve especificar um alias. Se nenhum alias for especificado, eSQLtenta gerar um alias utilizando as regras de aliasing descritas em 0.
A outra variante da cláusula selecionar - selecionar valor - é identificada pela pala-vra-chave selecionar valor, e permite somente que um item seja especificado, e não acres-centa um wrapper de linha.
Um selecionar linha é sempre expressável em termos de um selecionar valor. Porexemplo:select 1 as s, "abe" as b, a+3 4 as c
select vaiue row (l as a, "abe" as b, a+34 as c)
Modificadores All e Distinct
As duas variantes de selecionar permitem a especificação de um modificador ali oudistinet. Se o modificador distinet for especificado, duplicatas são eliminadas a partir da co-leção produzida pela expressão consulta (até e incluindo a cláusula selecionar). Se o modifi-cador ali for especificado, então nenhuma eliminação de duplicata é executada.
Esses modificadores são somente preservados para serem compatíveis com SQL.eSQL sugere o uso do operador distinet em vez disso, porém suporta essas variantes, etraduz de forma transparente a expressão:
select distinet e.ãl, c.a2 Bxom T as adistinet(select o.al, c.a2 £*om T as a)
Semântica
A cláusula selecionar é avaliada após avaliação das cláusulas a partir de, cláusula,agrupar por e ter. A cláusula selecionar pode se referir somente a itens atualmente em es-copo (via a cláusula a partir de, ou a partir de escopos externos). Se uma cláusula agrupar-por foi especificada, então a cláusula selecionar é somente permitida para referenciar asaliases para as chaves agrupar por. Com referência aos itens da cláusula a partir de somen-te é permitido como parte de funções de agregado.
5.5.1 Desvios a partir de SQL
Sem suporte para *
ESQL não suporta o uso de * ou o * qualificado para indicar que a cláusula- a partirde inteira (ou todas as colunas a partir de uma tabela) deve ser projetada para fora. Mesmoem SQL, consultas bem elaboradas evitam essas construções, uma vez que podem ter efei-tos colaterais inesperados quando esquemas se desenvolvem. eSQL permite que consultasprojetem para fora de registros inteiros em vez disso por referência à coleção de aliases dacláusula a partir de. A seguinte consulta SQL:
Select *fromT1,T2
É muito melhor expressa em eSQL pela construção a seguir:Select t1, t2 from T1 as t1, T2 as t2
5.6 Cláusula ordenar por
A cláusula ordenar por pode especificar uma ou mais expressões que determinam aordenação dos elementos no resultado. A cláusula ordenar por é logicamente aplicada aoresultado da cláusula selecionar. Pode referenciar itens na lista selecionar através de seusaliases. Além disso, pode referenciar também outras variáveis que estão atualmente no es-copo. Entretanto, se a select_clause foi especificada com um modificador distinct, então acláusula ordenar-por pode referenciar somente aliases a partir da cláusula selecionar:
Select c as c1 from cs as c order by c1 .e1, c.e2.....en
Cada expressão na cláusula ordenar por deve avaliar para algum tipo que possaser comparado para desigualdade ordenada (menor do que ou maior do que, etc.). Essestipos são genericamente primitivos escalares como números, séries e datas.
Cada expressão na cláusula ordenar-por pode especificar opcionalmente critériosde separação. ASC (ou DSC) pode ser especificado para indicar que um tipo ascendente(ou um tipo descendente) é necessário na expressão específica. Adicionalmente, para ex-pressões do tipo série, uma cláusula COLLATE pode ser especificada para indicar a confe-rência de série a ser utilizada para ordenação.
Especificação posicionai, por exemplo, ordenar por 3, pode ser utilizada para indi-car o item correspondente (terceiro) na lista selecionar não é suportada.
6 Detalhes de linguagem - comando
6.1 Comando
Um comando eSQL é o termo utilizado para a solicitação de consulta inteira. Umcomando pode ser uma expressão de consulta como uma expressão selecionar ou umainstrução utilizada para inserir, deletar ou atualizar objetos. Um comando é logicamentecomposto de três partes.
. um Prólogo opcional
. uma cláusula WITH opcional
. uma consulta ou uma instrução DML
Por exemplo, imagine que haja um tipo denominado Cliente e uma coleção de ins-tâncias de Cliente denominados clientes. O que se segue são todos comandos válidos:
customers. ? (Name 'Bob')
select c.Name, c.Phone from customers c6.1.1 Prólogos de comando
O Prólogo de comando (opcional) pode especificar um conjunto de espaços de no-me para uso. Esses serão descritos posteriormente na seção em espaços de nome.
6.1.2 Cláusula WITH
eSQL suporta uma cláusula WITH como um prefixo para qualquer consulta (ou ins-trução DML). A sintaxe da cláusula WITH é como a seguir;
WjLtItClause = WITH <ooitimon-tauble-expr> [, Ccommon-
tat>le-expx">] *
<cortunon-t;able-expx> : : = <simpleldentifier> AS
<paranthes ±zedExpr>
Observações
. definições de <common-table-expr> podem se referir a expressões de tabela co-mum definidas mais cedo na cláusula WITH. POr exemplo, a seguinte definição é legal:
WITH tab1 as (...), tab2 as (select t from tab1 as t)
6.2 Instrução de consulta
Uma Instrução de consulta é simplesmente uma expressão.
6.3 Instrução de DML
Instruções de DML são descritas na próxima seção.7 DML
eSQL suporta inserir, atualizar e deletar instruções DML.7.1.1 Inserir
o comando INSERT em eSQL é muito similar à instrução INSERT em SQL padrão:
[Withclause] Insert [into] <container> [<with-parent>] FROM <expr>[Withclause] Insert [into] <container> [<with- parent>] <query_expr>[Withclause] Insert [into] <container> [<with- parent>] VALUES <query_expr>
Semântica
. <container> representa qualquer recipiente de dados. EntitySets são o recipientemais lógico.
. <expr>/<query_expr> é um multiconjunto (nos dois primeiros casos), que produzum conjunto de valores para inserir no recipiente. No terceiro caso (cláusula VALUES), <ex-pr> é do tipo do recipiente de elemento.
. A WithCIause é definida em seções subseqüentes.. a cláusula With-parent é descrita em seções subseqüentes.Exemplos
Insert into NewCustomers select o from oldcCustumersas o
insert into NewCustomers from Multiset (Customer (...),Customer (...),...)
-The follwing statements are ali equivalent
inset into NewCustomers from Multiset(Customer(...))
inset into NewCustomers select c from
Multiset(Customer(...)) as c
Insert into NewCustomers from {Customer(...)}
inset into NewCustomers values Customer(...)
inset into NewCustomers values (Customer(...))
Observações:
. a instrução INSERT..VALUES de eSQL é levemente diferente de T-SQL. Por um5 motivo, os parênteses em torno do valor são opcionais, e não são interpretados como umconstrutor de linha quando presentes.
. Ao contrário de T-SQL1 eSQL não permite que uma lista de coluna seja especifi-cada para uma instrução Insert.7.1.2 Deletar
10 O comando DELETE em eSQL é similar à instrução DELETE em SQL padrão.
[WithClause] Delete [from] <container> [as <alias>][<with-parent-clause>] [where <expr>]
Semântica
. <container> representa qualquer recipiente de dados. EntitySets são o recipientemais lógico.
. <expr> é um predicado (ie) do tipo booleano.15 . <with-parent-clause> é definido posteriormente.
Exemplos:
Delete from Newcustomers as η where n.id >10Delete from NewCustomersObservações
. Diferente de T-SQL1 a instrução DELETE em eSQL não permite cláusulas a partirde múltiplas. Utilize uma subconsulta em vez disso.7.1.3 Atualizar
A instrução atualizar em eSQL é similar de forma conceptual a instrução UPDATEem SQL padrão:
Update_statement:: = [WithClause]
UPDATE <container> [as <alias>][<with-parent-clause>]{<set_clauses>} [<apply-
clauses>]
[where <expr>]<set_clauses> :: = SET <set_clause> [, <set_clause>]*<set_clauses> :: = <field_expr> EQUAL <expr><field-expr> :: = <expr>
Semântica
. <container> representa qualquer recipiente de dados. EntitySets são o recipientemais lógico.
- 10 . <expr> é um predicado (ie) do tipo booleano.
. <field-expr> é uma expressão de valor-1 (i.e.) pode ser uma referência de coluna,uma referência a uma propriedade de uma coluna, ou uma expressão TREAT que envolveuma tal propriedade
. <with-parent-clause> é definida posteriormente.15 Exemplos:
UPDATE NewCustomers as η
SET n.name.firistName=UPPER (n.name.firstName),
TREAT (n.address as
lnternationalAddress).contrycode='US'
WHERE n.name Iike 'ABC%'
Observações
. Diferente de T-SQL, a instrução UPDATE em eSQL não permite múltiplas classesa partir de. Utilize uma subconsulta em vez disso.
. Um atributo pode ser modificado no máximo uma vez na instrução UPDATE.7.2. DML para Relações de EDM
O EDM introduz a noção de ReIationshipSets como coleções de instâncias de rela-ção. Relações tanto de Associação como de Composição são modeladas através dessesReIationshipSets.
7.2.1 Associações
O padrão de uso geral é que você primeiramente crie instâncias das entidades, eentão crie relações entre as entidades pela inserção no ReIationshipSet. O exemplo a seguirdemonstra DMLs em uma tal relationshipset. Assuma dois tipos de entidade Pedido e Clien-te (com EntitySets - Pedidos e Clientes). Assuma ainda uma relação OrderCustomer entreessas duas entidades, e OrderCustomerSet como a relationshipset:
— Insert a relationship between an Order and aCustomer
Insert into OrderCustomerSetSelect OrderPustomer(ref(q) , ref (c))From Customers ,as c, Orders as oWiiere o-Id -=?= 123 and c,Name = 1ABC'
— Delete a relationship between an Order and aCustomer
Delete Erom OirderCustomerSet as ocWhere oc.Order.Id = 123
7.2.2 Composições
ReIationshipSets correspondendo a composições são também atualizáveis. Deve-se primeiramente criar a instância de entidade de pai. Ao contrário de associações, entretan-to, não há etapa separada de criar a instância filho. A inserção na ReIationshipSet de Com-posição cria automaticamente a instância de filho. Os exemplos desse incluem:
— Inserting new Iines into an existing orderInsert into orderLineset,.Line.
with parent (element(select ref(o) from Ordersas o
where o.Id = 20))select Line(...) from ...
— modifying.an existing Iine itemUpdate OrderLineSet.Line as. 1
with parent (element(select ref(o) from Ordersas o
where o.Id = 20))Set 1 .description = ...Where ...
— deleting an existing Iine item
Delete OrderLineSet.Line as 1.
with parent (element(select ref(o) from Orders
as o
where o.Id = 20))where 1 .description =
Observação: a cláusula especial "com pai como" para modificar a composição.
8 eSQL Misc
8.1 Consultasrecursivas
eSQL permite suporte para consultas recursivas permitindo que a definição de tabe-Ia (paranthesizedExpr) referencie a si própria. Por exemplo:
WITH tabl. as (multiset(1, 2, 3, 4, 5)),tab2 asmultiset(1)union ali
_____________ select t2
from tab2 as t2, tabl as t1where t2 = t1)
select t from tabl as t
ESQL não garante sobre terminação da recursão.
8.2 Suporte para relações EDM
O EDM introduz a noção de ReIationshipSets - que são equivalentes lógicos de ta-belas de link em SQL. ReIationshipSets podem ser consultados exatamente como outrascoleções. Adicionalmente, eSQL suporta ajudantes de navegação para navegação mais fácilsobre relações. A forma geral de um ajudante de navegação é a seguinte:
Select o.Id1 o-> OrderCustomer.CustomerFrom Orders as o
Onde OrderCustomer é o nome da relação, e Cliente é o nome do cliente final darelação.
8.3 Comentários
eSQL suporta comentários do estilo. Comentários eSQL podem ser das seguintesformas:
this is a comment"this is also a comment"
Comentários podem ser utilizados em qualquer local onde um caractere de espaçobranco é esperado.
. caracteres de comentário do estilo "-" (hífen duplo) podem ser utilizados na mes-ma linha que o código a ser executado, ou em uma linha sozinhos. Tudo a partir dos hífensduplos até o final da linha faz parte do comentário.
. /*...*/ (pares de caractere de asterisco-traço para frente). Esses caracteres de co-mentário podem ser utilizados na mesma linha como código a ser executado, em linhas so-zinhas, ou mesmo no código executável. Tudo a partir do par de comentários aberto (/*) atéo par de comentários próximo (*/) é considerado parte do comentário. Esses comentáriospodem cobrir múltiplas linhas.
9 Resolução de nome eSQL e outras regras
9.1 Identificadores
Identificadores em eSQL são utilizados para representar aliases de expressão, refe-15 rências variáveis, propriedades de objetos, funções, etc. Identificadores em eSQL podemser de dois tipos.
9.1.1 Identificadorsimples
Um identificador simples é simplesmente uma seqüência de caracteres alfanuméri-cos (e o underRank)
O primeiro caractere do identificador deve ser um alfabeto, a-z ou A-Z.
9.1.2 Identificadores citados
Um identificador citado é qualquer seqüência de caracteres circundada por colche-tes, ou aspas duplas. A citação default é um colchete. Aspas duplas podem ser utilizadascomo o caractere de citação somente quando o analisador para eSQL permitir isso - as op-ções de analisador exato para controlar isso são deixados a critério do analisador. Observetambém que quando aspas duplas podem ser utilizadas como o caractere de citação, nãopodem ser utilizados para literais de série - literais de série necessitariam, então sempreutilizar aspas únicas.
Identificadores citados permitem que uma pessoa especifique identificadores comcaracteres que não seriam normalmente legais em identificadores. Todos os caracteres en-tre os colchetes (ou as aspas) são considerados parte do identificador, incluindo todo espaço branco.
Um identificador citado pode não incluir os seguintes caracteres:. linha nova
. retorno do carrinho
. tabs
. backspace
. [(somente no caso de aspas de estilo [ ])
Poder-se-ia inventar nomes de propriedade com caracteres de outro modo normal-mente ilegais:
select c.ContactNaoe as [Contact Name] from customers asselectc. ContactName as "Contact Name" from customers as a
Pode-se utilizar um identificador citado para especificar um identificador que nor-malmente seria considerado uma palavra reservada da linguagem. Por exemplo, se o tipo E-mail tiver uma propriedade denominada 'a partir de', poder-se-ia remover ambigüidade damesma da palavra reservada 'a partir de' utilizando os colchetes:
Select e.ffrom] from emails as e
Pode-se utilizar um identificador citado no lado direito de um operador de ponto:Select t from ts as t where t.[a property] ==2
Para utilizar o mesmo char como o caractere de aspa de fechamento em um identi-ficador, utiliza-se o mesmo duas vezes. Por exemplo:
Select t from ts as t where t.[a bc]]] ==2
O identificador abe] fica de fora apropriadamente.
9.2 Sensibilidade do caso
Todas as palavras-chave em eSQL são insensíveis ao caso (como em SQL). Identi-ficadores podem ser sensíveis ao caso ou insensíveis ao caso dependendo das opções deanalisador especificadas. Palavras-chave em eSQL são sempre insensíveis ao caso.
9.3 Regras de aliasing
eSQL recomenda que aliases sejam especificadas em consultas sempre que fornecessário. Aliases são necessários para as seguintes construções:
. campos de um construtor de linha
. itens na cláusula a partir de, de uma expressão de consulta. itens na cláusula selecionar de uma expressão de consulta. itens na cláusula agrupar por de uma expressão de consulta. argumentos para uma expressão junçãoAliases válidos
Qualquer identificador simples, ou identificador citado é um alias válido.
Geração de alias
Se nenhum alias for especificado, eSQL tenta gerar um com base em algumas re-gras simples.
Se a expressão (para a qual o alias é não especificado) for um identificador sim-pies ou citado, aquele identificador é utilizado como o alias. Por exemplo:row (a, [b/) -> row (a as a, [b] as [b])
se a expressão for uma expressão mais complexa, porém o último componentedaquela expressão for um identificador simples, então aquele identificador é utilizado comoo alias. Por exemplo:
row (a.al , b,[b1]) -> row(a.a1 as a1, b.[b1] as [b1])de outro modo uma exceção de compilar tempo é originada.
9.4 Regras de abrangência
Regras de abrangência definem quando variáveis específicas são visíveis na lin-guagem de consulta. Algumas expressões ou instruções introduzem novos nomes. As re-gras de abrangência determinam onde aqueles nomes podem ser utilizados, e quando ouonde uma nova declaração com o mesmo nome que outro pode ocultar seu predecessor.
Quando nomes são definidos, diz-se que são definidos em um escopo. Um escopocobre uma região da consulta. Todas as expressões ou referências de nome em um certoescopo podem ver nomes definidos naquele escopo. Antes do início de um escopo e após omesmo terminar, nomes definidos no escopo não podem ser referenciados.
Escopos podem ser aninhados. Partes da linguagem introduzem novos escoposque cobrem regiões que podem conter outras expressões de linguagem que também intro-duzem escopos. Quando escopos são aninhados, referências podem ser feitas a nomesdefinidos no escopo mais interno em que a referência está bem como quaisquer nomes de-finidos em quaisquer escopos externos. Quaisquer dois escopos definidos no mesmo esco-po são considerados escopos filhos, referências podem não ser feitas a nomes definidosnos escopos filhos.
Se um nome for declarado em um escopo interno que casa com um nome declara-do em um escopo externo, referências naquele escopo ou nos escopos declarados naqueleescopo se referem somente ao nome recentemente declarado. O nome no escopo externo éoculto. Mesmo no mesmo escopo, os nomes podem não ser referenciados antes de seremdefinidos.
Nomes globais podem existir como parte do ambiente de execução. Isso pode in-cluir nomes de coleções ou variáveis de ambiente persistentes. Esse escopo que contém osmesmos é o escopo mais externo. Parâmetros não estão em um escopo. Uma vez que asreferências a parâmetros incluem sintaxe especial, os nomes de parâmetros não colidemcom outros nomes na consulta.
9.4.1 Expressões de consulta
A expressão de consulta introduz um novo escopo. Nomes definidos na cláusula apartir de são introduzidos no escopo a partir em ordem de aparição, da esquerda para a di-reita. Na lista junção, expressões podem se referir a nomes definidos anteriormente na lista.Propriedades públicas (campos, etc.) de elementos identificados na cláusula a partir de nãosão adicionadas ao escopo a partir de - devem ser sempre referenciados através do nomequalificado por alias. Normalmente, todas as partes da expressão selecionar são considera-das compreendidas no escopo a partir de.
A cláusula agrupar por também introduz um novo escopo filho. Cada grupo pode terum nome de grupo que se refere à coleção de elementos no grupo. Cada expressão de a-grupamento também introduzirá um novo nome no escopo de grupo. Além disso, o agrega-do aninhar (ou o grupo denominado) também é adicionado ao escopo. As próprias expres-sões de agrupamento estão compreendidas no escopo a partir de. Entretanto, quando umacláusula agrupar por é utilizada, a lista selecionar (projeção), cláusula ter e cláusula ordenarpor são consideradas como estando compreendidas no escopo de grupo e não no escopo apartir de. Agregados têm tratamento especial, e esses são descritos abaixo.
A lista selecionar pode introduzir novos nomes no escopo, em ordem. Expressõesde projeção à direita podem se referir a nomes projetados à esquerda. A cláusula ordenarpor pode se referir a nomes (aliases) especificados na lista selecionar. A ordem de avaliaçãode cláusulas na expressão selecionar determina a ordem em que os nomes são introduzidosno escopo. A cláusula a partir de é avaliada primeiramente, seguido pela cláusula onde,cláusula de agrupamento, cláusula ter, cláusula selecionar e finalmente a cláusula ordenar por.
Manipulação de agregado
eSQL suporta duas formas de agregados - agregados à base de coleção e agrega-dos baseados em grupo. Agregados baseados em coleção são a construção preferida emeSQL, enquanto os agregados baseados em grupo são simplesmente suportados paracompatibilidade de SQL.Ao resolver um agregado, eSQL primeiramente tenta tratar o mesmo como um a -gregado baseado em coleção. Se isso falhar, então eSQL transforma a entrada de agregadopara ser uma referência ao agregado aninhar, e tenta resolver essa nova expressão. Porexemplo:
Avg(t.c) -> avg(group..(t.c))
9.4.2 Operações de projetar/filtrar coleção
Para os operadores de projetar/filtrar coleção (....... .? e ..?) um novo escopo é cri-ado para a projeção/predicado, e o nome it é implicitamente adicionado ao escopo - pararepresentar cada elemento da coleção. Além disso, para simplicidade, os membros públicosdo elemento de coleção são também adicionados ao escopo - novamente apenas pela du-ação da avaliação da projeção/predicado. Por exemplo:
Departments.. Name
Departments..(it.Name)
Produz um multiconjunto de nomes de departamentos - onde cada Departamento éassumido como tendo uma propriedade de Nome.
9.5 espaço de nome
eSQL introduz espaços de nome para tratar a questão de conflitos de nome paraidentificadores globais como nomes de tipo, conjuntos de entidade, funções etc. O suportede espaço de nome em eSQL é muito similar ao modelo CLR. ESQL provê a cláusula usarque pode ser utilizada no Prólogo Comando. Duas formas da cláusula usar são fornecidas -espaços de nome qualificados (onde um alias mais curto é fornecido para o espaço de no-me), e espaços de nome não qualificados:
using System.Data.TSqI;using tsql=System.Data.TSql;
Regras de resolução de nome
Se um identificador não puder ser resolvido nos escopos locais, eSQL tenta entãolocalizar o nome nos escopos globais (ie) os espaços de nome. eSQL primeiramente tentacasar o identificador (prefixo) com um dos espaços de nome qualificados. Se houver umcasamento, então eSQL tenta resolver o resto do identificador no espaço de nome especifi-cado - se nenhum casamento for encontrado, uma exceção é originada:using tsql=System.Data.TSql;
using winfs.=System.Storage.WinFs,
select tsgl.substr (p:Name) from Person as ρ
select i.Itemld from Items as i where i is of winfs.Contact
eSQL então tenta sondar todos os espaços de nome não qualificados (especifica-dos no prólogo) para o identificador. Se o identificador puder ser localizado exatamente emum espaço de nome, então aquele local é retornado. Se mais de um espaço de nome tiverum casamento para aquele identificador, uma exceção é originada. Se nenhum espaço denome puder ser identificado para o identificador, eSQL então passa o nome sobre o escopopara fora seguinte (o objeto de Conexão/comando):
using System.Data.TSqI;
select subst r(p.Name) from Person as ρ
Diferenças a partir do modelo CLR
Vale a pena citar uma diferença a partir do modelo CLR. No CLR1 você pode utilizarespaços de nome parcialmente qualificados - eSQL não permite isso. Por exemplo, em C#,o que se segue é legal, enquanto o equivalente não é legal em eSQL:
using System.Data.TSgI;
void main () {
int χ = y.z.foo(); ~ reference to method Foo of class ζ in~ namespace
System.Data.TSql.Y}
Uso de ADO.NET
Consultas/instruções de DML são expressos via Comandos ADO.NET. Os coman-dos podem ser construídos sobre objetos de Conexão. Espaços de nome podem ser especi-ficados como parte dos objetos de Conexão e comando também. Se eSQL não puder resol-ver um identificador na própria consulta, então os espaços de nome externos são sondados(via regras similares). A consulta, objetos de Comando e Conexão formam anéis de espaçosde nome - onde cada anel é sondado primeiramente.
9.6 Literais de nulo e inferência de tipo
Como descrito anteriormente, literais nulos são compatíveis com qualquer tipo nosistema de tipo eSQL. Entretanto, para o tipo de um literal nulo ser deduzido corretamente,eSQL impõe certas limitações sobre onde um literal nulo pode ser utilizado. As seguintesregras se aplicam
Nulos digitados
Nulos digitados (i.e.) "cast(null as Int16)" podem ser utilizados em qualquer lugar;não há necessidade adicional de inferência de tipo, uma vez que o tipo é conhecido nessemomento.
Literais nulos de flutuação livre
Literais nulos de flutuação livre podem ser utilizados nos seguintes contextos:
. como um argumento para uma expressão cast/treat - esse é o mecanismo reco-mendado para produzir uma expressão nulo digitado.
. um argumento para um método ou uma função (regras de sobrecarga padrão seaplicam, e se uma sobrecarga não puder ser pega, então um erro de compilação é originado
. como um dos argumentos para uma expressão aritmética como +, -, , /. O(s) ou-tro(s) argumento(s) não podem ser literais nulos; de outro modo inferência de tipo não épossível.
. Como um dos argumentos para uma expressão lógica (e/ou/não) - todos os ar-gumentos são conhecidos como sendo do tipo booleano.
. como o argumento para uma expressão "é nula" ou "não é nula" - as expressões"nulo é nulo" e "nulo não é nulo" são legais (porém bobas)/
. como um ou mais dos argumentos uma expressão como - espera-se que todos osargumentos sejam séries.
. como um ou mais dos argumentos para um construtor do tipo denominado.
. como um ou mais dos argumentos para um construtor de multiconjunto. Entretan-to, pelo menos um argumento para o construtor de multiconjunto deve ser uma expressãodiferente de um literal nulo.
. como uma ou mais das expressões then/else em uma expressão de caso. Pelomenos uma das expressões then/else na expressão de caso deve ser uma expressão dife-rente de um literal nulo.
Literais nulos de flutuação livre não podem ser utilizados em outros cenários. Al-guns desses cenários (não exaustivos; incluídos somente para ilustração) incluemargumentos para um construtor de linha.
Observações
As expressões é nulo e não é nulo são consideradas como sendo especiais.
10 Sistema do tipo eSQL
eSQL opera em e produz instâncias do Modelo de dados de entidade (EDM). Essedocumento não entrará em detalhes sobre o EDM; em vez disso, alguns dos itens de inte-resse especial são chamados.10.1 Tipos de linha
Linhas (a.k.a. tuples) são estruturais por qualidade de membro. A estrutura de umalinha depende da seqüência de membros denominados e digitados que compreende. Umalinha é um EDM InIineType - não tem identidade e não pode ser herdada a partir do mesmo.
Instâncias do mesmo tipo de linha são equivalentes se os membros são respecti-vamente equivalentes. Linhas não tem comportamento além de sua equivalência estrutural.
Linhas não tem equivalente no runtime de linguagem comum. As consultas podemresultar em estruturas contendo linhas ou coleções de linhas.
A ligação de API entre as consultas de eSQL e a linguagem hospedeira definirácomo as linhas são realizadas no resultado da consulta. Em linhas ADO.NET, linhas serãoalisadas como DataRecords.
10.2 Coleções
Tipos de coleções representam zero ou mais instâncias de outros objetos. O EDMsuporta vários tipos de coleções - incluindo multiconjuntos, listas etc. Esse documento so-mente lida com Multiconjuntos.
103. Capacidade de anulação
No EDM1 capacidade de anulação é limitação sobre uma propriedade, e não umafaceta de um próprio tipo. Todo tipo no EDM é anulável. Literais Nulos em eSQL são consi-derados como sendo compatíveis com tipo alternado no EDM.
10.3.1 Semântica nula
Nulos em eSQL se comportam muito similarmente com Nulos em TSq1. Especifi-camente, a maioria das expressões que operam em um nulo retorna nulos. Isso inclui:
. expressões aritméticas
. expressões lógicas
. expressões de tipo
As seguintes expressões podem não retornar nulos quando um ou mais dos seusargumentos são nulos:
. construtores (tipo, linha, multiconjunto)
. funções/métodos
.operadores é nulo e não é nulo
. outros
10.4 Promoção de tipo implícito
eSQL define uma variedade de operadores binários e unários comuns, como adi-ção, multiplicação e negação sobre tipos de dados primitivos como número inteiro, flutuanteand string. Normalmente, operadores binários como adição operam sobre duas instânciasdo mesmo tipo de dados. Entretanto, às vezes é legal solicitar que um operador trabalhesobre duas instâncias de tipo diferente; por exemplo, adicionar e número inteiro e um flutu-ante.
Para que isso funcione, um dos dois operandos deve ser promovido ao tipo do ou-tro. Em geral, esse é o tipo com a maior precisão, de modo que não há perda de dados du-rante a conversão. Em algumas circunstâncias, os dois operandos são promovidos a umterceiro tipo para assegurar que não haja perda de dados.
A tabela a seguir lista as promoções de tipo implícito incorporadas na linguagem. Aprimeira coluna lista o tipo base e a segunda coluna lista as promoções mais imediatas quepodem ser feitas ao tipo. Por exemplo, um Int16 pode promover para um Int32. Ainda assim,pode promover também para um Int64, uma vez que Int32 pode promover para Int64.
<table>table see original document page 56</column></row><table>
Tipos que não são listados ou são listados como tendo uma promoção de 'nenhum'não podem ser implicitamente promovidos.
Se uma pessoa desejar saber a promoção de tipo correto ao tentar adicionar umInt16 a um flutuante, poderia olhar a tabela para ver que um Int16 realmente promoverá umflutuante, ainda assim um flutuante não promoverá para um Int16. Portanto, o Int16 serápromovido a um flutuante, de modo que dois flutuantes podem ser adicionados juntos.
Um exemplo ligeiramente mais complicado teria um Int32 sendo adicionado a umflutuante. Observe que um Int32 não promoverá a um flutuante e um flutuante não promove-rá a um Int32. Entretanto, tanto Int32 como flutuante promoverão para um dobro. Portanto,os dois operandos são promovidos para dobro, e dois dobros são adicionados juntos.10.5 Conversões do tipo legal
O que segue é uma tabela de conversões legais entre tipos de dados primitivos.
N.T. INSERIR A TABELA NA PÁGINA 60
Onde
<table>table see original document page 57</column></row><table>
11. Ligações de linguagem hospedeira
A ligação de linguagem hospedeira é a API pela qual a pessoa interage com eSQL.ESQL foi projetado como uma linguagem de consulta que é acessada via uma API a partirde uma linguagem de programação hospedeira bem do mesmo modo que TSQL atual éacessado por programadores utilizando API's de acesso de dados da Microsoft. De formaconceptual, os dados que estão sendo consultados residem em algum lugar fora do domínioda linguagem hospedeira, em um banco de dados ou outra armazenagem persistente, ouuma estrutura de dados que é opaca para operadores de linguagem normal.
O mecanismo de acesso de dados preferido para eSQL é ADO.NET. O objeto Co-mando em ADO.NET tem uma propriedade CommandText (que pode ser definida para umasérie de consulta eSQL). O método Executar no objeto Comando retorna uma DataReader(que suporta uma interface IEnumerator). A DataReader é logicamente uma coleção de Da-taRecords, onde uma DataRecord representa um único elemento do resultado.
12 Gramática
12.1 Comando
<table>table see original document page 58</column></row><table>
1.2.DML
<table>table see original document page 58</column></row><table>
12.3 Expressões de consulta
<table>table see original document page 58</column></row><table>expr
exprList
aliasedExpr
literaIExpr
parameterExprvariableRefExprd otExprmethodExpr
constructorExpr
rowConstructorExpr
multisetConstructorExpr
aggregateExpr
builtinExpr
1-queryExpr
literaIExpr
IparameterExpr
IvariabIeRefExpr
IbuiItinExpr
IdotEXpr
IconstructorExpr
ImethodExpr
IaggregateExpr
IcollectionNavigationExpr
IrelationshipNavigationExpr
IsetOpExpr
IparanthesizedExpr
expr [,expr]*
(generalExpr)
numericLiteral
IstringLiteraI
IbooIeanLiteraI
InuIILiteraI
@simpleldentifier
identifier
expr.identifier
[expr.]identifier([all|distinct] [exprList])
rowConstructorExpr
lobjectConstructorExpr
!multisetConstructorExpr
row(aloasedExpr[,aliasedExpr]*)
[identifier.]* identifier([exprList])
[identifier.]*identifier([all|distinet]exprList
)
arithmetieExpr
IcomparisonExpr
IIogicaIExpr
IIikeExpr
IisNuIIExpr
IbetweenExprarithmeticExpr
comparisonExpr
IogicaIExpr
isNuNExpr
IikeExpr
betweemExpr
derefExpr
refExpr
create RefExpr
keyExpr
caseExpr
whenList
WhenExpr
EIseExpr
typeOpExpr
IcaseEXpr
ItypeOpExpr
IrefExpr
IderefExpr
IkeyExpr
IcreateRefExpr
expr+expr
|expr-expr
|expr*expr
|expr%expr
|+expr
|-expr
expr<expr
|expr>expr
|expr=expr
|expr<=expr
|expr>=expr
|expr<>expr
expr and expr
|expr && expr
|expr or expr
|expr Il expr
|not expr
I! expr
expr is [npt] null
expr [not] Iike expr escape expr
expr [not] between expr and expr
deref(expr)
ref(identifier)
createref (identifier, expr)
key (expr)
case whenlist[elseExpr] endwhenExpr {whenExpr}when expr then exprelse expr
treat (expr as expr)|cast (expr as expr)relationshipNavigationExpr
collectionNavigationExpr
setOpExpr
quryExpr
SeIectCIause
rowSelectClause
valueSelectClause
fromClause
fromClauseltem
simpleFromClauseltem
Jointype
I expr is [not] of ([only] expr)
I oftype (expr, expr)
expr->identifier.identífier
expr..expr
|expr.?expr
|expr...expr
|expr..?expr
expr union expr
|expr union ali expr
|expr intersect expr
|expr except expr
|expr overlaps expr
|expr in expr
Iexists (generalExpr)
Ielement (general Expr)
|flatten (generalExpr)
selectClause
from clause
[whereClause]
[groupByClause]
[havingClause]
[orderByClause]
rowSelectClause
IvalueSelectClause
select[all| distinct]aliasedExpr
{,aliasedExpr}
Select value [all|distinct] expr
from fromClauseitem {,fromClauseltem}
simpleFromClauseltem
IjoinFromCIauseItem
KjoinFromCIauseItem)
IapplyFromCIauseItem
l(applyFromClauseltem)
expr
|expr as simpleidentifierIeft [outer] join|right [outer] joinjoinFromClauseltem
om expr
applyType
apllyfromClauseltem
whereClause
groupByClause
havingClauseorderByClause
orderByClauseltemcollationidentifierquotedldentifier
unicodeCharacters
Simpleldentifier
numericLiteral
nulILiteral
booleanLiteral
int32Literal
int64Literal
doubleLiteral
floatLiteral
decimaILiteral
stringLiteral
|[inner] join|full [outer] join
fromClauseltem cross join fromClauiseltemfromClauseltem joinType formClauseltem
crossapply|outer applyfromClauseltem applyType fromClauseltemwhere expr
group [idenfier} by aliasedExpr
{,aliasedExpr}
having expr
order by orderByClauseltem{,orderByClauseltem}expr[collate collation] [asc|desc]simpleidentifier
quotedidentifier|simpleldentifier
[UnicodeCharacters]
!"unicodeCharacters"
unicodeCharacter {unicodeCharacter}
Ietter [letter|digit|J
int32Literal
|int64Literal
IdoubIeLiteraI
IfIoatLiteraI
IdecimaILiteraI
nuill
true|false
digit {digit}
integerLiteralL
digit {digit} .digit {digit}
[(E|e) [+I-] digit {digit}]
doubleLiteralf
digit{digit}.digit{digit} M
'{unicodeCharacter}'
!"{unicodeCharacter}"APÊNDICE Β: Especificação detalhada para extensões para a linguagem de con-sulta exemplar
1. Visão geral
1.1 Finalidade
Esse documento detalha as extensões (funções) para a linguagem de consulta eS-QL para WinFS/CDP.
eSQL provê suporte para invocar funções, porém não provê nenhuma função incor-porada sozinha. (Operadores como +, -, são tratadas diferentemente, e são assumidas co-mo sendo preparadas na própria linguagem). Os usuários de linguagens como T-SQL e ou-tros dialetos de SQL são acostumados a um conjunto rico de funções incorporadas. A finali-dade desse documento é descrever como eSQL pode ser estendida para tratar dessas ne-cessidades.
De modo fundamental, todas as funções em eSQL são tratadas iguais: as funçõesdefinidas pelo usuário. ESQL utiliza espaços de nome para definir diferentes recipientes defunções em um modo similar ao uso de espaços de nome para conter tipos. Provedores po-dem definir tais espaços de nome com o conjunto associado de funções, e tornar os mes-mos disponíveis via serviços de metadados para usuários de eSQL. Esse documento focali-za no conjunto específico de funções incorporadas disponíveis a partir do Servidor SQL eWinFS e os espaços de nome através dos quais são tornados disponíveis.
Esse documento não trata da questão de como os provedores fornecem essa listade funções, e como essas são carregadas pelo resto do sistema.
Essas extensões são agrupadas pelos provedores de armazenagem que suportamos mesmos. A lista de provedores é como a seguir:
1. SQL Server 2000.
2. SQL Server 2005. Esse provedor suporta todas as funções de SQL 2000.
3. WinFS. Esse provedor suporta todas as funções SQL 2005 e SQL 2000.
A seguinte tabela sumariza a funcionalidade:
<table>table see original document page 63</column></row><table><table>table see original document page 64</column></row><table> Por favor vide as seções posteriores do documento para casos listados como su-porte parcial na tabela acima.
1.2 Mecanismo de extensão
Detalhes sobre o mecanismo de extensão eSQL que permitem a funcionalidade deextensão podem ser encontrados na seção 9.4 (Espaços de nome) da especificação de Lin-guagem eSQL. Observe que espaços de nome parciais não são suportados; vide a espec.de linguagem eSQL para mais detalhes.
Espaços de nome podem ser importados em uma consulta utilizando a cláusula uti-lizar de eSQL. Alternativamente, um ou mais espaços de nome podem ser especificadosfora dos limites da consulta, por exemplo, como parte dos objetos de Comando/Conexão.
1.3 Execução de extensão
Execução de consulta (incluindo funções de extensão) sempre ocorre na armaze-nagem. Adicionalmente, a menos que mencionado de outro modo, espera-se que a semân-tica das funções de extensão sejam igual a do servidor. Os analisadores de eSQL validam aassinatura das invocações de função; entretanto, qualquer validação semântica é executadana armazenagem subjacente.
2. Desenho detalhado
2.1 agregados
Funções de agregados executam um cálculo sobre um multiconjunto de valores eretornam um único valor. Com a exceção de COUNT, funções de agregado ignoram valoresnulos. As seguintes funções SQL disponíveis são suportadas:
<table>table see original document page 64</column></row><table><table>table see original document page 65</column></row><table>
Funções de agregado ignoram valores nulos ao computar o valor (exceto para con-tagem). Observe também que count(*) não é suportado. Funções de agregado podem serutilizadas em um predicado e em uma definição de projeção. Adicionalmente, os agregadossuportam um modo "distinto" (similar a suporte de SQL) em tipos de dados que suportamigualdade. O tipo de retorno dessas funções se baseia no tipo da propriedade contra a quala função é executada. Assim, por exemplo, avg(int) retornará um int. Isso pode não ser es-perado visto que a média de 2,3 retornará 2 em vez de 2,5. Para trabalhar isso o usuárionecessita castt explicitamente a propriedade para um tipo que tenha a precisão correta, porexemplo, avg(cast(intProperty as double)).
2.1.1 Espaço de nome
Essas funções estão no espaço de nome System.Data.Tsql.Aggregates.
2.1.2 Exemplos
Using System.Data.TSql.Aggregates;
Select count (i.Children) as Count
From Items as i;
Select Max (i.displayName)
From Items as i
Group by i.gender;
2.1.3 Plataformas suportadas
Suportado em: SQL 2000, SQL 2005 e WinFS.
2.2 Funções de série
Essas funções escalares executam uma operação em um valor de entrada de sériee retornam um valor numérico ou de série.
<table>table see original document page 65</column></row><table><table>table see original document page 66</column></row><table>
Reverse(x) Retorna o inverso de uma expressão de série.
Por favor observe que todas as funções de série tem índices baseados em um.
2.2.1 Espaço de nome
Essas funções estão no espaço de nome System.Data.Tsql.String.
2.2.2 Exemplos
Using System.Data.String;Select substring(reverse(i.DispIayName), 1, 5)From Itens as i
2.2.3 Plataformas suportadas
Suportadas em: SQL 2000, SQL 2005 e WinFS.
2.3 Funções de matemática
Essas funções escalares executam um conjunto comum de operações matemáti-cas.
<table>table see original document page 67</column></row><table><table>table see original document page 68</column></row><table>
2.3.1 Espaço de nome
Essas funções estão no espaço de nome System.Data.TSqI.Math.
2.3.2. Exemplos
Using System.Data.TSql./////math;Select Pl()
From Items as i
2.3.3 Plataformas suportadas
Suportadas em: SQL 2000, SQL 2005 e WinFS.
2.4 Funções de dados
Essas funções escalares executam uma operação em um valor de entrada de datae horário e retornam um valor de série, numérico ou data e horário:
<table>table see original document page 68</column></row><table><table>table see original document page 69</column></row><table>
2.4.1 Espaço de nome
Essas funções estão no espaço de nome System.Data.TSql.Date.
2.4.2 Exemplos
A parte da data necessita ser especificada como um literal de série:
Using System.Data.Tsql.;Date;
Select i
From Items as i
Where i.ModifiedTime > dateadd ('day', -10,i.ModifiedTime)
2.4.3 Plataformas suportadas:
Suportadas em: SQL 2000, SQL 2005 e WinFX.
2.5 Funções do sistema
Há um conjunto de funções de Sistema que variam por plataforma que vivem noespaço de nome System.Data.TSql.System. A seguinte tabele resume as mesmas:
<table>table see original document page 69</column></row><table><table>table see original document page 70</column></row><table>
As seguintes seções fornecem mais detalhes para funções específicas.
2.5.1 Soundex & Diferença
A função Soundex mapeia para a função Soundex T-SQL e é utilizada para conver-ter uma série alfa para um código de quatro caracteres para encontrar palavras ou nomesde som similar. O primeiro caractere do código é o primeiro caractere de charac-ter_expression e o segundo até quarto caracteres do código são números. Vogais no cha-racter_expression são ignoradas a menos que sejam a primeira letra da série. Funções desérie podem ser aninhadas. A sintaxe para isso é como a seguir:String soundex ( string character_expression )
A Diferença retorna a diferença entre os valores SOUNDEX de duas expressões decaractere como um número inteiro. Essa função pode ser útil para separar nomes por pro-núncia, por exemplo. A sintaxe para isso é como a seguir:
Strin soundex (string character_expression)
O que se segue são exemplos de utilizar soundex e diferença em uma consulta:
Using System.Data.TSql>System;
// get the data Iength of DispIayName for ali items
Select p. DispIayName1 p.FulIname.givenName,
p.FullName.Surname
from OfType(ltems, Person) as ρ
order by soundex (p.FulIName.Surname) desc
2.5.1.1 Plataformassuportadas
Suportadas em: SQL 2000, SQL 2005 e WinFS.
2.5.2 comprimento de dados
A função de comprimento de dados é utilizada para retornar o tamanho de proprie-dades (as an int). Mapeia para a função de comprimento de dados SQL. A sintaxe para issoé como a seguir:Int datalength ( property )
No caso onde a propriedade não tenha valor (isto é nula) o valor de retorno é zero*not*null. Isso é ao contrário do modo em que a função de comprimento de onda SQL opera.O que se segue são exemplos de utilizar comprimento de dados em uma consulta:
Using System.Data.TSql>System;// get the data Iength of DispIayName for ali itemsSelect WinFS.Datalength (i.DispIayName)From Items as i
// get the data Iength of the message BodySelect sum(datalength(m.Body..Content)),m.subject
from OfType(ltems, Message) as m
order by soundex (p.FulIName.Surname) desc
2.5.2.1 PlataformassuportadasSuportadas em: SQL 2005 e WinFS.2.6 Funções XML
Suporte para consultas XML é habilitado via funções de extensão. As seguintesfunções de extensão são fornecidas:
<table>table see original document page 71</column></row><table>
XML query (XML xmldoc, string query);Boolean exist (XML xmldoc, string query);String value (XML, xmldoc, string query);2.6.1 Espaço de nome
Essas funções estão no espaço de nome System.Data.TSqI.XML.
2.6.2 Exemplos
Using System.Data.TSql.XML;
Select i
From Items as i
Where exist (i.XMLProperty1 7/text()')
2.6.3 Plataformas suportadas:
Suportadas em: SQL 2005 e WinFS.
2.7 Funções WinFS
2.7.1 Consultas de texto completo (WinFS somente)
WinFS suportará dois TVFs - Contém e TextoLIvre (duas sobrecargas para cada) -para busca de texto completo. Essas funções são mapeadas para funcionalidade em MS-Search:
type FTFEIementType as row (Itemld Guid, Rank Int);
type FTFType as Multiset <FTFEIementType>;
FTFType Contains (string containsQuery);
FTFType Contains (string propName, String containsQuery);
FTFType FreeText(string freeTextQuery);
FTFType FreeText (string propName, string freeTextQuery);
Todas essas funções retornam um multiconjunto de linhas - cada com dois cam-pos. O campo Itemld é um Guid e é o id de um Item que casou com o predicado de textocompleto. O campo Rank é a Classificação para aquele item. O resultado não é separadopela Classificação - um ordenar por explícito deve ser utilizado na consulta para obter isso.
Contém
Contém modela o predicado Contains da MSSearch. O argumento containsQuerydeve se conformar à sintaxe especificada pelo predicado Contains de MSSearch. O argu-mento propName deve se conformar à sintaxe utilizada para especificar uma propriedade debusca durante instalação de esquema WinFS.
FreeText
FreeText modela predicado FreeText de MSSearch. O argumento freeTextQuerydeve se conformar à sintaxe especificada pelo predicado FreeText de MSSearch. O argu-mento propName deve se conformar à sintaxe utilizada para especificar uma propriedade debusca durante instalação de esquemas WinFS.
Observações
. eSQL não interpreta nenhum dos argumentos. Cuida somente que eles devam serséries.
2.7.1.1 Mecânica
Instalação de esquemas
Quando um esquema WinFS é instalado, quaisquer propriedades de busca são i-dentificadas e armazenadas no conjunto de cliente. A sintaxe para a especificação de pro-priedade é como a seguir:
<table>table see original document page 73</column></row><table>
Processamento de consulta
Como mencionado anteriormente, eSQL não interpreta os argumentos para essasfunções. Mais especificamente, o runtime WinFS - que analisa a consulta - não executanenhuma verificação diferente de assegurar que os parâmetros sejam séries.
O Provedor WinFS é responsável por interpretar o argumento propertyName - pos-sivelmente como parte de SqIGen1 consultando o id de propriedade apropriada no conjuntode cliente, e então traduzindo o mesmo para uma chamada TVF equivalente na armazena-gem. As TVFs de armazenagem terão assinaturas que se parecem com:
Create function FullTextSearch(@sqlStr nvarchar (Max))Returns @rTable table (Itemld
[System.Storage.Storage, 0.1,*, f45b95b0f79f4fbe].Itemld,Rank int)Create function FulltextSearch(@propld uniqueidentifier,
@sqlStr nvarchar (Max))
Returns @rTable table (ItemId
[System.Storage.Storage, 0.1,*, f45b95b0f79f4fbe].ltemld,Rank int)
2.7.1.2 Espaço de nome
Essas funções estão no espaço de nome System.Data.TSql.WinFS.
2.7.1.3 Exemplos
Os seguintes exemplos ilustram o uso dessas funções:
using Sy3 tem. Data - TSql. WinFS ;
select i.DisplayNana, o.Rank
from Xteras as ±,
Contains{'foo and bar') as cwhere i , ItemId = c . I temi d;
s elect £.DisplayNamG, e.Rankfrom Xtems as i,
Contains { 'Ccntact. DisplayName' , xfoo and. bar' >
as c
where i . ItemId = c . Itemld;
select i.DisplayHame, c.Rankfrom Xtems as i r
FreeText ( ' Treat (Contact. EAddress asUslVddress) .Zipr ,
»12345') as cwhere i. XtemId = c. ItemIdorder by c.Rank desc;
2.7.1.4 Plataforma suportada
Suportada em: WinFS.
2.7.2 SumString (WinFS somente)
O agregado SumString (que mapeia para uma UDF de armazenagem denominadaSumString) provê a capacidade de concatenar o conteúdo de uma coleção de série em umaúnica série com um delimitador. Isso é útil para diversos cenários App incluindo exibir osparticipantes de lista de Mensagem 'para' em um único campo de texto.
Essa extensão eSQL é uma função de agregado similar à contagem, soma, max,etc., e pode ser aplicada a propriedades de série em InlineObjectsCollections, itemFrag-mentCollections, ExtensionCollections e qualquer propriedade de série como resultado deuma operação de Grupo. A sintaxe para esse agregado é como a seguir:String SumString (Multiset<string> coll)
Onde a coleção tem de ser uma coleção de séries.
2.7.2.1 Espacode nome
Essas funções estão no espaço de nome System.Data.TSql.WinFS.
2.7.2.2 Exemplos
O que se segue é um exemplo do uso de SumString em uma consulta:
Using System.Data.TSql.WinFS;
//concatenate the listo f participantEAddress together
Select
SumString(m.Participants.?(ParticipantType=Sender)
..ParticipantAddress.Address),m.subjectfrom ofType(Itens, Message) as m
2.7.2.3 Plataformas suportadas
___Suportada em: WinFS. _______________
2.7.3 NormaIizeDiqits (somenteWinFS)
O agregado NormaIizeDigits (que mapeia para uma UDF de armazenagem deno-minada normalizedigits) provê a capacidade de separar séries em um formato similar à se-paração de armação de janela. A sintaxe para essa função é como a seguir:
String NormalizeDigits(string property, int maxlength)
2.7.3.1 Espacode nome
Essas funções estão no espaço de nome System.Data.TSql.WinFS.
2.7.3.2 Exemplos
O que se segue é um exemplo de utilizar SumString em uma consulta:
Using System.Data.TSql.WinFS;;// order items using the functionSelect i.Itemld1 i.NamespaceNameFrom Items as i
Order by NormalizeDigits(i.NamespaceName1 4000)
2.7.3.3 Plataformas suportadasSuportada em: WinFS.
Carregamento de Espaço de nome
Todos os espaços de nome descritos nesse documento devem ser automaticamntecarregados ao conectar-se a um provedor SqICenter. Não deve haver necessidade de uitli-zar uma cláusula "usar" explícita.
4 Propriedades e Métodos calculados
A linguagem de consulta eSQL suporta um mecanismo de extensão pelo qual pro-priedades que são adicionadas à classe parcial O-Space (isto é propriedades não mapea-das) podem ser referenciadas em consultas. Essas propriedades exigem que uma expres-são eSQL seja associada a elas através de um atributo. Essa expressão é então substituídasempre que a propriedde for referenciada em uma consulta.
A expressão de eSQL que é fornecida pode referenciar outras proprpiedades e mé-todos calculados, outras propriedades mapeadas e outras funções que são especificadas nomanifesto Provedor.
4.1 Propriedadescalculadas
O System.Data.Objects.CaIcuIatedAtribute pode ser adicionado a uma Propriedadeque é somente definido em uma classe de cliente (sem propriedade mapeada) para permitirreferência da propriedade em consultas.
O tipo da Propriedade CLR deve casar com o tipo retornado pela expressão eSQL.Se o tipo de retorno da expressão for um tipo anulável então a propriedade deve ser decla-rada como um tipo anulável. Essa limitação é executada pela infra-estrutura, e uma exceçãoserá lançada. Se o tipo de retorno da expressão for uma coleção então a Propriedade deveser do tipo Query<T>.
A propriedade ItemSize no Item é um exemplo efetivo de uma propriedade calcula-da que existe no Esquema hoje. O que se segue é um exemplo do uso dessa propriedade:
tf The foiLowing retrieves ali documenta that are greater than IOk (-10000bytes) ia a particular foider
Cuory<Ifcax> searcher » vaL Items.Souxce.where{"it.ItemSize > 100000"};
Essa propriedade será marcada com o seguinte atributo:
CCaleulated <Expjre§gios = "S^steiniStorage-ItemiGetItemSize(ItemId) Jpublic infc ItemSise {get;}
A expressão acima se refere a uma função no manifesto do provedor qué mapeiapara uma função do lado de armazenagem.
PrimaryEmaiIAddress é um exemplo de uma propriedade que poderia ser calculadaa partir do esquema e agora através dessa funcionalidade pode ser predicada e projetadaatravés de eSQL. Essa propriedade poderia retornar o endereço de E-mail de uma Pessoamarcada com a Palavra-chave Primary. O código que se segue ilustra como definir essapropriedade PrimaryEmaiIAddress para permitir consultar a mesma através de eSQL:
puòlic parfcial class ParsonItea ; ...{
// Atfcribote "thc Priaiary EmaXl Addsress propercy// the Skeyword refers to the calculated pararaetes[Calculafcod (Bxpression= ©
"using Syste»- Storage.Contacts;
element{seleet vãlue 'e
from this.EAddresses as cwhere a is ©£ SatpEiHailAddreasand esists(select 1
from e-Keywordswhere Value=@ keyword)))"))[CalcuiatedParamotor{Name="keyword",Valwe=rtSystem. Storage-Contacts-Priwiiryn) I
public SmtpEmsilAddrQss PrimaxyEmailAddress
get{
foreach ( SiatpSiaailAddress snstpBA £n
EAddressee. Ofl^pe <SmfcpE:naxlAddress> (> ){
foreach ÍKoyword. k in smtpEA.Keywords)
I-
If(k.Value =ss "System.Storage.Contacts.Primacy")return siatpEft;
Essa propriedade pode ser então uitlizada em uma consulta como a seguir:
Query<E»ersoa> searchar - wd.Iterag,Source.Q£Type<Ferso»>n.Where("PriraaryEroailAddresg - Actdress= * rameshn@microso£t. com* ") ;
Bareon persoa - searches.GetSiagleO ; //Note the GetSingle is being added asa DCR
//The property can be projected as foiIows:QueryCDataRacord» projection =
wd.Itema.Source.0£Type<Bereon>().Selec tCit.Di splayName,it.PrimaryEmailAddress");
// Enuraerate the resulta
foreach (DataHecosd records in projection)
string displayName = {string) record[" Oi Sp IayName"];SatpSaaiIAddresS priisary Emai IAddresg a (SnrfcpEmailAddress)
record t"PriTaaryEanailAddress'*3}
Observações sobre Expressão eSQL:
. O prefixo "this" tem de ser uitlizado para referenciar outras Prorpiedades/Métodos(mapeado ou calculado) na instância.
. a expressão somente é validada em runtime.. qualquer expressão eSQL válida pode ser fornecida, incluindo as cláusulas usar.
. Parâmetros calculados necessitam ser prefixos com @ para referenciar os mes-mos na expressão.
4.2 Métodos calculados
Similar às propriedades calculadas, os métodos definidos em classes parciais tam-bém podem ser habilitados para serem utilizáveis em eSQL. O System.Data.Objects.CaIcuIatedAtribute pode ser adicionado ao método em um modo similarpara adicionar o mesmo a uma propriedade. As seguintes semântica e restrições se aplicama métodos calculados:
. Métodos genéricos (por exemplo X<T>) não são atualmente suportados em eSQL,isto é o parâmetro do tipo genérico não será utilizado na expressão eSQL.
. a palavra chave params C# que permite um número variável de parâmetros paraum método não é suportado nos métodos calculados.
. Polimorfismo de métodos calculados não é atualmente suportado.
. atualmente não há suporte para métodos calculados internos ou privados exter-namente definidos, isto é a API deve ter acesso à propriedade/método.
. Em geral chamadas recursivas em métodos calculados não é suportado.
. a sobrecarga de métodos calculados por valores de parâmetro (tipos) não é atu-almente suportada.
. o tipo de retorno do método deve casar o tipo retornado pela expressão eSQL.
. seo tipo de retorno da expressão for um tipo anulável então o método deve serdeclarado como retornando um tipo anulável. Essa limitação é executada pela infra-estrutura, e uma exceção será lançada.
. seo tipo de retorno da expressão for uma coleção então o tipo de retorno do mé-todo deve ser do tipo Query<T>.
. Ocultar métodos pela especificação do operador novo não é suportado.
. Métodos virtuais não são suportados.
. Métodos que retornam vazio não são suportados.
. Parâmetros de método não exigem um prefixo para referenciar os mesmos na ex-pressão
O que se segue é um exemplo do uso de um método calculado. O cenário aqui épara gerar uma vista de agrupamento favorável similar à vista agrupar por data Outlook,como ilustrado na fiugra 3.
O código a seguir encapsula isso em um método de modo que possa ser reutilizadoem outro lugar:public partisl claas Msssage :
//This raethoã rGturns thfò craployees of an Organizabion//The eraployer in the expression refera to the method par ame terçmployôr
CCaIculatQd (Expression=osing Syatem.Date.TSql.Date;
case
when datediff ('hour,íthÍ3-ReceivedTiir,e# date) < O
tben * Future1when datediff ('hour* ,this.ReceivedTime* daté) < 24
Chen 'Today'
wben datedif£( 'hour*, this.ReceivedTiiue, date) betwèen 24 and
then 'Yesterdayfwhen ciatecíifri 'hour*, fchis.ReeeivedTirae, date) between and{24*{datôpa rt í'weekday',date)))
then clatename {weekday, this - ReceivedTime)when dateditf {"hour1, date) be-tween
\2A* ftíatépartt 'weefcdây· rdate>}) and {24*(datepact {'weekday' ,date) J } +■ {7*2than "Last 5?eek*, wdstediffí'hourSthis,SeceivedTiiae, date) betw&en{24*ídatepartí'weekday',date) and
<24* fdatépart {'weekdayf t date}) H (14*24)then 'Two ^eeJis Rgolfirfhen datediff (1Hour',this.aeceivèdTime, date) between<24Mdtai:epart ('weekaay ' ,date J J K (14*24) an<3<24* (datepajft (^weeJcday ' ,date)) K (21*24)thçn tThree Píéèks Agorwhen da t wttf £ (1 hour ■,this. Rec^lveciT ime, date) between(24* (ciatepaxt ('veekday1 ,date))) + (21*24) and(24* (datepart t 'we&ícriay» ,date)} ) + 04*24} and
datedi ft {'monthr t this . ReceivedT Itae, date) <2 --------------
then 1Last Month1else 'Older'end as RelativeDafcewJJ
^publlc string GetReceivedTimaMame (DatoTima date}
//The isap Xementatio η of thl3 Eitetftod would raeed to do siisuJUr
logic to tfoe e^pression for consistency♦· ► ♦
)
Isso pode ser então utilizado para agrupar os resultados coom a seguir:
/ / Create a qusry o ver me ss ages to group by the Recfciv-eüTlsie tíârc a
QueryiDataRscord> projeetion o
confeext. rtetns . Sourç&*OfType<MQssago;> (} . SeZect (
it.Sabjsctr it-Gefe Re Ceived^inteiiaEie(Gdate) as RélativeDate" , ngwQuaryParamet^x ("date" , DateTimeKNow)) .GroupBy ( "JtelativeDate") ;
// Enumerate the results
fOireach (OatsüRocord reeord ift projeçfcion)}
4.3 Atributos Calculado & CaIcuIatedParameter
O System.Data.objects.CaIcuIatedAtribute é definido como a seguir:7namespace Sya tem»Bata - Obj ect s{
ESystetn.AfctributeUaage {AttributeTajrgets .Property j
AfetributeTsrgets.Method)3public class GalculafcadAttribttte ; Attzributeí
public sfering Bxpression {çet; set;}
public CalculatadAtfcEibuto{string expreseion);
}
}
Esse atributo define as seguintes propriedades:
. Expressão. A propriedade expressão deve conter uma expressão eSQL válida queprojeta um valor. Esse valor pode ser então utilizado em outra expressão. Vide abaixo paramais detalhes sobre como especificar parâmetros denominados em expressões.
O System.Data.Objects.CaIcuIatedParameterAtribute é definido como a seguir:
namespace System.Data.Objects{
[Attributeüsage (AttrxbuteTargets. Ptopsrty | AttriboteTargeta - Methodf
JiilowMuXtiple = true) Jpublic class CalcuXatadParamQteEAtferibat© ϊ Attributaí
public strlrtg Watae {get; set;}
public object Value {get? set?)public CalculatadParaiaatQrAttribiitsO ;
)
Esse atributo define as seguintes propriedades:
. Nome. O nome do parâmetro como referenciado na propriedade Expressão de umAtributo calculado.
. valor. O valor do parâmetro definido pela propriedade Nome.
Os parâmetros Denominados definidos em um CaIcuIatedAtribute seguem essassemânticas:
. referências a parâmetros calculados devem ter um prefixo @. a ordem de definir o CaIcuIatedParameterAtribute e CaIcuIatedAttribute não impor-
. Nomes de parâmetro devem ser exclusivos através dos nomes de parâmetro demétodo e outros parâmetros denominados definidos pelo CaIcuIatedParameterAttribute nométodo.
. Para uma propriedade calculada quaisquer parâmetros denominados na expres-são devem ser definidos por CaIcuIatedParameterAttribute.
O exemplo a seguir ilustra o uso das classes de atributo acima:public partial cless Pessoa : ...{
//The ®year ia the expressxon. refecs to the nansed parâmêter yéarprovided by
t/the CaIculatedgaraaeCerAttrIbufce
fCaiculated(Expression=
uaing System,Data.TSsl.Date; >
Oyear - year(this.BirthDate} ">]
[ CaleuiatedParaiiiQter· (Name»"year", Value=Syetem. DafceTims. Year) J
Tsublic infc GetRoughAgeO{" · }
}
Claims (24)
1. Sistema para processar uma solicitação de aplicação para dados, CARACTERIZADOpor compreender:uma camada de serviços de objeto (210) para aceitar uma solicitação, em que a so-licitação comprende uma expressão de coleção em uma cláusula a partir de;uma camada de provedor de mapa (220) que fornece uma pluralidade_de transfor-mações de mapeamento para transformar a solicitação em uma consulta de banco de da-dos;uma camada de ponte (230) para converter a consulta de banco de dados em umaconsulta de banco de dados modificada, a consulta de banco de dados modificada sendoadaptada a pelo menos uma necessidade de um primeiro banco de dados (240);o primeiro banco de dados (240) compreende um motor de processamento de con-sulta para processar a consulta de banco de dados modificada, em que o primeiro banco dedados é configurado para retornar um resultado para a camada de ponte.
2. Sistema, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que asolicitação compreende ainda uma operação definida selecionada a partir do grupo quecompreende união, interseção e exceto, onde a operação definida opera em coleções.
3. Sistema, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que asolicitação compreende ainda uma operação junção que opera em coleções.
4. Sistema, de acordo com a reividnicação 1, CARACTERIZADO pelo fato de que acamada de ponte (230) é configurada para converter a consulta de banco de dados em qual-quer de uma pluralidade de consultas de banco de dados modificada, adaptada a necessi-dades de qualquer de uma pluralidade de bancos de dados (240).
5. Sistema para processar uma solicitação de aplicação para dados, CARACTERI-ZADO por compreender:uma camada de serviços de objeto (210) para aceitar uma solicitação, em que a so-licitação compreende uma operação definida selecionada do grupo que compreende união,interseção e exceto, em que a operação definida opera em coleções;uma camada de provedor de mapa (220) que fornece uma pluralidade de transfor-mações de mapeamento para transformar a solicitação em uma consulta de banco de dados;uma camada de ponte (230) para converter a consulta de banco de dados em umaconsulta de banco de dados modificada, a consulta de banco de dados modificada sendoadaptada a pelo menos uma necessidade de um primeiro banco de dados (240);o primeiro banco de dados (240) compreende um motor de processamento de con-sulta para processar a consulta de banco de dados modificada, em que o primeiro banco dedados é configurado para retornar um resultado para a camada de ponte.
6. Sistema, de acordo com a reivindicação 5, CARACTERIZADO pelo fato de que asolicitação compreende ainda uma operação junção que opera em coleções.
7. Sistema, de acordo com a reivindicação 5, CARACTERIZADO pelo fato de que acamada de ponte (230) é configurada para converter a consulta de banco de dados em qual-guer de uma pluralidade de consultas de banco de dados modificada, adaptada a necessi-dades de qualquer de uma pluralidade de bancos de dados (240). __
8. Sistema para processar uma solicitação de aplicação para dados, CARACTERIZADOpor compreender:uma camada de serviços de objeto (210) para aceitar uma operação junção queopera em coleções;uma camada de provedor de mapa (220) que fornece uma pluralidade de transfor-mações de mapeamento para transformar a solicitação em uma consulta de banco de da-dos;uma camada de ponte (230) para converter a consulta de banco de dados em umaconsulta de banco de dados modificada, a consulta de banco de dados modificada sendoadaptada a pelo menos uma necessidade de um primeiro banco de dados (240);o primeiro banco de dados (240) compreende um motor de processamento de con-sulta para processar a consulta de banco de dados modificada, em que o primeiro banco dedados é configurado para retornar um resultado para a camada de ponte (230).
9. Sistema, de acordo com a reivindicação 8, CARACTERIZADO pelo fato de que acamada de ponte é configurada para converter a consulta de banco de dados em quâlquerde uma pluralidade de consultas de banco de dados modificadas, adaptada a necessidadesde qualquer de uma pluralidade de bancos de dados.
10. Sistema de computador CARACTERIZADO por compreender uma aplicação(200) configurada para solicitar dados a partir de um banco de dados (240), em que a apli-cação gera uma solicitação de acordo com uma linguagem de consulta, a linguagem de con-sulta compreendendo pelo menos as seguintes características:a linguagem de consulta permite uso de uma expressão de coleção em uma cláusu-la a partir de;a linguagem de consulta permite uso de uma operação definida selecionada a partirdo grupo que compreende união, interseção e exceto, em que a operação definida opera emcoleções;a linguagem de consulta permite o uso de uma operação junção que opera em co-leções.
11. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta ainda exige que toda consulta compreenda pelomenos uma expressão.
12. Sistema de computador, de acordo com a reivindicação 11, CARACTERIZADOpelo fato de que cada expressão tem uma interpretação uniforme que não depende do con-texto no qual é utilizado.
13. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta permite ainda o uso das seguintes expressões:1+2*3"abe"Row (1 as a, 2 as b){1,3,5}E1 union ali e2Distinct (e1)
14. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta considera todas as subconsultas como sendo sub-consultas de multiconjunto. _
15. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que se um valor escalar for desejado a partir de uma subconsulta, a linguagemde consulta requer que a aplicação forneça um operador de elemento que opera em umacoleção.
16. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta permite ainda o uso de um operador de elementopara extrair um valor singleto a partir de uma coleção, e uma cláusula selecionar valor paraevitar a criação de um wrapper de linha durante uma expressão de consulta.
17. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta permite ainda o uso de uma cláusula selecionarvalor selecionado para pular uma construção de linha implícita.
18. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta permite ainda o uso de um construtor de linha paraconstruir linhas arbitrárias de tal modo que uma instrução de linha de selecionar valor (e1,e2, ...) é equivalente exatamente à instrução selecionarei, e2,...
19. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta permite ainda o uso de uma expressão de consul-ta que generaliza correlações esquerdas na cláusula a partir de e trata as mesmas unifor-memente.
20. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta requer que todas as referências de coluna sejamqualificadas com uma alias de tabela.
21. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta permite ainda o uso de um atalho sintático paramanipular navegação através de uma coleção, em que o atalho utiliza o operador ... parapermitir projeção de uma expressão a partir de uma coleção, de tal modo que "a..b" é equi-valente a "select value t.b form a as t".
22. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta permite ainda o uso de aliasing de chaves de a-grupar por, e correlações esquerdas entre tais chaves.
23. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta permite ainda o uso de dois tipos de agregados,um agregado à base de coleção que opera em coleções, e produz um resultado agregado, eum agregado estilo Linguagem de Consulta estruturada (SQL), em que o mecanismo con-verte implicitamente agregados do estilo SQL em agregados à base de coleção.
24. Sistema de computador, de acordo com a reivindicação 10, CARACTERIZADOpelo fato de que a linguagem de consulta permite ainda o uso de uma instrução IN-SERT..VALUES, e a instrução não permite que uma lista de coluna seja especificada nainstrução INSERT..VALUES.
Applications Claiming Priority (5)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US78451006P | 2006-03-20 | 2006-03-20 | |
| US60/784.510 | 2006-03-20 | ||
| US11/507.864 | 2006-08-21 | ||
| US11/507,864 US7797304B2 (en) | 2006-03-20 | 2006-08-21 | Extensible query language with support for rich data types |
| PCT/US2007/001008 WO2007108858A1 (en) | 2006-03-20 | 2007-01-16 | Extensible query language with support for rich data types |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| BRPI0708827A2 true BRPI0708827A2 (pt) | 2011-06-14 |
Family
ID=38519144
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| BRPI0708827-2A BRPI0708827A2 (pt) | 2006-03-20 | 2007-01-16 | linguagem de consulta extensÍvel com suporte para tipos de dados ricos |
Country Status (11)
| Country | Link |
|---|---|
| US (1) | US7797304B2 (pt) |
| EP (1) | EP2013775A4 (pt) |
| JP (2) | JP2009530735A (pt) |
| KR (1) | KR20080106266A (pt) |
| CN (1) | CN101427249B (pt) |
| AU (1) | AU2007227766B2 (pt) |
| BR (1) | BRPI0708827A2 (pt) |
| CA (1) | CA2642934C (pt) |
| MX (1) | MX2008011649A (pt) |
| RU (1) | RU2434276C2 (pt) |
| WO (1) | WO2007108858A1 (pt) |
Families Citing this family (80)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7640267B2 (en) | 2002-11-20 | 2009-12-29 | Radar Networks, Inc. | Methods and systems for managing entities in a computing device using semantic objects |
| US8156097B2 (en) * | 2005-11-14 | 2012-04-10 | Microsoft Corporation | Two stage search |
| US8108765B2 (en) * | 2006-10-11 | 2012-01-31 | International Business Machines Corporation | Identifying and annotating shared hierarchical markup document trees |
| US8635242B2 (en) * | 2006-10-11 | 2014-01-21 | International Business Machines Corporation | Processing queries on hierarchical markup data using shared hierarchical markup trees |
| US7483889B2 (en) * | 2006-12-01 | 2009-01-27 | Cisco Technology, Inc. | Instance-based authorization utilizing query augmentation |
| CA2578472C (en) * | 2007-01-12 | 2013-01-15 | Truecontext Corporation | Methods and system for orchestrating services and data sharing on mobile devices |
| US7873611B2 (en) * | 2007-08-31 | 2011-01-18 | Red Hat, Inc. | Boolean literal and parameter handling in object relational mapping |
| US7996416B2 (en) * | 2007-08-31 | 2011-08-09 | Red Hat, Inc. | Parameter type prediction in object relational mapping |
| US8452789B2 (en) * | 2007-10-15 | 2013-05-28 | International Business Machines Corporation | Searching a database |
| US8429601B2 (en) * | 2007-11-29 | 2013-04-23 | Red Hat, Inc. | Code completion for object relational mapping query language (OQL) queries |
| US8037110B2 (en) * | 2007-12-27 | 2011-10-11 | Microsoft Corporation | Business data access client for online/offline client use |
| US8818987B2 (en) * | 2008-01-11 | 2014-08-26 | International Business Machines Corporation | Converting union commands to union all commands |
| US7882120B2 (en) * | 2008-01-14 | 2011-02-01 | Microsoft Corporation | Data description language for record based systems |
| US7958167B2 (en) * | 2008-03-05 | 2011-06-07 | Microsoft Corporation | Integration of unstructed data into a database |
| US8745127B2 (en) * | 2008-05-13 | 2014-06-03 | Microsoft Corporation | Blending single-master and multi-master data synchronization techniques |
| US20090313212A1 (en) * | 2008-06-17 | 2009-12-17 | Microsoft Corporation | Relational database with compound identifier |
| US8281292B2 (en) * | 2008-06-27 | 2012-10-02 | Microsoft Corporation | Rapid application development |
| US20100131556A1 (en) * | 2008-11-25 | 2010-05-27 | Microsoft Corporation | Unified event programming and queries |
| US20100131921A1 (en) * | 2008-11-25 | 2010-05-27 | Microsoft Corporation | Exposing asynchronous mechanisms as first-class events |
| US20100131743A1 (en) * | 2008-11-25 | 2010-05-27 | Microsoft Corporation | Lazy and stateless events |
| US20100131745A1 (en) * | 2008-11-25 | 2010-05-27 | Microsoft Corporation | Exceptional events |
| US8145593B2 (en) | 2008-12-11 | 2012-03-27 | Microsoft Corporation | Framework for web services exposing line of business applications |
| US20100153565A1 (en) * | 2008-12-11 | 2010-06-17 | Microsoft Corporation | Connection management in line-of-business |
| US8046373B2 (en) * | 2009-01-25 | 2011-10-25 | Hewlett-Packard Development Company, L.P. | Structured parallel data intensive computing |
| US8489633B2 (en) * | 2009-03-06 | 2013-07-16 | Hewlett-Packard Development Company, L.P. | Correlated query process (CQP) and peer-to-peer (P2P) execution |
| US8200617B2 (en) * | 2009-04-15 | 2012-06-12 | Evri, Inc. | Automatic mapping of a location identifier pattern of an object to a semantic type using object metadata |
| US10628847B2 (en) | 2009-04-15 | 2020-04-21 | Fiver Llc | Search-enhanced semantic advertising |
| US8407724B2 (en) * | 2009-12-17 | 2013-03-26 | Oracle International Corporation | Agile help, defect tracking, and support framework for composite applications |
| US20130117275A1 (en) * | 2010-07-16 | 2013-05-09 | Nec Corporation | Index monitoring system, index monitoring method and program |
| US20120102453A1 (en) * | 2010-10-21 | 2012-04-26 | Microsoft Corporation | Multi-dimensional objects |
| CN102567315A (zh) * | 2010-12-08 | 2012-07-11 | 金蝶软件(中国)有限公司 | 一种数据查询方法、装置及系统 |
| US8856792B2 (en) | 2010-12-17 | 2014-10-07 | Microsoft Corporation | Cancelable and faultable dataflow nodes |
| US9367619B2 (en) * | 2011-07-29 | 2016-06-14 | Microsoft Technology Licensing, Llc | Large scale real-time multistaged analytic system using data contracts |
| KR101255639B1 (ko) * | 2012-01-18 | 2013-04-16 | 홍익대학교 산학협력단 | 컬럼 기반 데이터베이스 시스템 및 데이터베이스 시스템의 조인 인덱스를 이용한 조인 처리 방법 |
| US8903797B2 (en) * | 2012-04-20 | 2014-12-02 | Tibco Software Inc. | System and method for loading objects for object-relational mapping |
| US8849747B2 (en) * | 2012-04-24 | 2014-09-30 | Sap Ag | Business process management |
| US20130325944A1 (en) * | 2012-05-31 | 2013-12-05 | International Business Machines Corporation | Client-side sharing of event information |
| US9405821B1 (en) * | 2012-08-03 | 2016-08-02 | tinyclues SAS | Systems and methods for data mining automation |
| US9165046B2 (en) * | 2013-01-15 | 2015-10-20 | Realnetworks, Inc. | Core data synchronization systems and methods |
| US9311429B2 (en) * | 2013-07-23 | 2016-04-12 | Sap Se | Canonical data model for iterative effort reduction in business-to-business schema integration |
| US9619552B2 (en) | 2013-09-06 | 2017-04-11 | Sap Se | Core data services extensibility for entity-relationship models |
| US9176801B2 (en) | 2013-09-06 | 2015-11-03 | Sap Se | Advanced data models containing declarative and programmatic constraints |
| US9430523B2 (en) * | 2013-09-06 | 2016-08-30 | Sap Se | Entity-relationship model extensions using annotations |
| US9575819B2 (en) | 2013-09-06 | 2017-02-21 | Sap Se | Local buffers for event handlers |
| US9639572B2 (en) | 2013-09-06 | 2017-05-02 | Sap Se | SQL enhancements simplifying database querying |
| US9361407B2 (en) | 2013-09-06 | 2016-06-07 | Sap Se | SQL extended with transient fields for calculation expressions in enhanced data models |
| US9354948B2 (en) | 2013-09-06 | 2016-05-31 | Sap Se | Data models containing host language embedded constraints |
| US9442977B2 (en) | 2013-09-06 | 2016-09-13 | Sap Se | Database language extended to accommodate entity-relationship models |
| US20150161123A1 (en) * | 2013-12-09 | 2015-06-11 | Microsoft Corporation | Techniques to diagnose live services |
| US10498777B2 (en) * | 2014-03-17 | 2019-12-03 | Citrix Systems, Inc. | Real-time push notifications for cloud-based applications |
| US10152605B2 (en) * | 2014-05-21 | 2018-12-11 | Siddharth Shetye | Systems and methods for front-end and back-end data security protocols |
| US10915541B2 (en) * | 2014-07-01 | 2021-02-09 | Verizon Patent And Licensing Inc. | Generic API |
| US10305985B1 (en) * | 2014-12-29 | 2019-05-28 | EMC IP Holding Company LLC | Defining new properties using expressions in API calls |
| US10431106B1 (en) | 2015-04-13 | 2019-10-01 | Aptima, Inc. | Systems and methods to measure performance |
| US11556396B2 (en) * | 2015-05-08 | 2023-01-17 | Seth Lytle | Structure linked native query database management system and methods |
| US10481982B2 (en) * | 2015-06-16 | 2019-11-19 | Mongodb, Inc. | System and method for facilitating replication in a distributed database |
| WO2017023335A1 (en) * | 2015-08-06 | 2017-02-09 | Hewlett Packard Enterprise Development Lp | Query path with aggregate projection |
| US10366130B2 (en) * | 2015-12-28 | 2019-07-30 | Sap Portals Israel Ltd. | Generation of complementary applications |
| CN105678325A (zh) * | 2015-12-31 | 2016-06-15 | 哈尔滨工业大学深圳研究生院 | 一种文本情感标注方法、装置及系统 |
| US10860582B2 (en) * | 2016-01-29 | 2020-12-08 | Nec Corporation | Risky behavior query construction and execution |
| CN105760524B (zh) * | 2016-03-01 | 2019-04-19 | 淮阴工学院 | 一种科学新闻标题的多层次多分类方法 |
| US9846725B2 (en) | 2016-05-06 | 2017-12-19 | InsightSoftware.com International | SQL double counting resolver |
| KR101731579B1 (ko) * | 2016-09-07 | 2017-05-12 | 주식회사 비트나인 | 통합 질의 처리가 가능한 데이터베이스 및 그 데이터 처리방법 |
| US10776352B2 (en) | 2016-11-30 | 2020-09-15 | Hewlett Packard Enterprise Development Lp | Generic query language for data stores |
| RU2666287C1 (ru) * | 2017-03-31 | 2018-09-06 | Александр Олегович Попов | Способ разработки, хранения и использования компилированных в бинарное представление программ в таблицах баз данных |
| CN107169103A (zh) * | 2017-05-17 | 2017-09-15 | 南京焦点领动云计算技术有限公司 | 一种通用结构化数据存储查询方法及系统 |
| US20200159759A1 (en) * | 2018-11-20 | 2020-05-21 | Comcast Cable Communication, Llc | Systems and methods for indexing a content asset |
| CN111666295B (zh) * | 2019-03-05 | 2023-12-26 | 深圳市天软科技开发有限公司 | 数据提取方法、终端设备及计算机可读存储介质 |
| WO2020177074A1 (zh) * | 2019-03-05 | 2020-09-10 | 深圳市天软科技开发有限公司 | 一种数据提取方法、终端设备及计算机可读存储介质 |
| US11860939B2 (en) * | 2019-05-09 | 2024-01-02 | International Business Machines Corporation | Manipulating a table with an XML column in a database |
| US11567923B2 (en) * | 2019-06-05 | 2023-01-31 | Oracle International Corporation | Application driven data change conflict handling system |
| US11461486B2 (en) | 2019-10-25 | 2022-10-04 | Oracle International Corporation | Partial page approval model |
| US11645265B2 (en) | 2019-11-04 | 2023-05-09 | Oracle International Corporation | Model for handling object-level database transactions in scalable computing applications |
| US11385874B2 (en) * | 2020-02-03 | 2022-07-12 | Sap Se | Automatic type determination for database programming |
| US11302327B2 (en) * | 2020-06-22 | 2022-04-12 | Bank Of America Corporation | Priori knowledge, canonical data forms, and preliminary entrentropy reduction for IVR |
| US11917026B2 (en) * | 2021-01-28 | 2024-02-27 | Mutara, Inc. | Dynamic mapping and integration via a meta-model definitional platform |
| EP4040305B1 (en) * | 2021-02-05 | 2024-05-01 | Spicter AG | Data processing control system |
| US11741093B1 (en) | 2021-07-21 | 2023-08-29 | T-Mobile Usa, Inc. | Intermediate communication layer to translate a request between a user of a database and the database |
| US11941005B2 (en) * | 2022-04-05 | 2024-03-26 | Sap Se | Data artifact instances faciliating flexible data access |
| CN117216033B (zh) * | 2023-09-18 | 2026-01-23 | 蓝卓数字科技有限公司 | 一种带有层级结构的数据类型的建立方法 |
Family Cites Families (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5732258A (en) | 1996-02-08 | 1998-03-24 | Oracle Corporation | Method and apparatus for efficiently evaluating exists and not exists equivalent subqueries |
| US6263342B1 (en) * | 1998-04-01 | 2001-07-17 | International Business Machines Corp. | Federated searching of heterogeneous datastores using a federated datastore object |
| US6625593B1 (en) * | 1998-06-29 | 2003-09-23 | International Business Machines Corporation | Parallel query optimization strategies for replicated and partitioned tables |
| US7152062B1 (en) * | 2000-11-21 | 2006-12-19 | Actuate Corporation | Technique for encapsulating a query definition |
| US6795825B2 (en) | 2000-09-12 | 2004-09-21 | Naphtali David Rishe | Database querying system and method |
| US7028028B1 (en) * | 2001-05-17 | 2006-04-11 | Enosys Markets,Inc. | System for querying markup language data stored in a relational database according to markup language schema |
| US6643636B1 (en) | 2001-06-05 | 2003-11-04 | Ncr Corporation | Optimizing a query using a non-covering join index |
| US6792420B2 (en) * | 2001-06-29 | 2004-09-14 | International Business Machines Corporation | Method, system, and program for optimizing the processing of queries involving set operators |
| US7526425B2 (en) * | 2001-08-14 | 2009-04-28 | Evri Inc. | Method and system for extending keyword searching to syntactically and semantically annotated data |
| US7010542B2 (en) | 2002-07-20 | 2006-03-07 | Microsoft Corporation | Result set formatting and processing |
| WO2004057495A1 (en) * | 2002-12-20 | 2004-07-08 | Koninklijke Philips Electronics N.V. | Query by indefinite expressions |
| RU36541U1 (ru) * | 2003-12-23 | 2004-03-10 | Григорьев Евгений Александрович | Объектно-ориентированная система управления реляционными базами данных |
| US7702691B2 (en) | 2004-05-21 | 2010-04-20 | Bea Systems, Inc. | Systems and methods for EJB finders using SQL |
| US7533087B2 (en) * | 2004-11-05 | 2009-05-12 | International Business Machines Corporation | Method, system, and program for executing a query having a union all operator and data modifying operations |
| US7505985B2 (en) * | 2005-02-25 | 2009-03-17 | International Business Machines Corporation | System and method of generating string-based search expressions using templates |
| US20080216533A1 (en) | 2007-03-09 | 2008-09-11 | Ellis Philip C | Lock cylinder |
-
2006
- 2006-08-21 US US11/507,864 patent/US7797304B2/en active Active
-
2007
- 2007-01-16 AU AU2007227766A patent/AU2007227766B2/en not_active Ceased
- 2007-01-16 CA CA2642934A patent/CA2642934C/en not_active Expired - Fee Related
- 2007-01-16 MX MX2008011649A patent/MX2008011649A/es not_active Application Discontinuation
- 2007-01-16 EP EP07716620A patent/EP2013775A4/en not_active Withdrawn
- 2007-01-16 KR KR1020087022694A patent/KR20080106266A/ko not_active Abandoned
- 2007-01-16 RU RU2008137657/08A patent/RU2434276C2/ru not_active IP Right Cessation
- 2007-01-16 CN CN200780010055.9A patent/CN101427249B/zh not_active Expired - Fee Related
- 2007-01-16 BR BRPI0708827-2A patent/BRPI0708827A2/pt not_active IP Right Cessation
- 2007-01-16 WO PCT/US2007/001008 patent/WO2007108858A1/en not_active Ceased
- 2007-01-16 JP JP2009501416A patent/JP2009530735A/ja active Pending
-
2011
- 2011-03-22 JP JP2011062866A patent/JP2011154707A/ja active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| CA2642934C (en) | 2014-12-23 |
| WO2007108858A1 (en) | 2007-09-27 |
| KR20080106266A (ko) | 2008-12-04 |
| RU2008137657A (ru) | 2010-03-27 |
| JP2011154707A (ja) | 2011-08-11 |
| MX2008011649A (es) | 2008-09-22 |
| US20070219976A1 (en) | 2007-09-20 |
| CA2642934A1 (en) | 2007-09-27 |
| EP2013775A1 (en) | 2009-01-14 |
| CN101427249A (zh) | 2009-05-06 |
| EP2013775A4 (en) | 2009-11-25 |
| AU2007227766A1 (en) | 2007-09-27 |
| AU2007227766B2 (en) | 2011-10-06 |
| RU2434276C2 (ru) | 2011-11-20 |
| CN101427249B (zh) | 2017-03-08 |
| JP2009530735A (ja) | 2009-08-27 |
| US7797304B2 (en) | 2010-09-14 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| BRPI0708827A2 (pt) | linguagem de consulta extensÍvel com suporte para tipos de dados ricos | |
| US10970270B2 (en) | Unified data organization for multi-model distributed databases | |
| JP5064483B2 (ja) | 増分ビューの保守を用いたマッピングアーキテクチャ | |
| US10268742B2 (en) | View maintenance rules for an update pipeline of an object-relational mapping (ORM) platform | |
| US7647298B2 (en) | Generation of query and update views for object relational mapping | |
| US7403956B2 (en) | Relational schema format | |
| US20100082646A1 (en) | Tracking constraints and dependencies across mapping layers | |
| JP6720641B2 (ja) | 多言語データティアのデータ制約 | |
| CN107515887A (zh) | 一种适用于多种大数据管理系统的交互式查询方法 | |
| US9098546B2 (en) | Advanced business query language | |
| CN118210951A (zh) | 图形和关系数据的统一查询引擎 | |
| Michel et al. | Mapping-based SPARQL access to a MongoDB database | |
| Luong et al. | A Technical Perspective of DataCalc—Ad-hoc Analyses on Heterogeneous Data Sources | |
| Mayr | A Deep Embedding of Queries into Ruby | |
| Luong et al. | A Technical Perspective of DataCalc | |
| Russo et al. | Programming Microsoft LINQ In. NET Framework 4 | |
| Afonso | Towards an Efficient OLAP Engine Based on Linear Algebra | |
| Ailamaki et al. | Data Engineering | |
| Masino et al. | Research Hospital Data ETL with DataExpress |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| B08F | Application fees: application dismissed [chapter 8.6 patent gazette] |
Free format text: REFERENTE A 8A ANUIDADE. |
|
| B08K | Patent lapsed as no evidence of payment of the annual fee has been furnished to inpi [chapter 8.11 patent gazette] |
Free format text: REFERENTE AO DESPACHO 8.6 PUBLICADO NA RPI 2289 DE 18/11/2014. |