/**
  * Adds externalSystemId column to specific table if it does not exist
  * @param $tableName
  * @param $maxLength
  * @param $columnName
  */
 public static function addExternalIdColumnIfMissing($tableName, $maxLength = 255, $columnName = null)
 {
     if (!isset($columnName)) {
         $columnName = static::EXTERNAL_SYSTEM_ID_COLUMN_NAME;
     }
     // check if external_system_id exists in fields
     $columnExists = ZurmoRedBean::$writer->doesColumnExist($tableName, $columnName);
     if (!$columnExists) {
         // if not, update model and add an external_system_id field
         $type = 'string';
         $length = null;
         RedBeanModelMemberRulesToColumnAdapter::resolveStringTypeAndLengthByMaxLength($type, $length, $maxLength);
         $columns = array();
         $columns[] = RedBeanModelMemberToColumnUtil::resolveColumnMetadataByHintType($columnName, $type, $length);
         $schema = CreateOrUpdateExistingTableFromSchemaDefinitionArrayUtil::getTableSchema($tableName, $columns);
         CreateOrUpdateExistingTableFromSchemaDefinitionArrayUtil::generateOrUpdateTableBySchemaDefinition($schema, new MessageLogger());
     }
 }
 /**
  * Returns table schema definition for temporary import table provided name and columns, implicitly
  * adds reserved columns too
  * @param $tableName
  * @param $columns
  * @apram $withReservedColumns
  * @return array
  */
 protected static function getTableSchemaByNameAndImportColumns($tableName, array $columns, $withReservedColumns = true)
 {
     if ($withReservedColumns) {
         $columns = CMap::mergeArray($columns, static::getReservedColumnMetadata());
     }
     return CreateOrUpdateExistingTableFromSchemaDefinitionArrayUtil::getTableSchema($tableName, $columns);
 }