internal override string DropNullConstraint(string table, ExtractedFieldMap field)
		{
			string ret = "";
            Connection conn = pool.GetConnection();
			conn.ExecuteQuery(String.Format(DropNotNullString,table,field.FieldName));
			if (conn.Read())
				ret=conn[0].ToString();
            conn.CloseConnection();
            if (ret == "")
                ret = String.Format(DropNullStringV2, table, field.FieldName);
			return ret;
		}
 internal override string SetFieldDescription(string tableName, string fieldName, string description)
 {
     sTable tbl = pool.Mapping[pool.Mapping[tableName]];
     List<string> pkeys = new List<string>(tbl.PrimaryKeyFields);
     foreach (sTableField fld in tbl.Fields){
         if (fld.Name == fieldName){
             ExtractedFieldMap efm = new ExtractedFieldMap(fieldName, MySqlConnection._TranslateFieldType(fld.Type, fld.Length), fld.Length, pkeys.Contains(fieldName), fld.Nullable,fld.ComputedCode);
             return string.Format(
                 AlterFieldType(tableName,efm,efm)+(tbl.AutoGenField==fld.Name && pkeys.Count==1 ? " AUTO_INCREMENT ":"")+" COMMENT '{0}'",
                     description.Replace("'", "''")
             );
         }
     }
     return null;
 }
 internal override string CreateColumn(string table, ExtractedFieldMap field)
 {
     if (field.ComputedCode!=null)
         return base.CreateColumn(table, field) + "\n" + string.Format(_CREATE_COMPUTED_TRIGGERS, table, field.FieldName, field.ComputedCode);
     return base.CreateColumn(table, field);
 }
        internal override string AlterFieldType(string table, ExtractedFieldMap field, ExtractedFieldMap oldFieldInfo)
        {
            string ret = "";
            if (!field.Nullable)
                ret = string.Format(AlterFieldTypeString, table, field.FieldName, field.FullFieldType, "NOT");
            else
                ret = string.Format(AlterFieldTypeString, table, field.FieldName, field.FullFieldType, "");
            if (field.ComputedCode!=null)
            {
                if (oldFieldInfo.ComputedCode != null)
                {
                    if (oldFieldInfo.ComputedCode != field.ComputedCode)
                    {
                        ret += "\n" + this.DropTrigger(table + "_" + field.FieldName + "_UPDATE") + "\n" + this.DropTrigger(table + "_" + field.FieldName + "_DELETE");
                        ret += "\n" + string.Format(_CREATE_COMPUTED_TRIGGERS, table, field.FieldName, field.ComputedCode);
                    }
                }
                else
                    ret += "\n" + string.Format(_CREATE_COMPUTED_TRIGGERS, table, field.FieldName, field.ComputedCode);

            }else if (oldFieldInfo.ComputedCode!=null)
                ret += "\n" + this.DropTrigger(table + "_" + field.FieldName + "_UPDATE") + "\n" + this.DropTrigger(table + "_" + field.FieldName + "_DELETE");
            return ret;
        }
 internal override string CreateColumn(string table, ExtractedFieldMap field)
 {
     if (field.ComputedCode != null)
         return string.Format("ALTER TABLE[{0}] ADD [{1}] AS CONVERT({2},{3}) PERSISTED", table, field.FieldName, field.FullFieldType, field.ComputedCode);
     return base.CreateColumn(table, field);
 }
 internal override string AlterFieldType(string table, ExtractedFieldMap field, ExtractedFieldMap oldFieldInfo)
 {
     if ((field.FullFieldType.ToUpper().Contains("BLOB")) || (oldFieldInfo.FullFieldType.ToUpper().Contains("BLOB")))
         return DropColumn(table, field.FieldName) + ";" + CreateColumn(table, field) + ";";
     return base.AlterFieldType(table, field, oldFieldInfo);
 }
 internal override string CreateColumn(string table, ExtractedFieldMap field)
 {
     if (field.ComputedCode != null)
         return string.Format("ALTER TABLE {0} ADD {1} {2} COMPUTED BY {3}", table, field.FieldName, field.FullFieldType, field.ComputedCode);
     return base.CreateColumn(table, field);
 }