001: /*
002: * Created on 28/05/2004
003: *
004: * Swing Components - visit http://sf.net/projects/gfd
005: *
006: * Copyright (C) 2004 Igor Regis da Silva Simões
007: *
008: * This program is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU General Public License
010: * as published by the Free Software Foundation; either version 2
011: * of the License, or (at your option) any later version.
012: *
013: * This program is distributed in the hope that it will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016: * GNU General Public License for more details.
017: *
018: * You should have received a copy of the GNU General Public License
019: * along with this program; if not, write to the Free Software
020: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
021: *
022: */
023: package br.com.gfpshare.db;
024:
025: import java.util.ArrayList;
026: import java.util.Map;
027:
028: /**
029: * Esta interface define os métodos necessários para que uma classe seja um SQLParser.
030: * Um SQLParser é uma classe que possui a funcionalidade de, a partir de uma série de arqumentos
031: * monstar uma cláusula SQL, com o dialeto usado em um banco de dados específico.
032: * @author Igor Regis da Silva Simoes
033: */
034: public interface SQLParser {
035: /**
036: * Constante que representa um caracter que envolve os nomes de colunas
037: */
038: public static char ENVOLVE_COLUNA = '"';
039:
040: /**
041: * Constante que representa um caracter que envolve o nome de tabelas
042: */
043: public static char ENVOLVE_NOME_TABELA = '&';
044:
045: /**
046: * Constante que representa um caracter coringa para consultas SQL
047: */
048: public static char CURINGA = '%';
049:
050: /**
051: * Constante que representa um caracter que envolve as strings
052: */
053: public static char ENVOLVE_STRING = '\'';
054:
055: /**
056: * Constante que representa um caracter que envolve os valores de campo tipo data
057: */
058: public static char ENVOLVE_DATA = '#';
059:
060: /**
061: * Retorna uma string contendo a cláusula SQL de insert para este objeto.
062: * @param tableName Nome da tebela de banco de dados que receberá estes dados.
063: * @param data Dados que correspondem a linha a ser inserida na tabela do banco de dados.
064: * @param columnsName Nomes das solunas que serão preenchidas
065: * @return cláusula SQL de insert para este objeto
066: */
067: public ParsedPreparedStatement getInsertSQL(String tableName,
068: Map data, ArrayList<String> columnsName);
069:
070: /**
071: * Retorna uma string contendo a cláusula SQL de update para este objeto.
072: * @param tableName Nome da tebela de banco de dados que receberá estes dados.
073: * @param data Dados que correspondem a linha a ser inserida na tabela do banco de dados.
074: * @param columnsName Nomes das solunas que serão preenchidas
075: * @param pkNames Chaves primerias que servirão como parametro para a cláusula where.
076: * @return cláusula SQL de update para este objeto
077: */
078: public ParsedPreparedStatement getUpdateSQL(String tableName,
079: Map data, ArrayList<String> columnsName,
080: ArrayList<String> pkNames);
081:
082: /**
083: * Retorna uma string contendo a cláusula SQL de select para este objeto.
084: * @param resultadoDesejado Qualquer string ou funnção sql que possa ser colocada no lugar do * do select.
085: * @param tableName Nome da tebela de banco de dados que será consultada.
086: * @param data Dados que comporão a clásula where
087: * @param columnsName Nomes das colunas dos dados que comporão a cláusula where
088: * @param orderByColumnns Ordem de das colunas da cláusula where
089: * @param crescente Indicativos para cada coluna da cláusula order by informando se devem estar em ordem crescente ou decrescente.
090: * @param condicoesExtras String contendo as condições extras que poderão ser incluídas na cláusula where
091: * @return a cláusula SQL de select para este objeto.
092: */
093: public ParsedPreparedStatement getSelectSQL(
094: String resultadoDesejado, String tableName, Map data,
095: ArrayList<String> columnsName, String[] orderByColumnns,
096: boolean[] crescente, ArrayList<SQLCondition> condicoesExtras);
097:
098: /**
099: * Retorna uma string contendo a cláusula sql detele para este objeto.
100: * @param tableName Nome da tebela de banco de dados que possui os dados a ser deletados.
101: * @param data Dados a serem usados na cláusula where deste sql.
102: * @param columnsName Nomes das colunas dos dados que comporão a cláusula where.
103: * @param condicoesExtras String contendo as condições extras que poderão ser incluídas na cláusula where
104: * @return a cláusula sql detele para este objeto.
105: */
106: public ParsedPreparedStatement getDeleteSQL(String tableName,
107: Map data, ArrayList<String> columnsName,
108: ArrayList<SQLCondition> condicoesExtras,
109: ArrayList<String> pkNames);
110:
111: /**
112: * Realiza o parsing de um sql para o dialeto de um determinado banco de dados
113: * @param sql cláusula sql a ser processada
114: * @return sql resultante da operação de parsing
115: */
116: public ParsedPreparedStatement parse(ParsedPreparedStatement sql);
117: }
118:
119: /**
120: * Esta classe é uma união da String que será usada para criar o PreparedStatement e
121: * do conjunto de parametros que deverão ser passados para o PreparedStatement para
122: * sua execução
123: *
124: * @author Igor Regis da Silva Simoes
125: * @since 09/12/2006
126: */
127: class ParsedPreparedStatement {
128: /**
129: * Query montada dinamicamente que será usada para criar o Preparedstatement
130: */
131: protected String sql = null;
132:
133: /**
134: * Parametros a serem passados para o PreparedStatement
135: */
136: protected ArrayList<Object> params = new ArrayList<Object>();
137:
138: /**
139: * Parametros a serem passados para o PreparedStatement
140: * @return
141: */
142: public ArrayList<Object> getParams() {
143: return params;
144: }
145:
146: /**
147: * Query montada dinamicamente que será usada para criar o Preparedstatement
148: * @return
149: */
150: public String getSql() {
151: return sql;
152: }
153: }
|