001 /*
002 // $Id: Datatype.java 253 2009-06-30 03:06:10Z jhyde $
003 // This software is subject to the terms of the Eclipse Public License v1.0
004 // Agreement, available at the following URL:
005 // http://www.eclipse.org/legal/epl-v10.html.
006 // Copyright (C) 2006-2008 Julian Hyde
007 // All Rights Reserved.
008 // You must accept the terms of that agreement to use this software.
009 */
010 package org.olap4j.metadata;
011
012 import java.util.Map;
013 import java.util.HashMap;
014
015 /**
016 * Enumeration of the allowable data types of a Property or Measure.
017 *
018 * <p>The values derive from the OLE DB specification, specifically a
019 * subset of the OLE DB Types Indicators returned by SQL Server.
020 *
021 * @author jhyde
022 * @version $Id: Datatype.java 253 2009-06-30 03:06:10Z jhyde $
023 * @since Aug 23, 2006
024 */
025 public enum Datatype {
026 /*
027 * The following values exactly match VARENUM
028 * in Automation and may be used in VARIANT.
029 */
030 INTEGER(3, "DBTYPE_I4", "A four-byte, signed integer: INTEGER"),
031
032 DOUBLE(5, "DBTYPE_R8", "A double-precision floating-point value: Double"),
033
034 CURRENCY(
035 6,
036 "DBTYPE_CY",
037 "A currency value: LARGE_INTEGER, Currency is a fixed-point number with "
038 + "four digits to the right of the decimal point. It is stored in an "
039 + "eight-byte signed integer, scaled by 10,000."),
040
041 BOOLEAN(
042 11,
043 "DBTYPE_BOOL",
044 "A Boolean value stored in the same way as in Automation: VARIANT_BOOL; "
045 + "0 means false and ~0 (bitwise, the value is not 0; that is, all bits "
046 + "are set to 1) means true."),
047
048 /**
049 * Used by SQL Server for value.
050 */
051 VARIANT(12, "DBTYPE_VARIANT", "An Automation VARIANT"),
052
053 /**
054 * Used by SQL Server for font size.
055 */
056 UNSIGNED_SHORT(18, "DBTYPE_UI2", "A two-byte, unsigned integer"),
057
058 /**
059 * Used by SQL Server for colors, font flags and cell ordinal.
060 */
061 UNSIGNED_INTEGER(19, "DBTYPE_UI4", "A four-byte, unsigned integer"),
062
063 /*
064 * The following values exactly match VARENUM
065 * in Automation but cannot be used in VARIANT.
066 */
067 LARGE_INTEGER(
068 20,
069 "DBTYPE_I8",
070 "An eight-byte, signed integer: LARGE_INTEGER"),
071
072 /*
073 * The following values are not in VARENUM in OLE.
074 */
075 STRING(
076 130,
077 "DBTYPE_WSTR",
078 "A null-terminated Unicode character string: wchar_t[length]; If "
079 + "DBTYPE_WSTR is used by itself, the number of bytes allocated "
080 + "for the string, including the null-termination character, is "
081 + "specified by cbMaxLen in the DBBINDING structure. If "
082 + "DBTYPE_WSTR is combined with DBTYPE_BYREF, the number of bytes "
083 + "allocated for the string, including the null-termination character, "
084 + "is at least the length of the string plus two. In either case, the "
085 + "actual length of the string is determined from the bound length "
086 + "value. The maximum length of the string is the number of allocated "
087 + "bytes divided by sizeof(wchar_t) and truncated to the nearest "
088 + "integer.");
089
090 private final int xmlaOrdinal;
091
092 private static final Map<Integer, Datatype> xmlaMap =
093 new HashMap<Integer, Datatype>();
094
095 static {
096 for (Datatype datatype : values()) {
097 xmlaMap.put(datatype.xmlaOrdinal, datatype);
098 }
099 }
100
101 Datatype(
102 int xmlaOrdinal,
103 String dbTypeIndicator,
104 String description)
105 {
106 this.xmlaOrdinal = xmlaOrdinal;
107 }
108
109 /**
110 * Looks up a Datatype by its XMLA ordinal.
111 *
112 * @param xmlaOrdinal Ordinal of a Datatype according to the XMLA
113 * specification.
114 *
115 * @return Datatype with the given ordinal, or null if there is no
116 * such Datatype
117 */
118 public static Datatype forXmlaOrdinal(int xmlaOrdinal) {
119 return xmlaMap.get(xmlaOrdinal);
120 }
121
122 }
123
124 // End Datatype.java