Различить отсутствующее вложение, пустой файл и документ

Фактические данные получены через SQLSRV от отдельного SQL Server. Созданные программой учебные таблицы удалены после чтения.

Наблюдаемый результат программы
НаблюдениеРезультат
id1: состояниене прикреплено
id1: размер SQLnull
id2: состояниеесть пустой файл
id2: байт0
id2: SHA-256 пустого файлаe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
id3: содержимоеВложение принято.
id3: байт33
Строки и дополнительные наблюдения
{
    "missing": {
        "filename": "not-attached",
        "is_null": true,
        "bytes": null,
        "sha256": null,
        "preview": null
    },
    "empty": {
        "filename": "empty.txt",
        "is_null": false,
        "bytes": 0,
        "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        "preview": ""
    },
    "document": {
        "filename": "small-note.txt",
        "is_null": false,
        "bytes": 33,
        "sha256": "cde69a4efab5585b515bb8acaa99bc13f931878c7dfe3fdd5849c5824951d3ec",
        "preview": "Вложение принято.\n"
    }
}

При самостоятельном запуске рядом с example.php создаются result.json с данными и metrics.json с проверками.