protected function AnalyzeTypeTable(QTypeTable $objTypeTable) { // Setup the Array of Reserved Words $strReservedWords = explode(',', QCodeGen::PhpReservedWords); for ($intIndex = 0; $intIndex < count($strReservedWords); $intIndex++) { $strReservedWords[$intIndex] = strtolower(trim($strReservedWords[$intIndex])); } // Setup the Type Table Object $strTableName = $objTypeTable->Name; $objTypeTable->ClassName = $this->ClassNameFromTableName($strTableName); // Ensure that there are only 2 fields, an integer PK field (can be named anything) and a unique varchar field $objFieldArray = $this->objDb->GetFieldsForTable($strTableName); if ($objFieldArray[0]->Type != QDatabaseFieldType::Integer || !$objFieldArray[0]->PrimaryKey) { $this->strErrors .= sprintf("TypeTable %s's first column is not a PK integer.\n", $strTableName); return; } if ($objFieldArray[1]->Type != QDatabaseFieldType::VarChar || !$objFieldArray[1]->Unique) { $this->strErrors .= sprintf("TypeTable %s's second column is not a unique VARCHAR.\n", $strTableName); return; } // Get the rows $objResult = $this->objDb->Query(sprintf('SELECT * FROM %s', $strTableName)); $strNameArray = array(); $strTokenArray = array(); $strExtraPropertyArray = array(); $strExtraFields = array(); while ($objRow = $objResult->FetchRow()) { $strNameArray[$objRow[0]] = str_replace("'", "\\'", str_replace('\\', '\\\\', $objRow[1])); $strTokenArray[$objRow[0]] = $this->TypeTokenFromTypeName($objRow[1]); if (sizeof($objRow) > 2) { // there are extra columns to process $strExtraPropertyArray[$objRow[0]] = array(); for ($i = 2; $i < sizeof($objRow); $i++) { $strFieldName = QCodeGen::TypeNameFromColumnName($objFieldArray[$i]->Name); $strExtraFields[$i - 2] = $strFieldName; $strExtraPropertyArray[$objRow[0]][$strFieldName] = $objRow[$i]; } } foreach ($strReservedWords as $strReservedWord) { if (trim(strtolower($strTokenArray[$objRow[0]])) == $strReservedWord) { $this->strErrors .= sprintf("Warning: TypeTable %s contains a type name which is a reserved word: %s. Appended _ to the beginning of it.\r\n", $strTableName, $strReservedWord); $strTokenArray[$objRow[0]] = '_' . $strTokenArray[$objRow[0]]; } } if (strlen($strTokenArray[$objRow[0]]) == 0) { $this->strErrors .= sprintf("Warning: TypeTable %s contains an invalid type name: %s\r\n", $strTableName, stripslashes($strNameArray[$objRow[0]])); return; } } ksort($strNameArray); ksort($strTokenArray); $objTypeTable->NameArray = $strNameArray; $objTypeTable->TokenArray = $strTokenArray; $objTypeTable->ExtraFieldNamesArray = $strExtraFields; $objTypeTable->ExtraPropertyArray = $strExtraPropertyArray; }