001    /*
002    // $Id: Datatype.java 482 2012-01-05 23:27:27Z jhyde $
003    //
004    // Licensed to Julian Hyde under one or more contributor license
005    // agreements. See the NOTICE file distributed with this work for
006    // additional information regarding copyright ownership.
007    //
008    // Julian Hyde licenses this file to you under the Apache License,
009    // Version 2.0 (the "License"); you may not use this file except in
010    // compliance with the License. You may obtain a copy of the License at:
011    //
012    // http://www.apache.org/licenses/LICENSE-2.0
013    //
014    // Unless required by applicable law or agreed to in writing, software
015    // distributed under the License is distributed on an "AS IS" BASIS,
016    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017    // See the License for the specific language governing permissions and
018    // limitations under the License.
019    */
020    package org.olap4j.metadata;
021    
022    /**
023     * Enumeration of the allowable data types of a Property or Measure.
024     *
025     * <p>The values derive from the OLE DB specification, specifically a
026     * subset of the OLE DB Types Indicators returned by SQL Server.
027     *
028     * @author jhyde
029     * @version $Id: Datatype.java 482 2012-01-05 23:27:27Z jhyde $
030     * @since Aug 23, 2006
031     */
032    public enum Datatype implements XmlaConstant {
033        /*
034        * The following values exactly match VARENUM
035        * in Automation and may be used in VARIANT.
036        */
037        INTEGER(3, "DBTYPE_I4", "A four-byte, signed integer: INTEGER"),
038    
039        DOUBLE(5, "DBTYPE_R8", "A double-precision floating-point value: Double"),
040    
041        CURRENCY(
042            6,
043            "DBTYPE_CY",
044            "A currency value: LARGE_INTEGER, Currency is a fixed-point number with "
045            + "four digits to the right of the decimal point. It is stored in an "
046            + "eight-byte signed integer, scaled by 10,000."),
047    
048        BOOLEAN(
049            11,
050            "DBTYPE_BOOL",
051            "A Boolean value stored in the same way as in Automation: VARIANT_BOOL; "
052            + "0 means false and ~0 (bitwise, the value is not 0; that is, all bits "
053            + "are set to 1) means true."),
054    
055        /**
056         * Used by SQL Server for value.
057         */
058        VARIANT(12, "DBTYPE_VARIANT", "An Automation VARIANT"),
059    
060        /**
061         * Used by SQL Server for font size.
062         */
063        UNSIGNED_SHORT(18, "DBTYPE_UI2", "A two-byte, unsigned integer"),
064    
065        /**
066         * Used by SQL Server for colors, font flags and cell ordinal.
067         */
068        UNSIGNED_INTEGER(19, "DBTYPE_UI4", "A four-byte, unsigned integer"),
069    
070        /*
071        * The following values exactly match VARENUM
072        * in Automation but cannot be used in VARIANT.
073        */
074        LARGE_INTEGER(
075            20,
076            "DBTYPE_I8",
077            "An eight-byte, signed integer: LARGE_INTEGER"),
078    
079        /*
080        * The following values are not in VARENUM in OLE.
081        */
082        STRING(
083            130,
084            "DBTYPE_WSTR",
085            "A null-terminated Unicode character string: wchar_t[length]; If "
086            + "DBTYPE_WSTR is used by itself, the number of bytes allocated "
087            + "for the string, including the null-termination character, is "
088            + "specified by cbMaxLen in the DBBINDING structure. If "
089            + "DBTYPE_WSTR is combined with DBTYPE_BYREF, the number of bytes "
090            + "allocated for the string, including the null-termination character, "
091            + "is at least the length of the string plus two. In either case, the "
092            + "actual length of the string is determined from the bound length "
093            + "value. The maximum length of the string is the number of allocated "
094            + "bytes divided by sizeof(wchar_t) and truncated to the nearest "
095            + "integer."),
096    
097        /**
098         * Used by SAP BW. Represents a Character
099         */
100        ACCP(1000, "ACCP", "SAP BW Character"),
101    
102        /**
103         * Used by SAP BW. Represents a CHAR
104         */
105        CHAR(1001, "CHAR", "SAP BW CHAR"),
106    
107        /**
108         * Used by SAP BW. Represents a CHAR
109         */
110        CUKY(1002, "CUKY", "SAP BW CHAR"),
111    
112        /**
113         * Used by SAP BW. Represents a Currency - Packed decimal, Integer
114         */
115        CURR(1003, "CURR", "SAP BW Currency - Packed decimal, Integer"),
116    
117        /**
118         * Used by SAP BW. Represents a Date
119         */
120        DATS(1004, "DATS", "SAP BW Date"),
121    
122        /**
123         * Used by SAP BW. Represents a Decimal
124         */
125        DEC(1005, "DEC", "SAP BW Decimal"),
126    
127        /**
128         * Used by SAP BW. Represents a Point
129         */
130        FLTP(1006, "FLTP", "SAP BW Floating Point"),
131    
132        /**
133         * Used by SAP BW. Represents a Byte
134         */
135        INT1(1007, "INT1", "SAP BW Byte"),
136    
137        /**
138         * Used by SAP BW. Represents a Small integer
139         */
140        INT2(1008, "INT2", "SAP BW Small integer"),
141    
142        /**
143         * Used by SAP BW. Represents an Integer
144         */
145        INT4(1009, "INT4", "SAP BW Integer"),
146    
147        /**
148         * Used by SAP BW. Represents a Text
149         */
150        LCHR(1010, "LCHR", "SAP BW Text"),
151    
152        /**
153         * Used by SAP BW. Represents a Numeric
154         */
155        NUMC(1011, "NUMC", "SAP BW Numeric"),
156    
157        /**
158         * Used by SAP BW. Represents a Tiny Int
159         */
160        PREC(1012, "PREC", "SAP BW Tiny Int"),
161    
162        /**
163         * Used by SAP BW. Represents a QUAN Integer
164         */
165        QUAN(1013, "QUAN", "SAP BW QUAN Integer"),
166    
167        /**
168         * Used by SAP BW. Represents a String
169         */
170        SSTR(1014, "SSTR", "SAP BW String"),
171    
172        /**
173         * Used by SAP BW. Represents a Long String
174         */
175        STRG(1015, "STRG", "SAP BW Long String"),
176    
177        /**
178         * Used by SAP BW. Represents a Time
179         */
180        TIMS(1016, "TIMS", "SAP BW Time"),
181    
182        /**
183         * Used by SAP BW. Represents a Varchar
184         */
185        VARC(1017, "VARC", "SAP BW Varchar"),
186    
187        /**
188         * Used by SAP BW. Represents a Long String for Units
189         */
190        UNIT(1018, "UNIT", "SAP BW Long String for Units");
191    
192        private final int xmlaOrdinal;
193        private String dbTypeIndicator;
194        private String description;
195    
196        private static final DictionaryImpl<Datatype> DICTIONARY =
197            DictionaryImpl.forClass(Datatype.class);
198    
199        Datatype(
200            int xmlaOrdinal,
201            String dbTypeIndicator,
202            String description)
203        {
204            this.xmlaOrdinal = xmlaOrdinal;
205            this.dbTypeIndicator = dbTypeIndicator;
206            this.description = description;
207        }
208    
209        /**
210         * The internal name of this Datatype.
211         * Might not be unique across Datatype instances.
212         */
213        public String xmlaName() {
214            return dbTypeIndicator;
215        }
216    
217        /**
218         * Human readable description of a Datatype instance.
219         */
220        public String getDescription() {
221            return description;
222        }
223    
224        /**
225         * Unique identifier of a Datatype instance.
226         */
227        public int xmlaOrdinal() {
228            return xmlaOrdinal;
229        }
230    
231        /**
232         * Per {@link org.olap4j.metadata.XmlaConstant}, returns a dictionary
233         * of all values of this enumeration.
234         *
235         * @return Dictionary of all values
236         */
237        public static Dictionary<Datatype> getDictionary() {
238            return DICTIONARY;
239        }
240    }
241    
242    // End Datatype.java