Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
The Schema SPI provides tables, table functions, and sub-schemas via getTableNames, getTable, getTableFunctionNames, getTableFunctions, getSubSchemaNames, getSubSchema. And AbstractSchema additionally provides getTableMap(), getTableFunctionMap(), getSubSchemaMap().
However, we do not specify what should happen if the schema changes; for example, what `CsvSchema` should do it someone adds a .csv file to the directory. Should it re-derive every time? Should optiq assume that the map never changes, and therefore can build a cache?
This is especially relevant when handling case-insensitive name resolution. The above methods are (and will remain) case-sensitive. So the only way to find out whether there is a case-insensitive match for a table (or table-function or sub-schema) is to read all keys in the map. We would like to build a cache, but we need to make sure that the cache does not overstay its welcome.
We could add the following method to `Schema`:
```java
/** Returns whether the contents of the schema (tables, table functions and
- sub-schemas) have changed since a given system time. If this method
- returns true, Optiq will rebuild the cache that it built at
{@code time}
.
- The default implementation in
{@link AbstractSchema}
always returns
- {@code false}
. */
boolean contentsHaveChangedSince(long time);
```
and a default implementation in `AbstractSchema`.
---------------- Imported from GitHub ----------------
Url: https://github.com/julianhyde/optiq/issues/175
Created by: julianhyde
Labels: enhancement,
Created at: Mon Mar 10 23:26:54 CET 2014
State: closed