Class SQLServerAdapter

  • All Implemented Interfaces:
    DatastoreAdapter

    public class SQLServerAdapter
    extends BaseDatastoreAdapter
    Provides methods for adapting SQL language elements to the Microsoft SQL Server database. Note that majorVersion from JDBC doesn't align to version number of SQLServer. 1995 = "6", 1998 = "7", 2000/2003 = "8", 2005 = "9", 2008 = "10", 2012 = "11", 2014 = "12", ...
    See Also:
    BaseDatastoreAdapter
    • Constructor Detail

      • SQLServerAdapter

        public SQLServerAdapter​(DatabaseMetaData metadata)
        Constructs a SQL Server adapter based on the given JDBC metadata.
        Parameters:
        metadata - the database metadata.
    • Method Detail

      • initialiseTypes

        public void initialiseTypes​(org.datanucleus.store.schema.StoreSchemaHandler handler,
                                    org.datanucleus.store.connection.ManagedConnection mconn)
        Initialise the types for this datastore.
        Specified by:
        initialiseTypes in interface DatastoreAdapter
        Overrides:
        initialiseTypes in class BaseDatastoreAdapter
        Parameters:
        handler - SchemaHandler that we initialise the types for
        mconn - Managed connection to use
      • isReservedKeyword

        public boolean isReservedKeyword​(String word)
        Description copied from class: BaseDatastoreAdapter
        Tests if a given string is an SQL keyword.

        The list of key words tested against is defined to contain all SQL/92 keywords, plus any additional key words reported by the JDBC driver for this adapter via DatabaseMetaData.getSQLKeywords().

        In general, use of a SQL key word as an identifier should be avoided. SQL/92 key words are divided into reserved and non-reserved words. If a reserved word is used as an identifier it must be quoted with double quotes. Strictly speaking, the same is not true of non-reserved words. However, as C.J. Date writes in A Guide To The SQL Standard :

        The rule by which it is determined within the standard that one key word needs to be reserved while another need not is not clear to this writer. In practice, it is probably wise to treat all key words as reserved.
        Specified by:
        isReservedKeyword in interface DatastoreAdapter
        Overrides:
        isReservedKeyword in class BaseDatastoreAdapter
        Parameters:
        word - The word to test.
        Returns:
        true if word is a SQL key word for this DBMS. The comparison is case-insensitive.
      • getCreateIndexStatement

        public String getCreateIndexStatement​(Index idx,
                                              IdentifierFactory factory)
        Returns the appropriate DDL to create an index. Overrides the superclass variant since Postgresql doesn't support having index names specified in a particular schema (i.e "{schema}.{indexName}").
        Specified by:
        getCreateIndexStatement in interface DatastoreAdapter
        Overrides:
        getCreateIndexStatement in class BaseDatastoreAdapter
        Parameters:
        idx - An object describing the index.
        factory - Identifier factory
        Returns:
        The text of the SQL statement.
      • getNewUUIDFunction

        public String getNewUUIDFunction()
        The function to creates a unique value of type uniqueidentifier.
        Overrides:
        getNewUUIDFunction in class BaseDatastoreAdapter
        Returns:
        The function. e.g. "NEWID()"
      • getUpdateTableStatement

        public SQLText getUpdateTableStatement​(SQLTable tbl,
                                               SQLText setSQL)
        Method to return the SQLText for an UPDATE TABLE statement. Returns the SQLText for UPDATE T1 SET x1 = val1, x2 = val2 FROM MYTBL T1. Override if the datastore doesn't support that standard syntax.
        Specified by:
        getUpdateTableStatement in interface DatastoreAdapter
        Overrides:
        getUpdateTableStatement in class BaseDatastoreAdapter
        Parameters:
        tbl - The primary table
        setSQL - The SQLText for the SET component
        Returns:
        SQLText for the update statement
      • getIdentityKeyword

        public String getIdentityKeyword​(org.datanucleus.store.StoreManager storeMgr)
        Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).
        Specified by:
        getIdentityKeyword in interface DatastoreAdapter
        Overrides:
        getIdentityKeyword in class BaseDatastoreAdapter
        Parameters:
        storeMgr - The Store Manager
        Returns:
        The keyword for a column using auto-increment
      • getInsertStatementForNoColumns

        public String getInsertStatementForNoColumns​(Table table)
        Method to return the INSERT statement to use when inserting into a table that has no columns specified. This is the case when we have a single column in the table and that column is autoincrement/identity (and so is assigned automatically in the datastore).
        Specified by:
        getInsertStatementForNoColumns in interface DatastoreAdapter
        Overrides:
        getInsertStatementForNoColumns in class BaseDatastoreAdapter
        Parameters:
        table - The table
        Returns:
        The statement for the INSERT
      • validToSelectMappingInStatement

        public boolean validToSelectMappingInStatement​(SelectStatement stmt,
                                                       JavaTypeMapping m)
        Method to return if it is valid to select the specified mapping for the specified statement for this datastore adapter. Sometimes, dependent on the type of the column(s), and what other components are present in the statement, it may be invalid to select the mapping. This implementation returns true, so override in database-specific subclass as required.
        Specified by:
        validToSelectMappingInStatement in interface DatastoreAdapter
        Overrides:
        validToSelectMappingInStatement in class BaseDatastoreAdapter
        Parameters:
        stmt - The statement
        m - The mapping that we want to select
        Returns:
        Whether it is valid
      • getRangeByLimitEndOfStatementClause

        public String getRangeByLimitEndOfStatementClause​(long offset,
                                                          long count,
                                                          boolean hasOrdering)
        Method to return the SQL to append to the WHERE clause of a SELECT statement to handle restriction of ranges using the OFFSET/FETCH keywords.
        Specified by:
        getRangeByLimitEndOfStatementClause in interface DatastoreAdapter
        Overrides:
        getRangeByLimitEndOfStatementClause in class BaseDatastoreAdapter
        Parameters:
        offset - The offset to return from
        count - The number of items to return
        hasOrdering - Whether there is ordering present
        Returns:
        The SQL to append to allow for ranges using OFFSET/FETCH.
      • getSequenceCreateStmt

        public String getSequenceCreateStmt​(String sequenceName,
                                            Integer min,
                                            Integer max,
                                            Integer start,
                                            Integer increment,
                                            Integer cacheSize)
        Accessor for the sequence statement to create the sequence.
        Specified by:
        getSequenceCreateStmt in interface DatastoreAdapter
        Overrides:
        getSequenceCreateStmt in class BaseDatastoreAdapter
        Parameters:
        sequenceName - Name of the sequence
        min - Minimum value for the sequence
        max - Maximum value for the sequence
        start - Start value for the sequence
        increment - Increment value for the sequence
        cacheSize - Cache size for the sequence
        Returns:
        The statement for getting the next id from the sequence
      • getSQLMethodClass

        public Class getSQLMethodClass​(String className,
                                       String methodName,
                                       org.datanucleus.ClassLoaderResolver clr)
        Description copied from interface: DatastoreAdapter
        Accessor for the SQLMethod class for the query invocation of specified class + method name (if available for this datastore).
        Specified by:
        getSQLMethodClass in interface DatastoreAdapter
        Overrides:
        getSQLMethodClass in class BaseDatastoreAdapter
        Parameters:
        className - Name of the class (or null if this is a STATIC method)
        methodName - Method name
        clr - ClassLoader resolver, in case className is a subclass of a supported type
        Returns:
        The SQLMethod class (or null if not defined for this datastore).
      • loadColumnMappings

        protected void loadColumnMappings​(org.datanucleus.plugin.PluginManager mgr,
                                          org.datanucleus.ClassLoaderResolver clr)
        Load all datastore mappings for this RDBMS database.
        Overrides:
        loadColumnMappings in class BaseDatastoreAdapter
        Parameters:
        mgr - the PluginManager
        clr - the ClassLoaderResolver