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->ModelClassName($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(); $intRowWidth = count($objFieldArray); while ($objDbRow = $objResult->GetNextRow()) { $strRowArray = $objDbRow->GetColumnNameArray(); $id = $strRowArray[0]; $name = $strRowArray[1]; $strNameArray[$id] = str_replace("'", "\\'", str_replace('\\', '\\\\', $name)); $strTokenArray[$id] = $this->TypeTokenFromTypeName($name); if ($intRowWidth > 2) { // there are extra columns to process $strExtraPropertyArray[$id] = array(); for ($i = 2; $i < $intRowWidth; $i++) { $strFieldName = QCodeGen::TypeColumnPropertyName($objFieldArray[$i]->Name); $strExtraFields[$i - 2] = $strFieldName; // Get and resolve type based value $value = $objDbRow->GetColumn($objFieldArray[$i]->Name, $objFieldArray[$i]->Type); $strExtraPropertyArray[$id][$strFieldName] = $value; } } foreach ($strReservedWords as $strReservedWord) { if (trim(strtolower($strTokenArray[$id])) == $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[$id] = '_' . $strTokenArray[$id]; } } if (strlen($strTokenArray[$id]) == 0) { $this->strErrors .= sprintf("Warning: TypeTable %s contains an invalid type name: %s\r\n", $strTableName, stripslashes($strNameArray[$id])); return; } } ksort($strNameArray); ksort($strTokenArray); $objTypeTable->NameArray = $strNameArray; $objTypeTable->TokenArray = $strTokenArray; $objTypeTable->ExtraFieldNamesArray = $strExtraFields; $objTypeTable->ExtraPropertyArray = $strExtraPropertyArray; $objTypeTable->KeyColumn = $this->AnalyzeTableColumn($objFieldArray[0], $objTypeTable); }