Class PgResultSetMetaData
- java.lang.Object
-
- org.postgresql.jdbc.PgResultSetMetaData
-
- All Implemented Interfaces:
java.sql.ResultSetMetaData,java.sql.Wrapper,PGResultSetMetaData
public class PgResultSetMetaData extends java.lang.Object implements java.sql.ResultSetMetaData, PGResultSetMetaData
-
-
Field Summary
Fields Modifier and Type Field Description protected BaseConnectionconnectionprivate booleanfieldInfoFetchedprotected Field[]fields
-
Constructor Summary
Constructors Constructor Description PgResultSetMetaData(BaseConnection connection, Field[] fields)Initialise for a result with a tuple set and a field descriptor set
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidfetchFieldMetaData()java.lang.StringgetBaseColumnName(int column)Returns the underlying column name of a query result, or "" if it is unable to be determined.java.lang.StringgetBaseSchemaName(int column)Returns the underlying schema name of query result, or "" if it is unable to be determined.java.lang.StringgetBaseTableName(int column)Returns the underlying table name of query result, or "" if it is unable to be determined.java.lang.StringgetCatalogName(int column)java.lang.StringgetColumnClassName(int column)intgetColumnCount()intgetColumnDisplaySize(int column)java.lang.StringgetColumnLabel(int column)java.lang.StringgetColumnName(int column)intgetColumnType(int column)java.lang.StringgetColumnTypeName(int column)protected FieldgetField(int columnIndex)For several routines in this package, we need to convert a columnIndex into a Field[] descriptor.intgetFormat(int column)Is a column Text or Binary?protected java.lang.StringgetPGType(int columnIndex)intgetPrecision(int column)intgetScale(int column)java.lang.StringgetSchemaName(int column)protected intgetSQLType(int columnIndex)java.lang.StringgetTableName(int column)booleanisAutoIncrement(int column)booleanisCaseSensitive(int column)booleanisCurrency(int column)booleanisDefinitelyWritable(int column)intisNullable(int column)booleanisReadOnly(int column)booleanisSearchable(int column)booleanisSigned(int column)booleanisWrapperFor(java.lang.Class<?> iface)booleanisWritable(int column)private booleanpopulateFieldsWithMetadata(Gettable<FieldMetadata.Key,FieldMetadata> metadata)<T> Tunwrap(java.lang.Class<T> iface)
-
-
-
Field Detail
-
connection
protected final BaseConnection connection
-
fields
protected final Field[] fields
-
fieldInfoFetched
private boolean fieldInfoFetched
-
-
Constructor Detail
-
PgResultSetMetaData
public PgResultSetMetaData(BaseConnection connection, Field[] fields)
Initialise for a result with a tuple set and a field descriptor set- Parameters:
connection- the connection to retrieve metadatafields- the array of field descriptors
-
-
Method Detail
-
getColumnCount
public int getColumnCount() throws java.sql.SQLException- Specified by:
getColumnCountin interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
isAutoIncrement
public boolean isAutoIncrement(int column) throws java.sql.SQLExceptionIt is believed that PostgreSQL does not support this feature.
- Specified by:
isAutoIncrementin interfacejava.sql.ResultSetMetaData- Parameters:
column- the first column is 1, the second is 2...- Returns:
- true if so
- Throws:
java.sql.SQLException- if a database access error occurs
-
isCaseSensitive
public boolean isCaseSensitive(int column) throws java.sql.SQLExceptionDoes a column's case matter? ASSUMPTION: Any field that is not obviously case insensitive is assumed to be case sensitive
- Specified by:
isCaseSensitivein interfacejava.sql.ResultSetMetaData- Parameters:
column- the first column is 1, the second is 2...- Returns:
- true if so
- Throws:
java.sql.SQLException- if a database access error occurs
-
isSearchable
public boolean isSearchable(int column) throws java.sql.SQLExceptionCan the column be used in a WHERE clause? Basically for this, I split the functions into two types: recognised types (which are always useable), and OTHER types (which may or may not be useable). The OTHER types, for now, I will assume they are useable. We should really query the catalog to see if they are useable.
- Specified by:
isSearchablein interfacejava.sql.ResultSetMetaData- Parameters:
column- the first column is 1, the second is 2...- Returns:
- true if they can be used in a WHERE clause
- Throws:
java.sql.SQLException- if a database access error occurs
-
isCurrency
public boolean isCurrency(int column) throws java.sql.SQLExceptionIs the column a cash value? 6.1 introduced the cash/money type, which haven't been incorporated as of 970414, so I just check the type name for both 'cash' and 'money'
- Specified by:
isCurrencyin interfacejava.sql.ResultSetMetaData- Parameters:
column- the first column is 1, the second is 2...- Returns:
- true if its a cash column
- Throws:
java.sql.SQLException- if a database access error occurs
-
isNullable
public int isNullable(int column) throws java.sql.SQLException- Specified by:
isNullablein interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
isSigned
public boolean isSigned(int column) throws java.sql.SQLExceptionIs the column a signed number? In PostgreSQL, all numbers are signed, so this is trivial. However, strings are not signed (duh!)
- Specified by:
isSignedin interfacejava.sql.ResultSetMetaData- Parameters:
column- the first column is 1, the second is 2...- Returns:
- true if so
- Throws:
java.sql.SQLException- if a database access error occurs
-
getColumnDisplaySize
public int getColumnDisplaySize(int column) throws java.sql.SQLException- Specified by:
getColumnDisplaySizein interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
getColumnLabel
public java.lang.String getColumnLabel(int column) throws java.sql.SQLException- Specified by:
getColumnLabelin interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
getColumnName
public java.lang.String getColumnName(int column) throws java.sql.SQLException- Specified by:
getColumnNamein interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
getBaseColumnName
public java.lang.String getBaseColumnName(int column) throws java.sql.SQLExceptionDescription copied from interface:PGResultSetMetaDataReturns the underlying column name of a query result, or "" if it is unable to be determined.- Specified by:
getBaseColumnNamein interfacePGResultSetMetaData- Parameters:
column- column position (1-based)- Returns:
- underlying column name of a query result
- Throws:
java.sql.SQLException- if something wrong happens
-
getSchemaName
public java.lang.String getSchemaName(int column) throws java.sql.SQLException- Specified by:
getSchemaNamein interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
populateFieldsWithMetadata
private boolean populateFieldsWithMetadata(Gettable<FieldMetadata.Key,FieldMetadata> metadata)
-
fetchFieldMetaData
private void fetchFieldMetaData() throws java.sql.SQLException- Throws:
java.sql.SQLException
-
getBaseSchemaName
public java.lang.String getBaseSchemaName(int column) throws java.sql.SQLExceptionDescription copied from interface:PGResultSetMetaDataReturns the underlying schema name of query result, or "" if it is unable to be determined.- Specified by:
getBaseSchemaNamein interfacePGResultSetMetaData- Parameters:
column- column position (1-based)- Returns:
- underlying schema name of query result
- Throws:
java.sql.SQLException- if something wrong happens
-
getPrecision
public int getPrecision(int column) throws java.sql.SQLException- Specified by:
getPrecisionin interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
getScale
public int getScale(int column) throws java.sql.SQLException- Specified by:
getScalein interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
getTableName
public java.lang.String getTableName(int column) throws java.sql.SQLException- Specified by:
getTableNamein interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
getBaseTableName
public java.lang.String getBaseTableName(int column) throws java.sql.SQLExceptionDescription copied from interface:PGResultSetMetaDataReturns the underlying table name of query result, or "" if it is unable to be determined.- Specified by:
getBaseTableNamein interfacePGResultSetMetaData- Parameters:
column- column position (1-based)- Returns:
- underlying table name of query result
- Throws:
java.sql.SQLException- if something wrong happens
-
getCatalogName
public java.lang.String getCatalogName(int column) throws java.sql.SQLExceptionAs with getSchemaName(), we can say that if getTableName() returns n/a, then we can too - otherwise, we need to work on it.
- Specified by:
getCatalogNamein interfacejava.sql.ResultSetMetaData- Parameters:
column- the first column is 1, the second is 2...- Returns:
- catalog name, or "" if not applicable
- Throws:
java.sql.SQLException- if a database access error occurs
-
getColumnType
public int getColumnType(int column) throws java.sql.SQLException- Specified by:
getColumnTypein interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
getFormat
public int getFormat(int column) throws java.sql.SQLExceptionDescription copied from interface:PGResultSetMetaDataIs a column Text or Binary?- Specified by:
getFormatin interfacePGResultSetMetaData- Parameters:
column- column position (1-based)- Returns:
- 0 if column data foramt is TEXT, or 1 if BINARY
- Throws:
java.sql.SQLException- if something wrong happens- See Also:
Field.BINARY_FORMAT,Field.TEXT_FORMAT
-
getColumnTypeName
public java.lang.String getColumnTypeName(int column) throws java.sql.SQLException- Specified by:
getColumnTypeNamein interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
isReadOnly
public boolean isReadOnly(int column) throws java.sql.SQLExceptionIn reality, we would have to check the GRANT/REVOKE stuff for this to be effective, and I haven't really looked into that yet, so this will get re-visited.
- Specified by:
isReadOnlyin interfacejava.sql.ResultSetMetaData- Parameters:
column- the first column is 1, the second is 2, etc.*- Returns:
- true if so*
- Throws:
java.sql.SQLException- if a database access error occurs
-
isWritable
public boolean isWritable(int column) throws java.sql.SQLExceptionIn reality have to check the GRANT/REVOKE stuff, which I haven't worked with as yet. However, if it isn't ReadOnly, then it is obviously writable.
- Specified by:
isWritablein interfacejava.sql.ResultSetMetaData- Parameters:
column- the first column is 1, the second is 2, etc.- Returns:
- true if so
- Throws:
java.sql.SQLException- if a database access error occurs
-
isDefinitelyWritable
public boolean isDefinitelyWritable(int column) throws java.sql.SQLExceptionHmmm...this is a bad one, since the two preceding functions have not been really defined. I cannot tell is the short answer. I thus return isWritable() just to give us an idea.
- Specified by:
isDefinitelyWritablein interfacejava.sql.ResultSetMetaData- Parameters:
column- the first column is 1, the second is 2, etc..- Returns:
- true if so
- Throws:
java.sql.SQLException- if a database access error occurs
-
getField
protected Field getField(int columnIndex) throws java.sql.SQLException
For several routines in this package, we need to convert a columnIndex into a Field[] descriptor. Rather than do the same code several times, here it is.- Parameters:
columnIndex- the first column is 1, the second is 2...- Returns:
- the Field description
- Throws:
java.sql.SQLException- if a database access error occurs
-
getPGType
protected java.lang.String getPGType(int columnIndex) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
getSQLType
protected int getSQLType(int columnIndex) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
getColumnClassName
public java.lang.String getColumnClassName(int column) throws java.sql.SQLException- Specified by:
getColumnClassNamein interfacejava.sql.ResultSetMetaData- Throws:
java.sql.SQLException
-
isWrapperFor
public boolean isWrapperFor(java.lang.Class<?> iface) throws java.sql.SQLException- Specified by:
isWrapperForin interfacejava.sql.Wrapper- Throws:
java.sql.SQLException
-
unwrap
public <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException- Specified by:
unwrapin interfacejava.sql.Wrapper- Throws:
java.sql.SQLException
-
-