Class JdbcSchema

java.lang.Object
mondrian.rolap.aggmatcher.JdbcSchema

public class JdbcSchema extends Object
Metadata gleaned from JDBC about the tables and columns in the star schema. This class is used to scrape a database and store information about its tables and columnIter.

The structure of this information is as follows: A database has tables. A table has columnIter. A column has one or more usages. A usage might be a column being used as a foreign key or as part of a measure.

Tables are created when calling code requests the set of available tables. This call getTables() causes all tables to be loaded. But a table's columnIter are not loaded until, on a table-by-table basis, a request is made to get the set of columnIter associated with the table. Since, the AggTableManager first attempts table name matches (recognition) most tables do not match, so why load their columnIter. Of course, as a result, there are a host of methods that can throw an SQLException, rats.

Author:
Richard M. Emberson
  • Field Details

  • Constructor Details

    • JdbcSchema

      public JdbcSchema(DataSource dataSource)
  • Method Details

    • getLogger

      public org.apache.logging.log4j.Logger getLogger()
      Returns the Logger.
    • makeDB

      public static JdbcSchema makeDB(DataSource dataSource)
      Creates or retrieves an instance of the JdbcSchema for the given DataSource.
      Parameters:
      dataSource - DataSource
      Returns:
      instance of the JdbcSchema for the given DataSource
    • clearDB

      public static void clearDB(DataSource dataSource)
      Clears information in a JdbcSchema associated with a DataSource.
      Parameters:
      dataSource - DataSource
    • removeDB

      public static void removeDB(DataSource dataSource)
      Removes a JdbcSchema associated with a DataSource.
      Parameters:
      dataSource - DataSource
    • isUniqueColumnType

      public static boolean isUniqueColumnType(Set<JdbcSchema.UsageType> columnType)
      Determine if the parameter represents a single column type, i.e., the column only has one usage.
      Parameters:
      columnType - Column types
      Returns:
      true if column has only one usage.
    • convertColumnTypeToName

      public static String convertColumnTypeToName(Set<JdbcSchema.UsageType> columnType)
      Maps from column type enum to column type name or list of names if the parameter represents more than on usage.
    • getDatatype

      public static Dialect.Datatype getDatatype(int javaType)
      Converts a Types value to a Dialect.Datatype.
      Parameters:
      javaType - JDBC type code, as per Types
      Returns:
      Datatype
    • isText

      public static boolean isText(int javaType)
      Returns true if the parameter is a java.sql.Type text type.
    • load

      @Deprecated public void load() throws SQLException
      Deprecated.
      API updated to pass Mondrian connection properties See: load(PropertyList)
      Throws:
      SQLException
    • load

      public void load(Util.PropertyList connectInfo) throws SQLException
      This forces the tables to be loaded.
      Parameters:
      connectInfo - Mondrian connection properties
      Throws:
      SQLException
    • clear

      protected void clear()
    • remove

      protected void remove()
    • getDataSource

      public DataSource getDataSource()
    • setDataSource

      protected void setDataSource(DataSource dataSource)
    • setSchemaName

      public void setSchemaName(String schema)
      Sets the database's schema name.
      Parameters:
      schema - Schema name
    • getSchemaName

      public String getSchemaName()
      Returns the database's schema name.
    • setCatalogName

      public void setCatalogName(String catalog)
      Sets the database's catalog name.
    • getCatalogName

      public String getCatalogName()
      Returns the database's catalog name.
    • getTables

      public Collection<JdbcSchema.Table> getTables()
      Returns the database's tables. The collection is sorted by table name.
    • flushUsages

      public void flushUsages()
      flushes all star usage references
    • getTable

      public JdbcSchema.Table getTable(String tableName)
      Gets a table by name.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • print

      public void print(PrintWriter pw, String prefix)
    • loadTables

      protected void loadTables(Util.PropertyList connectInfo) throws SQLException
      Gets all of the tables (and views) in the database. If called a second time, this method is a no-op.
      Parameters:
      connectInfo - The Mondrian connection properties
      Throws:
      SQLException
    • addTable

      protected void addTable(ResultSet rs) throws SQLException
      Makes a Table from an ResultSet: the table's name is the ResultSet third entry.
      Parameters:
      rs - Result set
      Throws:
      SQLException
    • getTablesMap

      protected SortedMap<String,JdbcSchema.Table> getTablesMap()
    • clearAllDBs

      public static void clearAllDBs()