//
// Copyright (c)1998-2011 Pearson Education, Inc. or its affiliate(s).
// All rights reserved.
//
package openadk.library.tools.queries;
/**
* Encapsulates a field name and type from the <code>java.sql.Types</code> class
*
* When preparing a dictionary to be passed to the <code>SQLQueryFormatter.format</code>
* method, the caller must map <code>SIFDTD</code> ElementDef constants to instances
* of SQLField. The <code>java.sql.Types</code> constant is used to render the field
* value according to its data type (e.g. strings are quoted with a single quote,
* numeric fields are rendered as-is, etc.)<p>
*
* For example,<p>
*
* <code>
* Map m = new HashMap();<br/>
* m.put( SIFDTD.STUDENTPERSONAL_REFID,<br/>
* new SQLField( "Students.Foreign_ID", java.sql.Types.VARCHAR ) );<br/>
* m.put( SIFDTD.NAME_LASTNAME,<br/>
* new SQLField( "Students.Last_Name", java.sql.Types.VARCHAR ) );<br/>
* m.put( SIFDTD.NAME_FIRSTNAME,<br/>
* new SQLField( "First_Name", java.sql.Types.VARCHAR ) );<br/>
* m.put( SIFDTD.DEMOGRAPHICS_CITIZENSHIPSTATUS,<br/>
* new SQLField( "Students.US_Citizen_Bool{04=1,=0}", java.sql.Types.NUMERIC ) );<br/>
* </code>
* <p>
*
* The above example might result in a string such as "( Students.US_Citizen_Bool = 0 )"
* or "( Students.Foreign_ID = '898' ) OR ( Students.Last_Name = 'Cortez' AND First_Name = 'Robert' )"<p>
*
* @author Edustructures LLC
* @version ADK 1.0
*/
public class SQLField
{
private final Dialect fDialect;
public String Name;
public int Type;
/**
* Constructor
* @param name The application-defined field name
* @param type A constant from the java.sql.Types class. The type is used
* by SQLQueryBuilder to property format the field value
*/
public SQLField( String name, int type )
{
Name = name;
Type = type;
fDialect = SQLDialect.DEFAULT;
}
/**
* Constructor
* @param name The application-defined field name
* @param type A constant from the java.sql.Types class. The type is used
* by SQLQueryBuilder to property format the field value
* @param dialect The SQL Dialect to use for rendering fields
*/
public SQLField( String name, int type, Dialect dialect )
{
Name = name;
Type = type;
fDialect = dialect;
}
/**
* Render a field value given the java.sql.Types constant passed to the constructor
*/
public String render( String value )
throws QueryFormatterException
{
switch( Type )
{
case java.sql.Types.VARCHAR:
case java.sql.Types.CHAR:
case java.sql.Types.LONGVARCHAR:
return renderString( value );
case java.sql.Types.DATE:
return renderDate( value );
case java.sql.Types.TIME:
return renderTime( value );
case java.sql.Types.TIMESTAMP:
return renderTimeStamp( value );
default:
return value;
}
}
/**
* Render a field value as a string
*/
public String renderString( String value )
{
return fDialect.renderString( value );
}
/**
* Render a field value as a number
*/
public String renderNumeric( String value )
{
return fDialect.renderNumeric( value );
}
/**
* Render a field value as a date
*/
public String renderDate( String value )
{
return fDialect.renderDate( value );
}
/**
* Render a field value as a time
*/
public String renderTime( String value )
{
return fDialect.renderTime( value );
}
/**
* Render a field value as a time
*/
public String renderTimeStamp( String value )
{
return fDialect.renderTimeStamp( value );
}
}