--- datadict-mssqlnative.inc.orig.php 2011-09-08 13:59:32.000000000 +0200 +++ datadict-mssqlnative.inc.php 2012-01-08 16:18:53.251672800 +0100 @@ -121,19 +121,66 @@ return $sql; } - /* function AlterColumnSQL($tabname, $flds) { - $tabname = $this->TableName ($tabname); + $tabname = $this->TableName($tabname); $sql = array(); list($lines,$pkey) = $this->_GenFields($flds); + foreach($lines as $v) { - $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; - } + // get field name and type + $arTmp = array(); + $arTmp = preg_split("/[\s]+/", $v); + $arCnt = count($arTmp); + $fieldname = $arTmp[0]; + $fieldtype = $arTmp[1]; + + $bHasDef = false; + $bIsNull = true; + + for($i = 2; $i < $arCnt; $i++) { + // get default value + if( trim($arTmp[$i]) == "DEFAULT" ) + { + $bHasDef = true; + if( $i+1 <= $arCnt ) { + $field_def = $arTmp[$i+1]; + } + } + + // get nullability + if( trim($arTmp[$i]) == "NOTNULL" ) + $bIsNull = false; + } + + + // delete default value if exists + $strDropDef = $this->DropDefaultValue($tabname, $fieldname); + if( trim($strDropDef) !== "" ) + $sql[] = $strDropDef; + + + if($bHasDef) { + // change type and nulls + if($bIsNull) + $sql[] = "ALTER TABLE $tabname $this->alterCol $fieldname $fieldtype NOT NULL"; + else + $sql[] = "ALTER TABLE $tabname$this->alterCol $fieldname $fieldtype"; + // Add default value + $sql[] = "ALTER TABLE $tabname ADD CONSTRAINT def_" . $tabname . "_" . $fieldname . " DEFAULT " . $field_def . " FOR $fieldname"; + } + else { + $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; + } + } +/* + echo "
"; + print_r($sql); + echo "
"; + print_r($sql); + echo "
"; + print_r($strSql); + echo "