Package com.luciad.format.mssql
Class TLcdMSSQLModelDecoder
java.lang.Object
com.luciad.format.mssql.TLcdMSSQLModelDecoder
- All Implemented Interfaces:
ILcdModelDecoder
@LcdService(priority=20000)
public class TLcdMSSQLModelDecoder
extends Object
implements ILcdModelDecoder
This model decoder decodes spatial tables from Microsoft SQL Server databases.
Alternatively, a
Input files
File | Required | Entry point | Description |
---|---|---|---|
*.mss | x | Java properties file containing all the necessary properties to access the spatial data |
Properties
object can be constructed
programmatically and passed to the model decoder.
The common properties needed to establish a connection are:
driver
(default =com.microsoft.sqlserver.jdbc.SQLServerDriver
): the JDBC driver that will be used to connect to the database.url
: the database URL, absolute or relative to the location of the properties file.
table
: the name of the table containing the geometries. The table name may be qualified by prepending the database schema. It may be followed by one or more spaces and an alias, which can be used instead of the original name to disambiguate columns in the other properties.spatialColumn
: the column containing the geometries.spatialQueryColumn
: an optional column containing the geometries that should be used in spatial queries. By default, this column is equal to thespatialColumn
. It should not be changed for most typical applications.featureNames.0
, ...: the column names that should be retrieved as object features in the model. For read-only models, more complex SQL expressions, or columns from selection tables (see below) are accepted too.featureDisplayNames.0
, ...: optional display names corresponding to the feature names.primaryFeatureIndex
(default = 0): the index of the feature that serves as a primary key.primaryFeatureAutoGenerated
(default =false
): specifies whether the database automatically generates the primary key whenever a geometry is inserted into the spatial table. The primary feature on the java side will then be updated with this generated value.selectionTables
(default =null
): an optional comma-separated list of tables required to constrain the geometries of the model. These tables will be added after the main table in the FROM parts of SELECT queries. A name may be followed by one or more spaces and an alias, which can be used instead of the original name to disambiguate columns in the other properties.selectionFilter
(default =null
): an optional SQL select query to constrain the geometries of the model. This query will be added after the spatial query in the WHERE parts of SELECT queries.
Supported transfer protocols
- This model decoder supports all protocols that are supported by the underlying JDBC driver.
Model structure
- This model decoder creates a model per spatial table.
- The models returned by this decoder are instances of
TLcdDatabaseModel
orTLcdDatabaseReadOnlyModel
, depending on whether this decoder creates read-only models or not. - All models returned by this model decoder implement
ILcd2DBoundsIndexedModel
.
Model descriptor
- The model descriptor of a decoded model is a
TLcdMSSQLModelDescriptor
.
sourceName
(default = the source name that is passed to the model decoder): the source name of the model descriptor.typeName
(default = the display name of the model decoder): the type name of the model descriptor. The type name is also used when composing the name of the data model.displayName
(default = the spatial table name): the display name of the model descriptor. The display name is also used when composing the name of the data model and the name of the data type.
Model reference
By default, the model reference of a decoded model is determined by the EPSG code or the WKT reference of the spatial table. If no model reference can be created the default model reference set on this decoder will be used (seesetDefaultModelReference(com.luciad.model.ILcdModelReference)
).
Model elements
- A decoded database model contains
ILcdShape
objects, decoded from the Well-Known Binary representation that Microsoft SQL provides:FROM WKB GEOMETRY
TO ILcdShape
POINT
ILcdShapeList
with anILcd2DEditablePoint
objectLINESTRING
ILcdShapeList
with anILcd2DEditablePolyline
objectPOLYGON
ILcdShapeList
with anILcdComplexPolygon
objectMULTIPOINT
ILcdShapeList
with anILcd2DEditablePolypoint
objectMULTILINESTRING
ILcdShapeList
withILcd2DEditablePolyline
objectsMULTIPOLYGON
ILcdShapeList
withILcdComplexPolygon
objectsGEOMETRYCOLLECTION
ILcdShapeList
with objects from this table (also recursive) - The elements also implement the
ILcdDataObject
interface, providing access to their features. - Points, lines and polygons containing an M coordinate will be decoded as an
ILcdShape
that provides access to the M coordinate value. For example, anPOINT
will be decoded as anTLcdLonLatMPoint
TLcdLonLatHeightMPoint
,TLcdXYMPoint
orTLcdXYZMPoint
that has aTLcdXYZMPoint.getM()
method to access the M coordinate value. - For server versions 2012 and up data with Z coordinate is decoded the 3D equivalents of the shapes described above.
- For server version below 2012 any Z coordinate in the data is ignored.
Useful settings
- The decoder property
readOnly
can be set to specify whether the model will be used as a read-only model.
Sample code
ILcdModelDecoder decoder = new TLcdMSSQLModelDecoder(true);
ILcdModel model = decoder.decode("world.mss");
The file world.mss
could for instance contain the following
properties:
# The basic database connection properties.
driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
url = jdbc:sqlserver://server:1433
user = user
password = password
# The data of interest.
table = world
spatialColumn = GEOM
# The feature columns to be decoded.
featureNames.0 = ID
featureNames.1 = COUNTRY
featureNames.2 = CAPITAL
featureNames.3 = POP_1994
# The index of the feature that can be used as primary key.
primaryFeatureIndex = 0
# Optional extra tables and SQL condition to restrict the database elements.
# Note that the above feature names also have to be prefixed with the table
# name if the column names are ambiguous, like the ID column below.
#selectionTables = POP_1994
#selectionFilter = world.ID = POPULATION.ID AND POPULATION.VALUE > 1e7
# Optional maximum cache size (expressed as number of objects, default is 100).
maxCacheSize = 500
# Optionally close the database connection after each query.
#alwaysCloseConnection = false
Performance tips
Some optional properties in the properties file or object can help to tune the database access:alwaysCloseConnection
(default =false
): an optional boolean to specify that the database connection should be closed after each query.maxCacheSize
(default = 100, or the value set on the decoder): the maximum number of objects in the cache. Using a cache will improve performance if transferring and decoding geometries and their features is relatively expensive compared to performing the original SQL queries. The current implementation of the decoder will then perform queries in two passes, first retrieving the relevant primary keys and then retrieving and decoding the actual geometries and features that are not in the cache. On the other hand, setting the cache size to 0 may be better if performing SQL queries is relatively expensive. The current implementation of the decoder will then perform queries in a single pass, retrieving and decoding the relevant geometries every time.
Thread safety
- The decoding of models is thread-safe, as long as no properties are changed during the decoding.
- The decoded models are thread-safe for read access.
Supported versions and specifications
- Microsoft SQL Server, version 2014 and higher.
Known limitations
- Some rare EPSG and WKT model references are not supported.
- Updating database views and data sets involving additional tables is generally not possible.
Requirements
- The current implementation requires JRE 1.6 or higher.
- Since:
- 2012.1
-
Field Summary
-
Constructor Summary
ConstructorDescriptionCreates a new, read-write Microsoft SQL model decoder.TLcdMSSQLModelDecoder
(boolean aReadOnly) Creates a new Microsoft SQL model decoder. -
Method Summary
Modifier and TypeMethodDescriptionboolean
canDecodeSource
(String aSourceAsString) Checks whether this model decoder can decode the specified data source.Decodes a new database model based on the properties specified in the given file.decode
(Properties aProperties) Decodes a new database model based on the properties.int
Return the default maximum size of the cache, expressed in number of elements (rows|geometries).Returns the default model reference to be assigned to decoded models.Returns a short, displayable name for the format that is decoded by thisILcdModelDecoder
.boolean
Indicates what kind of models will be created by this decoder.void
setDefaultMaxCacheSize
(int aDefaultMaxCacheSize) Sets the default maximum size of the cache.void
setDefaultModelReference
(ILcdModelReference aDefaultModelReference) Sets the default model reference to be assigned to decoded models if no model reference can be created based on information from the database.void
setReadOnly
(boolean aReadOnly) Specifies whether the decoded models should be read-only or not.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.luciad.model.ILcdModelDecoder
canDecodeSource, decodeModelMetadata, decodeModelMetadata, decodeSource, discoverDataSources
-
Field Details
-
DISPLAY_NAME
- See Also:
-
-
Constructor Details
-
TLcdMSSQLModelDecoder
public TLcdMSSQLModelDecoder(boolean aReadOnly) Creates a new Microsoft SQL model decoder.- Parameters:
aReadOnly
- specifies the type of models the decoder should construct, seesetReadOnly(boolean)
.
-
TLcdMSSQLModelDecoder
public TLcdMSSQLModelDecoder()Creates a new, read-write Microsoft SQL model decoder.
-
-
Method Details
-
setDefaultModelReference
Sets the default model reference to be assigned to decoded models if no model reference can be created based on information from the database.- Parameters:
aDefaultModelReference
- the default model reference.- See Also:
-
getDefaultModelReference
Returns the default model reference to be assigned to decoded models.- Returns:
- the default model reference.
- See Also:
-
setDefaultMaxCacheSize
public void setDefaultMaxCacheSize(int aDefaultMaxCacheSize) Sets the default maximum size of the cache. It is possible to override this value by means of themaxCacheSize
property in the properties file.- Parameters:
aDefaultMaxCacheSize
- the default maximum number of objects in the cache.
-
getDefaultMaxCacheSize
public int getDefaultMaxCacheSize()Return the default maximum size of the cache, expressed in number of elements (rows|geometries).- Returns:
- the default maximum cache size
-
setReadOnly
public void setReadOnly(boolean aReadOnly) Specifies whether the decoded models should be read-only or not.- Parameters:
aReadOnly
- specifies the type of models the decoder should construct. Iftrue
, the decoder will createTLcdDatabaseReadOnlyModel
objects. Iffalse
, the decoder will createTLcdDatabaseModel
objects.
-
getReadOnly
public boolean getReadOnly()Indicates what kind of models will be created by this decoder.- Returns:
true
if the decoded models should be read-only,false
otherwise.- See Also:
-
getDisplayName
Description copied from interface:ILcdModelDecoder
Returns a short, displayable name for the format that is decoded by thisILcdModelDecoder
.- Specified by:
getDisplayName
in interfaceILcdModelDecoder
- Returns:
- the displayable name of this
ILcdModelDecoder
.
-
canDecodeSource
Description copied from interface:ILcdModelDecoder
Checks whether this model decoder can decode the specified data source. It is acceptable for this method to returntrue
for a source name whiledecode
throws an exception for that same source name.For performance reasons, we strongly recommend that this will only be a simple test. For example: check the file extension of a file, but not that the file exists or contains expected content.
- Specified by:
canDecodeSource
in interfaceILcdModelDecoder
- Parameters:
aSourceAsString
- the data source to be verified; typically a file name or a URL.- Returns:
true
if this decoder can likely decode the data specified by the source name,false
otherwise.- See Also:
-
decode
Decodes a new database model based on the properties specified in the given file. SeeTLcdMSSQLModelDecoder
for more information about the properties.- Specified by:
decode
in interfaceILcdModelDecoder
- Parameters:
aSourceName
- The filename of the properties file.- Returns:
- A model containing the decoded data. While
null
is allowed, implementors are advised to throw an error instead. - Throws:
IOException
- for any exceptions caused by IO problems or invalid data. Since decoding invalid data almost always results in RunTimeExceptions (NullPointerException, IndexOutOfBoundsException, IllegalArgumentException, ...) on unexpected places, implementations are advised to catch RuntimeExceptions in their decode() method, and wrap them into an IOException, as illustrated in the code snippet below.public ILcdModel decode( String aSourceName ) throws IOException { try (InputStream input = fInputStreamFactory.createInputStream(aSourceName)) { // Perform decoding ... } catch (RuntimeException e) { throw new IOException(e); } }
- See Also:
-
decode
Decodes a new database model based on the properties. SeeTLcdMSSQLModelDecoder
for more information about the properties.- Parameters:
aProperties
- The properties that contain the database connection details.- Throws:
IOException
-