com.j256.ormlite.db
Class BaseDatabaseType

java.lang.Object
  extended by com.j256.ormlite.db.BaseDatabaseType
All Implemented Interfaces:
DatabaseType
Direct Known Subclasses:
BaseSqliteDatabaseType

public abstract class BaseDatabaseType
extends Object
implements DatabaseType

Base class for all of the DatabaseType classes that provide the per-database type functionality to create tables and build queries.

Here's a good page which shows some of the differences between SQL versions.

Author:
graywatson

Nested Class Summary
protected static class BaseDatabaseType.BooleanNumberFieldConverter
          Conversion to/from the Boolean Java field as a number because some databases like the true/false.
 
Field Summary
protected static String DEFAULT_SEQUENCE_SUFFIX
           
protected  Driver driver
           
 
Constructor Summary
BaseDatabaseType()
           
 
Method Summary
 void addPrimaryKeySql(FieldType[] fieldTypes, List<String> additionalArgs, List<String> statementsBefore, List<String> statementsAfter, List<String> queriesAfter)
          Appends information about primary key field(s) to the additional-args or other lists.
 void addUniqueComboSql(FieldType[] fieldTypes, List<String> additionalArgs, List<String> statementsBefore, List<String> statementsAfter, List<String> queriesAfter)
          Appends information about unique field(s) to the additional-args or other lists.
protected  void appendBooleanType(StringBuilder sb, int fieldWidth)
          Output the SQL type for a Java boolean.
protected  void appendByteArrayType(StringBuilder sb, int fieldWidth)
          Output the SQL type for either a serialized Java object or a byte[].
protected  void appendByteType(StringBuilder sb, int fieldWidth)
          Output the SQL type for a Java byte.
protected  void appendCharType(StringBuilder sb, int fieldWidth)
          Output the SQL type for a Java char.
 void appendColumnArg(String tableName, StringBuilder sb, FieldType fieldType, List<String> additionalArgs, List<String> statementsBefore, List<String> statementsAfter, List<String> queriesAfter)
          Takes a FieldType and appends the SQL necessary to create the field to the string builder.
 void appendCreateTableSuffix(StringBuilder sb)
          Append the SQL necessary to properly finish a CREATE TABLE line.
protected  void appendDateType(StringBuilder sb, int fieldWidth)
          Output the SQL type for a Java Date.
 void appendEscapedEntityName(StringBuilder sb, String name)
          Add a entity-name word to the string builder wrapped in the proper characters to escape it.
 void appendEscapedWord(StringBuilder sb, String word)
          Add the word to the string builder wrapped in the proper characters to escape it.
 void appendLimitValue(StringBuilder sb, long limit, Long offset)
          Append to the string builder the necessary SQL to limit the results to a certain number.
protected  void appendLongStringType(StringBuilder sb, int fieldWidth)
          Output the SQL type for a Java Long String.
protected  void appendLongType(StringBuilder sb, int fieldWidth)
          Output the SQL type for a Java long.
 void appendOffsetValue(StringBuilder sb, long offset)
          Append to the string builder the necessary SQL to start the results at a certain row number.
 void appendSelectNextValFromSequence(StringBuilder sb, String sequenceName)
          Append the SQL necessary to get the next-value from a sequence.
protected  void appendSerializableType(StringBuilder sb, int fieldWidth)
          Output the SQL type for a serialized Java object.
protected  void appendShortType(StringBuilder sb, int fieldWidth)
          Output the SQL type for a Java short.
protected  void appendStringType(StringBuilder sb, int fieldWidth)
          Output the SQL type for a Java String.
protected  void configureGeneratedId(String tableName, StringBuilder sb, FieldType fieldType, List<String> statementsBefore, List<String> statementsAfter, List<String> additionalArgs, List<String> queriesAfter)
          Output the SQL necessary to configure a generated-id column.
protected  void configureGeneratedIdSequence(StringBuilder sb, FieldType fieldType, List<String> statementsBefore, List<String> additionalArgs, List<String> queriesAfter)
          Output the SQL necessary to configure a generated-id column.
