de.fuberlin.wiwiss.d2rq.find
Class SQLStatementMaker

java.lang.Object
  extended byde.fuberlin.wiwiss.d2rq.find.SQLStatementMaker

public class SQLStatementMaker
extends java.lang.Object

Collects parts of a SELECT query and delivers a corresponding SQL statement. Used within TripleResultSets.

History:
06-07-2004: Initial version of this class.
08-03-2004: Higher-level operations added (addColumnValues etc.)

Version:
V0.2
Author:
Chris Bizer chris@bizer.de, Richard Cyganiak

Field Summary
protected  java.util.Map aliasMap
           
private  java.util.Map columnNameNumber
          Maps column names from the database to columns numbers in the result set.
private  Database database
           
private  boolean eliminateDuplicates
           
private static java.util.regex.Pattern escapePattern
           
private static java.lang.String escapeReplacement
           
protected  java.util.Collection referedTables
           
private  int selectColumnCount
           
private  java.util.List sqlSelect
           
private  java.util.List sqlWhere
           
 
Constructor Summary
SQLStatementMaker(Database database)
           
 
Method Summary
 void addAliasMap(java.util.Map m)
           
 void addColumnRenames(java.util.Map renamedColumns)
          Make columns accessible through their old, pre-renaming names.
 void addColumnValue(Column column, java.lang.String value)
          Adds a WHERE clause to the query.
 void addColumnValues(java.util.Map columnsAndValues)
          Adds multiple WHERE clauses from a map.
 void addConditions(java.util.Set conditions)
          Adds multiple WHERE clauses to the query.
 void addJoins(java.util.Set joins)
           
 void addSelectColumn(Column column)
          Adds a column to the SELECT part of the query.
 void addSelectColumns(java.util.Set columns)
          Adds a list of Columns to the SELECT part of the query
 int columnType(Column column)
           
 java.lang.String correctlyQuotedColumnValue(Column column, java.lang.String value)
           
static java.lang.String escape(java.lang.String s)
          Escape special characters in database literals to avoid SQL injection
 java.util.Map getColumnNameNumberMap()
           
 Database getDatabase()
           
private static java.lang.String getQuotedColumnValue(java.lang.String value, int columnType)
           
 java.lang.String getSQLStatement()
           
private  void referColumn(Column c)
           
private  void referColumns(java.util.Collection columns)
           
private  void referTable(java.lang.String tableName)
           
 void setEliminateDuplicates(boolean eliminateDuplicates)
          Sets if the SQL statement should eliminate duplicate rows ("SELECT DISTINCT").
private static java.lang.String sqlFromExpression(java.util.Collection referedTables, java.util.Map aliasMap)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

escapePattern

private static final java.util.regex.Pattern escapePattern

escapeReplacement

private static final java.lang.String escapeReplacement
See Also:
Constant Field Values

database

private Database database

sqlSelect

private java.util.List sqlSelect

sqlWhere

private java.util.List sqlWhere

columnNameNumber

private java.util.Map columnNameNumber
Maps column names from the database to columns numbers in the result set.


selectColumnCount

private int selectColumnCount

eliminateDuplicates

private boolean eliminateDuplicates

aliasMap

protected java.util.Map aliasMap

referedTables

protected java.util.Collection referedTables
Constructor Detail

SQLStatementMaker

public SQLStatementMaker(Database database)
Method Detail

getDatabase

public Database getDatabase()

getSQLStatement

public java.lang.String getSQLStatement()

addAliasMap

public void addAliasMap(java.util.Map m)

referTable

private void referTable(java.lang.String tableName)

referColumn

private void referColumn(Column c)

referColumns

private void referColumns(java.util.Collection columns)

addSelectColumn

public void addSelectColumn(Column column)
Adds a column to the SELECT part of the query.

Parameters:
column - the column

addSelectColumns

public void addSelectColumns(java.util.Set columns)
Adds a list of Columns to the SELECT part of the query

Parameters:
columns -

addColumnValue

public void addColumnValue(Column column,
                           java.lang.String value)
Adds a WHERE clause to the query. Only records are selected where the column given as the first argument has the value given as second argument.

Parameters:
column - the column whose values are to be restricted
value - the value the column must have

correctlyQuotedColumnValue

public java.lang.String correctlyQuotedColumnValue(Column column,
                                                   java.lang.String value)

columnType

public int columnType(Column column)

addColumnValues

public void addColumnValues(java.util.Map columnsAndValues)
Adds multiple WHERE clauses from a map. The map keys are Column instances. The map values are the values for those columns.

Parameters:
columnsAndValues - a map containing columns and their values

addConditions

public void addConditions(java.util.Set conditions)
Adds multiple WHERE clauses to the query.

Parameters:
conditions - a set of Strings containing SQL WHERE clauses

addJoins

public void addJoins(java.util.Set joins)

addColumnRenames

public void addColumnRenames(java.util.Map renamedColumns)
Make columns accessible through their old, pre-renaming names.

Parameters:
renamedColumns -

setEliminateDuplicates

public void setEliminateDuplicates(boolean eliminateDuplicates)
Sets if the SQL statement should eliminate duplicate rows ("SELECT DISTINCT").

Parameters:
eliminateDuplicates - enable DISTINCT?

getColumnNameNumberMap

public java.util.Map getColumnNameNumberMap()

getQuotedColumnValue

private static java.lang.String getQuotedColumnValue(java.lang.String value,
                                                     int columnType)

escape

public static java.lang.String escape(java.lang.String s)
Escape special characters in database literals to avoid SQL injection


sqlFromExpression

private static java.lang.String sqlFromExpression(java.util.Collection referedTables,
                                                  java.util.Map aliasMap)