Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / derby-10.3.2.1 / java / drda / org / apache / derby / impl / drda / SQLTypes.java
diff --git a/JMCR-Stable/real-world application/derby-10.3.2.1/java/drda/org/apache/derby/impl/drda/SQLTypes.java b/JMCR-Stable/real-world application/derby-10.3.2.1/java/drda/org/apache/derby/impl/drda/SQLTypes.java
new file mode 100644 (file)
index 0000000..fe1d615
--- /dev/null
@@ -0,0 +1,213 @@
+/*\r
+\r
+   Derby - Class org.apache.derby.impl.drda.SQLTypes\r
+\r
+   Licensed to the Apache Software Foundation (ASF) under one or more\r
+   contributor license agreements.  See the NOTICE file distributed with\r
+   this work for additional information regarding copyright ownership.\r
+   The ASF licenses this file to You under the Apache License, Version 2.0\r
+   (the "License"); you may not use this file except in compliance with\r
+   the License.  You may obtain a copy of the License at\r
+\r
+      http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+\r
+ */\r
+\r
+package org.apache.derby.impl.drda;\r
+\r
+import java.sql.Types;\r
+import java.sql.SQLException;\r
+import org.apache.derby.iapi.reference.DRDAConstants;\r
+import org.apache.derby.iapi.reference.JDBC30Translation;\r
+\r
+\r
+\r
+class SQLTypes {\r
+\r
+  // define final statics for the fdoca type codes here!!!\r
+\r
+  // hide the default constructor\r
+  private SQLTypes() {}\r
+\r
+\r
+  /**\r
+   * Map DB2 SQL Type to JDBC Type\r
+   * \r
+   * @param sqlType SQL Type to convert\r
+   * @param length storage length of type\r
+   * @param ccsid ccsid of type\r
+   *\r
+   * @return Corresponding JDBC Type \r
+   */\r
+\r
+  static protected int mapDB2SqlTypeToJdbcType (int sqlType, long length, int ccsid)\r
+  {\r
+    switch (getNonNullableSqlType (sqlType)) { // mask the isNullable bit\r
+    case DRDAConstants.DB2_SQLTYPE_SMALL:\r
+      return java.sql.Types.SMALLINT;\r
+    case DRDAConstants.DB2_SQLTYPE_INTEGER:\r
+      return java.sql.Types.INTEGER;\r
+    case DRDAConstants.DB2_SQLTYPE_BIGINT:\r
+      return java.sql.Types.BIGINT;\r
+    case DRDAConstants.DB2_SQLTYPE_FLOAT:\r
+      if (length == 16)                  // can map to either NUMERIC or DECIMAL!!! @sxg\r
+        return java.sql.Types.DECIMAL;\r
+      else if (length == 8)              // can map to either DOUBLE or FLOAT!!! @sxg\r
+        return java.sql.Types.DOUBLE;\r
+      else if (length == 4)\r
+        return java.sql.Types.REAL;\r
+      else\r
+        return 0;\r
+        //throw new BugCheckException ("Encountered unexpected float length");\r
+    case DRDAConstants.DB2_SQLTYPE_DECIMAL:            // can map to either NUMERIC or DECIMAL!!! @sxg\r
+    case DRDAConstants.DB2_SQLTYPE_ZONED:              // can map to either NUMERIC or DECIMAL!!! @sxg\r
+    case DRDAConstants.DB2_SQLTYPE_NUMERIC:            // can map to either NUMERIC or DECIMAL!!! @sxg\r
+      return java.sql.Types.DECIMAL;\r
+    case DRDAConstants.DB2_SQLTYPE_CHAR:    // mixed and single byte\r
+      if (ccsid == 0xffff || ccsid == 0) // we think UW returns 0, and 390 returns 0xffff, doublecheck !!!\r
+        return java.sql.Types.BINARY;\r
+      else\r
+        return java.sql.Types.CHAR;\r
+    case DRDAConstants.DB2_SQLTYPE_CSTR:    // SBCS null terminated \r
+    case DRDAConstants.DB2_SQLTYPE_GRAPHIC: // fixed character DBCS\r
+      return java.sql.Types.CHAR;\r
+    // use ccsid to distinguish between BINARY and CHAR, VARBINARY and VARCHAR, LONG... !!! -j/p/s\r
+    case DRDAConstants.DB2_SQLTYPE_VARGRAPH:  // variable character DBCS\r
+    case DRDAConstants.DB2_SQLTYPE_VARCHAR:   // variable character SBCS/Mixed\r
+      if (ccsid == 0xffff || ccsid == 0) // we think UW returns 0, and 390 returns 0xffff, doublecheck !!!\r
+        return java.sql.Types.VARBINARY;\r
+      else\r
+        return java.sql.Types.VARCHAR;\r
+    case DRDAConstants.DB2_SQLTYPE_LSTR:      // pascal string SBCS/Mixed\r
+      return java.sql.Types.VARCHAR;\r
+    case DRDAConstants.DB2_SQLTYPE_LONGRAPH:  // long varchar DBCS\r
+    case DRDAConstants.DB2_SQLTYPE_LONG:      // long varchar SBCS/Mixed\r
+      if (ccsid == 0xffff || ccsid == 0) // we think UW returns 0, and 390 returns 0xffff, doublecheck !!!\r
+        return java.sql.Types.LONGVARBINARY;\r
+      else\r
+        return java.sql.Types.LONGVARCHAR;\r
+    case DRDAConstants.DB2_SQLTYPE_DATE:\r
+      return java.sql.Types.DATE;\r
+    case DRDAConstants.DB2_SQLTYPE_TIME:\r
+      return java.sql.Types.TIME;\r
+    case DRDAConstants.DB2_SQLTYPE_TIMESTAMP:\r
+      return java.sql.Types.TIMESTAMP;\r
+    case DRDAConstants.DB2_SQLTYPE_CLOB:    // large object character SBCS/Mixed\r
+    case DRDAConstants.DB2_SQLTYPE_DBCLOB:  // large object character DBCS\r
+      return java.sql.Types.CLOB;\r
+    case DRDAConstants.DB2_SQLTYPE_BLOB:    // large object bytes\r
+               case DRDAConstants.DB2_SQLTYPE_BLOB_LOCATOR:\r
+               case DRDAConstants.DB2_SQLTYPE_CLOB_LOCATOR:\r
+               case DRDAConstants.DB2_SQLTYPE_DBCLOB_LOCATOR:\r
+      return java.sql.Types.BLOB;\r
+    default:\r
+      //throw new BugCheckException ("Encountered unexpected type code");\r
+      return 0;\r
+    }\r
+  }\r
+\r
+\r
+       /**\r
+        * Map jdbc type to the DB2 DRDA SQL Types expected by jcc.\r
+        *@param jdbctype  - jdbc Type to convert\r
+        *@param nullable - whether the type is nullable\r
+        **/\r
+\r
+       \r
+ /**  Map JDBC Type to DB2 SqlType\r
+  * @param jdbctype   JDBC Type from java.sql.Types\r
+  * @param nullable   true if this is a nullable type\r
+  * @param outlen     output parameter with type length\r
+  *\r
+  * @return Corresponding DB2 SQL Type (See DRDA Manual FD:OCA Meta \r
+  *          Data Summary, page 245)\r
+  * \r
+  * @exception SQLException thrown for unrecognized SQLType\r
+  */\r
+\r
+ static protected int mapJdbcTypeToDB2SqlType (int jdbctype, boolean nullable,\r
+                                                                                          int[] outlen)\r
+        throws SQLException\r
+  {\r
+         int nullAddVal =0;\r
+\r
+         if (nullable) \r
+                 nullAddVal =1; \r
+         \r
+         // Call FdocaConstants just to get the length\r
+         FdocaConstants.mapJdbcTypeToDrdaType(jdbctype,nullable,outlen);\r
+\r
+         switch(jdbctype)\r
+         {\r
+                 case JDBC30Translation.BOOLEAN:\r
+                 case java.sql.Types.BIT:\r
+                 case java.sql.Types.TINYINT:\r
+                 case java.sql.Types.SMALLINT:\r
+                         return DRDAConstants.DB2_SQLTYPE_SMALL + nullAddVal;\r
+                 case java.sql.Types.INTEGER:\r
+                         return DRDAConstants.DB2_SQLTYPE_INTEGER + nullAddVal;\r
+                 case java.sql.Types.BIGINT:\r
+                         return DRDAConstants.DB2_SQLTYPE_BIGINT + nullAddVal;\r
+                 case java.sql.Types.DOUBLE:\r
+                 case java.sql.Types.REAL:\r
+                         return DRDAConstants.DB2_SQLTYPE_FLOAT + nullAddVal;\r
+                 case java.sql.Types.DECIMAL:\r
+                 case java.sql.Types.NUMERIC:\r
+                         return DRDAConstants.DB2_SQLTYPE_DECIMAL + nullAddVal;\r
+                 case java.sql.Types.DATE:\r
+                         return DRDAConstants.DB2_SQLTYPE_DATE + nullAddVal;\r
+                 case java.sql.Types.TIME:\r
+                         return DRDAConstants.DB2_SQLTYPE_TIME + nullAddVal;\r
+                 case java.sql.Types.TIMESTAMP:\r
+                         return DRDAConstants.DB2_SQLTYPE_TIMESTAMP + nullAddVal;\r
+                 case java.sql.Types.CHAR:\r
+                         return  DRDAConstants.DB2_SQLTYPE_CHAR + nullAddVal;    // null terminated SBCS/Mixed\r
+                 case java.sql.Types.BINARY:\r
+                         return DRDAConstants.DB2_SQLTYPE_CHAR + nullAddVal;\r
+\r
+                 case java.sql.Types.VARCHAR:\r
+                 case java.sql.Types.VARBINARY:\r
+                         return  DRDAConstants.DB2_SQLTYPE_VARCHAR + nullAddVal;                         \r
+                 case java.sql.Types.LONGVARBINARY:\r
+                         return DRDAConstants.DB2_SQLTYPE_LONG + nullAddVal;\r
+                 case java.sql.Types.JAVA_OBJECT:\r
+                         return DRDAConstants.DB2_SQLTYPE_LONG + nullAddVal;\r
+                 case java.sql.Types.BLOB:\r
+                         return DRDAConstants.DB2_SQLTYPE_BLOB + nullAddVal;\r
+                 case java.sql.Types.CLOB:\r
+                         return DRDAConstants.DB2_SQLTYPE_CLOB + nullAddVal;\r
+                 case java.sql.Types.LONGVARCHAR:\r
+                         return DRDAConstants.DB2_SQLTYPE_LONG + nullAddVal;\r
+                 case java.sql.Types.ARRAY:\r
+                 case java.sql.Types.DISTINCT:\r
+                 case java.sql.Types.NULL:\r
+                 case java.sql.Types.OTHER:\r
+                 case java.sql.Types.REF:\r
+                 case java.sql.Types.STRUCT:\r
+                         throw new SQLException("Jdbc type" + jdbctype + "not Supported yet");\r
+                       default:\r
+                               throw new SQLException ("unrecognized sql type: " + jdbctype);\r
+                         //throw new BugCheckException ("Encountered unexpected type code");\r
+\r
+         }\r
+  }\r
+\r
+       /**\r
+        * Translate DB2 SQL Type to the non-nullable type.\r
+        * @param sqlType DB2 SQL Type\r
+        *\r
+        * @return The Non-Nullable DB2 SQL Type.\r
+        */\r
+   protected  static int getNonNullableSqlType (int sqlType)\r
+  {\r
+    return sqlType & ~1;\r
+  }\r
+\r
+\r
+}\r