protected  void configureId(StringBuilder sb, FieldType fieldType, List<String> statementsBefore, List<String> additionalArgs, List<String> queriesAfter)
          Output the SQL necessary to configure an id column.
 void dropColumnArg(FieldType fieldType, List<String> statementsBefore, List<String> statementsAfter)
          Takes a FieldType and adds the necessary statements to the before and after lists necessary so that the dropping of the table will succeed and will clear other associated sequences or other database artifacts
protected  boolean generatedIdSqlAtEnd()
          Return true if we should add generated-id SQL in the addPrimaryKeySql(com.j256.ormlite.field.FieldType[], java.util.List, java.util.List, java.util.List, java.util.List) method at the end.
 String generateIdSequenceName(String tableName, FieldType idFieldType)
          Return the name of an ID sequence based on the tabelName and the fieldType of the id.
 String getCommentLinePrefix()
          Return the prefix to put at the front of a SQL line to mark it as a comment.
protected abstract  String getDriverClassName()
          Return the name of the driver class associated with this database type.
 FieldConverter getFieldConverter(DataPersister dataPersister)
          Return the FieldConverter to associate with the DataType.
 String getPingStatement()
          Return an statement that doesn't do anything but which can be used to ping the database by sending it over a database connection.
 boolean isAllowGeneratedIdInsertSupported()
          Does the database support the DatabaseField.allowGeneratedIdInsert() setting which allows people to insert values into generated-id columns.
 boolean isBatchUseTransaction()
          Returns true if batch operations should be done inside of a transaction.
 boolean isCreateIfNotExistsSupported()
          Returns true if the table creation IF NOT EXISTS syntax is supported.
 boolean isCreateTableReturnsZero()
          Returns true if a 'CREATE TABLE' statement should return 0.
 boolean isEntityNamesMustBeUpCase()
          Returns true if table and field names should be made uppercase.
 boolean isIdSequenceNeeded()
          Return true if the database needs a sequence when you use generated IDs.
 boolean isLimitAfterSelect()
          Return true if the LIMIT should be called after SELECT otherwise at the end of the WHERE (the default).
 boolean isLimitSqlSupported()
          Return true if the database supports the LIMIT SQL command.
 boolean isNestedSavePointsSupported()
          Returns true if nested savePoints are supported, otherwise false.
 boolean isOffsetLimitArgument()
          Return true if the database supports the offset as a comma argument from the limit.
 boolean isOffsetSqlSupported()
          Return true if the database supports the OFFSET SQL command in some form.
 boolean isSelectSequenceBeforeInsert()
          Returns true if we have to select the value of the sequence before we insert a new data row.
 boolean isTruncateSupported()
          Returns true if the table truncate operation is supported.
 boolean isVarcharFieldWidthSupported()
          Return true if the database supports the width parameter on VARCHAR fields.
 void loadDriver()
          Load the driver class associated with this database so it can wire itself into JDBC.
 void setDriver(Driver driver)
          Set the driver instance on the database type.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.j256.ormlite.db.DatabaseType
getDatabaseName, isDatabaseUrlThisType
 

Field Detail

DEFAULT_SEQUENCE_SUFFIX

protected static String DEFAULT_SEQUENCE_SUFFIX

driver

protected Driver driver
Constructor Detail

BaseDatabaseType

public BaseDatabaseType()
Method Detail

getDriverClassName

protected abstract String getDriverClassName()
Return the name of the driver class associated with this database type.


loadDriver

public void loadDriver()
                throws SQLException
Description copied from interface: DatabaseType
Load the driver class associated with this database so it can wire itself into JDBC.

Specified by:
loadDriver in interface DatabaseType
Throws:
SQLException - If the driver class is not available in the classpath.

setDriver

public void setDriver(Driver driver)
Description copied from interface: DatabaseType
Set the driver instance on the database type.

Specified by:
setDriver in interface DatabaseType

appendColumnArg

public void appendColumnArg(String tableName,
                            StringBuilder sb,
                            FieldType fieldType,
                            List<String> additionalArgs,
                            List<String> statementsBefore,
                            List<String> statementsAfter,
                            List<String> queriesAfter)
                     throws SQLException
