/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, Version * 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). Initial Developer: H2 Group */ package org.h2.android; import java.util.Map; import java.util.Set; import org.h2.util.StringUtils; import android.database.Cursor; /** * This helper class is used to build SQL statements. */ public class H2QueryBuilder { private H2Database.CursorFactory factory; private boolean distinct; private String tables; private Map<String, String> columnMap; /** * Append the column to the string builder. The columns are separated by * comma. * * @param s the target string builder * @param columns the columns */ static void appendColumns(StringBuilder s, String[] columns) { for (int i = 0; i < columns.length; i++) { if (i > 0) { s.append(", "); } s.append(StringUtils.quoteIdentifier(columns[i])); } } /** * Return the SELECT statement for the given parameters. * * @param distinct if only distinct rows should be returned * @param tables the list of tables * @param columns the list of columns * @param where the where condition or null * @param groupBy the group by list or null * @param having the having condition or null * @param orderBy the order by list or null * @param limit the limit or null * @return the query */ static String buildQueryString(boolean distinct, String tables, String[] columns, String where, String groupBy, String having, String orderBy, String limit) { StringBuilder s = new StringBuilder(); s.append("select "); if (distinct) { s.append("distinct "); } appendColumns(s, columns); s.append(" from ").append(tables); if (where != null) { s.append(" where ").append(where); } if (groupBy != null) { s.append(" group by ").append(groupBy); } if (having != null) { s.append(" having ").append(having); } if (orderBy != null) { s.append(" order by ").append(groupBy); } if (limit != null) { s.append(" limit ").append(limit); } return s.toString(); } /** * Append the text to the where clause. * * @param inWhere the text to append */ void appendWhere(CharSequence inWhere) { // TODO } /** * Append the text to the where clause. The text is escaped. * * @param inWhere the text to append */ void appendWhereEscapeString(String inWhere) { // TODO how to escape } /** * Return the SELECT UNION statement for the given parameters. * * @param projectionIn TODO * @param selection TODO * @param selectionArgs TODO * @param groupBy the group by list or null * @param having the having condition or null * @param orderBy the order by list or null * @param limit the limit or null * @return the query */ String buildQuery(String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) { return null; } /** * Return the SELECT UNION statement for the given parameters. * * @param subQueries TODO * @param orderBy the order by list or null * @param limit the limit or null * @return the query */ String buildUnionQuery(String[] subQueries, String orderBy, String limit) { return null; } /** * Return the SELECT UNION statement for the given parameters. * * @param typeDiscriminatorColumn TODO * @param unionColumns TODO * @param columnsPresentInTable TODO * @param computedColumnsOffset TODO * @param typeDiscriminatorValue TODO * @param selection TODO * @param selectionArgs TODO * @param groupBy the group by list or null * @param having the having condition or null * @return the query */ String buildUnionSubQuery(String typeDiscriminatorColumn, String[] unionColumns, Set<String> columnsPresentInTable, int computedColumnsOffset, String typeDiscriminatorValue, String selection, String[] selectionArgs, String groupBy, String having) { return null; } /** * Get the list of tables. * * @return the list of tables */ String getTables() { return tables; } /** * Run the query for the given parameters. * * @param db the connection * @param projectionIn TODO * @param selection TODO * @param selectionArgs TODO * @param groupBy the group by list or null * @param having the having condition or null * @param orderBy the order by list or null * @return the cursor */ Cursor query(H2Database db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) { return null; } /** * Run the query for the given parameters. * * @param db the connection * @param projectionIn TODO * @param selection TODO * @param selectionArgs TODO * @param groupBy the group by list or null * @param having the having condition or null * @param orderBy the order by list or null * @param limit the limit or null * @return the cursor */ Cursor query(H2Database db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) { return null; } /** * Set the cursor factory. * * @param factory the new value */ void setCursorFactory(H2Database.CursorFactory factory) { this.factory = factory; } /** * Enable or disable the DISTINCT flag. * * @param distinct the new value */ void setDistinct(boolean distinct) { this.distinct = distinct; } /** * TODO * * @param columnMap TODO */ void setProjectionMap(Map<String, String> columnMap) { this.columnMap = columnMap; } /** * Set the list of tables. * * @param inTables the list of tables */ void setTables(String inTables) { this.tables = inTables; } }