IntroduçãoA idéia do IQuery é baseada na ferramenta LINQ. A idéia por traz do LINQ é trazer os comandos de consulta ao banco de dados para a linguagem. Comandos SQLs são armazenados em Strings, não fazem parte da linguagem.Estrutura básica da sintaxeHá dois tipos de métodos no IQuery(): Os métodos declarativos e os de processamento. Os métodos declarativos servem para montar a consulta e os executivos servem para executar alguma operação com o IQuery, como por exemplo executar a consulta.Os métodos declarativos básicos mais usados no IQuery são .from(), .where() e .column(). Veja o exemplo abaixo: IQuery.from( 123 /*Classe que será consultada*/ ) .where( CLAUSULA_WHERE ) .column( COLUNAS ) Há também outros métodos declarativos menos usados. São eles: o innerJoin() e o leftOuterJoin(). Veremos alguns exemplos sobre o uso deles. Voltando ao exemplo acima, falta falar sobre os parâmetros dos métodos .where() e .column(). O método .where()O método .where() é usado para aplicar filtros na consulta do IQuery. Este método recebe um único parâmetro que é um objeto literal ou um array. Vamos direto ao exemplo para ficar mais claro.Suponhamos que você deseja fazer o seguinte filtro: Where CHCRIACAO = 123 Você deverá usar o método .where() da seguinte forma: .where( {field: "CHCRIACAO", operator: "=", value: 123} ) No exemplo acima foi passado um objeto literal como parâmetro do método .where(). Vejamos agora o caso em que será necessário passar um vetor invés de um objeto literal. Suponhamos que agora você deseje fazer um filtro com dois ou mais campos. Algo assim: Where CHCRIACAO = 123 Você deverá usar o método .where() da seguinte forma: .where([ {field: "CHCRIACAO", operator: "=", value: 123}, {field: "BAIXADO", operator: "=", value: null} ]) Note que só pelo fato de ter colocar o valor null no terceiro filtro, o SQL correspondente será gerado com is Null. Então conclui-se que o IQuery pode mudar a cláusula where do comando SQL gerado de acordo com o valor passado para o filtro. Vejamos o que acontece quando passamos um vetor ou uma instância do objeto IQuery como valor de filtro: Passando o vetor para o filtro .where([ {field: "CHCRIACAO", operator: "=", value: [123, 456, 789]}, "and", {field: "BAIXADO", operator: "=", value: null} ]) O SQL correspondente será algo assim: Where CHCRIACAO in (123, 456, 789) And BAIXADO is Null Passando um outro IQuery para o filtro var vinculos = IQuery.from(-1897052338 /* Vínculos de Movimentações */) .where([{field: "crpedido", operator: "=", value: 111}]) .column([{field: "chcriacao"}]) var pedidos = IQuery.from(-2008879000 /* Pedidos ou Provisões */) .where([{field: "chcriacao", operator: "=", value: vinculos}]) .column([{field: "chave"}]) pedidos.toSql(); O SQL do where gerado pelo IQuery pedidos será algo assim: Where CHCRIACAO in (Select CHCRIACAO From VINCULAMOVIMENTAC Where CRPEDIDO = 111) O método .column()Assim como o método .where(), este método também recebe um único parâmetro que é um objeto literal ou um vetor de objetos literais. Vamos aos exemplos:Se usar um único objeto literal como parâmetro .column({field: "chave"}) Será gerado Select chave Agora se usar um vetor de objetos literais .column([{field: "chave"}, {field: "emissao"}]) Será gerado Select chave, emissao Usando alias e coalesce .column({field: "chave", alias: "CHAVE_PEDIDO", coalesceValue: 1}) O código acima gera algo assim: select coalesce(chave, 1) as CHAVE_PEDIDO ConclusãoEsta é apenas uma visão geral do que o IQuery pode fazer. Não deixe de ler também os exemplos do uso do IQuery. Lá mostra, por exemplo, o código IQuery de como usar os métodos innerJoin() e leftOuterJoin() que não foram contemplados neste artigo. |