sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1829660 [2/2] - in /sis/branches/JDK8: core/sis-utility/src/main/java/org/apache/sis/internal/system/ storage/sis-sql/src/main/java/org/apache/sis/internal/sql/ storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/ storage/sis...
Date Fri, 20 Apr 2018 14:50:37 GMT
Modified: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/MetaDataConstants.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/MetaDataConstants.java?rev=1829660&r1=1829659&r2=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/MetaDataConstants.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/MetaDataConstants.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -14,51 +14,67 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.sis.internal.sql.reverse;
 
+
 /**
  * Constants defined by JDBC to retrieve a database meta-model.
  *
- * @author Johann Sorel (Geomatys)
+ * @author  Johann Sorel (Geomatys)
  * @version 1.0
  * @since   1.0
  * @module
  */
-public final class MetaDataConstants {
+final class MetaDataConstants {
 
-    public static final class Schema{
-        /** schema name */
+    static final class Schema {
+        /** schema name. */
         public static final String TABLE_SCHEM = "TABLE_SCHEM";
-        /** catalog name (may be null) */
+
+        /** catalog name (values in this column may be null). */
         public static final String TABLE_CATALOG = "TABLE_CATALOG";
 
-        private Schema(){}
+        private Schema() {
+        }
     }
 
-    public static final class Table{
-        /** table catalog (may be null) */
+    static final class Table {
+        /** Table catalog (values in this column may be null). */
         public static final String TABLE_CAT = "TABLE_CAT";
-        /** table schema (may be null) */
+
+        /** Table schema (values in this column may be null). */
+
         public static final String TABLE_SCHEM = "TABLE_SCHEM";
-        /** table name */
+
+        /** Table name. */
         public static final String TABLE_NAME = "TABLE_NAME";
-        /** table type. Typical types are : <br>
+
+        /**
+         * Table type. Typical types are:
          * "TABLE", "VIEW", "SYSTEM TABLE",
-         * "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". */
+         * "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
+         */
         public static final String TABLE_TYPE = "TABLE_TYPE";
-        /** explanatory comment on the table */
+
+        /** Explanatory comment on the table. */
         public static final String REMARKS = "REMARKS";
-        /** the types catalog (may be null) */
+
+        /** The types catalog (values in this column may be null). */
         public static final String TYPE_CAT = "TYPE_CAT";
-        /** the types schema (may be null) */
+
+        /** The types schema (values in this column may be null). */
         public static final String TYPE_SCHEM = "TYPE_SCHEM";
-        /** type name (may be null) */
+
+        /** Type name (values in this column may be null). */
         public static final String TYPE_NAME = "TYPE_NAME";
-        /** name of the designated "identifier" column of a typed table (may be null) */
+
+        /** Name of the designated "identifier" column of a typed table (values in this column may be null). */
         public static final String SELF_REFERENCING_COL_NAME = "SELF_REFERENCING_COL_NAME";
-        /** specifies how values in SELF_REFERENCING_COL_NAME are created.<br>
-         * Values are "SYSTEM", "USER", "DERIVED". (may be null) */
+
+        /**
+         * Specifies how values in SELF_REFERENCING_COL_NAME are created.
+         * Values are "SYSTEM", "USER", "DERIVED". values in this column may be null.
+         */
         public static final String REF_GENERATION =  "REF_GENERATION";
 
         public static final String VALUE_TYPE_TABLE             = "TABLE";
@@ -73,285 +89,427 @@ public final class MetaDataConstants {
         public static final String VALUE_REFGEN_USER            = "USER";
         public static final String VALUE_REFGEN_DERIVED         = "DERIVED";
 
-        private Table(){}
+        private Table() {
+        }
     }
 
-    public static final class SuperTable{
-        /** the type's catalog (may be null) */
+    public static final class SuperTable {
+        /** The type's catalog (values in this column may be null). */
         public static final String TABLE_CAT = "TABLE_CAT";
-        /** type's schema (may be null) */
+
+        /** Type's schema (values in this column may be null). */
         public static final String TABLE_SCHEM = "TABLE_SCHEM";
-        /** type name */
+
+        /** Type name. */
         public static final String TABLE_NAME = "TABLE_NAME";
-        /** the direct super type's name */
+
+        /** The direct super type's name. */
         public static final String SUPERTABLE_NAME =  "SUPERTABLE_NAME";
 
-        private SuperTable(){}
+        private SuperTable() {
+        }
     }
 
-    public static final class Column{
-
-        /** table catalog (may be null) */
+    public static final class Column {
+        /** Table catalog (values in this column may be null). */
         public static final String TABLE_CAT = "TABLE_CAT";
-        /** table schema (may be null) */
+
+        /** Table schema (values in this column may be null). */
         public static final String TABLE_SCHEM = "TABLE_SCHEM";
-        /** table name */
+
+        /** Table name. */
         public static final String TABLE_NAME = "TABLE_NAME";
-        /** column name */
+
+        /** Column name. */
         public static final String COLUMN_NAME = "COLUMN_NAME";
-        /** int : SQL type from java.sql.Types */
+
+        /** SQL type from {@link java.sql.Types}. */
         public static final String DATA_TYPE = "DATA_TYPE";
-        /** Data source dependent type name, for a UDT the type name is fully qualified */
+
+        /** Data source dependent type name, for a UDT the type name is fully qualified. */
         public static final String TYPE_NAME = "TYPE_NAME";
-        /** int : column size. */
+
+        /** Column size ({@code int} values). */
         public static final String COLUMN_SIZE = "COLUMN_SIZE";
-        /** not used. */
+
+        /** Not used. */
         public static final String BUFFER_LENGTH = "BUFFER_LENGTH";
-        /** int : the number of fractional digits. Null is returned for
-         * data types where DECIMAL_DIGITS is not applicable. */
+
+        /**
+         * The number of fractional digits as {@code int} values.
+         * Null is returned for data types where DECIMAL_DIGITS is not applicable.
+         */
         public static final String DECIMAL_DIGITS = "DECIMAL_DIGITS";
-        /** int : Radix (typically either 10 or 2) */
+
+        /** Radix (typically either 10 or 2) as {@code int} values. */
         public static final String NUM_PREC_RADIX = "NUM_PREC_RADIX";
-        /** int : is NULL allowed. <br>
-         * columnNoNulls - might not allow NULL values <br>
-         * columnNullable - definitely allows NULL values<br>
-         * columnNullableUnknown - nullability unknown */
+
+        /**
+         * Whether NULL allowed as a {@code int} code.
+         * <ul>
+         *   <li>{@code columnNoNulls} - might not allow NULL values</li>
+         *   <li>{@code columnNullable} - definitely allows NULL values</li>
+         *   <li>{@code columnNullableUnknown} - nullability unknown</li>
+         * </ul>
+         */
         public static final String NULLABLE = "NULLABLE";
-        /** comment describing column (may be null) */
+
+        /** Comment describing column (values in this column may be null). */
         public static final String REMARKS = "REMARKS";
-        /** default value for the column, which should be interpreted as a
-         * string when the value is enclosed in single quotes (may be null) */
+
+        /**
+         * Default value for the column, which should be interpreted as a
+         * string when the value is enclosed in single quotes (values in this column may be null)
+         */
         public static final String COLUMN_DEF = "COLUMN_DEF";
-        /** int : unused */
+
+        /** Unused {@code int} values. */
         public static final String SQL_DATA_TYPE = "SQL_DATA_TYPE";
-        /** int : unused */
+
+        /** Unused {@code int} values. */
         public static final String SQL_DATETIME_SUB = "SQL_DATETIME_SUB";
-        /** int : for char types the maximum number of bytes in the column */
+
+        /** Maximum number (as a {@code int}) of bytes in the column of type {@code char}. */
         public static final String CHAR_OCTET_LENGTH = "CHAR_OCTET_LENGTH";
-        /** int : index of column in table (starting at 1) */
+
+        /** Index of column in table (starting at 1). */
         public static final String ORDINAL_POSITION = "ORDINAL_POSITION";
-        /** ISO rules are used to determine the nullability for a column.<br>
-         * YES --- if the parameter can include NULLs<br>
-         * NO --- if the parameter cannot include NULLs<br>
-         * empty string --- if the nullability for the parameter is unknown */
+
+        /**
+         * ISO rules are used to determine the nullability for a column.
+         * YES if the parameter can include NULLs,
+         * NO if the parameter cannot include NULLs,
+         * empty string if the nullability for the parameter is unknown.
+         */
         public static final String IS_NULLABLE = "IS_NULLABLE";
-        /** catalog of table that is the scope of a reference attribute
-         * (null if DATA_TYPE isn't REF) */
+
+        /**
+         * Catalog of table that is the scope of a reference attribute
+         * (null if DATA_TYPE isn't REF).
+         */
         public static final String SCOPE_CATLOG = "SCOPE_CATLOG";
-        /** schema of table that is the scope of a reference attribute
-         * (null if the DATA_TYPE isn't REF) */
+
+        /**
+         * Schema of table that is the scope of a reference attribute
+         * (null if the DATA_TYPE isn't REF).
+         */
         public static final String SCOPE_SCHEMA = "SCOPE_SCHEMA";
-        /** table name that this the scope of a reference attribute
-         * (null if the DATA_TYPE isn't REF) */
+
+        /**
+         * Table name that this the scope of a reference attribute
+         * (null if the DATA_TYPE isn't REF).
+         */
         public static final String SCOPE_TABLE = "SCOPE_TABLE";
-        /** short : source type of a distinct type or user-generated Ref type, SQL type
-         * from java.sql.Types (null if DATA_TYPE isn't DISTINCT or user-generated REF) */
+
+        /**
+         * Source type of a distinct type or user-generated Ref type.
+         * This is a SQL type from {@link java.sql.Types}
+         * (null if DATA_TYPE isn't DISTINCT or user-generated REF).
+         */
         public static final String SOURCE_DATA_TYPE = "SOURCE_DATA_TYPE";
-        /** Indicates whether this column is auto incremented<br>
-         * YES --- if the column is auto incremented<br>
-         * NO --- if the column is not auto incremented<br>
-         * empty string --- if it cannot be determined whether<br>
-         * the column is auto incremented parameter is unknown
+
+        /**
+         * Indicates whether this column is auto incremented.
+         * YES if the column is auto incremented,
+         * NO if the column is not auto incremented,
+         * empty string if whether the column is auto incremented is unknown.
          */
         public static final String IS_AUTOINCREMENT = "IS_AUTOINCREMENT";
 
         public static final String VALUE_YES = "YES";
         public static final String VALUE_NO = "NO";
 
-        private Column(){}
+        private Column() {
+        }
     }
 
     public static final class PrimaryKey{
-        /** table catalog (may be null) */
+        /** Table catalog (values in this column may be null). */
         public static final String TABLE_CAT = "TABLE_CAT";
-        /** table schema (may be null) */
+
+        /** Table schema (values in this column may be null). */
         public static final String TABLE_SCHEM = "TABLE_SCHEM";
-        /** table name */
+
+        /** Table name. */
         public static final String TABLE_NAME = "TABLE_NAME";
-        /** column name */
+
+        /** Column name. */
         public static final String COLUMN_NAME = "COLUMN_NAME";
-        /** short : sequence number within primary key.<br>
-         * - a value of 1 represents the first column of the primary key<br>
-         * - a value of 2 would represent the second column within the primary key */
+
+        /**
+         * Sequence number within primary key as a {@code short} code.
+         * A value of 1 represents the first column of the primary key;
+         * a value of 2 would represent the second column within the primary key.
+         */
         public static final String KEY_SEQ = "KEY_SEQ";
-        /** primary key name (may be null) */
+
+        /** Primary key name (values in this column may be null). */
         public static final String PK_NAME = "PK_NAME";
 
-        private PrimaryKey(){}
+        private PrimaryKey() {
+        }
     }
 
     public static final class ImportedKey{
-        /** primary key table catalog being imported (may be null) */
+        /** Primary key table catalog being imported (values in this column may be null). */
         public static final String PKTABLE_CAT = "PKTABLE_CAT";
-        /** primary key table schema being imported (may be null) */
+
+        /** Primary key table schema being imported (values in this column may be null). */
         public static final String PKTABLE_SCHEM = "PKTABLE_SCHEM";
-        /** primary key table name being imported */
+
+        /** Primary key table name being imported. */
         public static final String PKTABLE_NAME = "PKTABLE_NAME";
-        /** primary key column name being imported */
+
+        /** Primary key column name being imported. */
         public static final String PKCOLUMN_NAME = "PKCOLUMN_NAME";
-        /** foreign key table catalog (may be null) */
+
+        /** Foreign key table catalog (may be null). */
         public static final String FKTABLE_CAT = "FKTABLE_CAT";
-        /** foreign key table schema (may be null) */
+
+        /** Foreign key table schema (may be null). */
         public static final String FKTABLE_SCHEM = "FKTABLE_SCHEM";
-        /** foreign key table name */
+
+        /** Foreign key table name. */
         public static final String FKTABLE_NAME = "FKTABLE_NAME";
-        /** foreign key column name */
+
+        /** Foreign key column name. */
         public static final String FKCOLUMN_NAME = "FKCOLUMN_NAME";
-        /** short : sequence number within a foreign key <br>
-         * - a value of 1 represents the first column of the foreign key<br>
-         * - a value of 2 would represent the second column within the foreign key */
+
+        /**
+         * Sequence number within a foreign key as a {@code short} code.
+         * A value of 1 represents the first column of the foreign key;
+         * a value of 2 would represent the second column within the foreign key.
+         */
         public static final String KEY_SEQ = "KEY_SEQ";
-        /** short : What happens to a foreign key when the primary key is updated:<br>
-         * importedNoAction - do not allow update of primary key if it has been imported<br>
-         * importedKeyCascade - change imported key to agree with primary key update<br>
-         * importedKeySetNull - change imported key to NULL if its primary key has been updated<br>
-         * importedKeySetDefault - change imported key to default values if its primary key has been updated<br>
-         * importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility) */
+
+        /**
+         * What happens to a foreign key when the primary key is updated, as a {@code short} code.
+         * <ul>
+         *   <li>{@code importedNoAction} - do not allow update of primary key if it has been imported</li>
+         *   <li>{@code importedKeyCascade} - change imported key to agree with primary key update</li>
+         *   <li>{@code importedKeySetNull} - change imported key to NULL if its primary key has been updated</li>
+         *   <li>{@code importedKeySetDefault} - change imported key to default values if its primary key has been updated</li>
+         *   <li>{@code importedKeyRestrict} - same as importedKeyNoAction (for ODBC 2.x compatibility).</li>
+         * </ul>
+         */
         public static final String UPDATE_RULE = "UPDATE_RULE";
-        /** short : What happens to the foreign key when primary is deleted.<br>
-         * importedKeyNoAction - do not allow delete of primary key if it has been imported<br>
-         * importedKeyCascade - delete rows that import a deleted key<br>
-         * importedKeySetNull - change imported key to NULL if its primary key has been deleted<br>
-         * importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)<br>
-         * importedKeySetDefault - change imported key to default if its primary key has been deleted */
+
+        /**
+         * What happens to the foreign key when primary is deleted, as a {@code short} code.
+         * <ul>
+         *   <li>{@code importedKeyNoAction} - do not allow delete of primary key if it has been imported</li>
+         *   <li>{@code importedKeyCascade} - delete rows that import a deleted key</li>
+         *   <li>{@code importedKeySetNull} - change imported key to NULL if its primary key has been deleted</li>
+         *   <li>{@code importedKeyRestrict} - same as importedKeyNoAction (for ODBC 2.x compatibility)</li>
+         *   <li>{@code importedKeySetDefault} - change imported key to default if its primary key has been deleted.</li>
+         * </ul>
+         */
         public static final String DELETE_RULE = "DELETE_RULE";
-        /** foreign key name (may be null) */
+
+        /** Foreign key name (values in this column may be null). */
         public static final String FK_NAME = "FK_NAME";
-        /** primary key name (may be null) */
+
+        /** Primary key name (values in this column may be null). */
         public static final String PK_NAME = "PK_NAME";
-        /** short : can the evaluation of foreign key constraints be deferred until commit<br>
-         * importedKeyInitiallyDeferred - see SQL92 for definition<br>
-         * importedKeyInitiallyImmediate - see SQL92 for definition<br>
-         * importedKeyNotDeferrable - see SQL92 for definition */
+
+        /**
+         * Whether the evaluation of foreign key constraints can be deferred until commit (as a {@code short} code).
+         * <ul>
+         *   <li>{@code importedKeyInitiallyDeferred} - see SQL92 for definition</li>
+         *   <li>{@code importedKeyInitiallyImmediate} - see SQL92 for definition</li>
+         *   <li>{@code importedKeyNotDeferrable} - see SQL92 for definition</li>
+         * </ul>
+         */
         public static final String DEFERRABILITY = "DEFERRABILITY";
 
-        private ImportedKey(){}
+        private ImportedKey() {
+        }
     }
 
     public static final class ExportedKey{
-        /** primary key table catalog (may be null) */
+        /** Primary key table catalog (values in this column may be null). */
         public static final String PKTABLE_CAT = "PKTABLE_CAT";
-        /** primary key table schema (may be null) */
+
+        /** Primary key table schema (values in this column may be null). */
         public static final String PKTABLE_SCHEM = "PKTABLE_SCHEM";
-        /** primary key table name */
+
+        /** Primary key table name. */
         public static final String PKTABLE_NAME = "PKTABLE_NAME";
-        /** primary key column name */
+
+        /** Primary key column name. */
         public static final String PKCOLUMN_NAME = "PKCOLUMN_NAME";
-        /** foreign key table catalog (may be null) being exported (may be null) */
+
+        /** Foreign key table catalog (may be null) being exported (values in this column may be null). */
         public static final String FKTABLE_CAT = "FKTABLE_CAT";
-        /** foreign key table schema (may be null) being exported (may be null) */
+
+        /** Foreign key table schema (may be null) being exported (values in this column may be null). */
         public static final String FKTABLE_SCHEM = "FKTABLE_SCHEM";
-        /** foreign key table name being exported */
+
+        /** Foreign key table name being exported. */
         public static final String FKTABLE_NAME = "FKTABLE_NAME";
-        /** foreign key column name being exported */
+
+        /** Foreign key column name being exported. */
         public static final String FKCOLUMN_NAME = "FKCOLUMN_NAME";
-        /** short : sequence number within foreign key :<br>
-         * a value of 1 represents the first column of the foreign key<br>
-         * a value of 2 would represent the second column within the foreign key */
+
+        /**
+         * Sequence number within foreign key as a {@code short} code.
+         * a value of 1 represents the first column of the foreign key;
+         * a value of 2 would represent the second column within the foreign key.
+         */
         public static final String KEY_SEQ = "KEY_SEQ";
-        /** short : What happens to foreign key when primary is updated:<br>
-         * importedNoAction - do not allow update of primary key if it has been imported<br>
-         * importedKeyCascade - change imported key to agree with primary key update<br>
-         * importedKeySetNull - change imported key to NULL if its primary key has been updated<br>
-         * importedKeySetDefault - change imported key to default values if its primary key has been updated<br>
-         * importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility) */
+
+        /**
+         * What happens to foreign key when primary is updated, as a {@code short} code.
+         * <ul>
+         *   <li>{@code importedNoAction} - do not allow update of primary key if it has been imported</li>
+         *   <li>{@code importedKeyCascade} - change imported key to agree with primary key update</li>
+         *   <li>{@code importedKeySetNull} - change imported key to NULL if its primary key has been updated</li>
+         *   <li>{@code importedKeySetDefault} - change imported key to default values if its primary key has been updated</li>
+         *   <li>{@code importedKeyRestrict} - same as importedKeyNoAction (for ODBC 2.x compatibility)</li>
+         * </ul>
+         */
         public static final String UPDATE_RULE = "UPDATE_RULE";
-        /** short : What happens to the foreign key when primary is deleted. <br>
-         * importedKeyNoAction - do not allow delete of primary key if it has been imported<br>
-         * importedKeyCascade - delete rows that import a deleted key<br>
-         * importedKeySetNull - change imported key to NULL if its primary key has been deleted<br>
-         * importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)<br>
-         * importedKeySetDefault - change imported key to default if its primary key has been deleted */
+
+        /**
+         * What happens to the foreign key when primary is deleted, as a {@code short} code.
+         * <ul>
+         *   <li>{@code importedKeyNoAction} - do not allow delete of primary key if it has been imported</li>
+         *   <li>{@code importedKeyCascade} - delete rows that import a deleted key</li>
+         *   <li>{@code importedKeySetNull} - change imported key to NULL if its primary key has been deleted</li>
+         *   <li>{@code importedKeyRestrict} - same as importedKeyNoAction (for ODBC 2.x compatibility)</li>
+         *   <li>{@code importedKeySetDefault} - change imported key to default if its primary key has been deleted</li>
+         * </ul>
+         */
         public static final String DELETE_RULE = "DELETE_RULE";
-        /** foreign key name (may be null) */
+
+        /** Foreign key name (values in this column may be null). */
         public static final String FK_NAME = "FK_NAME";
-        /** primary key name (may be null) */
+
+        /** Primary key name (values in this column may be null). */
         public static final String PK_NAME = "PK_NAME";
-        /** short : can the evaluation of foreign key constraints be deferred until commit<br>
-         * importedKeyInitiallyDeferred - see SQL92 for definition<br>
-         * importedKeyInitiallyImmediate - see SQL92 for definition<br>
-         * importedKeyNotDeferrable - see SQL92 for definition */
+
+        /**
+         * Whether the evaluation of foreign key constraints can be deferred until commit, as a {@code short} code.
+         * <ul>
+         *   <li>{@code importedKeyInitiallyDeferred} - see SQL92 for definition</li>
+         *   <li>{@code importedKeyInitiallyImmediate} - see SQL92 for definition</li>
+         *   <li>{@code importedKeyNotDeferrable} - see SQL92 for definition</li>
+         * </ul>
+         */
         public static final String DEFERRABILITY = "DEFERRABILITY";
 
-        private ExportedKey(){}
+        private ExportedKey() {
+        }
     }
 
     public static final class BestRow{
-
-        /** short =&gt; actual scope of result
+        /**
+         * Actual scope of result as a {@code short} code.
          *  bestRowTemporary - very temporary, while using row
          *  bestRowTransaction - valid for remainder of current transaction
-         *  bestRowSession - valid for remainder of current session */
+         *  bestRowSession - valid for remainder of current session.
+         */
         public static final String SCOPE = "SCOPE";
-        /** String =&gt; column name */
+
+        /** Column name. */
         public static final String COLUMN_NAME = "COLUMN_NAME";
-        /** int =&gt; SQL data type from java.sql.Types */
+
+        /** SQL data type from {@link java.sql.Types}. */
         public static final String DATA_TYPE = "DATA_TYPE";
-        /** String =&gt; Data source dependent type name,
-         * for a UDT the type name is fully qualified */
+
+        /** Data source dependent type name. For a UDT the type name is fully qualified. */
         public static final String TYPE_NAME = "TYPE_NAME";
-        /** int =&gt; precision  */
+
+        /** Precision as an {@code int}. */
         public static final String COLUMN_SIZE = "COLUMN_SIZE";
-        /** int =&gt; not used  */
+
+        /** Not used. */
         public static final String BUFFER_LENGTH = "BUFFER_LENGTH";
-        /** short =&gt; scale - Null is returned for data types where DECIMAL_DIGITS is not applicable. */
+
+        /** Scale - Null is returned for data types where DECIMAL_DIGITS is not applicable. */
         public static final String DECIMAL_DIGITS = "DECIMAL_DIGITS";
-        /** short =&gt; is this a pseudo column like an Oracle ROWID
-            bestRowUnknown - may or may not be pseudo column
-            bestRowNotPseudo - is NOT a pseudo column
-            bestRowPseudo - is a pseudo column */
+
+        /**
+         * Whether this a pseudo column like an Oracle ROWID, as a {@code short} code.
+         * bestRowUnknown - may or may not be pseudo column
+         * bestRowNotPseudo - is NOT a pseudo column
+         * bestRowPseudo - is a pseudo column.
+         */
         public static final String PSEUDO_COLUMN = "PSEUDO_COLUMN";
 
-        private BestRow(){}
+        private BestRow() {
+        }
     }
 
-    public static final class Index{
-
-        /** String =&gt; table catalog (may be null) */
+    public static final class Index {
+        /** Table catalog (values in this column may be null). */
         public static final String TABLE_CAT = "TABLE_CAT";
-        /** String =&gt; table schema (may be null)  */
+
+        /** Table schema (values in this column may be null). */
         public static final String TABLE_SCHEM = "TABLE_SCHEM";
-        /** String =&gt; table name  */
+
+        /** Table name. */
         public static final String TABLE_NAME = "TABLE_NAME";
-        /** boolean =&gt; Can index values be non-unique.
+
+        /** Whether index values can be non-unique.
          * false when TYPE is tableIndexStatistic  */
         public static final String NON_UNIQUE = "NON_UNIQUE";
-        /** String =&gt; index catalog (may be null);
-         * null when TYPE is tableIndexStatistic  */
+
+        /**
+         * Index catalog (values in this column may be null).
+         * Values are null when TYPE is tableIndexStatistic.
+         */
         public static final String INDEX_QUALIFIER = "INDEX_QUALIFIER";
-        /** String =&gt; index name;
-         * null when TYPE is tableIndexStatistic  */
+
+        /** Index name; null when TYPE is tableIndexStatistic. */
         public static final String INDEX_NAME = "INDEX_NAME";
-        /** short =&gt; index type:
+
+        /**
+         * Index type as a {@code short} code.
          *   tableIndexStatistic - this identifies table statistics that are
          *       returned in conjuction with a table's index descriptions
          *   tableIndexClustered - this is a clustered index
          *   tableIndexHashed - this is a hashed index
-         *   tableIndexOther - this is some other style of index  */
+         *   tableIndexOther - this is some other style of index.
+         */
         public static final String TYPE = "TYPE";
-        /** short =&gt; column sequence number within index;
-         * zero when TYPE is tableIndexStatistic  */
+
+        /**
+         * Column sequence number within index as a {@code short}.
+         * Zero when TYPE is tableIndexStatistic.
+         */
         public static final String ORDINAL_POSITION = "ORDINAL_POSITION";
-        /** String =&gt; column name;
-         * null when TYPE is tableIndexStatistic  */
+
+        /** Column name. Values are null when TYPE is tableIndexStatistic. */
         public static final String COLUMN_NAME = "COLUMN_NAME";
-        /** String =&gt; column sort sequence,
-         * "A" =&gt; ascending,
-         * "D" =&gt; descending, may be null if sort sequence is not supported;
-         * null when TYPE is tableIndexStatistic  */
+
+        /**
+         * Column sort sequence.
+         * "A" for ascending,
+         * "D" for descending, may be null if sort sequence is not supported;
+         * null when TYPE is tableIndexStatistic.
+         */
         public static final String ASC_OR_DESC = "ASC_OR_DESC";
-        /** int =&gt; When TYPE is tableIndexStatistic, then this is the number of rows in the table;
-         * otherwise, it is the number of unique values in the index.  */
+
+        /**
+         * When TYPE is tableIndexStatistic, then this is the number of rows in the table as an {@code int}.
+         * Otherwise, it is the number of unique values in the index.
+         */
         public static final String CARDINALITY = "CARDINALITY";
-        /** int =&gt; When TYPE is tableIndexStatisic then this is the number of pages used for the table,
-         * otherwise it is the number of pages used for the current index.  */
+
+        /**
+         * When TYPE is tableIndexStatisic then this is the number of pages used for the table as an {@code int}.
+         * Otherwise it is the number of pages used for the current index.
+         */
         public static final String PAGES = "PAGES";
-        /** String =&gt; Filter condition, if any. (may be null) */
+
+        /** Filter condition, if any. Values in this column may be null. */
         public static final String FILTER_CONDITION = "FILTER_CONDITION";
 
-        private Index(){}
+        private Index() {
+        }
     }
 
-    private MetaDataConstants(){}
-
+    private MetaDataConstants() {
+    }
 }

Modified: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/PrimaryKey.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/PrimaryKey.java?rev=1829660&r1=1829659&r2=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/PrimaryKey.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/PrimaryKey.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -22,73 +22,61 @@ import java.sql.SQLException;
 import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
-import java.util.logging.Logger;
-import org.apache.sis.sql.dialect.SQLDialect;
+import org.apache.sis.internal.sql.Dialect;
 import org.apache.sis.storage.DataStoreException;
 
+
 /**
- * Describe a table primary key.
+ * Description of a table primary key.
  *
- * @author Johann Sorel (Geomatys)
+ * @author  Johann Sorel (Geomatys)
  * @version 1.0
  * @since   1.0
  * @module
  */
-public class PrimaryKey {
-
-    private final String tableName;
-    private final List<ColumnMetaModel> columns;
+final class PrimaryKey {
 
-    public PrimaryKey(String tableName) {
-        this(tableName,null);
-    }
+    final String table;
+    final List<ColumnMetaModel> columns;
 
-    public PrimaryKey(String tableName, List<ColumnMetaModel> columns) {
-        this.tableName = tableName;
-        if (columns == null) columns = Collections.emptyList();
+    PrimaryKey(final String table, List<ColumnMetaModel> columns) {
+        this.table = table;
+        if (columns == null) {
+            columns = Collections.emptyList();
+        }
         this.columns = columns;
     }
 
-    public String getTableName() {
-        return tableName;
-    }
-
-    public List<ColumnMetaModel> getColumns() {
-        return columns;
-    }
-
-    public boolean isNull(){
-        return columns.isEmpty();
-    }
-
     /**
-     * Create a feature identifier from primary key column values.
+     * Creates a feature identifier from primary key column values.
+     * This method uses only the current row of the given result set.
      *
-     * @param rs ResultSet on a row
-     * @return feature identifier
-     * @throws SQLException
+     * @param  rs  the result set positioned on a row.
+     * @return the feature identifier for current row of the given result set.
      */
-    public String buildIdentifier(final ResultSet rs) throws SQLException {
-
+    String buildIdentifier(final ResultSet rs) throws SQLException {
         final int size = columns.size();
-
-        if (size == 0) {
-            // no primary key columns, generate a random id
-            return UUID.randomUUID().toString();
-        } else if (size == 1) {
-            // unique column value
-            return rs.getString(columns.get(0).getName());
-        } else {
-            // aggregate column values
-            final Object[] values = new Object[size];
-            for (int i=0; i<size; i++) {
-                values[i] = rs.getString(columns.get(i).getName());
+        switch (size) {
+            case 0: {
+                // No primary key columns, generate a random id
+                return UUID.randomUUID().toString();
+            }
+            case 1: {
+                // Unique column value
+                return rs.getString(columns.get(0).name);
+            }
+            default: {
+                // Aggregate column values
+                final Object[] values = new Object[size];
+                for (int i=0; i<size; i++) {
+                    values[i] = rs.getString(columns.get(i).name);
+                }
+                return buildIdentifier(values);
             }
-            return buildIdentifier(values);
         }
     }
 
-    public static String buildIdentifier(final Object[] values) {
+    private static String buildIdentifier(final Object[] values) {
         final StringBuilder sb = new StringBuilder();
         for (int i=0; i<values.length; i++) {
             if (i > 0) sb.append('.');
@@ -98,22 +86,19 @@ public class PrimaryKey {
     }
 
     /**
-     * Create primary key column field values.
+     * Creates the field values for all columns of a the primary key.
      *
-     * @param dialect database dialect
-     * @param logger database logger
-     * @param cx database connection
-     * @return primary key values
-     * @throws SQLException
-     * @throws DataStoreException
+     * @param  dialect  handler for syntax elements specific to the database.
+     * @param  cx       connection to the database.
+     * @return primary key values.
+     * @throws SQLException if a JDBC error occurred while executing a statement.
+     * @throws DataStoreException if another error occurred while fetching the next value.
      */
-    public Object[] nextValues(final SQLDialect dialect, Logger logger, final Connection cx)
-            throws SQLException, DataStoreException {
+    Object[] nextValues(final Dialect dialect, final Connection cx) throws SQLException, DataStoreException {
         final Object[] parts = new Object[columns.size()];
         for (int i=0; i<parts.length; i++) {
-            parts[i] = columns.get(i).nextValue(dialect, logger, cx);
+            parts[i] = columns.get(i).nextValue(dialect, cx);
         }
         return parts;
     }
-
 }

Copied: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/QueryFeatureSet.java (from r1829659, sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLQueryFeatureSet.java)
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/QueryFeatureSet.java?p2=sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/QueryFeatureSet.java&p1=sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLQueryFeatureSet.java&r1=1829659&r2=1829660&rev=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLQueryFeatureSet.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/QueryFeatureSet.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -14,13 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.sql;
+package org.apache.sis.internal.sql.reverse;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.stream.Stream;
+import org.apache.sis.sql.SQLQuery;
+import org.apache.sis.sql.SQLStore;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.FeatureSet;
 import org.apache.sis.storage.event.ChangeEvent;
@@ -30,22 +32,25 @@ import org.opengis.feature.FeatureType;
 import org.opengis.geometry.Envelope;
 import org.opengis.metadata.Metadata;
 
+
 /**
  * A FeatureSet above a custom SQL query.
  *
- * @author Johann Sorel (Geomatys)
+ * @author  Johann Sorel (Geomatys)
  * @version 1.0
  * @since   1.0
  * @module
  */
-final class SQLQueryFeatureSet implements FeatureSet {
+public final class QueryFeatureSet implements FeatureSet {
 
-    private final AbstractSQLStore store;
+    private final DataBaseModel model;
+    private final SQLStore store;
     private final SQLQuery query;
     private FeatureType type;
 
-    public SQLQueryFeatureSet(AbstractSQLStore store, SQLQuery query) {
+    public QueryFeatureSet(final SQLStore store, final DataBaseModel model, final SQLQuery query) {
         this.store = store;
+        this.model = model;
         this.query = query;
     }
 
@@ -56,7 +61,7 @@ final class SQLQueryFeatureSet implement
             try (Connection cnx = store.getDataSource().getConnection();
                  Statement stmt = cnx.createStatement();
                  ResultSet rs = stmt.executeQuery(sql)) {
-                type = store.getDatabaseModel().analyzeResult(rs, query.getName());
+                type = model.analyzeResult(rs, query.getName());
             } catch (SQLException ex) {
                 throw new DataStoreException(ex);
             }
@@ -86,5 +91,4 @@ final class SQLQueryFeatureSet implement
     @Override
     public <T extends ChangeEvent> void removeListener(ChangeListener<? super T> listener, Class<T> eventType) {
     }
-
 }

Modified: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/RelationMetaModel.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/RelationMetaModel.java?rev=1829660&r1=1829659&r2=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/RelationMetaModel.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/RelationMetaModel.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -18,6 +18,7 @@ package org.apache.sis.internal.sql.reve
 
 import org.apache.sis.util.ArgumentChecks;
 
+
 /**
  * Description of a relation between two tables.
  *
@@ -26,73 +27,39 @@ import org.apache.sis.util.ArgumentCheck
  * @since   1.0
  * @module
  */
-public class RelationMetaModel {
+final class RelationMetaModel {
 
-    private final String relationName;
-    private final String currentColumn;
-    private final String foreignSchema;
-    private final String foreignTable;
-    private final String foreignColumn;
-    private final boolean imported;
-    private final boolean deleteCascade;
+    final String  relationName;
+    final String  currentColumn;
+    final String  foreignSchema;
+    final String  foreignTable;
+    final String  foreignColumn;
+    final boolean isImported;
+    final boolean cascadeOnDelete;
 
-    public RelationMetaModel(final String relationName,final String currentColumn, final String foreignSchema,
+    RelationMetaModel(final String relationName, final String currentColumn, final String foreignSchema,
             final String foreignTable, final String foreignColumn,
-            boolean imported, boolean deleteCascade) {
-        ArgumentChecks.ensureNonNull("relation name", relationName);
-        ArgumentChecks.ensureNonNull("current column", currentColumn);
-        ArgumentChecks.ensureNonNull("foreign table", foreignTable);
-        ArgumentChecks.ensureNonNull("foreign column", foreignColumn);
-        this.relationName = relationName;
-        this.currentColumn = currentColumn;
-        this.foreignSchema = foreignSchema;
-        this.foreignTable = foreignTable;
-        this.foreignColumn = foreignColumn;
-        this.imported = imported;
-        this.deleteCascade = deleteCascade;
-    }
-
-    public String getRelationName() {
-        return relationName;
-    }
-
-    public String getCurrentColumn() {
-        return currentColumn;
-    }
-
-    public String getForeignColumn() {
-        return foreignColumn;
-    }
-
-    public String getForeignSchema() {
-        return foreignSchema;
-    }
-
-    public String getForeignTable() {
-        return foreignTable;
-    }
-
-    /**
-     * Indicate if this key is imported.
-     * @return
-     */
-    public boolean isImported() {
-        return imported;
-    }
-
-    /**
-     * @return true if relation implies a delete on cascade.
-     */
-    public boolean isDeleteCascade(){
-        return deleteCascade;
+            final boolean isImported, final boolean cascadeOnDelete)
+    {
+        ArgumentChecks.ensureNonNull("relationName",  relationName);
+        ArgumentChecks.ensureNonNull("currentColumn", currentColumn);
+        ArgumentChecks.ensureNonNull("foreignTable",  foreignTable);
+        ArgumentChecks.ensureNonNull("foreignColumn", foreignColumn);
+        this.relationName    = relationName;
+        this.currentColumn   = currentColumn;
+        this.foreignSchema   = foreignSchema;
+        this.foreignTable    = foreignTable;
+        this.foreignColumn   = foreignColumn;
+        this.isImported      = isImported;
+        this.cascadeOnDelete = cascadeOnDelete;
     }
 
     @Override
     public String toString() {
-        final StringBuilder sb = new StringBuilder(currentColumn);
-        sb.append((imported) ? " → " : " ← ");
-        sb.append(foreignSchema).append('.');
-        sb.append(foreignTable).append('.').append(foreignColumn);
-        return sb.toString();
+        return new StringBuilder(currentColumn)
+                .append((isImported) ? " → " : " ← ")
+                .append(foreignSchema).append('.')
+                .append(foreignTable).append('.').append(foreignColumn)
+                .toString();
     }
 }

Modified: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/SchemaMetaModel.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/SchemaMetaModel.java?rev=1829660&r1=1829659&r2=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/SchemaMetaModel.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/SchemaMetaModel.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -21,6 +21,7 @@ import java.util.HashMap;
 import java.util.Map;
 import org.apache.sis.internal.sql.SQLUtilities;
 
+
 /**
  * Description of a database schema.
  *
@@ -29,29 +30,27 @@ import org.apache.sis.internal.sql.SQLUt
  * @since   1.0
  * @module
  */
-public class SchemaMetaModel {
+final class SchemaMetaModel {
 
     final String name;
-    final Map<String, TableMetaModel> tables = new HashMap<String, TableMetaModel>();
 
-    public SchemaMetaModel(final String name) {
-        this.name = name;
-    }
+    final Map<String,TableMetaModel> tables;
 
-    public String getName() {
-        return name;
+    SchemaMetaModel(final String name) {
+        this.name = name;
+        tables = new HashMap<>();
     }
 
-    public Collection<TableMetaModel> getTables() {
+    Collection<TableMetaModel> getTables() {
         return tables.values();
     }
 
-    public TableMetaModel getTable(final String name){
+    TableMetaModel getTable(final String name){
         return tables.get(name);
     }
 
     @Override
     public String toString() {
-        return SQLUtilities.toStringTree(name, tables.values());
+        return SQLUtilities.toTreeString(name, getTables());
     }
 }

Modified: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/TableMetaModel.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/TableMetaModel.java?rev=1829660&r1=1829659&r2=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/TableMetaModel.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/TableMetaModel.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -18,10 +18,10 @@ package org.apache.sis.internal.sql.reve
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import org.apache.sis.feature.builder.FeatureTypeBuilder;
 import org.apache.sis.internal.sql.SQLUtilities;
 
+
 /**
  * Description of a database table.
  *
@@ -30,13 +30,13 @@ import org.apache.sis.internal.sql.SQLUt
  * @since   1.0
  * @module
  */
-public class TableMetaModel {
+final class TableMetaModel {
 
-    public enum View {
+    enum View {
         TABLE,
         SIMPLE_FEATURE_TYPE,
         COMPLEX_FEATURE_TYPE,
-        ALLCOMPLEX
+        ALL_COMPLEX
     }
 
     String name;
@@ -45,53 +45,44 @@ public class TableMetaModel {
     FeatureTypeBuilder tableType;
     FeatureTypeBuilder simpleFeatureType;
     FeatureTypeBuilder complexFeatureType;
-    FeatureTypeBuilder allType;
+    FeatureTypeBuilder allTypes;
 
     PrimaryKey key;
+
     /**
      * those are 0:1 relations
      */
     final Collection<RelationMetaModel> importedKeys = new ArrayList<>();
+
     /**
      * those are 0:N relations
      */
     final Collection<RelationMetaModel> exportedKeys = new ArrayList<>();
+
     /**
      * inherited tables
      */
     final Collection<String> parents = new ArrayList<>();
 
-    public TableMetaModel(final String name, String type) {
+    TableMetaModel(final String name, String type) {
         this.name = name;
         this.type = type;
     }
 
-    public String getName() {
-        return name;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public Collection<RelationMetaModel> getExportedKeys() {
-        return Collections.unmodifiableCollection(exportedKeys);
-    }
-
-    public Collection<RelationMetaModel> getImportedKeys() {
-        return Collections.unmodifiableCollection(importedKeys);
-    }
-
     /**
-     * Detect if given type is a subtype. Conditions are :
-     * - having a relation toward another type
-     * - relation must be cascading
+     * Determines if given type is a subtype. Conditions are:
+     * <ul>
+     *   <li>having a relation toward another type</li>
+     *   <li>relation must be cascading.</li>
+     * </ul>
+     *
+     * @return true is type is a subtype.
      *
-     * @return true is type is a subtype
+     * @todo a subtype of what?
      */
-    public boolean isSubType(){
-        for (RelationMetaModel relation : getImportedKeys()) {
-            if (relation.isDeleteCascade()) {
+    boolean isSubType() {
+        for (RelationMetaModel relation : importedKeys) {
+            if (relation.cascadeOnDelete) {
                 return true;
             }
         }
@@ -102,22 +93,22 @@ public class TableMetaModel {
     public String toString() {
         final StringBuilder sb = new StringBuilder(name);
         if (!importedKeys.isEmpty()) {
-            sb.append(SQLUtilities.toStringTree("\n Imported Keys", importedKeys)).append('\n');
+            // TODO: use system line separator.
+            sb.append(SQLUtilities.toTreeString("\n Imported Keys", importedKeys)).append('\n');
         }
         if (!exportedKeys.isEmpty()) {
-            sb.append(SQLUtilities.toStringTree("\n Exported Keys", exportedKeys)).append('\n');
+            sb.append(SQLUtilities.toTreeString("\n Exported Keys", exportedKeys)).append('\n');
         }
         return sb.toString();
     }
 
-    public FeatureTypeBuilder getType(View view) {
+    FeatureTypeBuilder getType(final View view) {
         switch (view) {
             case TABLE:                return tableType;
             case SIMPLE_FEATURE_TYPE:  return simpleFeatureType;
             case COMPLEX_FEATURE_TYPE: return complexFeatureType;
-            case ALLCOMPLEX:           return allType;
-            default: throw new IllegalArgumentException("Unknowned view type : "+view);
+            case ALL_COMPLEX:          return allTypes;
+            default: throw new IllegalArgumentException("Unknown view type: " + view);
         }
     }
-
 }

Added: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/package-info.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/package-info.java?rev=1829660&view=auto
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/package-info.java (added)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/package-info.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Inspect a database schema.
+ *
+ * <STRONG>Do not use!</STRONG>
+ *
+ * This package is for internal use by SIS only. Classes in this package
+ * may change in incompatible ways in any future version without notice.
+ *
+ * @author  Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since   1.0
+ * @module
+ */
+package org.apache.sis.internal.sql.reverse;

Propchange: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/package-info.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/package-info.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Copied: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLStore.java (from r1829659, sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/AbstractSQLStore.java)
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLStore.java?p2=sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLStore.java&p1=sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/AbstractSQLStore.java&r1=1829659&r2=1829660&rev=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/AbstractSQLStore.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLStore.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -17,40 +17,54 @@
 package org.apache.sis.sql;
 
 import javax.sql.DataSource;
-import org.apache.sis.internal.sql.reverse.DataBaseModel;
-import org.apache.sis.sql.dialect.SQLDialect;
 import org.apache.sis.storage.DataStore;
+import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.FeatureSet;
+import org.apache.sis.storage.StorageConnector;
+
 
 /**
- * Parent store class for DataStore implementation using java JDBC backend.
+ * Parent store class for {@code DataStore} implementations using JDBC backend.
  *
- * @author Johann Sorel (Geomatys)
+ * @author  Johann Sorel (Geomatys)
  * @version 1.0
  * @since   1.0
  * @module
  */
-public abstract class AbstractSQLStore extends DataStore {
+public abstract class SQLStore extends DataStore {
+    /**
+     * The data source to use for obtaining connections to the database.
+     */
+    private final DataSource source;
 
     /**
-     * Returns the dialect configuration used by this store.
+     * Creates a new instance for the given storage.
+     * The {@code provider} argument is an optional information.
+     * The {@code connector} argument is mandatory.
      *
-     * @return dialect used by the store, never null
+     * @param  provider   the factory that created this {@code DataStore} instance, or {@code null} if unspecified.
+     * @param  connector  information about the storage (JDBC data source, <i>etc</i>).
+     * @throws DataStoreException if an error occurred while creating the data store for the given storage.
      */
-    public abstract SQLDialect getDialect();
-
-    public abstract DataSource getDataSource();
-
-    public abstract DataBaseModel getDatabaseModel();
+    protected SQLStore(final SQLStoreProvider provider, final StorageConnector connector) throws DataStoreException {
+        super(provider, connector);
+        source = connector.getStorageAs(DataSource.class);
+    }
 
     /**
-     * Execute a query directly on the database.
+     * Returns the data source used for obtaining connections to the database.
      *
-     * @param query , not null
-     * @return resulting features from given query.
+     * @return the data source for obtaining connections to the database.
      */
-    public FeatureSet query(SQLQuery query) {
-        return new SQLQueryFeatureSet(this, query);
+    public DataSource getDataSource() {
+        return source;
     }
 
+    /**
+     * Executes a query directly on the database.
+     *
+     * @param  query the query to execute (can not be null).
+     * @return the features obtained by the given given query.
+     */
+    public abstract FeatureSet query(SQLQuery query);
 }

Copied: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLStoreProvider.java (from r1829659, sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/AbstractSQLProvider.java)
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLStoreProvider.java?p2=sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLStoreProvider.java&p1=sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/AbstractSQLProvider.java&r1=1829659&r2=1829660&rev=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/AbstractSQLProvider.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/SQLStoreProvider.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -16,13 +16,21 @@
  */
 package org.apache.sis.sql;
 
+import org.apache.sis.storage.DataStoreProvider;
+
+
 /**
+ * Provider of {@code SQLStore} instances.
  *
- * @author Johann Sorel (Geomatys)
+ * @author  Johann Sorel (Geomatys)
  * @version 1.0
  * @since   1.0
  * @module
  */
-public interface AbstractSQLProvider {
-
+public abstract class SQLStoreProvider extends DataStoreProvider {
+    /**
+     * Creates a new provider.
+     */
+    protected SQLStoreProvider() {
+    }
 }

Added: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/package-info.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/package-info.java?rev=1829660&view=auto
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/package-info.java (added)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/package-info.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Data stores that create features from a JDBC connection to a database.
+ *
+ * @author  Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since   1.0
+ * @module
+ */
+package org.apache.sis.sql;

Propchange: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/package-info.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/package-info.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Modified: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresDialect.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresDialect.java?rev=1829660&r1=1829659&r2=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresDialect.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresDialect.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -22,86 +22,86 @@ import java.sql.SQLException;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.internal.sql.SingleAttributeTypeBuilder;
 import org.apache.sis.internal.sql.reverse.ColumnMetaModel;
-import org.apache.sis.sql.dialect.SQLDialect;
 import org.apache.sis.storage.DataStoreException;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.internal.sql.Dialect;
+
 
 /**
+ * Implements PostgreSQL-specific functionalities.
  *
  * @author Johann Sorel (Geomatys)
  * @version 1.0
  * @since   1.0
  * @module
  */
-class PostgresDialect implements SQLDialect {
+final class PostgresDialect extends Dialect {
 
-    private static final Set<String> IGNORE_TABLES = new HashSet<>();
+    private static final Set<String> IGNORE_TABLES = new HashSet<>(8);
     static {
-        //postgis 1+ geometry and referencing
+        // Postgis 1+ geometry and referencing
         IGNORE_TABLES.add("spatial_ref_sys");
         IGNORE_TABLES.add("geometry_columns");
         IGNORE_TABLES.add("geography_columns");
-        //postgis 2 raster
+        // Postgis 2 raster
         IGNORE_TABLES.add("raster_columns");
         IGNORE_TABLES.add("raster_overviews");
     }
 
-
     @Override
     public boolean supportGlobalMetadata() {
         return true;
     }
 
     @Override
-    public boolean ignoreTable(String name) {
+    public boolean isTableIgnored(String name) {
         return IGNORE_TABLES.contains(name.toLowerCase());
     }
 
     @Override
     public Class<?> getJavaType(int sqlType, String sqlTypeName) {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public void encodeColumnName(StringBuilder sql, String name) {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public void encodeSchemaAndTableName(StringBuilder sql, String databaseSchema, String tableName) {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public Object nextValue(ColumnMetaModel column, Connection cx) throws SQLException, DataStoreException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public String getColumnSequence(Connection cx, String schemaName, String tableName, String columnName) throws SQLException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public void decodeColumnType(SingleAttributeTypeBuilder atb, Connection cx, String typeName, int datatype, String schemaName, String tableName, String columnName) throws SQLException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public void decodeGeometryColumnType(SingleAttributeTypeBuilder atb, Connection cx, ResultSet rs, int columnIndex, boolean customquery) throws SQLException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public Integer getGeometrySRID(String schemaName, String tableName, String columnName, Map<String, Object> metas, Connection cx) throws SQLException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public CoordinateReferenceSystem createCRS(int srid, Connection cx) throws SQLException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
-
 }

Modified: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresStore.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresStore.java?rev=1829660&r1=1829659&r2=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresStore.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresStore.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -16,57 +16,42 @@
  */
 package org.apache.sis.sql.postgres;
 
-import java.util.logging.Logger;
-import javax.sql.DataSource;
-import org.apache.sis.internal.sql.reverse.DataBaseModel;
-import org.apache.sis.sql.AbstractSQLStore;
-import org.apache.sis.sql.dialect.SQLDialect;
+import org.opengis.metadata.Metadata;
+import org.opengis.parameter.ParameterValueGroup;
+import org.apache.sis.sql.SQLStore;
+import org.apache.sis.sql.SQLQuery;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.event.ChangeEvent;
 import org.apache.sis.storage.event.ChangeListener;
-import org.apache.sis.util.logging.Logging;
-import org.opengis.metadata.Metadata;
-import org.opengis.parameter.ParameterValueGroup;
+import org.apache.sis.internal.sql.reverse.DataBaseModel;
+import org.apache.sis.internal.sql.reverse.QueryFeatureSet;
+import org.apache.sis.storage.FeatureSet;
+import org.apache.sis.storage.StorageConnector;
+
 
 /**
+ * A data store backed by a PostgreSQL database.
  *
- * @author Johann Sorel (Geomatys)
+ * @author  Johann Sorel (Geomatys)
  * @version 1.0
  * @since   1.0
  * @module
  */
-class PostgresStore extends AbstractSQLStore {
-
-    private static final Logger LOGGER = Logging.getLogger("org.apache.sis.sql");
-
+final class PostgresStore extends SQLStore {
     private final PostgresDialect dialect = new PostgresDialect();
 
-    private final DataSource source;
     private final String schema;
     private final String table;
 
     private final DataBaseModel model;
 
-    public PostgresStore(DataSource source, String schema, String table) {
-        this.source = source;
+    public PostgresStore(final PostgresStoreProvider provider, final StorageConnector connector,
+            final String schema, final String table) throws DataStoreException
+    {
+        super(provider, connector);
         this.schema = schema;
-        this.table = table;
-        this.model = new DataBaseModel(this, LOGGER, schema, table);
-    }
-
-    @Override
-    public SQLDialect getDialect() {
-        return dialect;
-    }
-
-    @Override
-    public DataSource getDataSource() {
-        return source;
-    }
-
-    @Override
-    public DataBaseModel getDatabaseModel() {
-        return model;
+        this.table  = table;
+        this.model  = new DataBaseModel(this, dialect, schema, table, listeners);
     }
 
     @Override
@@ -79,6 +64,16 @@ class PostgresStore extends AbstractSQLS
         throw new UnsupportedOperationException("Not supported yet.");
     }
 
+    /**
+     * Executes a query directly on the database.
+     *
+     * @param  query the query to execute (can not be null).
+     * @return the features obtained by the given given query.
+     */
+    public FeatureSet query(SQLQuery query) {
+        return new QueryFeatureSet(this, model, query);
+    }
+
     @Override
     public void close() throws DataStoreException {
     }
@@ -90,5 +85,4 @@ class PostgresStore extends AbstractSQLS
     @Override
     public <T extends ChangeEvent> void removeListener(ChangeListener<? super T> listener, Class<T> eventType) {
     }
-
 }

Copied: sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresStoreProvider.java (from r1829659, sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresProvider.java)
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresStoreProvider.java?p2=sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresStoreProvider.java&p1=sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresProvider.java&r1=1829659&r2=1829660&rev=1829660&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresProvider.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-sql/src/main/java/org/apache/sis/sql/postgres/PostgresStoreProvider.java [UTF-8] Fri Apr 20 14:50:37 2018
@@ -16,24 +16,42 @@
  */
 package org.apache.sis.sql.postgres;
 
+import org.apache.sis.sql.SQLStoreProvider;
 import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.storage.DataStoreProvider;
 import org.apache.sis.storage.ProbeResult;
 import org.apache.sis.storage.StorageConnector;
 import org.opengis.parameter.ParameterDescriptorGroup;
 
+
 /**
+ * The provider of {@link PostgresStore}.
  *
- * @author Johann Sorel (Geomatys)
+ * @author  Johann Sorel (Geomatys)
  * @version 1.0
  * @since   1.0
  * @module
+ *
+ * @todo We should not have specialized data store provider for PostgreSQL.
+ *       Instead we should detect from the data source or the connection.
  */
-public class PostgresProvider extends DataStoreProvider {
-
-    public static final String NAME = "postgres";
+final class PostgresStoreProvider extends SQLStoreProvider {
+    /**
+     * Name of the data store.
+     */
+    private static final String NAME = "PostgreSQL";
+
+    /**
+     * Creates a new provider.
+     */
+    public PostgresStoreProvider() {
+    }
 
+    /**
+     * Returns a short name for the data store, which is {@value #NAME}.
+     *
+     * @return {@value #NAME}.
+     */
     @Override
     public String getShortName() {
         return NAME;
@@ -41,17 +59,16 @@ public class PostgresProvider extends Da
 
     @Override
     public ParameterDescriptorGroup getOpenParameters() {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public ProbeResult probeContent(StorageConnector connector) throws DataStoreException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
 
     @Override
     public DataStore open(StorageConnector connector) throws DataStoreException {
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+        throw new UnsupportedOperationException("Not supported yet.");
     }
-
 }



Mime
View raw message