Description copied from interface: DatabaseType
Takes a FieldType and appends the SQL necessary to create the field to the string builder. The field may also generate additional arguments which go at the end of the insert statement or additional statements to be executed before or afterwards depending on the configurations. The database can also add to the list of queries that will be performed afterward to test portions of the config.

Specified by:
appendColumnArg in interface DatabaseType
Throws:
SQLException

appendStringType

protected void appendStringType(StringBuilder sb,
                                int fieldWidth)
Output the SQL type for a Java String.


appendLongStringType

protected void appendLongStringType(StringBuilder sb,
                                    int fieldWidth)
Output the SQL type for a Java Long String.


appendDateType

protected void appendDateType(StringBuilder sb,
                              int fieldWidth)
Output the SQL type for a Java Date.


appendBooleanType

protected void appendBooleanType(StringBuilder sb,
                                 int fieldWidth)
Output the SQL type for a Java boolean.


appendCharType

protected void appendCharType(StringBuilder sb,
                              int fieldWidth)
Output the SQL type for a Java char.


appendByteType

protected void appendByteType(StringBuilder sb,
                              int fieldWidth)
Output the SQL type for a Java byte.


appendShortType

protected void appendShortType(StringBuilder sb,
                               int fieldWidth)
Output the SQL type for a Java short.


appendLongType

protected void appendLongType(StringBuilder sb,
                              int fieldWidth)
Output the SQL type for a Java long.


appendByteArrayType

protected void appendByteArrayType(StringBuilder sb,
                                   int fieldWidth)
Output the SQL type for either a serialized Java object or a byte[].


appendSerializableType

protected void appendSerializableType(StringBuilder sb,
                                      int fieldWidth)
Output the SQL type for a serialized Java object.


configureGeneratedIdSequence

protected void configureGeneratedIdSequence(StringBuilder sb,
                                            FieldType fieldType,
                                            List<String> statementsBefore,
                                            List<String> additionalArgs,
                                            List<String> queriesAfter)
                                     throws SQLException
Output the SQL necessary to configure a generated-id column. This may add to the before statements list or additional arguments later. NOTE: Only one of configureGeneratedIdSequence, configureGeneratedId, or configureId will be called.

Throws:
SQLException

configureGeneratedId

protected void configureGeneratedId(String tableName,
                                    StringBuilder sb,
                                    FieldType fieldType,
                                    List<String> statementsBefore,
                                    List<String> statementsAfter,
                                    List<String> additionalArgs,
                                    List<String> queriesAfter)
Output the SQL necessary to configure a generated-id column. This may add to the before statements list or additional arguments later. NOTE: Only one of configureGeneratedIdSequence, configureGeneratedId, or configureId will be called.


configureId

protected void configureId(StringBuilder sb,
                           FieldType fieldType,
                           List<String> statementsBefore,
                           List<String> additionalArgs,
                           List<String> queriesAfter)
Output the SQL necessary to configure an id column. This may add to the before statements list or additional arguments later. NOTE: Only one of configureGeneratedIdSequence, configureGeneratedId, or configureId will be called.


addPrimaryKeySql

public void addPrimaryKeySql(FieldType[] fieldTypes,
                             List<String> additionalArgs,
                             List<String> statementsBefore,
                             List<String> statementsAfter,
                             List<String> queriesAfter)
                      throws SQLException
Description copied from interface: DatabaseType
Appends information about primary key field(s) to the additional-args or other lists.

Specified by:
addPrimaryKeySql in interface DatabaseType
Throws:
SQLException

generatedIdSqlAtEnd

protected boolean generatedIdSqlAtEnd()
Return true if we should add generated-id SQL in the addPrimaryKeySql(com.j256.ormlite.field.FieldType[], java.util.List, java.util.List, java.util.List, java.util.List) method at the end. If false then it needs to be done by hand inline.


addUniqueComboSql

public void addUniqueComboSql(FieldType[] fieldTypes,
                              List<String> additionalArgs,
                              List<String> statementsBefore,
                              List<String> statementsAfter,
                              List<String> queriesAfter)
                       throws SQLException
