Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / derby-10.3.2.1 / java / engine / org / apache / derby / impl / sql / catalog / SYSFOREIGNKEYSRowFactory.java
diff --git a/JMCR-Stable/real-world application/derby-10.3.2.1/java/engine/org/apache/derby/impl/sql/catalog/SYSFOREIGNKEYSRowFactory.java b/JMCR-Stable/real-world application/derby-10.3.2.1/java/engine/org/apache/derby/impl/sql/catalog/SYSFOREIGNKEYSRowFactory.java
new file mode 100644 (file)
index 0000000..916f010
--- /dev/null
@@ -0,0 +1,325 @@
+/*\r
+\r
+   Derby - Class org.apache.derby.impl.sql.catalog.SYSFOREIGNKEYSRowFactory\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.sql.catalog;\r
+\r
+import java.sql.Types;\r
+\r
+import org.apache.derby.catalog.UUID;\r
+import org.apache.derby.iapi.error.StandardException;\r
+import org.apache.derby.iapi.services.sanity.SanityManager;\r
+import org.apache.derby.iapi.services.uuid.UUIDFactory;\r
+import org.apache.derby.iapi.sql.StatementType;\r
+import org.apache.derby.iapi.sql.dictionary.CatalogRowFactory;\r
+import org.apache.derby.iapi.sql.dictionary.DataDescriptorGenerator;\r
+import org.apache.derby.iapi.sql.dictionary.DataDictionary;\r
+import org.apache.derby.iapi.sql.dictionary.ForeignKeyConstraintDescriptor;\r
+import org.apache.derby.iapi.sql.dictionary.ReferencedKeyConstraintDescriptor;\r
+import org.apache.derby.iapi.sql.dictionary.SubKeyConstraintDescriptor;\r
+import org.apache.derby.iapi.sql.dictionary.SystemColumn;\r
+import org.apache.derby.iapi.sql.dictionary.TupleDescriptor;\r
+import org.apache.derby.iapi.sql.execute.ExecIndexRow;\r
+import org.apache.derby.iapi.sql.execute.ExecRow;\r
+import org.apache.derby.iapi.sql.execute.ExecutionFactory;\r
+import org.apache.derby.iapi.types.DataValueDescriptor;\r
+import org.apache.derby.iapi.types.DataValueFactory;\r
+import org.apache.derby.iapi.types.SQLChar;\r
+\r
+/**\r
+ * Factory for creating a SYSFOREIGNKEYS row.\r
+ *\r
+ */\r
+\r
+public class SYSFOREIGNKEYSRowFactory extends CatalogRowFactory\r
+{\r
+       private  static final String    TABLENAME_STRING = "SYSFOREIGNKEYS";\r
+\r
+       protected static final int              SYSFOREIGNKEYS_COLUMN_COUNT = 5;\r
+       protected static final int              SYSFOREIGNKEYS_CONSTRAINTID = 1;\r
+       protected static final int              SYSFOREIGNKEYS_CONGLOMERATEID = 2;\r
+       protected static final int              SYSFOREIGNKEYS_KEYCONSTRAINTID = 3;\r
+       protected static final int              SYSFOREIGNKEYS_DELETERULE = 4;\r
+       protected static final int              SYSFOREIGNKEYS_UPDATERULE = 5;\r
+\r
+       // Column widths\r
+       protected static final int              SYSFOREIGNKEYS_CONSTRAINTID_WIDTH = 36;\r
+\r
+       protected static final int              SYSFOREIGNKEYS_INDEX1_ID = 0;\r
+       protected static final int              SYSFOREIGNKEYS_INDEX2_ID = 1;\r
+\r
+       private static final int[][] indexColumnPositions = \r
+       {\r
+               {SYSFOREIGNKEYS_CONSTRAINTID},\r
+               {SYSFOREIGNKEYS_KEYCONSTRAINTID}\r
+       };\r
+\r
+    private    static  final   boolean[]       uniqueness = {\r
+                                                              true,\r
+                                                                                                          false\r
+                                                        };\r
+\r
+       private static  final   String[]        uuids =\r
+       {\r
+                "8000005b-00d0-fd77-3ed8-000a0a0b1900" // catalog UUID\r
+               ,"80000060-00d0-fd77-3ed8-000a0a0b1900" // heap UUID\r
+               ,"8000005d-00d0-fd77-3ed8-000a0a0b1900" // SYSFOREIGNKEYS_INDEX1\r
+               ,"8000005f-00d0-fd77-3ed8-000a0a0b1900" // SYSFOREIGNKEYS_INDEX2\r
+       };\r
+\r
+       /////////////////////////////////////////////////////////////////////////////\r
+       //\r
+       //      CONSTRUCTORS\r
+       //\r
+       /////////////////////////////////////////////////////////////////////////////\r
+\r
+    SYSFOREIGNKEYSRowFactory(UUIDFactory uuidf, ExecutionFactory ef, DataValueFactory dvf)\r
+       {\r
+               super(uuidf,ef,dvf);\r
+               initInfo(SYSFOREIGNKEYS_COLUMN_COUNT, TABLENAME_STRING, \r
+                                indexColumnPositions, uniqueness, uuids );\r
+       }\r
+\r
+       /////////////////////////////////////////////////////////////////////////////\r
+       //\r
+       //      METHODS\r
+       //\r
+       /////////////////////////////////////////////////////////////////////////////\r
+\r
+  /**\r
+        * Make a SYSFOREIGNKEYS row\r
+        *\r
+        * @return      Row suitable for inserting into SYSFOREIGNKEYS.\r
+        *\r
+        * @exception   StandardException thrown on failure\r
+        */\r
+       public ExecRow makeRow(TupleDescriptor td, TupleDescriptor parent)\r
+                                       throws StandardException \r
+       {\r
+               DataValueDescriptor             col;\r
+               ExecIndexRow                    row;\r
+               String                                  constraintId = null;\r
+               String                                  keyConstraintId = null;\r
+               String                                  conglomId = null;\r
+               String                  raDeleteRule="N";\r
+               String                                  raUpdateRule="N";\r
+\r
+               if (td != null)\r
+               {\r
+                       ForeignKeyConstraintDescriptor cd = (ForeignKeyConstraintDescriptor)td;\r
+                       constraintId = cd.getUUID().toString();\r
+                       \r
+                       ReferencedKeyConstraintDescriptor refCd = cd.getReferencedConstraint();\r
+                       if (SanityManager.DEBUG)\r
+                       {\r
+                               SanityManager.ASSERT(refCd != null, "this fk returned a null referenced key");\r
+                       }\r
+                       keyConstraintId = refCd.getUUID().toString();\r
+                       conglomId = cd.getIndexUUIDString();\r
+\r
+                       raDeleteRule = getRefActionAsString(cd.getRaDeleteRule());\r
+                       raUpdateRule = getRefActionAsString(cd.getRaUpdateRule());\r
+               }\r
+                       \r
+                       \r
+               /* Build the row  */\r
+               row = getExecutionFactory().getIndexableRow(SYSFOREIGNKEYS_COLUMN_COUNT);\r
+\r
+               /* 1st column is CONSTRAINTID (UUID - char(36)) */\r
+               row.setColumn(SYSFOREIGNKEYS_CONSTRAINTID, new SQLChar(constraintId));\r
+\r
+               /* 2nd column is CONGLOMERATEID (UUID - char(36)) */\r
+               row.setColumn(SYSFOREIGNKEYS_CONGLOMERATEID, new SQLChar(conglomId));\r
+\r
+               /* 3rd column is KEYCONSTRAINTID (UUID - char(36)) */\r
+               row.setColumn(SYSFOREIGNKEYS_KEYCONSTRAINTID, new SQLChar(keyConstraintId));\r
+\r
+               // currently, DELETERULE and UPDATERULE are always "R" for restrict\r
+               /* 4th column is DELETERULE char(1) */\r
+               row.setColumn(SYSFOREIGNKEYS_DELETERULE, new SQLChar(raDeleteRule));\r
+\r
+               /* 5th column is UPDATERULE char(1) */\r
+               row.setColumn(SYSFOREIGNKEYS_UPDATERULE, new SQLChar(raUpdateRule));\r
+\r
+               return row;\r
+       }\r
+\r
+       ///////////////////////////////////////////////////////////////////////////\r
+       //\r
+       //      ABSTRACT METHODS TO BE IMPLEMENTED BY CHILDREN OF CatalogRowFactory\r
+       //\r
+       ///////////////////////////////////////////////////////////////////////////\r
+\r
+       /**\r
+        * Make a ViewDescriptor out of a SYSFOREIGNKEYS row\r
+        *\r
+        * @param row a SYSFOREIGNKEYS row\r
+        * @param parentTupleDescriptor Null for this kind of descriptor.\r
+        * @param dd dataDictionary\r
+        *\r
+        * @exception   StandardException thrown on failure\r
+        */\r
+       public TupleDescriptor buildDescriptor(\r
+               ExecRow                                 row,\r
+               TupleDescriptor                 parentTupleDescriptor,\r
+               DataDictionary                  dd )\r
+                                       throws StandardException\r
+       {\r
+\r
+               if (SanityManager.DEBUG)\r
+               {\r
+                       SanityManager.ASSERT(\r
+                               row.nColumns() == SYSFOREIGNKEYS_COLUMN_COUNT, \r
+                               "Wrong number of columns for a SYSKEYS row");\r
+               }\r
+\r
+               DataValueDescriptor             col;\r
+               DataDescriptorGenerator ddg;\r
+               UUID                                    constraintUUID;\r
+               UUID                                    conglomerateUUID;\r
+               UUID                                    keyConstraintUUID;\r
+               String                                  constraintUUIDString;\r
+               String                                  conglomerateUUIDString;\r
+               String                  raRuleString;\r
+               int                     raDeleteRule;\r
+               int                     raUpdateRule;\r
+\r
+               ddg = dd.getDataDescriptorGenerator();\r
+\r
+               /* 1st column is CONSTRAINTID (UUID - char(36)) */\r
+               col = row.getColumn(SYSFOREIGNKEYS_CONSTRAINTID);\r
+               constraintUUIDString = col.getString();\r
+               constraintUUID = getUUIDFactory().recreateUUID(constraintUUIDString);\r
+\r
+               /* 2nd column is CONGLOMERATEID (UUID - char(36)) */\r
+               col = row.getColumn(SYSFOREIGNKEYS_CONGLOMERATEID);\r
+               conglomerateUUIDString = col.getString();\r
+               conglomerateUUID = getUUIDFactory().recreateUUID(conglomerateUUIDString);\r
+\r
+               /* 3rd column is KEYCONSTRAINTID (UUID - char(36)) */\r
+               col = row.getColumn(SYSFOREIGNKEYS_KEYCONSTRAINTID);\r
+               constraintUUIDString = col.getString();\r
+               keyConstraintUUID = getUUIDFactory().recreateUUID(constraintUUIDString);\r
+\r
+\r
+               /* 4th column is DELETERULE char(1) */\r
+               col= row.getColumn(SYSFOREIGNKEYS_DELETERULE);\r
+               raRuleString = col.getString();\r
+               raDeleteRule  = getRefActionAsInt(raRuleString);\r
+               \r
+               /* 5th column is UPDATERULE char(1) */\r
+               col = row.getColumn(SYSFOREIGNKEYS_UPDATERULE);\r
+               raRuleString = col.getString();\r
+               raUpdateRule  = getRefActionAsInt(raRuleString);\r
+\r
+\r
+               /* now build and return the descriptor */\r
+               return new SubKeyConstraintDescriptor(\r
+                                                                               constraintUUID,\r
+                                                                               conglomerateUUID,\r
+                                                                               keyConstraintUUID,\r
+                                                                               raDeleteRule,\r
+                                                                               raUpdateRule);\r
+       }\r
+\r
+       /**\r
+        * Builds a list of columns suitable for creating this Catalog.\r
+        *\r
+        *\r
+        * @return array of SystemColumn suitable for making this catalog.\r
+        */\r
+       public SystemColumn[]   buildColumnList()\r
+       {\r
+            return new SystemColumn[] {\r
+                 SystemColumnImpl.getUUIDColumn("CONSTRAINTID", false),\r
+                 SystemColumnImpl.getUUIDColumn("CONGLOMERATEID", false),\r
+                 SystemColumnImpl.getUUIDColumn("KEYCONSTRAINTID", false),\r
+                 SystemColumnImpl.getIndicatorColumn("DELETERULE"),\r
+                 SystemColumnImpl.getIndicatorColumn("UPDATERULE"),\r
+           \r
+            };\r
+       }\r
+\r
+\r
+       int getRefActionAsInt(String raRuleString)\r
+       {\r
+               int raRule ;\r
+               switch (raRuleString.charAt(0)){\r
+               case 'C': \r
+                       raRule = StatementType.RA_CASCADE;\r
+                       break;\r
+               case 'S':\r
+                       raRule = StatementType.RA_RESTRICT;\r
+                       break;\r
+               case 'R':\r
+                       raRule = StatementType.RA_NOACTION;\r
+                       break;\r
+               case 'U':\r
+                       raRule = StatementType.RA_SETNULL;\r
+                       break;\r
+               case 'D':\r
+                       raRule = StatementType.RA_SETDEFAULT;\r
+                       break;\r
+               default: \r
+                       raRule =StatementType.RA_NOACTION; ;\r
+                       if (SanityManager.DEBUG)\r
+                       {\r
+                               SanityManager.THROWASSERT("Invalid  value '"\r
+                                                                                 +raRuleString+ "' for a referetial Action");\r
+                       }\r
+               }\r
+               return raRule ;\r
+       }\r
+\r
+\r
+       String getRefActionAsString(int raRule)\r
+       {\r
+               String raRuleString ;\r
+               switch (raRule){\r
+               case StatementType.RA_CASCADE:\r
+                       raRuleString = "C";\r
+                       break;\r
+               case StatementType.RA_RESTRICT:\r
+                       raRuleString = "S";\r
+                               break;\r
+               case StatementType.RA_NOACTION:\r
+                       raRuleString = "R";\r
+                       break;\r
+               case StatementType.RA_SETNULL:\r
+                       raRuleString = "U";\r
+                       break;\r
+               case StatementType.RA_SETDEFAULT:\r
+                       raRuleString = "D";\r
+                       raRule = StatementType.RA_SETDEFAULT;\r
+                       break;\r
+               default: \r
+                       raRuleString ="N" ; // NO ACTION (default value)\r
+                       if (SanityManager.DEBUG)\r
+                       {\r
+                               SanityManager.THROWASSERT("Invalid  value '"\r
+                                                       +raRule+ "' for a referetial Action");\r
+                       }\r
+\r
+               }\r
+               return raRuleString ;\r
+       }\r
+\r
+\r
+}\r