> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.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_max_string_size)                                          | الحد الأقصى المسموح به لحجم String في تنسيق RowBinary.                                                                                                                                                                                                                         | `1GiB`    |
| [`output_format_binary_encode_types_in_binary_format`](/ar/reference/settings/formats#input_format_binary_decode_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_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_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_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`   |