Description copied from interface: DatabaseType
Appends information about unique field(s) to the additional-args or other lists.

Specified by:
addUniqueComboSql in interface DatabaseType
Throws:
SQLException

dropColumnArg

public void dropColumnArg(FieldType fieldType,
                          List<String> statementsBefore,
                          List<String> statementsAfter)
Description copied from interface: DatabaseType
Takes a FieldType and adds the necessary statements to the before and after lists necessary so that the dropping of the table will succeed and will clear other associated sequences or other database artifacts

Specified by:
dropColumnArg in interface DatabaseType

appendEscapedWord

public void appendEscapedWord(StringBuilder sb,
                              String word)
Description copied from interface: DatabaseType
Add the word to the string builder wrapped in the proper characters to escape it. This avoids problems with data values being reserved words.

Specified by:
appendEscapedWord in interface DatabaseType

appendEscapedEntityName

public void appendEscapedEntityName(StringBuilder sb,
                                    String name)
Description copied from interface: DatabaseType
Add a entity-name word to the string builder wrapped in the proper characters to escape it. This avoids problems with table, column, and sequence-names being reserved words.

Specified by:
appendEscapedEntityName in interface DatabaseType

generateIdSequenceName

public String generateIdSequenceName(String tableName,
                                     FieldType idFieldType)
Description copied from interface: DatabaseType
Return the name of an ID sequence based on the tabelName and the fieldType of the id.

Specified by:
generateIdSequenceName in interface DatabaseType

getCommentLinePrefix

public String getCommentLinePrefix()
Description copied from interface: DatabaseType
Return the prefix to put at the front of a SQL line to mark it as a comment.

Specified by:
getCommentLinePrefix in interface DatabaseType

getFieldConverter

public FieldConverter getFieldConverter(DataPersister dataPersister)
Description copied from interface: DatabaseType
Return the FieldConverter to associate with the DataType. This allows the database instance to convert a field as necessary before it goes to the database.

Specified by:
getFieldConverter in interface DatabaseType

isIdSequenceNeeded

public boolean isIdSequenceNeeded()
Description copied from interface: DatabaseType
Return true if the database needs a sequence when you use generated IDs. Some databases (H2, MySQL) create them auto-magically. This also means that the database needs to query for a sequence value before the object is inserted. For old[er] versions of Postgres, for example, the JDBC call-back stuff to get the just-inserted id value does not work so we have to get the next sequence value by hand, assign it into the object, and then insert the object -- yes two SQL statements.

Specified by:
isIdSequenceNeeded in interface DatabaseType

isVarcharFieldWidthSupported

public boolean isVarcharFieldWidthSupported()
Description copied from interface: DatabaseType
Return true if the database supports the width parameter on VARCHAR fields.

Specified by:
isVarcharFieldWidthSupported in interface DatabaseType

isLimitSqlSupported

public boolean isLimitSqlSupported()
Description copied from interface: DatabaseType
Return true if the database supports the LIMIT SQL command. Otherwise we have to use the Statement.setMaxRows(int) instead. See prepareSqlStatement in MappedPreparedQuery.

Specified by:
isLimitSqlSupported in interface DatabaseType

isOffsetSqlSupported

public boolean isOffsetSqlSupported()
Description copied from interface: DatabaseType
Return true if the database supports the OFFSET SQL command in some form.

Specified by:
isOffsetSqlSupported in interface DatabaseType

isOffsetLimitArgument

public boolean isOffsetLimitArgument()
Description copied from interface: DatabaseType
Return true if the database supports the offset as a comma argument from the limit. This also means that the limit _must_ be specified if the offset is specified

Specified by:
isOffsetLimitArgument in interface DatabaseType

isLimitAfterSelect

public boolean isLimitAfterSelect()
Description copied from interface: DatabaseType
Return true if the LIMIT should be called after SELECT otherwise at the end of the WHERE (the default).

Specified by:
isLimitAfterSelect in interface DatabaseType

appendLimitValue

