code: func GetColDefaultValue(ctx context.Context, col *model.ColumnInfo) (types.Datum, bool, error) {
  	// Check no default value flag.
  	if mysql.HasNoDefaultValueFlag(col.Flag) && col.Tp != mysql.TypeEnum {
  		err := errNoDefaultValue.Gen("Field '%s' doesn't have a default value", col.Name)
  		if ctx != nil {
  			sessVars := ctx.GetSessionVars()
  			if !sessVars.StrictSQLMode {
  				// TODO: add warning.
  				return GetZeroValue(col), true, nil
  			}
  		}
  		return types.Datum{}, false, errors.Trace(err)
  	}
  
  	// Check and get timestamp/datetime default value.
  	if col.Tp == mysql.TypeTimestamp || col.Tp == mysql.TypeDatetime {
  		if col.DefaultValue == nil {
  			return types.Datum{}, true, nil
  		}
  
  		value, err := expression.GetTimeValue(ctx, col.DefaultValue, col.Tp, col.Decimal)
  		if err != nil {
  			return types.Datum{}, true, errGetDefaultFailed.Gen("Field '%s' get default value fail - %s",
  				col.Name, errors.Trace(err))
  		}
  		return value, true, nil
  	} else if col.Tp == mysql.TypeEnum {
  		// For enum type, if no default value and not null is set,
  		// the default value is the first element of the enum list
  		if col.DefaultValue == nil && mysql.HasNotNullFlag(col.Flag) {
  			return types.NewDatum(col.FieldType.Elems[0]), true, nil
  		}
  	}
  	value, err := CastValue(ctx, types.NewDatum(col.DefaultValue), col)
  	if err != nil {
  		return types.Datum{}, false, errors.Trace(err)
  	}
  	return value, true, nil
  }
docs: // GetColDefaultValue gets default value of the column.