de.fuberlin.wiwiss.d2rq.map
Class Database

java.lang.Object
  extended byde.fuberlin.wiwiss.d2rq.map.Database

public class Database
extends java.lang.Object

Representation of a d2rq:Database from the mapping file. It contains the connection information for the database and the column types of all database columns used.

History:
06-03-2004: Initial version of this class.
08-03-2004: Added some column type logic.

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

Field Summary
private  java.util.Map columnTypes
          Types of all columns used from this database.
private  java.sql.Connection con
           
private  boolean connectedToDatabase
          Flag that the database connection has been established
 boolean databaseMayUseDistinct
           
private  java.lang.String databasePassword
           
private  java.lang.String databaseUsername
           
static java.lang.Integer dateColumn
           
static int dateColumnType
           
private  java.lang.String expressionTranslator
           
static int invalidColumnType
           
private  java.lang.String jdbc
           
private  java.lang.String jdbcDriver
           
static int noColumnType
           
static java.lang.Integer numericColumn
           
static int numericColumnType
           
private  java.lang.String odbc
           
static java.lang.Integer textColumn
           
static int textColumnType
           
 
Constructor Summary
Database(java.lang.String odbc, java.lang.String jdbc, java.lang.String jdbcDriver, java.lang.String databaseUsername, java.lang.String databasePassword, java.util.Map columnTypes)
           
 
Method Summary
 void assertHasType(Column column)
          Raises a D2RQ error if there's no type information for the column.
private  void connectToDatabase()
           
 boolean correctlyHandlesDistinct()
          Some Databases do not handle large entries correctly.
 int getColumnType(Column column)
          Returns the columnType for a given database column.
 int getColumnType(java.lang.String qualifiedColumnName)
           
 java.sql.Connection getConnnection()
          Returns a connection to this database.
 java.lang.String getDatabasePassword()
          Returns the database password.
 java.lang.String getDatabaseUsername()
          Returns the database username.
 java.lang.String getExpressionTranslator()
           
 java.lang.String getJdbc()
          Returns the JDBC data source name.
 java.lang.String getJdbcDriver()
          Returns the JDBC driver.
 java.lang.String getOdbc()
          Returns the ODBC data source name.
 void inferColumnTypes(Join join)
          Infers additional type information for columns used in a join by assuming that two joined columns have the same type.
private  void inferColumnTypes(java.lang.String col1, java.lang.String col2)
           
 void setAllowDistinct(boolean b)
           
 void setExpressionTranslator(java.lang.String expressionTranslator)
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

connectedToDatabase

private boolean connectedToDatabase
Flag that the database connection has been established


columnTypes

private java.util.Map columnTypes
Types of all columns used from this database. Possible values are d2rq:numericColumn, d2rq:textColumn and d2rq:dateColumn.


odbc

private java.lang.String odbc

jdbc

private java.lang.String jdbc

jdbcDriver

private java.lang.String jdbcDriver

databaseUsername

private java.lang.String databaseUsername

databasePassword

private java.lang.String databasePassword

con

private java.sql.Connection con

invalidColumnType

public static final int invalidColumnType
See Also:
Constant Field Values

noColumnType

public static final int noColumnType
See Also:
Constant Field Values

numericColumnType

public static final int numericColumnType
See Also:
Constant Field Values

textColumnType

public static final int textColumnType
See Also:
Constant Field Values

dateColumnType

public static final int dateColumnType
See Also:
Constant Field Values

numericColumn

public static final java.lang.Integer numericColumn

textColumn

public static final java.lang.Integer textColumn

dateColumn

public static final java.lang.Integer dateColumn

databaseMayUseDistinct

public boolean databaseMayUseDistinct

expressionTranslator

private java.lang.String expressionTranslator
Constructor Detail

Database

public Database(java.lang.String odbc,
                java.lang.String jdbc,
                java.lang.String jdbcDriver,
                java.lang.String databaseUsername,
                java.lang.String databasePassword,
                java.util.Map columnTypes)
Method Detail

inferColumnTypes

public void inferColumnTypes(Join join)
Infers additional type information for columns used in a join by assuming that two joined columns have the same type.

Parameters:
join - try to infer column types based on this join

inferColumnTypes

private void inferColumnTypes(java.lang.String col1,
                              java.lang.String col2)

getConnnection

public java.sql.Connection getConnnection()
Returns a connection to this database.

Returns:
connection

getOdbc

public java.lang.String getOdbc()
Returns the ODBC data source name.

Returns:
odbcDSN

getJdbc

public java.lang.String getJdbc()
Returns the JDBC data source name.

Returns:
jdbcDSN

getJdbcDriver

public java.lang.String getJdbcDriver()
Returns the JDBC driver.

Returns:
jdbcDriver

getDatabaseUsername

public java.lang.String getDatabaseUsername()
Returns the database username.

Returns:
username

getDatabasePassword

public java.lang.String getDatabasePassword()
Returns the database password.

Returns:
password

getColumnType

public int getColumnType(java.lang.String qualifiedColumnName)

getColumnType

public int getColumnType(Column column)
Returns the columnType for a given database column.

Returns:
Node columnType D2RQ.textColumn or D2RQ.numericColumn or D2RQ.dateColumn

assertHasType

public void assertHasType(Column column)
Raises a D2RQ error if there's no type information for the column.

Parameters:
column - a database column

connectToDatabase

private void connectToDatabase()

setAllowDistinct

public void setAllowDistinct(boolean b)

correctlyHandlesDistinct

public boolean correctlyHandlesDistinct()
Some Databases do not handle large entries correctly. For example MSAccess cuts strings larger than 256 bytes when queried with the DISTINCT keyword. TODO We would need some assertions about a database or specific columns.

Returns:
databaseMayUseDistinct

setExpressionTranslator

public void setExpressionTranslator(java.lang.String expressionTranslator)

getExpressionTranslator

public java.lang.String getExpressionTranslator()

toString

public java.lang.String toString()