You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2010/06/18 14:44:36 UTC

svn commit: r955983 - in /db/derby/code/trunk/java: engine/org/apache/derby/catalog/types/ engine/org/apache/derby/iapi/types/ engine/org/apache/derby/impl/sql/compile/ testing/org/apache/derbyTesting/functionTests/tests/lang/

Author: rhillegas
Date: Fri Jun 18 12:44:36 2010
New Revision: 955983

URL: http://svn.apache.org/viewvc?rev=955983&view=rev
Log:
DERBY-4703: Allow BOOLEAN-valued columns in table functions.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TableFunctionTest.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java?rev=955983&r1=955982&r2=955983&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java Fri Jun 18 12:44:36 2010
@@ -297,6 +297,10 @@ public class TypeDescriptorImpl implemen
 				else
 					return 2 * maximumWidth;
 
+			// ODBC does not define a BOOLEAN data type.
+            // However, 1 seems to me like a reasonable byte length for a BOOLEAN.
+            case Types.BOOLEAN: return 1;
+                
 			case Types.ARRAY:
 			case Types.DISTINCT:
 			case Types.NULL:

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java?rev=955983&r1=955982&r2=955983&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java Fri Jun 18 12:44:36 2010
@@ -748,6 +748,7 @@ public final class TypeId
                                 break;
 
                         case StoredFormatIds.BOOLEAN_TYPE_ID:
+                                maxPrecision = TypeId.BOOLEAN_MAXWIDTH;
                                 typePrecedence = BOOLEAN_PRECEDENCE;
                                 javaTypeName = "java.lang.Boolean";
                                 maxMaxWidth = TypeId.BOOLEAN_MAXWIDTH;
@@ -940,6 +941,7 @@ public final class TypeId
                               break;
 
                 }
