--- /dev/null
+/*\r
+ * Copyright (C) 2001-2006 The Mir-coders group\r
+ *\r
+ * This file is part of Mir.\r
+ *\r
+ * Mir is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Mir is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Mir; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ *\r
+ * In addition, as a special exception, The Mir-coders gives permission to link\r
+ * the code of this program with any library licensed under the Apache Software License,\r
+ * and distribute linked combinations including the two. You must obey the\r
+ * GNU General Public License in all respects for all of the code used other than\r
+ * the above mentioned libraries. If you modify this file, you may extend this\r
+ * exception to your version of the file, but you are not obligated to do so.\r
+ * If you do not wish to do so, delete this exception statement from your version.\r
+ */\r
+package mir.storage;\r
+\r
+import java.sql.Connection;\r
+import java.sql.ResultSet;\r
+import java.util.*;\r
+\r
+/**\r
+ * Class to generate update statements\r
+ */\r
+public class RecordRetriever extends StatementGenerator {\r
+ public RecordRetriever(String aTableName, String aPrefix) {\r
+ tableName = aTableName;\r
+ prefix = aPrefix;\r
+ if (prefix == null || "".equals(prefix)) {\r
+ prefix = null;\r
+ }\r
+ extraTables = new ArrayList();\r
+ whereClause = new StringBuffer();\r
+ orderByClause = new StringBuffer();\r
+\r
+ appendQuery("SELECT ");\r
+ }\r
+\r
+ public void addExtraTable(String aTableSpecification) {\r
+ extraTables.add(aTableSpecification);\r
+ }\r
+\r
+ public void addField(String aField) {\r
+ if (firstField) {\r
+ firstField = false;\r
+ }\r
+ else {\r
+ appendQuery(", ");\r
+ }\r
+ if (prefix!=null) {\r
+ appendQuery(prefix);\r
+ appendQuery(".");\r
+ }\r
+\r
+ appendQuery(aField);\r
+ }\r
+\r
+ public void appendStringParameter(String aValue) {\r
+ appendParameter(aValue);\r
+ }\r
+\r
+ public void appendWhereClause(String aPart) {\r
+ whereClause.append(aPart);\r
+ }\r
+\r
+ public void appendOrderByClause(String aPart) {\r
+ orderByClause.append(aPart);\r
+ }\r
+\r
+ public void setLimit(int aLimit) {\r
+ limit = aLimit;\r
+ }\r
+\r
+ public void setOffset(int anOffset) {\r
+ offset = anOffset;\r
+ }\r
+\r
+ /**\r
+ * Executes the statement. Returns then number of records\r
+ * changed\r
+ */\r
+ public ResultSet execute(Connection aConnection) throws DatabaseFailure {\r
+ appendQuery(CRLF);\r
+ appendQuery("FROM ");\r
+ appendQuery(tableName);\r
+ if (prefix!=null) {\r
+ appendQuery(" ");\r
+ appendQuery(prefix);\r
+ }\r
+\r
+ Iterator i = extraTables.iterator();\r
+ while (i.hasNext()) {\r
+ appendQuery(", ");\r
+ appendQuery((String) i.next());\r
+ }\r
+\r
+ if (whereClause.toString().trim().length()>0) {\r
+ appendQuery(CRLF);\r
+ appendQuery("WHERE ");\r
+ appendQuery(whereClause.toString());\r
+ }\r
+\r
+ if (orderByClause.toString().trim().length()>0) {\r
+ appendQuery(CRLF);\r
+ appendQuery("ORDER BY ");\r
+ appendQuery(orderByClause.toString());\r
+ }\r
+\r
+ if (limit > -1) {\r
+ appendQuery(CRLF);\r
+ appendQuery("LIMIT ");\r
+ appendQuery(Integer.toString(limit));\r
+ }\r
+\r
+ if (offset > -1) {\r
+ appendQuery(CRLF);\r
+ appendQuery("OFFSET ");\r
+ appendQuery(Integer.toString(offset));\r
+ }\r
+\r
+ return executeWithResultSet(aConnection);\r
+ }\r
+\r
+ private String tableName;\r
+ private String prefix;\r
+ private List extraTables;\r
+ private boolean firstField = true;\r
+ private StringBuffer whereClause;\r
+ private StringBuffer orderByClause;\r
+ private int limit = -1;\r
+ private int offset = -1;\r
+\r
+ private static final String CRLF = "\n\r";\r
+}
\ No newline at end of file