public void appendLimitValue(StringBuilder sb,
                             long limit,
                             Long offset)
Description copied from interface: DatabaseType
Append to the string builder the necessary SQL to limit the results to a certain number. With some database types, the offset is an argument to the LIMIT so the offset value (which could be null or not) is passed in. The database type can choose to ignore it.

Specified by:
appendLimitValue in interface DatabaseType

appendOffsetValue

public void appendOffsetValue(StringBuilder sb,
                              long offset)
Description copied from interface: DatabaseType
Append to the string builder the necessary SQL to start the results at a certain row number.

Specified by:
appendOffsetValue in interface DatabaseType

appendSelectNextValFromSequence

public void appendSelectNextValFromSequence(StringBuilder sb,
                                            String sequenceName)
Description copied from interface: DatabaseType
Append the SQL necessary to get the next-value from a sequence. This is only necessary if DatabaseType.isIdSequenceNeeded() is true.

Specified by:
appendSelectNextValFromSequence in interface DatabaseType

appendCreateTableSuffix

public void appendCreateTableSuffix(StringBuilder sb)
Description copied from interface: DatabaseType
Append the SQL necessary to properly finish a CREATE TABLE line.

Specified by:
appendCreateTableSuffix in interface DatabaseType

isCreateTableReturnsZero

public boolean isCreateTableReturnsZero()
Description copied from interface: DatabaseType
Returns true if a 'CREATE TABLE' statement should return 0. False if > 0.

Specified by:
isCreateTableReturnsZero in interface DatabaseType

isEntityNamesMustBeUpCase

public boolean isEntityNamesMustBeUpCase()
Description copied from interface: DatabaseType
Returns true if table and field names should be made uppercase.

Turns out that Derby and Hsqldb are doing something wrong (IMO) with entity names. If you create a table with the name "footable" (with the quotes) then it will be created as lowercase footable, case sensitive. However, if you then issue the query 'select * from footable' (without quotes) it won't find the table because it gets promoted to be FOOTABLE and is searched in a case sensitive manner. So for these databases, entity names have to be forced to be uppercase so external queries will also work.

Specified by:
isEntityNamesMustBeUpCase in interface DatabaseType

isNestedSavePointsSupported

public boolean isNestedSavePointsSupported()
Description copied from interface: DatabaseType
Returns true if nested savePoints are supported, otherwise false.

Specified by:
isNestedSavePointsSupported in interface DatabaseType

getPingStatement

public String getPingStatement()
Description copied from interface: DatabaseType
Return an statement that doesn't do anything but which can be used to ping the database by sending it over a database connection.

Specified by:
getPingStatement in interface DatabaseType

isBatchUseTransaction

public boolean isBatchUseTransaction()
Description copied from interface: DatabaseType
Returns true if batch operations should be done inside of a transaction. Default is false in which case auto-commit disabling will be done.

Specified by:
isBatchUseTransaction in interface DatabaseType

isTruncateSupported

public boolean isTruncateSupported()
Description copied from interface: DatabaseType
Returns true if the table truncate operation is supported.

Specified by:
isTruncateSupported in interface DatabaseType

isCreateIfNotExistsSupported

public boolean isCreateIfNotExistsSupported()
Description copied from interface: DatabaseType
Returns true if the table creation IF NOT EXISTS syntax is supported.

Specified by:
isCreateIfNotExistsSupported in interface DatabaseType

isSelectSequenceBeforeInsert

public boolean isSelectSequenceBeforeInsert()
Description copied from interface: DatabaseType
Returns true if we have to select the value of the sequence before we insert a new data row.

Specified by:
isSelectSequenceBeforeInsert in interface DatabaseType

isAllowGeneratedIdInsertSupported

public boolean isAllowGeneratedIdInsertSupported()
Description copied from interface: DatabaseType
Does the database support the DatabaseField.allowGeneratedIdInsert() setting which allows people to insert values into generated-id columns.

Specified by:
isAllowGeneratedIdInsertSupported in interface DatabaseType


This content is licensed by Gray Watson under the Creative Commons Attribution-Share Alike 3.0 License.