> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق خاص بتنسيق RowBinaryWithNamesAndTypesAndDefaults

# RowBinaryWithNamesAndTypesAndDefaults

| الإدخال | الإخراج | الاسم البديل |
| - | - | - |
| ✔ | ✗ | |

<div id="description">
  ## الوصف
</div>

يشبه تنسيق [`RowBinaryWithNamesAndTypes`](/ar/reference/formats/RowBinary/RowBinaryWithNamesAndTypes)، ولكن مع بايت إضافي قبل كل خلية يحدّد ما إذا كان ينبغي استخدام القيمة `DEFAULT` الخاصة بالعمود — تمامًا كما في تنسيق [`RowBinaryWithDefaults`](/ar/reference/formats/RowBinary/RowBinaryWithDefaults). يدعم هذا الدمج عمليات `INSERT` القابلة للتكيّف مع تغيّر المخطط: إذ يمكن للكاتب حذف أعمدة من الترويسة (فتأخذ القيمة `DEFAULT` الخاصة بالعمود الهدف)، وبالنسبة إلى أي عمود يرسله، يمكنه تعليم خلايا منفردة على أنها "استخدم القيمة `DEFAULT` الخاصة بالعمود" من دون الخلط بين ذلك وبين `NULL`.

هذا التنسيق مخصّص للإدخال فقط.

<div id="wire-format">
  ## التنسيق السلكي
</div>

الترويسة مطابقة لـ [`RowBinaryWithNamesAndTypes`](/ar/reference/formats/RowBinary/RowBinaryWithNamesAndTypes):

1. قيمة `VarUInt` تتضمن عدد الأعمدة `N`.
2. `N` من قيم `String` المسبوقة بالطول، وتحتوي على أسماء الأعمدة.
3. `N` من أنواع الأعمدة — إما أسماء نصية أو ترميزًا ثنائيًا مضغوطًا، وذلك وفقًا لإعدادات `output_format_binary_encode_types_in_binary_format` / `input_format_binary_decode_types_in_binary_format`.

بعد الترويسة، يتكوّن كل صف من `N` خلية. ولكل خلية:

* بايت وسم واحد من نوع `UInt8`.
  * `0x01` — استخدم التعبير `DEFAULT` الخاص بالعمود الهدف. ولا تتبعه أي بايتات للقيمة.
  * `0x00` — تتبعه قيمة، وتُسلسَل باستخدام مُسلسِل `RowBinary` الخاص بنوع العمود. بالنسبة إلى `Nullable(T)`، تبدأ بايتات القيمة ببايت NULL الخاص بـ `Nullable` (`0` للقيم غير NULL، و`1` لـ NULL)، ثم القيمة الداخلية إذا لم تكن NULL.

<div id="defaults-vs-null">
  ## القيم الافتراضية مقابل NULL
</div>

مؤشر القيمة الافتراضية لكل خلية وبايت null المضمّن في `Nullable` مستقلان عن بعضهما. ويمكن إرسال عمود `Nullable(UInt32) DEFAULT 42` بثلاث طرق مختلفة لكل صف:

| Bytes | Meaning |
| - | - |
| `01` | استخدم `DEFAULT 42`. |
| `00 01` | مسار القيمة، ثم `NULL` من خلال النوع `Nullable`. |
| `00 00 …` | مسار القيمة، ثم قيمة داخلية غير `NULL`. |

<div id="schema-evolution">
  ## تطور المخطط
</div>

| الحالة | السلوك |
| - | - |
| عمود مفقود بالكامل من ترويسة الملف | تُملأ قيمته في الجدول الهدف عبر `insertDefaultsForNotSeenColumns`؛ ويتحكم فيه `defaults_for_omitted_fields`. |
| عمود موجود في الترويسة، مع وسم الخلية `0x01` | `insertDefault` لكل صف. |
| عمود موجود في الترويسة، مع وسم الخلية `0x00` | تُحلَّل القيمة بشكل طبيعي. |
| عمود إضافي في الترويسة، غير موجود في الجدول الهدف | يُتجاهَل بصمت عندما تكون `input_format_skip_unknown_fields = 1` (تُستهلك العلامة أولًا؛ إذا كانت `0x01`، فلا شيء إضافي؛ وإذا كانت `0x00`، فتُحلَّل القيمة المقيَّدة بالنوع ثم تُهمَل). |

<div id="example-usage">
  ## مثال للاستخدام
</div>

```sql title="Query" theme={null}
SELECT * FROM format(
    'RowBinaryWithNamesAndTypesAndDefaults',
    'x Nullable(UInt32) DEFAULT 42',
    unhex('01' || '0178' || '10' || hex('Nullable(UInt32)') || '01')
);
```

```response title="Response" theme={null}
┌──x─┐
│ 42 │
└────┘
```

* تحتوي الترويسة على عمود واحد باسم `x` من النوع `Nullable(UInt32)`.
* تستخدم الخلية الوحيدة الوسم `0x01`، ما يعني "استخدام `DEFAULT 42`".

<div id="format-settings">
  ## إعدادات التنسيق
</div>

الإعدادات التالية مشتركة بين جميع التنسيقات من نوع `RowBinary`.

| الإعداد | الوصف | الافتراضي |
| - | - | - |
| [`format_binary_max_string_size`](/ar/reference/settings/formats/format-binary#format_binary_max_string_size) | الحد الأقصى المسموح به لحجم String في تنسيق RowBinary. | `1GiB` |
| [`output_format_binary_encode_types_in_binary_format`](/ar/reference/settings/formats/output-format#output_format_binary_encode_types_in_binary_format) | يتيح كتابة الأنواع في الترويسة باستخدام [`الترميز الثنائي`](/ar/reference/data-types/data-types-binary-encoding) بدلًا من السلاسل النصية التي تتضمن أسماء الأنواع في تنسيق الإخراج [`RowBinaryWithNamesAndTypes`](/ar/reference/formats/RowBinary/RowBinaryWithNamesAndTypes). | `false` |
| [`input_format_binary_decode_types_in_binary_format`](/ar/reference/settings/formats/input-format#input_format_binary_decode_types_in_binary_format) | يتيح قراءة الأنواع في الترويسة باستخدام [`الترميز الثنائي`](/ar/reference/data-types/data-types-binary-encoding) بدلًا من السلاسل النصية التي تتضمن أسماء الأنواع في تنسيق الإدخال [`RowBinaryWithNamesAndTypes`](/ar/reference/formats/RowBinary/RowBinaryWithNamesAndTypes). | `false` |
| [`output_format_binary_write_json_as_string`](/ar/reference/settings/formats/output-format#output_format_binary_write_json_as_string) | يتيح كتابة قيم نوع البيانات [`JSON`](/ar/reference/data-types/newjson) كقيم `JSON` من نوع [String](/ar/reference/data-types/string) في تنسيق الإخراج [`RowBinary`](/ar/reference/formats/RowBinary/RowBinary). | `false` |
| [`input_format_binary_read_json_as_string`](/ar/reference/settings/formats/input-format#input_format_binary_read_json_as_string) | يتيح قراءة قيم نوع البيانات [`JSON`](/ar/reference/data-types/newjson) كقيم `JSON` من نوع [String](/ar/reference/data-types/string) في تنسيق الإدخال [`RowBinary`](/ar/reference/formats/RowBinary/RowBinary). | `false` |
