Example #1
0
 /**
  * import a table as flexiobject
  * @param String $sName table
  * @return FlexiObject
  */
 public function getImport($sName, $sTable)
 {
     $bExists = $this->exists($sTable);
     if (empty($sName) || empty($sTable)) {
         throw new Exception("Name or table not specified: " . $sName . ", " . $sTable);
     }
     $aField = FlexiModelUtil::getTableSchema($sTable);
     $oObject = $bExists ? $this->load($sName) : new FlexiTableObject($sName, $sTable);
     $this->doLog("Importing: " . $sName);
     foreach ($aField as $oField) {
         $sFieldName = $oField["Field"];
         $oFieldObject = $oObject->existsField($sFieldName) ? $oObject->aChild["field"][$sFieldName] : new FlexiTableFieldObject($sFieldName);
         $aType = FlexiModelUtil::parseFieldType($oField["Type"]);
         $sType = $oFieldObject->type;
         $sPrecision = $aType["precision"];
         $sDBType = $aType["type"];
         $aOptions = $aType["option"];
         $bUnsigned = $aType["unsigned"];
         //$this->doLog("Field2: " . $sFieldName . ", type:" . $sDBType. ",option:" . print_r($aOptions,true));
         if (!empty($sType)) {
             $sDefaultType = $this->getFieldInputTypeByDBType($sDBType);
             //check on existing type
             // only special type cannot change to default type
             switch ($sType) {
                 case "select-tinyint":
                 case "select-smallint":
                 case "select-int":
                 case "select-text":
                 case "select-enum":
                 case "select-bigint":
                 case "select-char":
                     switch ($sDBType) {
                         case "int":
                         case "smallint":
                         case "tinyint":
                         case "text":
                         case "enum":
                         case "bigint":
                         case "char":
                             $sType = "select-" . $sDBType;
                             break;
                         case "varchar":
                             $sType = "select-text";
                             break;
                         default:
                             $sType = $sDefaultType;
                             $this->doLog("Field: " . $sFieldName . ",unsupported select for type: " . $sDBType . ", using: " . $sType);
                             //throw new Exception ("Unsupported select for type: " . $sDBType);
                     }
                     break;
                 case "check-text":
                 case "check-varchar":
                 case "check-char":
                     switch ($sDBType) {
                         case "text":
                         case "varchar":
                         case "char":
                             $sType = "check-" . $sDBType;
                             break;
                         default:
                             $sType = $sDefaultType;
                             $this->doLog("Field: " . $sFieldName . ",unsupported select for type: " . $sDBType . ", using: " . $sType);
                             //throw new Exception ("Unsupported select for type: " . $sDBType);
                     }
                     break;
                 case "html":
                 case "html-tiny":
                 case "html-medium":
                 case "html-long":
                     switch ($sDBType) {
                         case "tinytext":
                             $sType = "html-tiny";
                             break;
                         case "mediumtext":
                             $sType = "html-medium";
                             break;
                         case "longtext":
                             $sType = "html-long";
                             break;
                         case "text":
                         case "varchar":
                             $sType = "html";
                             break;
                         default:
                             $sType = $sDefaultType;
                             $this->doLog("Field: " . $sFieldName . ",unsupported html for type: " . $sDBType . ", using: " . $sType);
                             //throw new Exception ("Unsupported html for type: " . $sDBType);
                     }
                     break;
                 case "json":
                 case "json-tiny":
                 case "json-medium":
                 case "json-long":
                     switch ($sDBType) {
                         case "tinytext":
                             $sType = "json-tiny";
                             break;
                         case "mediumtext":
                             $sType = "json-medium";
                             break;
                         case "longtext":
                             $sType = "json-long";
                             break;
                         case "text":
                         case "varchar":
                             $sType = "json";
                             break;
                         default:
                             $sType = $sDefaultType;
                             $this->doLog("Field: " . $sFieldName . ",unsupported JSON for type: " . $sDBType . ", using: " . $sType);
                             //throw new Exception ("Unsupported json for type: " . $sDBType);
                     }
                     break;
                 case "money":
                     switch ($sDBType) {
                         case "decimal":
                         case "float":
                         case "double":
                             $sType = "money";
                             break;
                         default:
                             $sType = $sDefaultType;
                             $this->doLog("Field: " . $sFieldName . ",unsupported money for type: " . $sDBType . ", using: " . $sType);
                             //throw new Exception ("Unsupported money for type: " . $sDBType);
                     }
                     break;
                 case "email":
                     switch ($sDBType) {
                         case "text":
                         case "tinytext":
                         case "varchar":
                         case "char":
                             $sType = "email";
                             break;
                         default:
                             $sType = $sDefaultType;
                             $this->doLog("Field: " . $sFieldName . ",unsupported select for type: " . $sDBType . ", using: " . $sType);
                             //throw new Exception ("Unsupported select for type: " . $sDBType);
                     }
                 case "timestamp-int":
                     if ($sDBType == "int") {
                         $sType = "timestamp-int";
                     } else {
                         $sType = $sDefaultType;
                         $this->doLog("Field: " . $sFieldName . ",unsupported timestamp for type: " . $sDBType . ", using: " . $sType);
                     }
                     break;
                     //default to direct field form input = dbtype
                 //default to direct field form input = dbtype
                 default:
                     $sType = $sDefaultType;
             }
             //existing type
         } else {
             $sType = $this->getFieldInputTypeByDBType($sDBType);
         }
         //$this->doLog($sFieldName . ", type: " . $sDBType);
         //set precision 1st
         $oFieldObject->precision = $sPrecision;
         $oFieldObject->type = $sType;
         $oFieldObject->unsigned = $bUnsigned;
         if ($sDBType == "enum" && count($aOptions) > 0) {
             $aEnum = array();
             foreach ($aOptions as $sValue) {
                 //remove start and tailing '
                 $sOption = substr($sValue, 1, -1);
                 $aEnum[] = $sOption;
                 $oFieldObject->addOption($sOption);
                 //$this->doLog("added: " . $sValue . "[" . $oFieldObject->options. "]");
             }
             $oFieldObject->clearOtherOption($aEnum);
             //$this->doLog("options: " . $oFieldObject->options);
         }
         $this->doLog($sFieldName . ", type: " . $oFieldObject->type . ", dbtype:" . $oFieldObject->dbtype);
         $oFieldObject->cannull = $oField["Null"] == "YES";
         $oFieldObject->primary = $oField["Key"] == "PRI";
         $oFieldObject->default = is_null($oField["Default"]) ? $oFieldObject->cannull ? null : "" : "'" . $oField["Default"] . "'";
         $oFieldObject->autonumber = strpos($oField["Extra"], "auto_increment") !== false;
         $oObject->aChild["field"][$sFieldName] = $oFieldObject;
     }
     return $oObject;
 }