+
         }
         /**
          * JDBC has its own idea of type identifiers which is different from

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj?rev=955983&r1=955982&r2=955983&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj Fri Jun 18 12:44:36 2010
@@ -10959,7 +10959,7 @@ throws StandardException :
 }
 {
 	name = identifier( Limits.MAX_IDENTIFIER_LENGTH, true )
-	typeDescriptor = dataTypeDDL( false )
+	typeDescriptor = dataTypeDDL( true )
 	{
 		names.add( name );
 		types.add( typeDescriptor.getCatalogType() );

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TableFunctionTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TableFunctionTest.java?rev=955983&r1=955982&r2=955983&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TableFunctionTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TableFunctionTest.java Fri Jun 18 12:44:36 2010
@@ -85,6 +85,12 @@ public class TableFunctionTest extends B
         { "the", (String) null },
     };
     
+    private static  final   String[][]  BOOLEAN_ROWS =
+    {
+        { "tRuE", "true" },
+        { "fAlSe", "false" },
+    };
+    
     private static  final   String[][]  ALL_TYPES_ROWS =
     {
         {
@@ -109,6 +115,7 @@ public class TableFunctionTest extends B
             null,   // TIMESTAMP
             null,   // VARCHAR
             null,   // VARCHAR FOR BIT DATA
+            null,   // BOOLEAN
         },
     };
 
@@ -133,7 +140,8 @@ public class TableFunctionTest extends B
         "getTime " +            // TIME
         "getTimestamp " +       // TIMESTAMP
         "getString " +          // VARCHAR
-        "getBytes ";            // VARCHAR FOR BIT DATA
+        "getBytes " +           // VARCHAR FOR BIT DATA
+        "getBoolean ";            // BOOLEAN
 
     private static  final   String  EXPECTED_GET_XXX_CALLS_JSR169 =
         "getLong " +            // BIGINT
@@ -156,7 +164,8 @@ public class TableFunctionTest extends B
         "getTime " +            // TIME
         "getTimestamp " +       // TIMESTAMP
         "getString " +          // VARCHAR
-        "getBytes ";            // VARCHAR FOR BIT DATA
+        "getBytes " +           // VARCHAR FOR BIT DATA
+        "getBoolean ";            // BOOLEAN
 
     private static  final   String[]  STRING_TYPES =
     {
@@ -185,7 +194,7 @@ public class TableFunctionTest extends B
     };
 
     private static  final   String  SFT_RETURN_TYPE = "TABLE ( \"INTCOL\" INTEGER, \"VARCHARCOL\" VARCHAR(10) )";
-    private static  final   String  RADT_RETURN_TYPE = "TABLE ( \"COLUMN0\" BIGINT, \"COLUMN1\" BLOB(2147483647), \"COLUMN2\" CHAR(10), \"COLUMN3\" CHAR (10) FOR BIT DATA, \"COLUMN4\" CLOB(2147483647), \"COLUMN5\" DATE, \"COLUMN6\" DECIMAL(5,0), \"COLUMN7\" DOUBLE, \"COLUMN8\" DOUBLE, \"COLUMN9\" REAL, \"COLUMN10\" DOUBLE, \"COLUMN11\" INTEGER, \"COLUMN12\" LONG VARCHAR, \"COLUMN13\" LONG VARCHAR FOR BIT DATA, \"COLUMN14\" NUMERIC(5,0), \"COLUMN15\" REAL, \"COLUMN16\" SMALLINT, \"COLUMN17\" TIME, \"COLUMN18\" TIMESTAMP, \"COLUMN19\" VARCHAR(10), \"COLUMN20\" VARCHAR (10) FOR BIT DATA )";
+    private static  final   String  RADT_RETURN_TYPE = "TABLE ( \"COLUMN0\" BIGINT, \"COLUMN1\" BLOB(2147483647), \"COLUMN2\" CHAR(10), \"COLUMN3\" CHAR (10) FOR BIT DATA, \"COLUMN4\" CLOB(2147483647), \"COLUMN5\" DATE, \"COLUMN6\" DECIMAL(5,0), \"COLUMN7\" DOUBLE, \"COLUMN8\" DOUBLE, \"COLUMN9\" REAL, \"COLUMN10\" DOUBLE, \"COLUMN11\" INTEGER, \"COLUMN12\" LONG VARCHAR, \"COLUMN13\" LONG VARCHAR FOR BIT DATA, \"COLUMN14\" NUMERIC(5,0), \"COLUMN15\" REAL, \"COLUMN16\" SMALLINT, \"COLUMN17\" TIME, \"COLUMN18\" TIMESTAMP, \"COLUMN19\" VARCHAR(10), \"COLUMN20\" VARCHAR (10) FOR BIT DATA, \"COLUMN21\" BOOLEAN )";
     
     private static  final   Integer FUNCTION_COLUMN_IN = new Integer( JDBC40Translation.FUNCTION_PARAMETER_IN );
     private static  final   Integer FUNCTION_RETURN_VALUE = new Integer( JDBC40Translation.FUNCTION_RETURN );
@@ -213,6 +222,7 @@ public class TableFunctionTest extends B
     private static  final   Integer JDBC_TYPE_LONGVARBINARY = new Integer( Types.LONGVARBINARY );
     private static  final   Integer JDBC_TYPE_LONGVARCHAR = new Integer( Types.LONGVARCHAR );
     private static  final   Integer JDBC_TYPE_VARBINARY = new Integer( Types.VARBINARY );
+    private static  final   Integer JDBC_TYPE_BOOLEAN = new Integer( Types.BOOLEAN );
 
     private static  final   Integer PRECISION_NONE = new Integer( 0 );
     private static  final   Integer PRECISION_INTEGER = new Integer( 10 );
@@ -794,6 +804,27 @@ public class TableFunctionTest extends B
             ARG_COUNT_2,
             new Integer( 22 )
         },
+        {
+            NO_CATALOG,
+            "APP",
+            "RETURNSALLLEGALDATATYPES",
+            "COLUMN21",
+            FUNCTION_RESULT_COLUMN,
+            JDBC_TYPE_BOOLEAN,
+            "BOOLEAN",
+            new Integer( 1 ),     // PRECISION
+            new Integer( 1 ),         // LENGTH
+            SCALE_UNDEFINED,       // SCALE
+            RADIX_UNDEFINED,    // RADIX
+            ALLOWS_NULLS,
+            EMPTY_REMARKS,
+            UNDEFINED_CHAR_OCTET_LENGTH,    // CHAR_OCTET_LENGTH
+            new Integer( 22 ),           // ORDINAL_POSITION
+            IS_NULLABLE,
+            GENERIC_NAME,
+            ARG_COUNT_2,
+            new Integer( 23 )
+        },
     };
 
     private static  final   String  ESTIMATED_ROW_COUNT = "optimizer estimated row count:";
@@ -1125,7 +1156,31 @@ public class TableFunctionTest extends B
          "    from TABLE( returnsACoupleRowsAsCHAR() ) s\n",
          CHAR_ROWS,
          new int[] { Types.CHAR, Types.CHAR }
-         );        
+         );
+
+        // boolean valued columns
+        goodStatement
+            (
+             "create function returnsBooleans()\n" +
+             "returns TABLE\n" +
+             "  (\n" +
+             "     column0 varchar( 10 ),\n" +
+             "     column1 boolean\n" +
+             "  )\n" +
+             "language java\n" +
+             "parameter style DERBY_JDBC_RESULT_SET\n" +
+             "no sql\n" +
+             "external name '" + getClass().getName() + ".returnsBooleans'\n"
+             );
+        assertResults
+        (
+         "select s.*\n" +
+         "    from TABLE( returnsBooleans() ) s\n",
+         BOOLEAN_ROWS,
+         new int[] { Types.VARCHAR, Types.BOOLEAN }
+         );
+
+
     }
     
     /**
@@ -1169,7 +1224,8 @@ public class TableFunctionTest extends B
              "column17 TIME,\n" +
              "column18 TIMESTAMP,\n" +
              "column19 VARCHAR( 10 ),\n" +
-             "column20 VARCHAR( 10 ) FOR BIT DATA\n" +
+             "column20 VARCHAR( 10 ) FOR BIT DATA,\n" +
+             "column21 BOOLEAN\n" +
              "  )\n" +
              "language java\n" +
              "parameter style DERBY_JDBC_RESULT_SET\n" +
@@ -1205,6 +1261,7 @@ public class TableFunctionTest extends B
                     Types.TIMESTAMP,
                     Types.VARCHAR,
                     Types.VARBINARY,
+                    Types.BOOLEAN,
                 }
              );
         
@@ -1262,6 +1319,7 @@ public class TableFunctionTest extends B
                     Types.TIMESTAMP,
                     Types.VARCHAR,
                     Types.VARBINARY,
+                    Types.BOOLEAN,
                 }
              );
 
@@ -1747,6 +1805,14 @@ public class TableFunctionTest extends B
     }
     
     /**
+     * A VTI which returns some boolean values
+     */
+    public  static  ResultSet returnsBooleans()
+    {
+        return makeVTI( BOOLEAN_ROWS );
+    }
+
+    /**
      * A VTI which returns a couple rows.
      */
     public  static  ResultSet returnsACoupleRows()