Skip to main content

التغييرات غير المتوافقة مع الإصدارات السابقة

تغييرات في الاستعلامات والبنية

  • يستخدم العامل IN الآن دلالات المطابقة الدقيقة للقيم مع النوع Bool: إذ لا تطابق قيم Bool إلا 0 و1 داخل المجموعة. سابقًا، كانت القيم الرقمية الأكبر من 255 في مجموعة IN تُحوَّل خطأً إلى true، لذا كان SELECT CAST(1, 'Bool') IN (256) يُرجع 1. أما الآن، فيُرجع 0 بشكل صحيح. #93115 (Ashrith Bandla).
  • تم إصلاح أسبقية العامل NOT لتتوافق مع معيار SQL: إذ أصبح NOT الآن أقل ارتباطًا من IS NULL وBETWEEN وLIKE والعوامل الحسابية. على سبيل المثال، أصبح NOT (x) IS NULL يُحلَّل الآن على أنه NOT (x IS NULL) بدلًا من (NOT x) IS NULL. وقد يغيّر هذا نتائج الاستعلامات التي كانت تعتمد على السلوك السابق (غير المعياري). #97680 (Alexey Milovidov).
  • لم يعد مسموحًا باستخدام SELECT كمُعرّف نصي مجرد ضمن عنصر في قائمة تعبيرات WITH. #101059 (Aruj Bansal).
  • يرفض العامل IN الآن تحويلات Decimal الفاقدة للدقة داخل الأنواع المركبة (Tuple وArray وMap)، مما يجعل سلوكه متسقًا مع المقارنات ذات القيم القياسية على المستوى الأعلى. سابقًا، كانت فحوصات الدقة تُطبَّق فقط على القيم القياسية في المستوى الأعلى: فعلى سبيل المثال، كان CAST('33.3', 'Decimal64(1)') IN (33.33) يُرجع 0 بشكل صحيح، لكن CAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33]) كان يُرجع 1 خطأً. أما الآن، فتُرجع كلتا الحالتين 0 بشكل صحيح. #101812 (Nihal Z. Miaji).

تغييرات نوع البيانات

  • أصبحت إصدارات التسلسل لأنواع البيانات تُمرَّر الآن إلى أنواع البيانات المتداخلة. على سبيل المثال، كان إصدار التسلسل with_size_stream الخاص بالنوع String يُطبَّق سابقًا فقط على أعمدة String ذات المستوى الأعلى وعناصر Tuple؛ أما الآن فأصبح يُطبَّق على أي نوع String داخل أي نوع متداخل مثل Array أو Map أو Variant أو JSON. يتحكم في ذلك إعداد MergeTree ‏propagate_types_serialization_versions_to_nested_types، وهو الآن مفعّل افتراضيًا. بعد هذا التغيير، لن تتمكن الإصدارات الأقدم من قراءة أجزاء البيانات المُنشأة حديثًا، لكن الإصدار الجديد يمكنه قراءة الأجزاء القديمة. الترقية آمنة، لكن الرجوع إلى إصدار أقدم ليس آمنًا. #94859 (Pavel Kruglov).
  • تم إصلاح ترتيب البايتات في التسلسل الثنائي لـ QBit لاستخدام تنسيق little-endian. #101378 (Raufs Dunamalijevs).

تغييرات التخزين والفهارس

  • جرى تصحيح البيانات الوصفية للإسقاطات العادية، بحيث يُتعرَّف بشكل صحيح على الإسقاطات التي تستخدم مفاتيح فرز متعددة الأعمدة. #91352 (Amos Bird).
  • أُصلحت مشكلة عدم التزام ملفات فهرس التخطي بالإعداد replace_long_file_name_to_hash، والتي كانت تتسبب في ظهور أخطاء “اسم الملف طويل جدًا” وتعطُّل قراءات الفهرس للفهارس ذات الأسماء الطويلة. وأصبحت أسماء ملفات فهرس التخطي الآن تُحوَّل إلى hash عند تجاوزها max_file_name_length، على غرار ملفات الأعمدة. وهذا متوافق مع الإصدارات السابقة (يمكن للخوادم الجديدة قراءة الأجزاء القديمة)، لكن الرجوع إلى إصدار أقدم (أو استخدام خوادم قديمة أثناء ترقية متدرجة) قد يؤدي إلى تجاهل الفهارس ذات الأسماء الطويلة. #97128 (Raúl Marín).

الميزات التي أُزيلت

  • أُزيل نوع فهرس التخطي hypothesis. وكانت هذه ميزة تجريبية غير شائعة ذات فائدة عملية محدودة. ويؤدي إنشاء الجداول باستخدام INDEX ... TYPE hypothesis الآن إلى حدوث خطأ. #96874 (Alexey Milovidov).
  • أُزيلت الدالة التجريبية detectProgrammingLanguage. #99567 (Alexey Milovidov).

تغييرات الإعدادات والتهيئة

  • تم تغيير القيمة الافتراضية لـ mysql_datatypes_support_level من فارغة إلى decimal,datetime64,date2Date32، مما يتيح التعيين الصحيح لنوع MySQL DATE إلى Date32، وDECIMAL/NUMERIC إلى Decimal، وDATETIME/TIMESTAMP مع دقة محددة إلى DateTime64 افتراضيًا. في السابق، كانت أعمدة MySQL من النوع DATE تُعيَّن إلى Date، وهو ما لا يمكنه تمثيل التواريخ السابقة لـ 1970-01-01، مما كان يؤدي إلى تلف البيانات. #97716 (Alexey Milovidov).

تغييرات الإدراج وإزالة التكرار

  • أصبح async insert مُمكّنًا افتراضيًا الآن — إذ يجمّع ClickHouse افتراضيًا جميع عمليات الإدراج الصغيرة في دفعات. ويخضع ذلك للإعداد compatibility: فضبط compatibility على إصدار أقل من 26.2 يعيد القيمة الافتراضية السابقة false. ويمكن تشغيل async inserts أو إيقافها على عدة مستويات: في profiles مستخدمي config، أو على مستوى الجلسة، أو للاستعلام، أو لجدول MergeTree. #97590 (Sema Checherinda).

تغييرات جدول النظام

تغييرات غير متوافقة أخرى

  • يقبل mergeTreeAnalyzeIndexes{,UUID} الآن Array من أسماء الأجزاء بدلًا من تعبير نمطي، لأن تعابير Regex بطيئة (ميزة تجريبية). #98474 (Azat Khuzhin).
  • جرى تحديث مكتبة H3 إلى v4، ما يحسّن دقة حسابات الطول والمساحة وغير ذلك من المقاييس. هذا التغيير غير متوافق مع الإصدارات السابقة لأن النتائج الجديدة تختلف عن النتائج السابقة. #100348 (Alexey Milovidov).
  • تغيّرت طريقة تعامل جدول Merge مع الأعمدة الافتراضية. إذا كان الجدول الأساسي يحتوي على _table أو _database، فتُقرأ هذه الأعمدة من التخزين؛ وإلا فتُستكمَل بعد خطوة القراءة باستخدام خطوة التعبير. #101742 (Mikhail Artemenko).

الميزات الجديدة

الدوال

  • أُضيفت الدالة naturalSortKey(s) لمفاتيح الفرز الطبيعي. #90322 (Nazarii Piontko).
  • أُضيفت الدالة arrayAutocorrelation(arr [, max_lag])، التي تحسب الارتباط الذاتي المُطبَّع لمصفوفة رقمية عند كل قيمة lag. وهي تدعم أنواع المصفوفات الصحيحة والعائمة والعشرية. #94776 (Wenyu Chen).
  • أصبحت الدالة has() مدعومة الآن مع نوع JSON للتحقق من وجود المسار، على غرار Map. #96927 (DQ).
  • أُضيفت دالة الجدول mergeTreeTextIndex(database, table, index)، التي تقرأ البيانات مباشرةً من فهرس نصي. ويمكن استخدامها للاستبطان أو لإجراء عمليات تجميع على بيانات الفهرس النصي. #97003 (Anton Popov).
  • أُضيفت دالة SQL obfuscateQuery. #98305 (Xuewei Wang).
  • أُضيفت الدالتان caseFoldUTF8 وremoveDiacriticsUTF8 لطيّ حالة Unicode وإزالة العلامات التشكيلية. #98973 (George Larionov).
  • تدعم الدالة printf الآن سلاسل تنسيق غير ثابتة، مما يتيح استخدام نمط تنسيق مختلف لكل صف استنادًا إلى قيم الأعمدة. #98991 (Yash).
  • أُضيفت الدالة highlight()، التي تُغلّف مواضع ظهور مصطلحات البحث داخل سلسلة نصية بعلامات HTML (الافتراضي <em>/</em>). وهي تدعم المطابقة غير الحساسة لحالة الأحرف في ASCII، والدمج التلقائي للتطابقات المتداخلة، وعلامات الفتح/الإغلاق المخصّصة. #99131 (Peng).
  • أُضيفت دالة السلاسل normalizeUTF8NFKCCasefold لتطبيع Unicode وفق NFKC_Casefold، والتي تجمع بين تطبيع NFKC وطيّ الحالة. #99276 (George Larionov).
  • أُضيف tokenizerunicode_word إلى الفهارس النصية الكاملة وكذلك الدالة tokens. وهو يقسّم النص باستخدام قواعد حدود الكلمات في Unicode: تتكوّن كلمات ASCII باستخدام أحرف الوصل (الشرطة السفلية، والنقطتان، والنقطة، وعلامة الاقتباس المفردة)، بينما تصبح أحرف Unicode غير ASCII رموزًا من حرف واحد. وتكون كلمات الإيقاف القابلة للتهيئة افتراضيًا هي علامات ترقيم CJK الشائعة. #99357 (Amos Bird).
  • أُضيفت الدالة arrayTranspose، التي تأخذ مصفوفة ثنائية الأبعاد (matrix) وتُجري عليها عملية النقل. #101214 (Vitaly Baranov).
  • أُضيفت الدالة hasPhrase (الاسم البديل matchPhrase) للبحث عن العبارات (تسلسلات متصلة من الرموز). البحث هنا brute-force وغير مدعوم بعد في الفهرس النصي. #101997 (Elmi Ahmadov).
  • أُضيف dotProduct بوصفه دالة مسافة مدعومة لـ vector similarity indexes. ويجري الآن التحقق من اتجاه الفرز في جميع دوال المسافة لمنع ظهور نتائج غير صحيحة من دون تنبيه. #102254 (Renzo).
  • يمكن للدالة stem الآن اشتقاق جميع الكلمات/الرموز في أعمدة String وFixedString وArray([Fixed]String) وNullable وLowCardinality وConst. #99137 (Jimmy Aguilar Mena).
  • أصبحت الدالة stem الآن غير تجريبية (إذ كان يتعيّن سابقًا تمكين allow_experimental_nlp_functions). #102399 (Jimmy Aguilar Mena).
  • أُضيفت الدالة JSONAllValues، التي تُرجع جميع القيم من عمود JSON بصيغة Array(String)، مع تسلسل القيم بتمثيل نصي وترتيبها بحسب أسماء مساراتها. كما أُضيف دعم الفهرس النصي للتعبير JSONAllValues على أعمدة JSON: فعند إنشاء فهرس نصي على JSONAllValues(json_column)، يُستخدم تلقائيًا لتصفية الاستعلامات على الأعمدة الفرعية ضمن JSON (مثل json_column.key1 = 'value'). #100730 (Anton Popov).
  • أُضيفت وحدات متوافقة مع PostgreSQL إلى المعامل EXTRACT: EPOCH وDOW وDOY وISODOW وISOYEAR وWEEK وCENTURY وDECADE وMILLENNIUM. كما تم إصلاح EXTRACT(WEEK FROM date)، الذي كان يتسبب سابقًا في ظهور خطأ. #100274 (Alexey Milovidov).
  • أُضيف دعم الدالة toDaysInMonth() عبر اختصار نحوي في المحلل اللغوي لصياغة الدالة OVERLAY القياسية في SQL. كانت الدالة overlay موجودة بالفعل؛ ويضيف هذا دعمًا للصيغة المعتمدة على الكلمات المفتاحية باستخدام PLACING وFROM وFOR كفواصل. #101681 (Desel72).
  • يمكن الآن إضافة القيم Date وDate32 إلى القيم Time وTime64 باستخدام المعامل +، ما ينتج عنه قيمة DateTime أو DateTime64. على سبيل المثال، يُرجع SELECT toDate('2024-01-15') + toTime('14:30:25') القيمة 2024-01-15 14:30:25. تُحتسب النتيجة وفق المنطقة الزمنية للجلسة، وتُعالَج النتائج الخارجة عن النطاق وفقًا للإعداد date_time_overflow_behavior. #102421 (Nihal Z. Miaji).

ميزات SQL والاستعلامات

  • عندما تكون المعلَمة من النوع Nullable ولا يتم تحديدها، تُعتبر قيمتها الآن NULL. #93869 (Vikash Kumar).
  • يمكن لـ ClickHouse الآن استبعاد أجزاء البيانات كاملة في استعلامات SELECT استنادًا إلى إحصاءات الحد الأدنى/الحد الأقصى. #94140 (zoomxi).
  • أُضيف دعم Materialized CTEs، التي تُقيَّم مرة واحدة فقط أثناء تنفيذ الاستعلام وتُخزَّن نتائجها في جداول مؤقتة. #94849 (Dmitry Novik).
  • يمكن الآن استخدام بعض الدوال في SQL بدون أقواس. #95949 (Aly Kafoury).
  • أُضيفت صياغة subcolumn المدمجة json.@path للنوع JSON. وتُرجع القيمة الحرفية باعتبارها Dynamic إذا كان المسار يحتوي على scalar، أو sub-object باعتباره Dynamic إذا كان المسار يحتوي على كائن متداخل، أو NULL إذا كان المسار غير موجود. #98788 (Pavel Kruglov).
  • أُضيفت الكلمة المفتاحية SOME لتعبيرات subquery. وهي تعمل تمامًا مثل ANY. #99842 (Artem Kytkin).
  • أُضيف دعم SET TIME ZONE 'tz' كـ Alias for SET session_timezone. #99883 (phulv94).
  • أُضيف دعم clause ‏VALUES القياسي في SQL كتعبير table ضمن FROM، مثل SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val). #100143 (Desel72).
  • أُضيف دعم القيم الحرفية المركبة لـ interval وفق معيار SQL مع محددات النطاق TO، مثل INTERVAL '1:30' HOUR TO MINUTE، وتُفكَّك داخليًا إلى مجموع intervals. #100453 (Desel72).
  • أُضيف الأمر SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x' للوضعين ordered وunordered. #100709 (Bharat Nallan).

محركات الجداول والتخزين

  • أُضيف دعم القراءة التزايدية لمحرك الجدول Paimon مع تتبّع تقدّم اللقطات المستند إلى Keeper، بما في ذلك قراءة فروق اللقطات المستهدفة عبر paimon_target_snapshot_id. #93655 (XiaoBinMu).
  • أُضيف دعم ZooKeeper الإضافي في DatabaseReplicated. #95590 (RinChanNOW).
  • أُضيف دعم قراءة أنواع الطوابع الزمنية بالنانوثانية في Iceberg v3 (timestamp_ns و timestamptz_ns) مع تعيينها إلى DateTime64(9) و DateTime64(9, 'UTC'). ويتيح ذلك لـ ClickHouse قراءة بيانات Iceberg التي تتضمن هذه الأنواع في المخطط؛ لكنه لا يُعد دعمًا كاملًا لـ Iceberg v3، ولا يشمل الكتابة إلى Iceberg v3 بهذه الأنواع. #97132 (Dmitry Kovalev).
  • أُضيف ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>') لجداول Iceberg. #97904 (murphy-4o).
  • أُضيفت ذاكرة تخزين مؤقت SLRU جديدة لبيانات Parquet الوصفية لتحسين أداء القراءة، من خلال إزالة الحاجة إلى إعادة تنزيل الملفات لمجرد قراءة البيانات الوصفية. #98140 (Grant Holly).
  • أُضيف دعم فهارس التخطي في MergeTree لأعمدة JSON باستخدام JSONAllPaths مع أنواع الفهارس bloom_filter و tokenbf_v1 و ngrambf_v1 و text (المعكوس)، مما يتيح تخطي الحبيبات استنادًا إلى مجموعة مسارات JSON الموجودة في كل حبيبة. #98886 (Pavel Kruglov).
  • أُضيف فهرس الإسقاط commit_order، الذي يعيد تنظيم البيانات وفق ترتيب الإدراج. #99004 (Mikhail Artemenko).
  • أُضيف bucketed serialization لأعمدة Map في MergeTree (map_serialization_version = 'with_buckets'). تُقسَّم المفاتيح إلى buckets قائمة على hash، بحيث إن قراءة مفتاح واحد (m['key']) لا تتطلب سوى قراءة bucket واحدة بدلًا من العمود بأكمله، مما يوفّر تسريعًا بمقدار 2–49 مرة لعمليات البحث عن مفتاح واحد بحسب حجم الـ map. ويمكن التحكم في عدد الـ buckets واستراتيجية التقسيم إليها عبر إعدادات MergeTree الجديدة map_serialization_version و max_buckets_in_map و map_buckets_strategy و map_buckets_coefficient و map_buckets_min_avg_size. ويحافظ الإعداد map_serialization_version_for_zero_level_parts على التسلسل الأساسي لعمليات insert لتجنّب عبء الكتابة الإضافي، بينما تستخدم الأجزاء المدمجة buckets. كما تُدعَم فهارس التخطي على mapKeys/mapValues مع bucketed serialization، ويعيد optimize_functions_to_subcolumns كتابة m['key'] إلى قراءة عمود فرعي لكل مفتاح عند توفر الـ buckets. #99200 (Pavel Kruglov).

الإدراج وإزالة التكرار

  • تم تنفيذ سلوك جديد لكل من max_insert_block_size_rows وmax_insert_block_size_bytes وmin_insert_block_size_rows وmin_insert_block_size_bytes ضمن عملية تجميع الكتل، وذلك وفقًا لإعداد التوافق use_strict_insert_block_limits. #94207 (Kirill Kopnev).

الإعدادات والتهيئة

  • تمت إضافة إعداد MergeTree ‏table_readonly لتمييز الجداول على أنها للقراءة فقط، مما يمنع عمليات الإدراج والتعديل. #97652 (Alexey Milovidov).
  • تمت إضافة الإعداد use_partition_pruning (والاسم البديل use_partition_key). اضبطه على false لتعطيل استبعاد الأقسام استنادًا إلى مفتاح التقسيم. #97888 (Nihal Z. Miaji).
  • يمكن الآن لكل مُدخل type=http في <protocols> تحديد مفتاح <handlers> مخصص يشير إلى قسم تهيئة منفصل <http_handlers_*>، مما يتيح قواعد توجيه HTTP مختلفة لكل منفذ. #98414 (Amos Bird).
  • تمت إضافة إعدادَي MergeTree ‏replicated_fetches_min_part_level وreplicated_fetches_min_part_level_timeout_seconds، اللذين يتيحان للنسخ المتماثلة تجاوز جلب الأجزاء المُدرجة حديثًا (غير المدمجة) من النظائر، مما يقلل الحمل الإضافي للنسخ المتماثل أثناء استيعاب البيانات بكثافة. #98625 (tanner-bruce).
  • تمت إضافة إعداد الخادم restore_access_entities_with_current_grants. عند تفعيله، تقتصر الامتيازات الخاصة بالمستخدمين/الأدوار المستعادة على ما يُسمح للمستخدم الذي يجري الاستعادة بمنحه (بنفس دلالات GRANT CURRENT GRANTS)، بدلًا من الفشل مع ACCESS_DENIED. #98795 (pufit).
  • تمت إضافة الإعدادين max_skip_unavailable_shards_num وmax_skip_unavailable_shards_ratio لتقييد عدد الأجزاء الموزعة التي يمكن تخطيها بصمت عند تفعيل skip_unavailable_shards. وإذا تجاوز عدد الأجزاء الموزعة غير المتاحة أو نسبتها العتبة المُعدّة، فسيتم طرح استثناء بدلًا من إرجاع نتائج غير مكتملة بصمت. #99369 (Alexey Milovidov).
  • تم تنفيذ الحصص باستخدام تجزئة الاستعلام المُطبَّع لحماية خدمات ClickHouse العامة من إساءة الاستخدام. ويُدعَم NORMALIZED_QUERY_HASH كنوع لمفتاح الحصة — مع حصة منفصلة لكل استعلام مُطبَّع فريد، بحيث يتتبع CREATE QUOTA q KEYED BY normalized_query_hash كل استعلام مميز على حدة. كما يُدعَم QUERIES_PER_NORMALIZED_HASH كنوع مورد للحصة — لتقييد الحد الأقصى لعدد مرات تنفيذ أي استعلام مُطبَّع واحد ضمن فترة زمنية، بحيث يمنع MAX queries_per_normalized_hash = 100 تشغيل أي نمط استعلام واحد أكثر من 100 مرة. #99586 (Alexey Milovidov).
  • أصبحت القيمة الافتراضية لإعداد MergeTree ‏auto_statistics_types الآن minmax, uniq، بحيث يتم إنشاء إحصاءات minmax وuniq تلقائيًا لجميع الأعمدة المناسبة في الجداول الجديدة. كما أصبحت القيمة الافتراضية لـ materialize_statistics_on_insert الآن false، بحيث تُنشأ الإحصاءات أثناء عمليات الدمج بدلًا من وقت الإدراج، مما يقلل الحمل الإضافي لعمليات الإدراج. اضبط materialize_statistics_on_insert = 1 لاستعادة السلوك القديم. #101275 (Han Fei).
  • تمت إضافة إعداد التحديث prefer_dependency_replica لسلاسل تبعية العرض المادي للحد من البيانات المفقودة الناتجة عن تأخر النسخ المتماثل بين النسخ المتماثلة. #101591 (Seva Potapov).

المصادقة

  • تمت إضافة خيار إعداد LDAP لكل خادم وهو <follow_referrals> (القيمة الافتراضية false) للتحكم في ما إذا كان عميل LDAP يتبع الإحالات المرجعية. ويؤدي تعطيل تتبّع الإحالات المرجعية إلى تجنّب حالات تجاوز المهلة والتعليق عند البحث انطلاقًا من base DN لجذر نطاق Active Directory، كما يقلّل من الضوضاء في السجلات. #96765 (paf91).

جداول النظام

  • تمت إضافة system.histogram_metric_log، وهو جدول نظام جديد ينشئ لقطات دورية لجميع مقاييس المدرج التكراري (مثل أزمنة الاستجابة لـ S3/Azure ومدد مراحل معالجة طلبات Keeper). وأصبح عمود value في system.histogram_metrics الآن من النوع Float64 لمزيد من المرونة والتوافق مع نموذج بيانات Prometheus. #103046 (Miсhael Stetsyuk).

الميزات التجريبية

  • تمت إضافة برنامج ترميز الضغط ALP للأعداد ذات الفاصلة العائمة (من دون آلية fallback ALP_rd للقيم المزدوجة غير القابلة للضغط). #91362 (Nazarii Piontko).
  • تمت إضافة تلميحات الأنواع الكسولة التجريبية لأعمدة JSON. عند تفعيلها عبر allow_experimental_json_lazy_type_hints، فإن ALTER TABLE ... MODIFY COLUMN json JSON(path TypeName) الذي يضيف تلميحات الأنواع فقط أو يعدّلها يكتمل فورًا كعملية تقتصر على البيانات الوصفية، من دون إعادة كتابة البيانات التاريخية. تُطبَّق تلميحات الأنواع وقت الاستعلام على الأجزاء القديمة، وتُحوَّل إلى صيغة مادية أثناء عمليات INSERT وعمليات الدمج في الخلفية. #97412 (tanner-bruce).
  • تمت إضافة دعم لهجات SQL الخارجية باستخدام مكتبة polyglot. #99496 (Alexey Milovidov).
  • تمت إضافة الإعداد query_plan_optimize_join_order_randomize، الذي يضيف طابعًا عشوائيًا إلى الإحصاءات المستخدمة في إعادة ترتيب عمليات join، وهو مفيد لأغراض الاختبار. #100643 (Vladimir Cherkasov).
  • تمت إضافة دعم AI function إلى ClickHouse، ما يتيح للمستخدمين استدعاء نقاط نهاية OpenAI وAnthropic باستخدام SQL. وتُعد aiGenerate أول دالة من هذا النوع. #100831 (George Larionov).
  • تمت إضافة دوال AI aiClassify وaiExtract وaiTranslate للاستفادة من واجهات برمجة تطبيقات LLM في ClickHouse. #100832 (George Larionov).
  • تمت إضافة دعم بحيرات البيانات على Azure باستخدام Delta Kernel. #102202 (Smita Kulkarni).

تحسينات الأداء

أداء JOIN

  • مجموعة صغيرة من التحسينات على HashJoin وConcurrentHashJoin. #96663 (Yarik Briukhovetskyi).
  • أُضيف دعم لتبديل طرفَي عمليات JOIN من النوع ANTI وSEMI وFULL استنادًا إلى إحصاءات المُحسِّن. #97498 (Hechem Selmi).
  • جرى تقليل التزاحم على ذاكرة التخزين المؤقت في عمليات JOIN من النوع RIGHT وFULL عبر التحقق من تعيين JoinUsedFlags قبل الكتابة. #99274 (Hechem Selmi).
  • جرى تسريع عمليات hash joins على المفاتيح Int32 وInt64 ذات النطاق الصغير باستخدام hash table بفهرسة مباشرة. #99275 (Hechem Selmi).

تحسين الاستعلامات

  • جرى تحسين تخطي الحبيبات في pointInPolygon للمضلعات الكبيرة، وإصلاح مشكلة كان فيها تحليل فهرس pointInPolygon يطرح استثناءً أثناء تشذيب المفتاح الأساسي. #91633 (Nihal Z. Miaji).
  • أصبح optimize_read_in_order يُراعى الآن عند قراءة الإسقاطات. #95885 (Andrey Zvonov).
  • جرى تحسين القراءة من قاموس الفهرس النصي قليلًا، مما حسّن الأداء العام لتحليل الفهرس النصي. #97519 (Anton Popov).
  • جرى تحسين أداء تحليل الفهرس النصي للاستعلامات التي تتضمن شروطًا مركبة تشمل أعمدة مفهرسة وغير مفهرسة معًا. في السابق، كان تحسين الإنهاء المبكر أثناء تحليل الفهرس يُعطَّل خطأً في مثل هذه الحالات. #98096 (Anton Popov).
  • جرى تحسين أداء الاستعلامات ذات التعبيرات الثابتة التي تُنشئ مصفوفات أو خرائط طويلة جدًا. #98287 (Alexey Milovidov).
  • جرى إصلاح تحليل شرط المفتاح لمفاتيح DateTime64 الأساسية عند مقارنتها بثوابت عددية صحيحة، وهو ما كان يؤدي سابقًا إلى عدم إجراء أي تشذيب للحبيبات. #98410 (Amos Bird).
  • أصبح الإعداد optimize_syntax_fuse_functions مفعّلًا افتراضيًا الآن. #98424 (Alexey Milovidov).
  • أصبح تشذيب الأقسام مسموحًا الآن عندما يحتوي الشرط على أي عامل مقارنة (=, <, >, !=) ويكون مفتاح القسم ملفوفًا داخل سلسلة دوال حتمية (فعلى سبيل المثال، مع PARTITION BY x، ستستخدم الشروط مثل cityHash64(x) % 5 > 2 وtoYYYYMM(x) < 2026 وtoYYYYMM(x) = 2026 أو toYYYYMM(x) != 2026 مفتاح القسم في التشذيب). #98432 (Nihal Z. Miaji).
  • أصبح تحسين القراءة بالترتيب وتشذيب المفتاح الأساسي مسموحَين الآن عندما يكون النوع الهدف في CAST هو Nullable ويكون التحويل رتيبًا؛ فعلى سبيل المثال، مع PRIMARY KEY x، يمكن لـ ClickHouse استخدام تحسين القراءة بالترتيب مع ORDER BY x::Nullable(UInt64) وتشذيب المفتاح الأساسي مع شروط مثل WHERE x::Nullable(UInt64) > 500000. #98482 (Nihal Z. Miaji).
  • أصبح تشذيب الفهرس ودفع عامل التصفية إلى المصدر مسموحَين الآن عندما يُقارَن عمود صحيح بقيمة حرفية من نوع float؛ فعلى سبيل المثال، يمكن الآن لشروط مثل WHERE x < 10.5 استخدام المفتاح الأساسي في التشذيب، كما أصبحت عوامل التصفية مثل prime < 1e9 أو number < 1e5 تُدفَع إلى primes() وnumbers() من دوال الجداول بدلًا من التسبب في تنفيذ غير محدود. #98516 (Nihal Z. Miaji).
  • يمكن الآن للاستعلامات التي تُصفّي على أعمدة المفتاح الأساسي في MergeTree باستخدام بدائل في تعبير نمطي على سلاسل حرفية، مثل ^(abc-1|abc-2)، أن تستفيد من تشذيب المفتاح الأساسي عندما تشترك البدائل في بادئة واحدة. #98988 (Yash).
  • جرى تحسين INTERSECT ALL وEXCEPT ALL. #99097 (Raufs Dunamalijevs).
  • أُضيف دعم لتحسين read_in_order_use_virtual_row لعمليات القراءة بالترتيب العكسي. #99198 (Vladimir Cherkasov).
  • استعلامات أسرع غير متسلسلة لأعمدة LowCardinality ذات القاموس الواحد. #99285 (Ivan Babrou).
  • تم إصلاح التوسع السلبي للاستعلامات القصيرة التي تتضمن التجميع على الأجهزة ذات العدد الكبير من الأنوية. فعندما يقرأ الاستعلام عددًا قليلًا من marks، لم يعد الـ pipeline يتوسع إلى max_threads بعد التجميع، مما يتجنب الـ overhead الناتج عن streams شبه الفارغة. #99493 (Alexey Milovidov).
  • تم تحسين أداء الاستعلامات التي تستخدم parallel replicas من خلال الاختيار الصحيح لـ task size الخاصة بالقراءة. #99801 (Nikita Taranov).
  • أُزيلت عناصر ORDER BY الزائدة في النهاية بمجرد أن أصبحت جميع مفاتيح GROUP BY مغطاة ضمن prefix الخاص بـ ORDER BY. #100157 (Alexey Milovidov).
  • جرى تحسين الاستعلامات عبر دفع clause LIMIT إلى داخل UNION ALL. #100364 (Alexey Milovidov).
  • أُضيف دعم الترجمة الفورية JIT لمقارنات أعمدة String وFixedString في ORDER BY، مما يحسن أداء الفرز في مرحلة merge بنسبة تتراوح بين 6% و17% لمفاتيح الفرز التي يغلب عليها النص. #100577 (Raúl Marín).
  • عند تمكين read_in_order_use_virtual_row مع setting الجديدة read_in_order_use_virtual_row_per_block، تُرسَل الآن معلومات حدود الصفوف الافتراضية بعد كل block تتم قراءته من MergeTree، مما يتيح لعملية merge إعادة ترتيب أولويات sources أثناء stream للأجزاء التي تُصفّى بياناتها بالكامل بواسطة WHERE/PREWHERE/JOIN. #100603 (Vladimir Cherkasov).
  • تحسين التوازي في الاستعلامات ذات views البسيطة (فوق table أساسي من نوع MergeTree) التي تُنفَّذ باستخدام parallel replicas. #100815 (Igor Nikonov).
  • أُضيف دعم parallel replicas فوق views البسيطة (بما في ذلك views المؤهلة من UNION ALL فوق جداول MergeTree) عند تعيين parallel_replicas_allow_view_over_mergetree=1. ويؤدي ذلك إلى موازاة query الخارجي للـ view بدلًا من الداخلي، مما يزيد من توازي الاستعلامات عبر العقد. #100958 (Igor Nikonov).
  • جرى تحسين القراءة وفق ترتيب primary key في full_sorting_merge عند وجود filters تحتوي على IN في query plan. #101261 (Nikita Taranov).
  • تم تحسين أداء INSERT VALUES لأعمدة Map وArray وTuple عندما تُمرَّر values كسلاسل نصية مهربة (مثل '{\'key\':1}')، مع تجنب fallback غير الضروري إلى parser تعبيرات SQL. #102119 (Joanna Hulboj).

أداء الدوال وعمليات التجميع

  • تحسين أداء الدالة levenshteinDistance. #94543 (Joanna Hulboj).
  • تحسين تحويلات النوع Decimal على مستوى الدُفعات عبر تجنّب استدعاء الدوال لكل عنصر. #95923 (Konstantin Bogdanov).
  • تحسين أداء استعلامات LIKE. #98149 (Elmi Ahmadov).
  • تحسين الدالة التجميعية avgWeighted باستخدام مُجمِّعات محلية بدلًا من التخزين والتمرير لكل صف عبر aggregate state، مما رفع الأداء بنسبة تصل إلى 27% لمدخلات Nullable. #98793 (Antonio Andelic).
  • تسريع دوال var*Stable وstddev*Stable لأعمدة Float64 عبر إزالة الافتراضية من الحلقة الداخلية. يتيح ذلك تحسينات من المصرّف (FMA/registers) تغيّر نتائج الفاصلة العائمة على مستوى ULP. #99460 (Riyane El Qoqui).
  • استخدام ترميز Firedancer base58 المحسّن للمدخلات بحجم 32/64 بايت (تلقائيًا مع base58Encode)، مع إتاحة استخدام فك ترميز base58 المحسّن إذا كانت النتيجة بعد فك الترميز 32/64 بايت (صراحةً مع base58Decode('...', 32)). #99461 (Joanna Hulboj).
  • تحسين الدالة cutURLParameter عبر إزالة إزاحات الذاكرة غير الضرورية. #100218 (Nikita Semenov).
  • تسريع تحويل float إلى string للقيم الصحيحة الكبيرة عبر توسيع المسار السريع itoa باستخدام rounding متوافق مع dragonbox. #100649 (Raúl Marín).
  • استبدال dragonbox بـ zmij لتحقيق تحويل float إلى string أسرع بمقدار 1.5x–3x. #100650 (Raúl Marín).
  • تسريع تحويل Int128/UInt128 إلى string عبر استبدال القسمة البرمجية بـ Barrett reduction وفك الحلقة الخاصة بالتحويل. #100671 (Raúl Marín).
  • تجنّب إنشاء threads زائدة في عملية merge المتوازية لـ UniqExactSet. #100686 (Jiebin Sun).
  • إضافة merge متوازية على مستوى الدُفعات لـ UniqExactSet. #100687 (Jiebin Sun).

أداء التخزين وعمليات I/O

  • تقليل التنازع على الأقفال أثناء عمليات القراءة فقط على جداول ReplicatedMergeTree التي انتهت فيها عمليات mutation. #95771 (Eduard Karacharov).
  • أصبح Iceberg الآن قادرًا على تعبئة البيانات الوصفية مسبقًا في ذاكرة التخزين المؤقت بشكل غير متزامن، ويُفعَّل ذلك بضبط iceberg_metadata_async_prefetch_period_ms عند إنشاء الجدول. ويمكن الآن لاستعلامات SELECT على جداول Iceberg تحديد المعلَمة iceberg_metadata_staleness_ms، ما يتيح لـ ClickHouse الاعتماد على النسخة المخزنة مؤقتًا من البيانات الوصفية إذا كانت أحدث من حد التقادم المحدد؛ وإلا فستُستعلَم خدمة Iceberg catalog البعيدة للحصول على أحدث البيانات الوصفية. ويمكن أن يلغي ذلك الاستعلامات الموجَّهة إلى Iceberg catalog أثناء معالجة الطلبات، مما يحقق تحسنًا ملحوظًا في الأداء. #96191 (Arsen Muk).
  • يستخدم الوضع ordered في S3Queue الآن S3 ListObjectsV2 StartAfter لتجنّب إعادة سرد السجل الكامل للبادئة، مما يقلل من استدعاءات ListObjects. #96370 (Venkata Vineel).
  • تم تمكين القراءات المتوازية من محرك جدول YTsaurus. #97343 (MikhailBurdukov).
  • تحسين أداء بحيرات البيانات. ففي الإصدارات السابقة، لم تكن القراءة من تخزين الكائنات تعيد تحجيم pipeline ليتوافق مع عدد خيوط المعالجة. #99548 (Alexey Milovidov).
  • السماح بالجلب المسبق عند قراءة ملف بعيد عبر userspace page cache. #99919 (Alexey Milovidov).
  • إصلاح تراجع كبير في أداء INSERT عند استخدام deduplicate_insert=enable (وهو الإعداد الافتراضي منذ 26.2)، وذلك عبر تأجيل حساب hash البيانات من مرحلة squashing إلى sink، واستخدام hash الأعمدة على دفعات عبر updateHashWithValueRange، مما خفّض الحمل الإضافي من ~2.5s إلى ~0.5s لعدد 5M صف مع 22 عمودًا. #101494 (Sema Checherinda).

تحسين استخدام الذاكرة

  • بالنسبة إلى عمليات insert المتزامنة، أصبح بالإمكان الآن حذف الكتلة الأصلية (اللازمة لإزالة التكرار) لتوفير الذاكرة. #96661 (Sema Checherinda).
  • تم تحسين الأداء وتقليل استخدام الذاكرة للدوال النافذة المتوازية في بعض السيناريوهات، وكذلك لأحمال arrayFold التي تتضمن مصفوفات كبيرة. ويمكن أن يسهم هذا أيضًا في تقليل ضغط أخطاء الصفحات وتحسين الاستقرار عند وجود حدود صارمة للذاكرة في الاستعلامات المتأثرة. #98892 (filimonov).

تحسينات

الاستعلامات وSQL

  • أصبحت الإسقاطات التجميعية مدعومة الآن بشكل صحيح في العروض. #88798 (Amos Bird).
  • أصبح optimize_aggregators_of_group_by_keys يُحسّن الآن الدوال التجميعية بشكل صحيح في استعلامات GROUPING SETS. #93935 (Xiaozhe Yu).
  • أُضيف دعم لتحسين تحويل OUTER إلى INNER في عمليات join عند استخدام join_use_nulls. #95968 (Vladimir Cherkasov).
  • جرى توسيع cast_keep_nullable ليعمل مع النوعين Dynamic وJSON. عند تعيينه، فإن تحويل NULL من الأنواع التي يمكن أن تكون Nullable يعيد NULL؛ وإلا فإن NULL يُطلق الخطأ CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN. #96504 (Seva Potapov).
  • أُضيف بند ROLE إلى CREATE USER. #97074 (Vitaly Baranov).
  • أُضيفت معلومات عن المرشحات المؤجلة كعنصر منفصل في خرج الاستعلام EXPLAIN (عند استخدام سياسات الصفوف/PREWHERE مع FINAL). #97374 (Yarik Briukhovetskyi).
  • أُضيف دعم لتعابير join بين الجداول الموضوعة بين قوسين في بند FROM، مثل SELECT * FROM (t1 CROSS JOIN t2). #97650 (Alexey Milovidov).
  • تطبيق فهارس تخطي البيانات أثناء تحليل الفهارس الموزّع. #97767 (Azat Khuzhin).
  • يمكن الآن أن يكون مفتاح الفرز للجدول تعبيرًا مثل toDate(time)، وتُتخذ قرارات عدم تأجيل مثل هذه التعابير عندما تكون جزءًا من عوامل التصفية. #98237 (Yarik Briukhovetskyi).
  • أصبح محسّن ترتيب عمليات join يستنتج الآن شروط مساواة انتقالية لعمليات join من شروط join الحالية. على سبيل المثال، عند وجود A.x = B.x AND B.x = C.x، يجري التعرّف على التكافؤ A.x = C.x، مما يتيح للمُحسِّن النظر في عمليات ربط مباشرة بين الجداول المرتبطة انتقاليًا. ويمكن أن يؤدي ذلك إلى تحسين جودة الخطة في المخططات النجمية ومخططات snowflake. وتتحكم في هذه الميزة الإعدادات الجديدة enable_join_transitive_predicates (وهي معطّلة افتراضيًا). #98479 (Alexander Gololobov).
  • عند تمكين apply_row_policy_after_final أو apply_prewhere_after_final، أصبحت شروط AND المركبة في سياسات الصفوف وPREWHERE تُفكَّك الآن لاستخراج عناصر مفتاح الفرز من أجل تحليل فهرس المفتاح الأساسي. سابقًا، إذا احتوى مرشح مؤجل على مزيج من الشروط الخاصة بمفتاح الفرز وغير الخاصة به (مثل x > 1 AND y != 'foo')، كان التعبير بالكامل يُستبعد من تحليل الفهارس. #98513 (Yarik Briukhovetskyi).
  • لم تعد تشارك في تحليل الفهارس الموزّع إلا النسخ المتماثلة “الحية” (القابلة للاتصال). #98521 (Azat Khuzhin).
  • جرى تقييد عدد العقد المستخدمة في آلية parallel replicas الاستدلالية التلقائية ليطابق العدد الفعلي للعقد في المجموعة، بدلًا من الاعتماد فقط على الإعداد max_parallel_replicas. #98668 (Nikita Taranov).
  • جرى تنفيذ الطلبات المحوّطة والقراءة غير المتزامنة من أجل تحليل الفهارس الموزّع. #98724 (Azat Khuzhin).
  • تمت إضافة دعم لعبارة SAMPLE في تحليل الفهارس الموزّع. #98931 (Azat Khuzhin).
  • تمت إضافة دعم الرتابة لعملية الضرب، مما يتيح استبعادًا على مستوى المفتاح الأساسي لتعبيرات key * constant. #98983 (Amos Bird).
  • لم تعد رسائل الخطأ الخاصة بالمحلّل تُفرغ جميع أعمدة الجدول (مما قد يؤدي إلى استثناءات يزيد حجمها عن 150KB). وأصبحت قوائم الأعمدة الآن مقتصرة على 10 عناصر. #99002 (Yash).
  • أصبحت إحصاءات الأعمدة من الاستعلامات الفرعية التي تتضمن عمليات join تُعاد الآن بشكل صحيح، بحيث يمكن للاستعلام الأصل استخدامها لإعادة ترتيب join. #99096 (Alexander Gololobov).
  • أصبح ALTER TABLE MODIFY COLUMN x TTL ... مسموحًا الآن دون تحديد نوع العمود. #99208 (Nikolay Degterinsky).
  • تم تحسين مخرجات EXPLAIN PLAN pretty=1: إذ تُطبع أعمدة مخرجات الاستعلام من المستوى الأعلى، وتُعرض تسميات/رموز علاقات join مع عدد الصفوف المقدّر في النتيجة والمحلية، وتُدرج أعمدة المخرجات لكل خطوة من خطوات join/source. #99462 (Kirill Kopnev).
  • تم إصلاح فشل الدالة الجدولية merge() مع الخطأ UNKNOWN_IDENTIFIER عند الاستعلام عن أعمدة غير موجودة في جميع الجداول الأساسية من نوع distributed/remote. #99833 (Alexey Milovidov).
  • لم يعد ConditionSelectivityEstimator يُستخدم في المُحسِّن عندما لا يكون الشرط بصيغة CNF (على سبيل المثال where a = 0، وهو شرط واحد لا يمكن أن تفيد فيه الإحصاءات). #100110 (Han Fei).
  • تم تطبيق distributed_index_analysis_min_indexes_bytes_to_activate بعد استبعاد الأقسام. #100477 (Azat Khuzhin).
  • يدعم EXPLAIN PIPELINE الآن الإعداد distributed=1 لتضمين أجزاء pipeline البعيدة. #100513 (Nikita Taranov).
  • أصبح use_partition_pruning = 0 الآن يعطّل أيضًا استبعاد فهرس MinMax وتحسين العد على أعمدة مفتاح التقسيم، بالإضافة إلى تعطيل الاستبعاد استنادًا إلى مفاتيح التقسيم. #100904 (Nihal Z. Miaji).
  • أصبح EXPLAIN [PLAN] pretty=1 الآن يطبع التعبيرات بصيغة مقروءة للبشر. #100927 (Kirill Kopnev).
  • أصبح accurateCastOrNull و accurateCastOrDefault يدعمان الآن أنواع الهدف Tuple، بما في ذلك Tuples المتداخلة ذات العناصر Nullable. في السابق، كانت هذه الدوال ترفض أهداف Tuple لأن Tuple لم يكن ممكنًا داخل Nullable. #100942 (Nihal Z. Miaji).
  • يمكنك الآن استخدام فاصلة ختامية في عبارة WITH قبل استعلام SELECT. #101093 (Aruj Bansal).
  • تم تنفيذ تجسيد كسول للأعمدة في ReplacingMergeTree مع FINAL عندما يكون predicate انتقائيًا بما يكفي. #101647 (Nikolai Kochetov).
  • تحسين تقديرات الانتقائية الافتراضية للشروط التي لا تتوفر لها إحصاءات، بما يتوافق مع الإرشادات القياسية المتبعة في المجال: 0.1 لانتقائية الشرط LIKE، و0.33 لانتقائية الشرط غير المعروف. #101653 (Alexander Gololobov).
  • تضمين الاستعلام الفرعي VIEW مباشرةً في شجرة الاستعلام لإتاحة تطبيق المزيد من التحسينات على VIEW. #100830 (Dmitry Novik).

الدوال

  • يمكنك الآن استخدام إدخال JSON/Object الأصلي مع دوال JSONExtract. #96711 (Fisnik Kastrati).
  • أُضيفت دالة SQL ‏tokensForLikePattern، التي تُجزِّئ أنماط LIKE مع مراعاة دلالات أحرف البدل: إذ يُعامَل % و _ كأحرف بدل، وتُعامَل أحرف البدل المُهرَّبة (\%, \_) كمحارف حرفية، وتُهمَل الـ tokens المجاورة لأحرف البدل غير المُهرَّبة. #97872 (Amos Bird).
  • نُفِّذت الدالة toDaysInMonth()، التي تُرجِع عدد الأيام في شهر التاريخ المحدد. #99227 (Vitaly Baranov).
  • أُعيدت تسمية الـ tokenizer ‏unicodeWord إلى asciiCJK. #100956 (George Larionov).
  • أُضيف تبسيط نحوي على مستوى الـ parser لصياغة دالة OVERLAY القياسية في SQL. الدالة overlay موجودة بالفعل؛ ويضيف ذلك دعمًا للصيغة المعتمدة على الكلمات المفتاحية باستخدام PLACING و FROM و FOR كفواصل. #101681 (Desel72).
  • أصبحت الدالة ngrams ترفض الآن أطوال ngram غير الصالحة. على سبيل المثال، تُرجِع SELECT ngrams('abc', 0) الآن خطأ. #101922 (Robert Schulze).
  • أُضيف دعم للـ tokenizer ‏array في تحسين LIKE. #102880 (Elmi Ahmadov).

محركات الجداول والتخزين

  • تمت إضافة خيط تنظيف مخصص لـ MergeTree لمنع تأخر التنظيف عند وجود حمل كثيف من عمليات الدمج. #91574 (Amos Bird).
  • يمكن للجداول التي تتضمن قواعد DELETE TTL الآن استخدام خوارزمية الدمج العمودي. #97332 (murphy-4o).
  • أصبحت علامات الفهارس الثانوية تُحمَّل مسبقًا إلى cache عند تمكين الإعداد prewarm_mark_cache (إذ تُحمَّل إلى index mark cache أثناء جلب أجزاء البيانات وعند بدء تشغيل الجدول). #97772 (Anton Popov).
  • يمكن الآن إنشاء الفهارس النصية على أعمدة Nullable([Fixed]String) و Array(Nullable([Fixed]String)). #98118 (Jimmy Aguilar Mena).
  • إلغاء عمليات الدمج في الخلفية مبكرًا في DROP DATABASE لـ ordinary shared merge tree. #98161 (Shaohua Wang).
  • تمت إضافة الإعداد finalize_projection_parts_synchronously للسماح بإنهاء أجزاء الإسقاط بشكل متزامن أثناء INSERT، ما يقلل ذروة استخدام الذاكرة في الجداول التي تحتوي على عدد كبير من projections مع الإبقاء على السلوك غير المتزامن الحالي كخيار افتراضي. #98228 (Amos Bird).
  • تمت إضافة إعداد MergeTree share_nested_offsets (القيمة الافتراضية true). عند ضبطه على false، تُعامَل أعمدة Array ذات الأسماء المنقوطة (مثل n.a و n.b) كأعمدة مستقلة بدلًا من مشاركة ملفات الإزاحة والتحقق من تساوي أحجام المصفوفات ضمن دلالات Nested القديمة. #98416 (Amos Bird).
  • تم تحسين TRUNCATE DATABASE TABLES LIKE عبر الإلغاء المسبق لعمليات الدمج بالتوازي. #98597 (Shaohua Wang).
  • تم تقليل التنافس على القفل في MergeTreeBackgroundExecutor من خلال تحرير موارد المهمة من دون الاستحواذ على القفل. #98604 (Dmitry Novik).
  • أصبح TRUNCATE DATABASE الآن يستجيب لإلغاء query. #98828 (Shaohua Wang).
  • أُعيد تشغيل cache الإحصاءات بعد تغيير أحد إعدادات merge tree. #98520 (Han Fei).
  • تمت إضافة إعداد MergeTree compress_per_column_in_compact_parts للتحكم في كيفية تنظيم الكتل المضغوطة داخل أجزاء Compact. عندما تكون قيمته true (وهي القيمة الافتراضية، مع الحفاظ على السلوك الحالي)، يبدأ كل عمود كتلة مضغوطة جديدة، ما يتيح فك الضغط بشكل انتقائي. وعندما تكون قيمته false، تُحزم جميع الأعمدة داخل granule واحدة في الكتلة المضغوطة نفسها، ما يحسن نسبة الضغط وأداء القراءة لأحمال العمل التي تقرأ جميع الأعمدة دائمًا. #101114 (Amos Bird).
  • أصبح الفهرس النصي الآن في مرحلة GA ويظل مُمكّنًا بغض النظر عن إعداد compatibility، ما يمنع تعطيله بشكل غير متوقع أثناء استعادة النسخ الاحتياطية أو عند التشغيل في وضع التوافق. #101518 (Nikita Fomichev).
  • تمت إضافة دعم للفهرس النصي المُنشأ على mapValues(map) مع العامل IN. #99286 (Anton Popov).
  • تم تحسين تحليل الفهارس النصية المتعددة المستخدمة بالتزامن ضمن query واحدة. ولم يعد الإعداد use_skip_indexes_on_data_read مطلوبًا لتحسين القراءة المباشرة الخاص بالفهارس النصية. #102255 (Anton Popov).
  • تمت إضافة دعم تحليل الفهرس النصي للدالة hasPhrase عبر وضع HINT. #102438 (Elmi Ahmadov).
  • أصبحت إحصاءات أعمدة MinMax تخزّن القيم الصغرى والكبرى الآن على هيئة Field (مُحدَّد النوع) بدلًا من Float64. ويتضمن التنسيق التسلسلي اسم نوع العمود إلى جانب القيم. كما رُفع إصدار ملف الإحصاءات إلى V2؛ وتستلزم الملفات المكتوبة بالإصدارات الأقدم إعادة التجسيد (ALTER TABLE ... MATERIALIZE STATISTICS ALL). #100605 (Han Fei).

بحيرات البيانات

  • أُضيف query جديد للتحقق من سلامة DataLakeCatalog. #94690 (Smita Kulkarni).
  • جرى تحسين عمليات الكتابة إلى Iceberg في Unity Catalog. #98162 (Konstantin Vedernikov).
  • أُعيد بناء الكيانات في IcebergManifestFile لتقليل احتمالات وقوع أخطاء أثناء صيانة الشيفرة (ويعالج أيضًا بعض مشكلات التخزين المؤقت لملف manifest). #98231 (Daniil Ivanik).
  • جرى تحسين Iceberg ALTER TABLE ... EXECUTE expire_snapshots(...) عبر دعم أوسع للوسائط. #99130 (murphy-4o).
  • تغيّرت الواجهة الخاصة بعمليات الإدراج في Iceberg مع catalog. وأُعلن إهمال الإعدادات storage_catalog_type وstorage_aws_access_key_id وما شابهها. #100334 (Konstantin Vedernikov).
  • أُصلحت المعالجة غير المتسقة للمسارات في Iceberg الناتجة عن الاستخدام المختلط لمسارات التخزين ومسارات البيانات الوصفية؛ وفُرض أن تكتب جداول Iceberg موقع الجدول إما كعنوان URL أو كمسار مطلق؛ وأُضيف fallback لاحتساب أحجام الملفات في Azure؛ وعولج version-hint.txt بطريقة متوافقة مع Spark؛ وأُضيفت تجريدات على مستوى النوع لتقليل الالتباس بين أنواع المسارات؛ وأُصلح استخدام عمليات الحذف الموضعية. #100420 (Daniil Ivanik).
  • تجنّب فحص catalog بحيرة البيانات البعيد بالكامل بحثًا عن تلميحات الجداول من نوع “Maybe you meant …” عندما يكون show_data_lake_catalogs_in_system_tables معطّلًا. #100452 (Alsu Giliazova).
  • أصبحت معلومات object المستخدمة في تحليل ملفات بيانات Iceberg تتضمن الآن عدد صفوف الملف وحجم الملف بالبايت كما جرى استخلاصهما من ملف manifest. #100645 (Daniil Ivanik).
  • أُضيفت آلية تقليم لـ Delta Lake مع الأعمدة الافتراضية. #101634 (Konstantin Vedernikov).

S3 وتخزين الكائنات

  • أُضيف عنصر نائب {_schema_hash} إلى محرك جدول S3، بحيث يُدرج قيمة تجزئة لتعريفات أعمدة الجدول في مسار S3. #98265 (Miсhael Stetsyuk).
  • أُضيف خيار جديد لفرض نمط الاستضافة الافتراضية/نمط المسار لنقاط نهاية S3. #102378 (Konstantin Vedernikov).

الإعدادات والتكوين

  • يمكن للمستخدمين الآن تحديد عدة authentication methods في إعداد users_xml. #91998 (Flip-Liquid).
  • يمكنك الآن تعيين إعدادات internal_replication لعنقود أُنشئ بواسطة قاعدة بيانات Replicated. #97228 (Pervakov Grigorii).
  • أُضيف الإعداد allow_nullable_tuple_in_extracted_subcolumns، الذي يتحكم في ما إذا كانت subcolumns المستخرجة من Tuple(...) من Tuple وVariant وDynamic وJSON تُعاد بصيغة Nullable(Tuple(...)) (مع القيمة NULL للصفوف المفقودة) أو بصيغة Tuple(...) (مع قيم tuple الافتراضية للصفوف المفقودة). وهو معطّل افتراضيًا، ولا يمكن تغييره إلا بإعادة تشغيل الخادم. #97299 (Nihal Z. Miaji).
  • أصبح type_json_allow_duplicated_key_with_literal_and_nested_object مفعّلًا افتراضيًا، ما يتجنب أخطاء المفاتيح المكررة عند parsing JSON مثل {"a" : 42, "a" : {"b" : 42}}، والذي قد ينتجه ClickHouse من البيانات الأصلية {"a" : 42, "a.b" : 42}. #97423 (Pavel Kruglov).
  • أصبحت column statistics الآن في مرحلة GA. وأصبح الإعداد allow_experimental_statistics (القيمة الافتراضية false) متقادمًا لصالح allow_statistics (القيمة الافتراضية true)؛ كما تمت ترقية allow_statistics_optimize من beta إلى GA؛ وينشئ ClickHouse إحصاءات minmax وuniq للأعمدة الجديدة (إعداد MergeTree ‏auto_statistics_types)؛ ولتجنّب إبطاء عمليات INSERT، أصبح materialize_statistics_on_insert معطّلًا افتراضيًا. #97487 (Han Fei).
  • وُضّحت العلاقة بين enable_parallel_replicas وautomatic_parallel_replicas_mode: لا يمكن للاستعلام استخدام parallel replicas إلا إذا كانت قيمة enable_parallel_replicas > 0. عند automatic_parallel_replicas_mode=1، يُتخذ القرار أثناء التخطيط استنادًا إلى الإحصاءات المجمّعة؛ وعند automatic_parallel_replicas_mode=0، تُستخدم parallel replicas لجميع الاستعلامات المدعومة بغض النظر عن الإحصاءات. أما Distributed insert-select مع parallel replicas فيتصرف دائمًا كما لو أن automatic_parallel_replicas_mode=0. #97517 (Nikita Taranov).
  • فُعّلت ميزة impersonate (EXECUTE AS target_user) افتراضيًا. #97870 (Vitaly Baranov).
  • أُضيف الإعداد access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users (مسموح به افتراضيًا)، والذي يمنع استخدام settings profiles المعرّفة في config (باستثناء profile ‏default) للمستخدمين المعرّفين عبر SQL. #98662 (Alexander Tokmakov).
  • أُضيف إعداد للتحكم في سلوك عدم تطابق النوع لـ Variant وDynamic (‏throw أو إرجاع NULL). #99085 (Bharat Nallan).
  • تغيّرت القيمة الافتراضية لـ stderr_reaction من throw إلى log_last بالنسبة إلى Executable UDFs. ولم تعد UDFs التي تكتب تحذيرات إلى stderr تفشل عندما يكون رمز الخروج 0، كما أصبحت استثناءات رمز الخروج تتضمن الآن محتوى stderr. #99232 (Xu Jia).
  • أُضيف الإعداد input_format_column_name_matching_mode، الذي يتيح درجات مختلفة من حساسية حالة الأحرف في input formats. #99346 (manerone).
  • لم تعد الإحصاءات التلقائية مفعّلة في system tables، لأنها نادرًا ما تستفيد منها. #102862 (Han Fei).

جداول النظام والمراقبة

  • باتت فهارس تخطي البيانات المستخدمة أثناء تنفيذ الاستعلامات تُسجَّل الآن في system.query_log ضمن عمود جديد باسم skip_indices. #99793 (Grant Holly).
  • أُضيف العمود projections_duration_ms إلى system.part_log، وهو يسجّل مدة دمج/إعادة بناء كل إسقاط على حدة بالمللي ثانية. #98292 (Amos Bird).
  • أُضيف الاسم المستعار للعمود INDEX_LENGTH إلى information_schema.tables. #101705 (Robert Schulze).
  • يتجاهل information_schema.tables الآن أجزاء الجدول غير النشطة، مما يجعل قيم أحجام الجداول المعروضة أكثر واقعية. #101706 (Robert Schulze).

ClickHouse Keeper

  • لم تعد find_super_nodes تعلق أثناء اجتياز العقد الفرعية لأول عقدة فائقة، مما يتيح العثور على أكثر من عقدة واحدة. #97819 (pufit).
  • تُعلَّم جلسة ZooKeeper فورًا على أنها منتهية الصلاحية عند بدء الإنهاء، بدلًا من انتظار انتهاء خيط الإرسال. ويتيح ذلك للخيوط الأخرى إنشاء جلسة جديدة دون تأخير. #99102 (Raúl Marín).
  • تُتخطى طلبات Keeper المتقادمة للجلسات التي انقطعت بالفعل، لتجنب جولات Raft غير الضرورية ذهابًا وإيابًا. ويُقيَّد عدد الجلسات المكتملة المتتبَّعة بإعداد coordination max_finished_sessions_cache_size. #99246 (Antonio Andelic).
  • مُنع أمر Keeper mntr من التعليق بسبب التنافس على الأقفال. #99472 (Antonio Andelic).
  • خُفِّض التنافس على الأقفال في dispatcher الخاص بـ Keeper عبر استدعاء callbacks وتمرير read requests خارج نطاق mutex، كما أُضيفت حواجز أقفال مُقاسة لأغراض observability. #99751 (Antonio Andelic).

إدارة الذاكرة

  • أُضيفت معلَمة الضبط use_separate_cache_arena للتحكم في فصل منطقة ذاكرة التخزين المؤقت. #100664 (Seva Potapov).

تنسيقات البيانات

  • أُضيف الإعداد output_format_trim_fixed_string لإزالة وحدات البايت الصفرية اللاحقة من قيم FixedString في تنسيقات الإخراج النصية. #97558 (NeedmeFordev).
  • أصبح من الممكن الآن تحليل ملفات GeoParquet التي تحتوي على أنواع Geo مختلفة ضمن العمود نفسه. #97851 (Mark Needham).
  • تتطلب عملية إلغاء التسلسل لحالات AggregateFunction الثنائية الآن استهلاك الإدخال بالكامل. وإذا وُجدت وحدات بايت زائدة وغير لازمة في النهاية، فإن ClickHouse يطرح استثناءً بدلًا من قبول بيانات حالة غير سليمة. #98786 (Nihal Z. Miaji).
  • يمكن للمستخدمين الآن كتابة أنواع بيانات interval في ClickHouse إلى تنسيق Arrow. #99519 (Peter Nguyen).
  • أُضيف دعم أصلي لاستيراد أنواع بيانات UUID وتصديرها في تنسيقات Arrow وParquet، مع استدلال منطقي تلقائي لـ UUIDs ذات المستوى الأعلى ودعم تلميحات مخطط صريحة لـ UUIDs المتداخلة. #99521 (Ivan).
  • أصبح النظام يتسامح مع غياب الحشو في نهاية آخر كتلة من ملفات Parquet. #99857 (Seva Potapov).
  • يتضمن الآن تصدير UUIDs إلى Parquet عبر مُرمّز Arrow توصيف نوع UUID الصحيح، مما يلغي الحاجة إلى تحويل بيانات FixedString(16) يدويًا عند قراءة الملفات مرة أخرى. #100150 (Ivan).
  • أُضيف دعم أصلي لاستيراد نوعي البيانات StringView وBinaryView من Apache Arrow إلى أعمدة String في ClickHouse، مما يحسّن التوافق مع إدخال البيانات المعتمد على Arrow. #100762 (Ivan).
  • أُضيف دعم Nullable(Tuple) في تنسيقات Arrow وArrowStream وORC وParquet القديمة. #101272 (Nihal Z. Miaji).

المجموعات المُسمّاة والقواميس

  • أُضيف sslmode إلى المفاتيح المسموح بها لمصادر قواميس PostgreSQL، مما يتيح تهيئة وضع SSL لاتصالات قواميس PostgreSQL (على سبيل المثال في AWS RDS، الذي يفرض SSL افتراضيًا). #98014 (mcalfin).
  • تجنُّب حذف المجموعات المُسمّاة التي تُعدّ تبعيات لمصادر القواميس. #98127 (Pablo Marcos).
  • أُضيف دعم لأنواع Map وJSON/Object بوصفها سمات للقواميس. ويمكن للقواميس الآن تخزين الأنواع المعقّدة واسترجاعها، بما في ذلك Map(String, String) وMap(String, Array(String)) وJSON وNullable(JSON)، في كلٍّ من تخطيطي FLAT وHASHED. #98627 (yanglongwei).
  • أصبح SYSTEM RELOAD DICTIONARIES الآن يعيد تحميل القواميس وفق ترتيب طوبولوجي، بحيث ترى القواميس التي تستمد بياناتها من قواميس أخرى بيانات جديدة بعد إعادة التحميل. #98356 (Alexey Milovidov).
  • لم تعد قواميس cache تأخذ قفلًا حصريًا في hasKeys، مما يقلّل التنافس على الأقفال باستخدام قفل مشترك لقراءات cache. #100796 (liuguangliang).

تحسينات أخرى

  • لم تعد تلميحات ACCESS_DENIED تكشف أسماء الأعمدة ما لم يكن المستخدم مخولًا بعرض جميع الأعمدة المطلوبة؛ بينما تبقى أسماء قاعدة البيانات/الجدول ظاهرة في التلميح. #91067 (filimonov).
  • أعد تحميل config الخاصة بالـ عنقود إذا تغيّرت عناوين IP المرتبطة باسم مضيف الخادم المحلي، بدلًا من تغيّر عناوين IP لأي مضيف. #93726 (Zhigao Hong).
  • تفريغ المخازن المؤقتة لـ logging غير المتزامن في حال حدوث تعطل. #97836 (Azat Khuzhin).
  • تقليل عمليات القفل أثناء التحكم في الوصول. #97894 (Nikita Taranov).
  • تحديث ClickStack إلى الإصدار 2.20.0. #98252 (Aaron Knudtson).
  • تعطيل AI SQL generation (الأمر ??) في client المضمّن (بروتوكولا SSH وWebSocket) لمنع الوصول إلى متغيرات البيئة الخاصة بالخادم. #100290 (Alexey Milovidov).
  • إرسال NACK للرسائل المعطوبة عند استخدام تخزين RabbitMQ. #102157 (Seva Potapov).

إصلاحات الأخطاء

إصلاحات JOIN

  • تم إصلاح مشكلة عمود مفقود عند استخدام اسم مستعار لمعرّف غير قياسي في JOIN مع المحلل القديم. #95679 (Zhigao Hong).
  • تم إصلاح نتيجة غير صحيحة عند استخدام خوارزمية grace_hash مع عمليات join غير المتساوية، عندما تعذّرت معالجة الـ block الأيسر بالكامل بسبب قيود الحجم على نتيجة الـ join. #97866 (János Benjamin Antal).
  • تم إصلاح استثناء خطأ منطقي مرتبط بـ analyzer_compatibility_join_using_top_level_identifier و ARRAY JOIN. #98179 (Vladimir Cherkasov).
  • تم إصلاح استثناء LOGICAL_ERROR عندما جرى تبديل RIGHT JOIN المغلّف داخل CROSS JOIN بواسطة تحسين query_plan_join_swap_table في مسار شيفرة خطوة join القديمة. #98279 (Alexey Milovidov).
  • تم إصلاح استثناء “Pipeline stuck” في عمليات join من نوع full_sorting_merge، وكان سببه توقف متبادل في PingPongProcessor عندما أنشأ تحسين FilterBySetOnTheFly تبعية دائرية مع MergeJoinTransform. #98454 (Alexey Milovidov).
  • تم إصلاح استثناء خطأ منطقي عند استخدام CROSS JOIN مع INNER JOIN USING معًا. #98459 (Alexey Milovidov).
  • تم إصلاح استثناء LOGICAL_ERROR عند استخدام arrayJoin في تعبير تصفية مع OUTER JOIN مع تفعيل join_use_nulls. #98464 (Alexey Milovidov).
  • تم إصلاح استثناء BAD_GET ونتائج query غير صحيحة عند استخدام expression غير Boolean (مثل sin(col)) في كلٍّ من WHERE و SELECT مع JOIN، بسبب إفساد تحسين دفع التصفية إلى الأسفل لعُقد DAG المشتركة. #98681 (Alexey Milovidov).
  • تم إصلاح LOGICAL_ERROR بعنوان “Replica decided to read in Default mode, not in WithOrder” عند استخدام read_in_order_through_join مع parallel replicas. #98685 (Alexey Milovidov).
  • كان LEFT ANTI JOIN مع عدة أعمدة مفاتيح join يُرجع نتائج خاطئة عندما تكون enable_join_runtime_filters=1 (وهو الإعداد الافتراضي). #98871 (Alexander Gololobov).
  • تم إصلاح خطأ في تحسين query_plan_convert_any_join_to_semi_or_anti_join كان يُرجع نتيجة غير صحيحة للصفوف غير المطابقة. #99112 (Yarik Briukhovetskyi).
  • تم إصلاح استثناء في الدوال التي تعمل على ColumnReplicated مع الصفوف غير المُشار إليها الناتجة عن JOIN. #99564 (Hechem Selmi).
  • تم إصلاح حالة نادرة كان يمكن أن تنتج فيها عملية join مع إعادة الترتيب نتيجة خاطئة. #100790 (Yarik Briukhovetskyi).
  • تم إصلاح نتائج خاطئة عندما كانت عملية JOIN مع تحسين shard-by-PK تستخدم query condition cache، وكانت بعض الأجزاء تُستبعد بواسطة conditions مخزنة مؤقتًا. #100926 (Groene AI).
  • تم إصلاح استثناء NOT_FOUND_COLUMN_IN_BLOCK عند استخدام ARRAY JOIN مع JOIN USING عندما يكون analyzer_compatibility_join_using_top_level_identifier مُمكّنًا. #101507 (Vladimir Cherkasov).
  • تم إصلاح الترتيب غير الصحيح للصفوف في الاستعلامات التي تستخدم ORDER BY مع خوارزمية join ‏grace_hash، والذي كان قد ينتج عنه مخرجات غير صحيحة بصمت. #102036 (János Benjamin Antal).
  • تم إصلاح الخطأ LOGICAL_ERROR ‏(Unexpected size of index type) الذي كان يمكن أن يحدث في استعلامات RIGHT JOIN وFULL JOIN عند تهيئة max_bytes_in_join. #102042 (Jimmy Aguilar Mena).

إصلاحات الاستعلام والمحلِّل

  • تم إصلاح طريقة حفظ هدف جدول Alias كتبعية DDL عندما لا يكون مؤهّلًا بالكامل: إذ يُحفَظ الآن مع قاعدة بيانات جدول Alias بدلًا من قاعدة بيانات الجلسة. #95175 (Enric Calabuig).
  • تم إصلاح الخطأ Block structure mismatch in stream الناتج عن إرجاع أعمدة غير ضرورية من Lazy materialization. #96682 (Nikolai Kochetov).
  • تم إصلاح استثناء في مقارنة Tuple يتضمن عناصر من النوع Nothing (مثل المقارنة مع عناصر Tuple من NULL) عند استخدامه مع GROUPING SETS و ORDER BY. #97509 (Alexey Milovidov).
  • تم إصلاح الاستثناء “Context has expired” في الاستعلامات الفرعية المترابطة التي تحتوي على دوال الجداول مثل url(). #97544 (Alexey Milovidov).
  • تم إصلاح الاستثناءات والسلوك غير الصحيح في optimize_syntax_fuse_functions مع الإسقاطات المجمّعة، وأنواع Date، والحفاظ على أسماء الأعمدة. #97545 (Alexey Milovidov).
  • أُزيلت عملية إعادة كتابة استعلام غير صحيحة من replaceRegexpOne إلى extract كانت تؤدي إلى نتائج خاطئة عندما لا يحدث تطابق مع regexp؛ كما تم إصلاح استثناء عند استخدام replaceRegexpOne مع GROUP BY ... WITH CUBE و group_by_use_nulls=1. #97546 (Alexey Milovidov).
  • تم إصلاح استثناءات LOGICAL_ERROR الناتجة عن LowCardinality داخل الأنواع المركبة (Variant و Dynamic و Tuple) في concatWithSeparator و format والاستعلامات الفرعية IN و GLOBAL IN وعمليات الربط مع مرشحات وقت التشغيل. #97831 (Raúl Marín).
  • تم إصلاح استثناء LOGICAL_ERROR “لم يتم تعيين معلومات chunk للـ chunk في MergingAggregatedTransform” عند استخدام ARRAY JOIN مع دالة الجدول merge() على عدة جداول Distributed مدمجة مع GROUP BY. #97838 (Raúl Marín).
  • تم إصلاح خلل كان يمنع استخدام CTEs مع عمليات insert-select الموزعة. #97889 (Yarik Briukhovetskyi).
  • تم إصلاح عدم تطابق في الأعمدة. #97921 (Kai Zhu).
  • تم إصلاح segfault في تحسين خطة الاستعلام عند تحويل OUTER JOIN إلى INNER JOIN باستخدام arrayJoin في تعبير تصفية. #98147 (Alexey Milovidov).
  • تم إصلاح LOGICAL_ERROR “Trying to execute PLACEHOLDER action” عند الإشارة إلى الأعمدة المترابطة من الاستعلامات الخارجية داخل دوال لامبدا مثل arrayMap. #98285 (Alexey Milovidov).
  • تم إصلاح استثناء logical error في caseWithExpression عندما كان تعبير CASE يتضمن materialize(NULL) أو وسيطات أخرى من Nullable(Nothing). #98290 (Alexey Milovidov).
  • تم إصلاح استثناء cast غير صالح عند تصفية العمود الافتراضي _table في دالة الجدول merge. #98291 (Alexey Milovidov).
  • تم إصلاح استثناء كان يحدث عند استخدام ORDER BY ... WITH FILL مع LIMIT BY معًا. #98361 (Alexey Milovidov).
  • تم إصلاح الاستثناء “Column … query tree node does not have valid source node” عند ربط جدول Merge (الذي يغلّف جدول Distributed) بجدول آخر. #98376 (Alexey Milovidov).
  • تم إصلاح الاستثناء “Column identifier is already registered” عند استخدام count_distinct_optimization مع عبارة QUALIFY. #98433 (Alexey Milovidov).
  • تم إصلاح الاستثناء “cannot be inside Nullable type” عند استخدام IN/NOT IN مع معاملات أعمدة LowCardinality (مثل a NOT IN (b) عندما تكون a من النوع LowCardinality(String)). #98443 (Alexey Milovidov).
  • تم إصلاح استثناء LOGICAL_ERROR “Projection cannot increase the number of rows in a block” عند دمج الأجزاء مع TTL يحذف جميع الصفوف، ومع projection تجميعي ذي مفتاح GROUP BY ثابت. #98458 (Alexey Milovidov).
  • تم إصلاح استثناء في استعلامات DISTINCT عند استخدام projections تجميعية، وكان materialize يتسبب في اختلافات في نوع LowCardinality بين الاستعلام والـ projection. #98462 (Alexey Milovidov).
  • تم إصلاح استثناء خطأ منطقي “Replica decided to read in WithOrder mode, not in ReverseOrder” عند استخدام parallel replicas مع optimize_aggregation_in_order. #98467 (Alexey Milovidov).
  • تم إصلاح نتيجة غير متوقعة عند استخدام read_in_order_use_virtual_row مع الدوال الرتيبة. #98514 (Vladimir Cherkasov).
  • تم إصلاح LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in' عند استخدام PREWHERE مع استعلام فرعي IN على جداول MergeTree. #98522 (Alexey Milovidov).
  • تم إصلاح الاستثناء “Sorting column wasn’t found in the ActionsDAG’s outputs” عندما يكون query_plan_convert_join_to_in مفعّلًا مع query_plan_merge_expressions = 0. #98526 (Alexey Milovidov).
  • تم إصلاح LOGICAL_ERROR عندما يكون Identifier فارغًا بعد substitution للمعاملات. #98530 (Pervakov Grigorii).
  • تم إصلاح distributed index analysis مع expressions (وليس الأعمدة فقط) في المفتاح الأساسي، وهو ما أدى إلى عدم تصفية granules الزائدة على replicas البعيدة. #98561 (Azat Khuzhin).
  • تم إصلاح خطأ منطقي “TABLE_FUNCTION is not allowed in expression context” عندما ظهرت table function مع alias عدة مرات ضمن نطاق الاستعلام نفسه (مثلًا في عبارتي PREWHERE وQUALIFY). #98557 (Alexey Milovidov).
  • تم إصلاح الاستثناء “Bad cast from type DB::TableFunctionNode to DB::QueryNode” عند استخدام table function ‏input كـ argument للدالة remote. #98694 (Alexey Milovidov).
  • تم إصلاح استثناء في LogicalExpressionOptimizerPass عندما كانت دالة Boolean في مقارنة equals تُرجع نوع Variant. #98712 (Alexey Milovidov).
  • تم إصلاح استثناء UNKNOWN_IDENTIFIER عند الاستعلام عن table function ‏merge() أو محرك Merge على جداول تحتوي على JSON columns ذات parameters مختلفة، وأعمدة ALIAS تشير إلى مسارات فرعية في JSON، مع تمكين analyzer الجديد. #98753 (Pavel Kruglov).
  • تم إصلاح تحسين optimize_skip_unused_shards مع analyzer عندما كانت وحدة التخزين Distributed مستخدمة في View. #98754 (Nikolai Kochetov).
  • تم إصلاح استثناء LOGICAL_ERROR (عدم تطابق بنية block في removeUnusedColumns) الذي قد يحدث مع FINAL + PREWHERE + expression ثابت في WHERE + دوال aggregate لا تعتمد على الأعمدة مثل count(). #98778 (Alexey Milovidov).
  • تم إصلاح الاستثناء “Inconsistent table names” عند استخدام table function ‏view() التي تحتوي على JOINs داخل JOIN آخر (فقط مع analyzer القديم). #98809 (Alexey Milovidov).
  • تم إصلاح استثناء عند تركيب loop مع cluster table functions. #98860 (Konstantin Bogdanov).
  • تم إصلاح LOGICAL_ERROR بالنص “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B”. #98900 (Azat Khuzhin).
  • تم إصلاح الاستثناء “Scalar doesn’t exist” عند الاستعلام عن shard بعيد مع ضبط optimize_const_name_size وتعيين enable_scalar_subquery_optimization = 0. #98979 (andriibeee).
  • تم إصلاح NOT_FOUND_COLUMN_IN_BLOCK في بعض queries التي تتضمن GROUP BY وexpressions تشمل lookup عكسيًا في dictionary، ومقارنات تحويل Date/DateTime، ومقارنات tuple. #98980 (Nihal Z. Miaji).
  • تم إصلاح خطأ كانت فيه EXISTS تتجاهل clauses ‏LIMIT وOFFSET في subqueries، مما يؤدي إلى نتائج غير صحيحة عندما لا يُرجع subquery أي rows بسبب offset أو limit يساوي صفرًا. #99005 (andriibeee).
  • تم إصلاح استثناء “Block structure mismatch” عندما واجه تحسين filter push-down expression من نوع AND اختُزلت إلى ثابت مع GROUPING SETS. #99010 (Alexey Milovidov).
  • تم إصلاح LOGICAL_ERROR عند الاستعلام عن جدول يحتوي على كل من ROW POLICY وعمود ALIAS يستخدم dictGet، وكان السبب الوصول المبكر إلى expression الجدول أثناء حل عمود ALIAS في analyzer الجديد. #99065 (Peng).
  • أُصلح عطل segfault في CTE تكراري مع remote() + view(). #99081 (Konstantin Bogdanov).
  • تخطّي تحليل الفهرس الإضافي غير الضروري عند تطبيق تحسين القراءة بالترتيب. #99084 (Vladimir Cherkasov).
  • أُصلحت عمليات التحقق من الوصول أثناء InverseDictionaryLookupPass من خلال التحقق من الوصول مرة واحدة فقط قبل تشغيل مرحلة التحسين. #99210 (Mikhail Artemenko).
  • أُصلح optimize_skip_unused_shards مع المحلّل الجديد عند استخدام جدول Distributed داخل استعلام فرعي IN. #99436 (Nikolai Kochetov).
  • أُصلح خطأ heap-use-after-free في INTERSECT/EXCEPT عندما كان الاستعلام ينتج أسماء أعمدة مكررة. #99471 (Alexey Milovidov).
  • أُصلح خطأ منطقي في ALTER TABLE ... DROP PART عند استخدام query parameter مقيّد النوع لاسم الجزء. #99489 (Alexey Milovidov).
  • أُصلح استثناء std::length_error عند الاستعلام عن جداول النظام الفارغة باستخدام Pretty format عبر واجهة HTTP. #99541 (Alexey Milovidov).
  • أُصلح تراجع الأداء في المحلّل من خلال استبعاد الأعمدة غير المستخدمة من ARRAY JOIN. #99587 (Dmitry Novik).
  • أُصلح استثناء (Bad get: has Tuple, actual type String) في ConditionSelectivityEstimator عندما كان الاستعلام يستخدم IN مع query parameter قياسي واحد (مثل WHERE col IN ({p:String})) على جدول يحتوي على إحصاءات الأعمدة وكان use_statistics مفعّلًا. #99614 (Ilya Yatsishin).
  • أُصلح استثناء “Block structure mismatch” في الاستعلامات التي تتضمن clause HAVING حيث كان تعبير التصفية يحتوي على كلٍّ من دالة تجميعية مغلّفة داخل دالة تُنتج NULL وmaterialize(0). #99915 (Alexey Milovidov).
  • أُصلح خطأ منطقي يتعلق باستعلام فرعي مترابط داخل argument لـ untuple. #99917 (Vladimir Cherkasov).
  • أُصلح استثناء “Inconsistent AST formatting” في ALTER TABLE ... MODIFY QUERY مع استعلامات فرعية متداخلة تحتوي على SETTINGS عندما كان ALTER نفسه يحتوي أيضًا على SETTINGS. #99938 (Nikita Mikhaylov).
  • أُصلح استثناء LOGICAL_ERROR وهو “Not-ready Set” في الدالة IN أثناء تحسين خطة الاستعلام باستخدام convertAnyJoinToSemiOrAntiJoin. #99939 (Alexey Milovidov).
  • أُصلح استثناء LOGICAL_ERROR وهو “Unexpected node type for table expression … Actual IDENTIFIER” عند استخدام استعلام فرعي scalar داخل argument غير محلول لـ table function. #100014 (Alexey Milovidov).
  • أُصلح العدد التربيعي للاستعلامات المنفّذة عند استخدام distributed_index_analysis مع predicates تحتوي على استعلامات فرعية IN. #100287 (Anton Popov).
  • تم إصلاح استثناء “عدم تطابق بنية الكتلة” عند استخدام GROUP BY ... WITH TOTALS HAVING مع UNION DISTINCT وتعبيرات Nullable. #100293 (Alexey Milovidov).
  • تم إصلاح استثناء “عدم اتساق تنسيق AST” في بنيات التصحيح عند استخدام GROUP BY CUBE(...) WITH ROLLUP أو تراكيب مشابهة. #100376 (Alexey Milovidov).
  • تم إصلاح استثناء عند إنشاء view باستخدام الأسماء المستعارة للأعمدة واستعلامات SELECT * أو EXCEPT/INTERSECT. #100386 (Alexey Milovidov).
  • تم إصلاح استثناء TOO_MANY_ROWS في استعلامات SELECT count() مع max_rows_to_read / force_primary_key عندما كانت البيانات موزعة على عدة parts بحدود granule غير متطابقة. #100408 (Alexey Milovidov).
  • تم إصلاح حالات NOT_FOUND_COLUMN_IN_BLOCK حيث كان جزء SELECT في projection يحتوي على أعمدة غير موجودة في جزء SELECT الأصلي من الاستعلام. #100623 (Yarik Briukhovetskyi).
  • أصبح من الممكن تمرير sharding key إلى table functions cluster() وclusterAllReplicas() عند استخدام table function كمصدر (مثل cluster('name', view(...), sharding_key)). #100665 (Sergey Veletskiy).
  • تم إصلاح أنواع argument غير الصحيحة في AggregateFunction ضمن العدّ البسيط المُحسَّن، والتي كانت تتسبب في استثناء NUMBER_OF_ARGUMENTS_DOESNT_MATCH عند الاستعلام عن تعبيرات مثل count(v0 + v1) على Distributed tables. #100794 (YjyJeff).
  • تم إصلاح logical error بعنوان “عقدة query tree غير صالحة للإجراء” عند استخدام INTERSECT ALL / UNION ALL مع التعبيرات المطوية إلى ثوابت. #100977 (Alexey Milovidov).
  • تم إصلاح الإبلاغ غير الصحيح عن الخطأ UNKNOWN_IDENTIFIER عندما كان نفس alias مستخدمًا لعدة تعبيرات في SELECT؛ ويُبلَّغ الآن عن الخطأ الصحيح MULTIPLE_EXPRESSIONS_FOR_ALIAS. #101040 (Alexey Milovidov).
  • تم إصلاح استثناء في DirectJoinMergeTreeEntity عندما كانت blocks في pipeline تحتوي على أعمدة ColumnConst مدمجة مع أعمدة عادية. #101046 (Alexey Milovidov).
  • تم إصلاح وجود مسافة زائدة في formatting للأسماء المستعارة لأعمدة CTE (WITH t (a, b)WITH t(a, b)). #101049 (Alexey Milovidov).
  • تم إصلاح فشل table functions remote/cluster مع table functions المتداخلة مثل merge عندما يكون analyzer مفعّلًا. #101055 (Alexey Milovidov).
  • تم إصلاح تطبيق OFFSET مرتين في distributed queries عند prefer_localhost_replica=1، ما كان يؤدي إلى إرجاع عدد rows أقل من المتوقع. #101071 (Nihal Z. Miaji).
  • تم إصلاح الخطأ “Illegal type Decimal64 of start parameter” في دوال التجميع للسلاسل الزمنية عند استخدام serialize_query_plan=1 مع parallel replicas. #101083 (Groene AI).
  • تم إصلاح نتائج استعلام غير صحيحة عند استخدام ثابت عددي صحيح كبير (مثل 256 و2147483648) كمسند منطقي في عبارة WHERE مع AND على جداول MergeTree. #101287 (Groene AI).
  • تم إصلاح تعطل مصحوب بالرسالة “Logical error: Reading from materialized CTE before materialization” عندما كان استعلام فرعي scalar يشير إلى سلسلة من Materialized CTEs التابعة. #101305 (Groene AI).
  • تم إصلاح استثناء عند تحويل سلسلة نصية تحتوي على بيانات زائدة في نهايتها إلى النوع الفارغ Tuple(). #102011 (Alexey Milovidov).
  • تم إصلاح خطأ منطقي عند تحليل سلسلة tuple فارغة وغير صحيحة. #102289 (Nihal Z. Miaji).
  • تم إصلاح نتائج تجميع غير صحيحة (صفوف مكررة) عند استخدام optimize_aggregation_in_order=1 مع أعمدة GROUP BY المرتبة بشكل مختلف عن sorting key للجدول. #102299 (Groene AI).
  • تم إصلاح استثناء في getStructureOfRemoteTable عندما أعاد الجزء المحلي أعمدة فارغة بسبب تنفيذ DDL متزامن. #102604 (Alexey Milovidov).
  • تم تحسين سلاسل OR في سياسة الصفوف إلى IN في المحلل الجديد. #102915 (Azat Khuzhin).
  • تم إصلاح النتائج غير الصحيحة التي تُرجعها WHERE x AND toNullable(N) على جداول MergeTree عندما تكون N قيمة صحيحة أوسع من UInt8 (مثل 256 أو 65535 أو 2147483648 أو أي عدد صحيح سالب). #103077 (Groene AI).

إصلاحات MergeTree والتخزين

  • تم إصلاح خطأ منطقي عند Attach لجزء في MergeTree إذا وُجدت عدة عمليات إعادة تسمية متسلسلة بين الفصل والإرفاق. #96351 (Alexey Milovidov).
  • تم إصلاح احتساب uncompressed_hash غير الحتمي لأجزاء Compact في MergeTree عند استخدام عدة compression codecs، مما قد يؤدي إلى سلوك deduplication غير صحيح. #97522 (Alexey Milovidov).
  • تم إصلاح الإبلاغ الخاطئ عن استثناءات MEMORY_LIMIT_EXCEEDED على أنها CORRUPTED_DATA أثناء عمليات الدمج في SummingMergeTree وCoalescingMergeTree. #97537 (János Benjamin Antal).
  • تُرجع hasPartitionId الآن القيمة false إذا كان هناك partition آخر ذو معرّف أعلى ضمن مجموعة data parts. #97748 (Mikhail Artemenko).
  • تم إصلاح mutation بعد lightweight update مع secondary indices. #98044 (Raúl Marín).
  • تم إصلاح النتائج غير الصحيحة لاستعلامات FINAL عند الجمع بين skip indexes لمفتاح أساسي وأخرى ليست للمفتاح الأساسي. #98097 (Raúl Marín).
  • إذا لم تكن أعمدة partition key مشمولة ضمن sorting key، فقد يقوم partition pruning بتخطي partitions تحتوي على صفوف كان ينبغي أن “تفوز” أثناء deduplication في FINAL بشكل غير صحيح. #98242 (Yarik Briukhovetskyi).
  • تم إصلاح احتمال حدوث deadlock عندما تعمل عمليتا MOVE PARTITION concurrent على الزوج نفسه من الجداول ولكن في اتجاهين متعاكسين. #98264 (Alexey Milovidov).
  • تم إصلاح استثناء LOGICAL_ERROR بعنوان “Invalid binary search result in MergeTreeSetIndex” الذي قد يُطلقه تحويل toDate على key columns عندما تتجاوز البيانات الحد 65535. #98276 (Alexey Milovidov).
  • تم إصلاح فشل متقطع في deduplication، إذ كانت عمليات إعادة الإدراج تُعامل خطأً على أنها deduplicated بسبب عدم اتساق ترتيب التنظيف بين دليلي ZooKeeper blocks/ وdeduplication_hashes/. #98293 (Alexey Milovidov).
  • تم إصلاح تعلّق mutations الخاصة بـ MATERIALIZE INDEX وMATERIALIZE PROJECTION عندما يُحذف index أو projection قبل اكتمال mutation. #98369 (Alexey Milovidov).
  • تم إصلاح نتائج partition pruning غير الصحيحة بعد merging للأجزاء التي تحتوي على أعمدة partition key من النوع Nullable، وذلك بسبب حدود min-max index غير صحيحة. #98405 (Amos Bird).
  • تم إصلاح استثناء LOGICAL_ERROR في renameAndCommitEmptyParts كان يمكن أن يحدث عند تشغيل TRUNCATE TABLE بشكل concurrent مع OPTIMIZE TABLE باستخدام Transactions في MergeTree. #98508 (Alexey Milovidov).
  • تم إصلاح overflow عشري أثناء partition pruning باستخدام DateTime64. #98628 (Yarik Briukhovetskyi).
  • تم إصلاح إعادة إحياء outdated data parts الناتجة عن تنظيف غير صحيح للأجزاء الفارغة المغطية. #98698 (Shaohua Wang).
  • تم إصلاح اكتشاف مدى فائدة فهرس التخطي من نوع set مع مسند OR مقترن بالقيمة false (أي or(x, 0)). #98776 (Azat Khuzhin).
  • تم إصلاح عدم تطبيق فهارس التخطي (وشروط المفتاح الأساسي) على أعمدة ALIAS عند تعطيل دمج التعبيرات في خطة الاستعلام (query_plan_merge_expressions = 0 أو query_plan_enable_optimizations = 0). #98960 (Peng).
  • تم إصلاح التقليم غير الصحيح أو غير الكافي عند استخدام startsWith أو LIKE أو NOT LIKE مع عمود FixedString. بالإضافة إلى ذلك، يمكن الآن لدالة التحويل من FixedString إلى String تقليم الحبيبات عند تطبيقها على عمود مفتاح. #99001 (Nihal Z. Miaji).
  • تم إصلاح استثناء عند قراءة patch parts (lightweight updates) من دون العمود _part_offset في خطة الاستعلام. #99023 (Alexey Milovidov).
  • أصبح استعلام مثل SELECT * FROM table WHERE pk_id = ''، حيث يكون pk_id مفتاحًا أساسيًا من نوع String، يستخدم الآن فهرس المفتاح الأساسي بشكل صحيح لتصفية الحبيبات. #99027 (Shankar Iyer).
  • تم إصلاح استثناء عند إنشاء جدول يحتوي على عمود EPHEMERAL يحمل الاسم نفسه لعمود افتراضي (مثل _part_offset). #99031 (Alexey Milovidov).
  • تم إصلاح LOGICAL_ERROR الناتج عن عدم تطابق ترتيب الأعمدة في patch parts. #99164 (Pablo Marcos).
  • تم إصلاح فشل ALTER TABLE UPDATE/DELETE مع الخطأ Missing columns عندما يحتوي الجدول على عمود MATERIALIZED يعتمد تعبيره على عمود EPHEMERAL. #99281 (Yash).
  • تم إصلاح التوافق عند ترقية الجداول المكررة ذات فهارس minmax الضمنية من الإصدار 25.10 إلى الإصدارات الأحدث. #99392 (Raúl Marín).
  • تم إصلاح حالة نادرة كان فيها data part يُعلَّم خطأً على أنه تالف ثم يُفصل بعد استعلام DETACH/ATTACH TABLE. #99529 (Anton Popov).
  • تم إصلاح فشل assertion في rows_sources أثناء vertical merge عند التبديل السريع لـ SYSTEM STOP/START MERGES خلال merge لجدول يحتوي على أعمدة Dynamic. #99532 (Alexey Milovidov).
  • تم إصلاح التقليم غير الصحيح للأقسام مع toWeek()، والذي كان يتسبب في أن تُرجع الاستعلامات التي تحتوي على WHERE toWeek(date, mode) = N نتائج فارغة للأسابيع 49–52 في الجداول المُقسَّمة باستخدام toYYYYMM(date). #99542 (Takumi Hara).
  • تم إصلاح LOGICAL_ERROR عند استخدام ALTER TABLE ADD COLUMN لإنشاء عمود EPHEMERAL يحمل الاسم نفسه لعمود افتراضي (مثل _part_offset). #99549 (Alexey Milovidov).
  • تم إصلاح عدم قيام CLEAR COLUMN بإعادة بناء projections وعدم إعادة تقييم materialized columns التي تعتمد على العمود الذي تمت إزالته، مما قد يتسبب في استثناءات أو تلف البيانات أثناء عمليات merge اللاحقة. #99565 (Desel72).
  • لم يعد يتم تمييز الجزء الذي يحتوي على إسقاطات غير معروفة على أنه مفقود نهائيًا. #99623 (Sema Checherinda).
  • تم إصلاح مرجع معلّق في injectRequiredColumns كان يتسبب في تعطل أثناء الدمج. #99679 (Tuan Pham Anh).
  • تم إصلاح خطأ منطقي أثناء دمج أجزاء الإسقاط بعد CLEAR COLUMN في جدول يحتوي على إسقاطات وأجزاء مضغوطة. #100068 (Pavel Kruglov).
  • تم إصلاح LOGICAL_ERROR “Stream … not found” عند الإدراج في جدول يحتوي على أعمدة Array(JSON) متداخلة داخل الأجزاء العريضة مع optimize_on_insert=0. #100475 (Pavel Kruglov).
  • يتم الآن تقييم وسائط المحرك لـ StorageAlias قبل تخزين التعريف، بحيث تُحوَّل تعبيرات مثل currentDatabase() إلى قيم حرفية قبل حفظها في قاعدة البيانات. #100902 (Nikolay Degterinsky).
  • تم إصلاح divide و intDiv اللذين كانا يعيدان ILLEGAL_DIVISION عند استخدامهما في تعبيرات التصفية أثناء تحليل الفهرس في بعض الحالات. #100928 (Nihal Z. Miaji).
  • تم إصلاح تعطيل تحسين minmax_count_projection وتحسين COUNT(*) البسيط بشكل دائم بعد lightweight delete، حتى بعد دمج جميع الأجزاء التي تحتوي على قناع lightweight delete. #101212 (Anton Popov).
  • تم إصلاح سباق بيانات على storage_id في IStorage::getDependentViewsByColumn. #101385 (Nikolay Degterinsky).
  • تم إصلاح عدم قيام materialize_skip_indexes_on_merge=false بتعطيل فهارس النصوص (النص الكامل) أثناء الدمج. سابقًا، كان يتم تعطيل فهارس التخطي غير النصية فقط (minmax و set و bloom_filter). #101932 (Groene AI).
  • تتم الآن إزالة إدخالات ذاكرة التخزين المؤقت لفهرس تشابه المتجهات بعد إزالة الجزء (مثلًا أثناء الدمج)، ما يعالج مشكلة عدم طرد الإدخالات مطلقًا بسبب عدم تطابق مفاتيح ذاكرة التخزين المؤقت. #99575 (Seva Potapov).
  • تم إصلاح استثناء LOGICAL_ERROR خاطئ أثناء تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات بسبب حالة سباق في ترقية الطابور الفرعي SLRU. #99850 (Alexey Milovidov).
  • تم إصلاح خطأ منطقي محتمل أثناء قراءة الأعمدة الفرعية من Map. #101641 (Pavel Kruglov).
  • تم إصلاح أولوية المطابقة التامة للعمود الفرعي على مطابقة البادئة في getSubcolumnData لتجنب تعطل محتمل. #101645 (Pavel Kruglov).
  • تم إصلاح استخدام قيم Extremes غير صحيحة في فهرس min-max تم إنشاؤه على عمود JSON، مما كان يؤدي إلى نتائج query غير صحيحة. #101918 (Pavel Kruglov).
  • تم إصلاح خلل سباق في SLRU ضمن ذاكرة التخزين المؤقت لنظام الملفات (26.1+) كان يمكن أن يؤدي إلى خطأ منطقي في حجز المساحة. #101991 (Kseniia Sumarokova).
  • تم إصلاح الخطأ المنطقي Having zero bytes في ذاكرة التخزين المؤقت، والذي كان ينشأ عند استبدال كائن بعيد بين list وread، ما كان يؤدي سابقًا إلى بيانات وصفية متقادمة للكائن. #101219 (Kseniia Sumarokova).
  • تم إصلاح فشل التحقق file_offset_of_buffer_end <= getFileSize() عند القراءة من جداول Log أو StripeLog على تخزين كائنات S3 مع وجود كتابات متزامنة. #100763 (Alexey Milovidov).
  • تم إصلاح فرض حد أقصى لحجم ذاكرة التخزين المؤقت عند إعادة تحميل الـ config. #100659 (Aleksei Filatov).
  • تم إصلاح إيقاف LOGICAL_ERROR أثناء تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات SLRU، وكان سببه مشاركة إحصاءات الإخلاء بين الطوابير الفرعية، إلى جانب مسار recovery غير صحيح للمرشحين الفاشلين. #102396 (Antonio Andelic).
  • تم إصلاح تعطيل تحسين minmax_count_projection وتحسين COUNT(*) البسيط بشكل دائم بعد حذف خفيف الوزن. #102900 (Anton Popov).

إصلاحات نوع البيانات والتسلسل

  • تم إصلاح ظهور نتيجة خاطئة أو استثناء أثناء قراءة الأعمدة الفرعية لأعمدة ALIAS. #95408 (Pavel Kruglov).
  • تم إصلاح تعذّر الدالة التجميعية sumCount على قراءة الحالات المُسلسلة الأقدم بعد إدخال Nullable(Tuple). #97502 (Nihal Z. Miaji).
  • تم إصلاح خطأ منطقي يتعلق بتدفق مفقود أثناء INSERT SELECT مع JSON وbuckets في البيانات المشتركة. #97523 (Pavel Kruglov).
  • تم إصلاح أعطال محتملة أثناء قراءة granules الفارغة في البيانات المشتركة المتقدمة في JSON. #97778 (Pavel Kruglov).
  • تم إصلاح توليد برمجي خاطئ في JIT للدالة sign لأنواع الأعداد الصحيحة الأعرض من Int8 — إذ كان يمكن للقيم خارج النطاق -128..127 أن تنتج إشارة غير صحيحة. #98012 (Alexey Milovidov).
  • تم إصلاح عدم عمل التنسيق ProtobufList مع محرك Kafka بسبب عدم إعادة تعيين حالة القراءة بين الرسائل. #98151 (Alexey Milovidov).
  • تم إصلاح تلف البيانات الصامت عند إدراج عمود Date من Parquet/Arrow في عمود Enum — إذ أصبح الآن رفض تحويل النوع غير المتوافق بشكل صحيح بدلًا من تخزين قيم enum غير صالحة. #98364 (Alexey Milovidov).
  • تم إصلاح استثناء عند قراءة ملف Arrow يحتوي على عمود Array إلى جدول يحتوي على عمود Nested. #98365 (Alexey Milovidov).
  • تم إصلاح استثناء عند القراءة من Nullable(Tuple(...)) عندما يتعارض اسم عنصر في Tuple مع العمود الفرعي null الخاص بـ Nullable. #98372 (Alexey Milovidov).
  • تم إصلاح التحويل غير الصحيح من Parquet Bool إلى FixedString في قارئ V3 الأصلي، الذي كان يُنتج بايتات خام بدلًا من تمثيل نصي. #98378 (Alexey Milovidov).
  • تم إصلاح tryGetColumnDescription لكي يرشّح الأعمدة الفرعية بحسب فئة العمود الأصل، بما يتوافق مع أساليب البحث الأخرى عن الأعمدة. #98391 (Alexey Milovidov).
  • تم إصلاح التراجع عن تغييرات العمود في محرك Buffer عند التعامل مع استثناء أثناء إلحاق كتلة جديدة. وكان المنطق السابق قد يؤدي إلى تلف حالة العمود داخل الذاكرة. #98551 (Pavel Kruglov).
  • تم إصلاح الاستثناء Bad cast from type ColumnConst to ColumnDynamic في المقارنة الآمنة مع NULL (<=> / IS NOT DISTINCT FROM) مع أعمدة Dynamic أو Variant الثابتة وNULL. كما تم إصلاح IS DISTINCT FROM مع Dynamic/Variant مقابل NULL، والتي كانت تُرجع دائمًا 0 بشكل غير صحيح. #98553 (Alexey Milovidov).
  • تم إصلاح قيام parseDateTimeBestEffort بتحليل الكلمات التي تبدأ ببادئات الأشهر أو أيام الأسبوع بشكل غير صحيح. #98742 (Pavel Kruglov).
  • تم إصلاح استثناء reverseUTF8 عند إدخال UTF-8 غير صالح (مبتور). #98770 (Alexey Milovidov).
  • تم إصلاح استثناء LOGICAL_ERROR في الدوال المالية (financialNetPresentValue, financialInternalRateOfReturn, إلخ) عند تمرير وسيطات من النوع BFloat16. #98958 (Alexey Milovidov).
  • لم يعد SummingMergeTree يجمع أعمدة Bool (وأعمدة أنواع domain الأخرى)؛ إذ تُحفَظ قيم Bool كما هي بدلًا من جمعها حسابيًا. #98976 (Yash).
  • تم إصلاح سلوك غير معرّف (إلغاء مرجعية مؤشر فارغ) عند تعديل عمود version/sign/is_deleted إلى EPHEMERAL أو ALIAS في محركات MergeTree. وأصبحت هذه التعديلات تُرفَض الآن بشكل صحيح. #98985 (Alexey Milovidov).
  • تم إصلاح قيام parseDateTimeBestEffort بتحليل كلمات تبدأ ببادئات الأشهر على نحو غير صحيح في تنسيق DD-month-YYYY. #99350 (Pavel Kruglov).
  • تم إصلاح CHECK TABLE عند وجود serialization sparse داخل Tuple مع Dynamic. #99351 (Pavel Kruglov).
  • تم إصلاح خطأ منطقي unordered_map::at: key not found في تنسيق إخراج Avro عند إجراء التسلسل لأعمدة Enum8/Enum16 التي تحتوي على قيم غير موجودة في تعريف enum. #99332 (Desel72).
  • تم إصلاح خلل كان يجعل المقارنة بين النوعين Time[64] وDateTime[64] مربكة؛ إذ تُرقّى قيم Time[64] الآن إلى DateTime[64] بإضافة 1970-01-01 كجزء التاريخ. #99267 (Yarik Briukhovetskyi).
  • تم إصلاح فك تسلسل \N (NULL) للنوع Variant في تنسيقات النص Escaped/Raw. #99648 (Pavel Kruglov).
  • تم إصلاح سلوك غير معرّف في قارئ تنسيق Avro عند قراءة قيم رقمية تتجاوز سعة نوع العمود الهدف. أصبحت الاستعلامات الآن تفشل عند حدوث overflow بدلًا من إنتاج قيم غير صحيحة بصمت. #99697 (asyablue22).
  • تم إصلاح إنهاء خاطئ في NativeReader عند فك تسلسل stream بتنسيق Native مع عدم تطابق في عدد الصفوف: تم تغييره من LOGICAL_ERROR إلى INCORRECT_DATA. #99822 (Rahul Nair).
  • تم إصلاح إنهاء العملية أثناء فك تسلسل عمود Tuple عندما يكون نوع التسلسل في الـ binary stream هو DETACHED. #99823 (Rahul Nair).
  • تم إصلاح الإعداد aggregate_functions_null_for_empty ليعمل مع الدوال التجميعية التي تُرجع أنواعًا غير Nullable مثل Array أو Map (مثل groupArray وsumMap). #99839 (Alexey Milovidov).
  • تم إصلاح استثناء LOGICAL_ERROR في الدالة midpoint عند استدعائها باستخدام أنواع أعداد صحيحة موقعة وغير موقعة مختلطة. #99867 (Alexey Milovidov).
  • تم إصلاح استثناء LOGICAL_ERROR في الاستعلامات التي تتضمن أعمدة Dynamic مع عمليات cross join وفلاتر وقت التشغيل، وكان السبب أن ColumnVariant::filter كان يشارك مؤشرات أعمدة Variant بدلًا من استنساخها في مسار تحسين hasOnlyNulls. #100234 (Pavel Kruglov).
  • تم إصلاح خطأ في مصفوفة من نوع Variant كان يمكن أن يعيد تفسير نوع البيانات عند استدعاء arrayFirst/arrayLast. فعلى سبيل المثال، كان Array(Variant(Date, Bool)) يتحول إلى Bool عندما يكون نوع الـ variant الأساسي الفعلي هو Date. #100255 (timothygk).
  • تم إصلاح مشكلة عدم قدرة التنسيقين CSV وMsgPack على تحليل Nullable(Tuple) بشكل صحيح. #100038 (Nihal Z. Miaji).
  • تم إصلاح دالتي accurateCastOrDefault وto*OrDefault اللتين لم تكونا تحافظان على نوع العمود Const للمدخلات الثابتة. #100132 (Alexey Milovidov).
  • أصبحت معاملات الاستعلام المحذوفة من النوع LowCardinality(Nullable(T)) تأخذ القيمة الافتراضية NULL بشكل صحيح، تمامًا مثل Nullable(T). #100144 (Denys Melnyk).
  • تم إصلاح تجاوز سعة الأعداد الصحيحة الموقعة (سلوك غير معرّف) في toStartOfInterval عند استدعائها بقيم interval كبيرة جدًا بالمللي ثانية/الميكروثانية على DateTime64 عالي الدقة. #100156 (Alexey Milovidov).
  • تم إصلاح runtime filters الخاصة بعمليات join فوق نوع البيانات Variant. #100182 (Dmitry Novik).
  • تم إصلاح عملية cast من Time64 إلى UInt64 كانت قد تحصر القيم في 24 ساعة. #100025 (Yarik Briukhovetskyi).
  • تم إصلاح استثناء عند حساب common supertype للـ tuples الفارغة وغير الفارغة مع تفعيل use_variant_as_common_type. #100699 (Antonio Andelic).
  • تم إصلاح سلوك غير معرّف في positiveModulo عندما لا يلائم المقسوم عليه غير الموقّع نوع النتيجة الموقّع. #100705 (Raúl Marín).
  • تم إصلاح سلوك غير معرّف (تجاوز سعة الأعداد الصحيحة الموقعة) في toStartOfInterval عند استخدام intervals من نوع Week أو Quarter أو Year مع argument للأصل وقيم interval متطرفة. #100817 (Raúl Marín).
  • تم إصلاح combinators الخاصة بـ aggregate function، وهي If وDistinct وDistinctIf وIfState، ذات return type من Tuple ومع وجود argument واحدة أو أكثر من نوع Nullable، إذ لم تكن قادرة على قراءة الحالات المتسلسلة الأقدم بعد إدخال Nullable(Tuple). #100826 (Nihal Z. Miaji).
  • لم يعد cast_keep_nullable، عند تفعيله، يطرح استثناءً عند تنفيذ cast لقيمة null من نوع Dynamic إلى Variant. #100864 (Seva Potapov).
  • تم إصلاح استثناء في intDiv/intDivOrZero على arrays من tuples قابلة لأن تكون null. #100895 (Raúl Marín).
  • تم إصلاح سلوك غير معرّف (تجاوز سعة الأعداد الصحيحة الموقعة) في parseDateTimeBestEffort عند تحليل سلاسل datetime التي تحتوي على أكثر من 18 رقمًا في الأجزاء الكسرية من الثانية. #100948 (Vasily Chekalkin).
  • تم إصلاح مشكلة في الدالة التجميعية sumCountOrDefault كانت تمنعها، عند وجود وسيط واحد أو أكثر من نوع Nullable، من قراءة الحالات المُسلسلة الأقدم بعد إدخال Nullable(Tuple). #101021 (Nihal Z. Miaji).
  • تم إصلاح أعمدة ALIAS ذات النوعين DateTime/DateTime64 التي لم تكن تطبّق تحويل المنطقة الزمنية عندما كانت المنطقة الزمنية المُعلنة تختلف عن المنطقة الزمنية في التعبير. #101043 (Alexey Milovidov).
  • أُزيل Nullable من عمود النتيجة في arrayIntersect والدوال ذات الصلة لتجنّب عدم التطابق بين التسلسل وإلغاء التسلسل. #101569 (George Larionov).
  • تم إصلاح positiveModulo(tuple, number) الذي كان يُوجَّه خطأً إلى القسمة بدلًا من عملية modulo. #101709 (ClickGap AI Bot).
  • تم إصلاح المخرجات غير الصحيحة في formatDateTime مع الـ formatter %W ضمن بعض إعدادات التنسيق غير الافتراضية. #101847 (Robert Schulze).
  • تم إصلاح استثناء عدم تطابق الأنواع في transform عندما يكون العمود الافتراضي const في بعض blocks. #100616 (Pavel Kruglov).
  • أصبح مسموحًا بوجود row groups فارغة في Parquet. #100653 (Vitaly Baranov).
  • أصبحت min/max/argMin/argMax الآن تتعامل مع NaN بشكل متسق مع ORDER BY: إذ يتم دائمًا تخطي NaN (ولا تُعاد إلا إذا كانت جميع القيم NaN). سابقًا، كانت النتائج تعتمد على موضع NaN في البيانات بسبب دلالات المقارنة غير المرتبة في IEEE 754. #100448 (Raúl Marín).
  • تم إصلاح الاستدلال الخاطئ على نوع بيانات التاريخ في حالة overflow بعد ضبط المنطقة الزمنية. #102674 (Pavel Kruglov).
  • تم إصلاح CASE مع تعبير Dynamic كان يعيد ELSE لجميع الصفوف. #102684 (Pavel Kruglov).
  • تم إصلاح تسلسل النوع Dynamic المُسطّح مع أنواع البيانات المُرمَّزة ثنائيًا. #102692 (Pavel Kruglov).
  • تم إصلاح تجاهل cast_string_to_date_time_mode عند استخدام CAST إلى Nullable(DateTime). #103035 (Pavel Kruglov).
  • أصبح تمثيل null في تسلسل الأعمدة replicated وsparse يراعي الإعدادات (مثل format_tsv_null_representation). #102888 (Hechem Selmi).

إصلاحات فهرس النص وفهرس التخطي

  • تم إصلاح استخدام فهرس النص مع فهارس التخطي الأخرى. سابقًا، كان يمكن أن تظهر أخطاء منطقية مثل “Trying to get non-existing mark” عندما يستخدم مرشح الاستعلام فهرس نص مع فهارس تخطٍ عادية أخرى في الوقت نفسه. #98555 (Anton Popov).
  • تم إصلاح إعادة بناء فهارس النص أثناء عمليات الدمج مع TTL. #99107 (Anton Popov).
  • تم إصلاح التحقق المفرط في الصرامة من المعالج المسبق لفهرس النص. #99359 (Anton Popov).
  • أُزيل دعم الدوال المنفية (notEquals, notLike, notIn) في تحليل فهرس النص. إذ لم يكن بإمكان هذه الدوال تخطي أي حبيبات مطلقًا، لذا فإن تحليل الفهرس لها لم يكن يضيف سوى حمل إضافي. #99393 (Anton Popov).
  • تم إصلاح استثناء NOT_FOUND_COLUMN_IN_BLOCK عند الإشارة إلى شرط لفهرس نص (مثل hasAllTokens) في كلٍّ من بندي SELECT وWHERE عبر اسم مستعار. #99504 (Anton Popov).
  • تم إصلاح النتائج غير الصحيحة عند استخدام hasAllTokens مع OR عبر أعمدة لها فهارس نص منفصلة. #99505 (Anton Popov).
  • تم إصلاح قراءة فهرس النص في جدول يحتوي على lightweight deletes وسياسات صفوف موجودة مسبقًا. #99661 (Anton Popov).
  • تم إصلاح تحليل الشروط التي تستخدم الدالة IN بواسطة فهرس النص مع المعالج المسبق، كما تم إصلاح تعارض في الـ tokens التي يجري البحث عنها كان يمكن أن يؤدي إلى نتائج غير صحيحة. #99755 (Anton Popov).
  • تم إصلاح الاستخدام غير الصحيح لفهرس النص مع الدالتين startsWith وendsWith بالنسبة إلى الـ tokenizers التي لا تدعم مطابقة substring (array, splitByString). سابقًا، كان يمكن لهذه الـ tokenizers أن تنتج نتائج خاطئة بصمت. #100151 (Anton Popov).
  • تم إصلاح crash نادر عندما كان يُطرَح استثناء “Memory Limit” أثناء بناء فهرس النص. #100213 (Anton Popov).
  • تم إصلاح أخطاء “Not-ready Set is passed as the second argument” أثناء تحليل فهرس نص مبني فوق mapValues لشروط تحتوي على clause IN. #100224 (Anton Popov).
  • تم إصلاح crash عند استخدام فهرس بحث نصي مع clause IN تحتوي على استعلام فرعي من نوع Tuple، مثل WHERE (id, str) IN (SELECT (id, str) FROM ...)، أو عندما لا يتطابق عدد الأعمدة في الاستعلام الفرعي مع الـ Tuple الموجودة في الجهة اليسرى من IN. #100959 (Anton Popov).
  • أصبح splitByString tokenizer يرفض الآن سلاسل الفاصل الفارغة. #101928 (Robert Schulze).
  • كان sparseGrams tokenizer يُنشئ tokens أطول من الحد الأقصى المحدد للطول (بسبب وجود +2 مُضمَّنة مباشرة في التنفيذ). #101934 (Elmi Ahmadov).
  • تم إصلاح استثناء عند الاستعلام عن جداول Merge أو Distributed باستخدام فهرس نص كامل مع شروط تصفية مركبة تجمع بين has*Tokens وLIKE، عندما يكون query_plan_direct_read_from_text_index مُمكّنًا. #101939 (Jimmy Aguilar Mena).
  • تم إصلاح hasToken/hasTokenOrNull عند استخدام أنماط بحث تتكون فقط من فواصل (مثل '()' و'!!!') على الأعمدة التي تحتوي على فهرس نصي: إذ كان الفهرس سابقًا يتخطى جميع الحبيبات بصمت بدلًا من رفع BAD_ARGUMENTS (في hasToken) أو إرجاع NULL (في hasTokenOrNull). #102544 (Jimmy Aguilar Mena).
  • لم تعد إعدادات فهرس النص الكامل (enable_full_text_index, allow_experimental_full_text_index, use_skip_indexes_on_data_read) تُعطَّل عندما يشير الإعداد compatibility إلى إصدار أقدم من 26.1. #102422 (Nikita Fomichev).
  • أُضيف دعم لأعمدة ALIAS في تحسين القراءة المباشرة من فهرس النص. #103037 (Anton Popov).

إصلاحات مستودع البيانات

  • تم إصلاح حالة تسابق منطقية عند تغيير snapshot version في محرك الجدول DeltaLake، كما أزيلت عمليات إعادة تحميل اللقطات الثقيلة الزائدة عن الحاجة. #96226 (Kseniia Sumarokova).
  • تم إصلاح استثناء DUPLICATE_COLUMN وظهور قيم NULL من دون أي تنبيه عند قراءة جداول Delta Lake التي تستخدم وضع ربط الأعمدة “name” مع حقول struct التي تحتوي أسماؤها على نقاط. #98013 (Caio Ishizaka Costa).
  • تم إصلاح خطأ عند استخدام Unity Catalog مع GCS. #98456 (Melvyn Peignon).
  • أصبح DataLakeCatalog الآن يراعي إعداد http_forbid_headers الخاص بالخادم عند التحقق من إعداد auth_header. #98827 (Michael Anastasakis).
  • أصبح الآن إنشاء جداول بحيرة البيانات المحلية وإرفاقها وتحديثها خارج مسارات المستخدم محظورًا، ويُتحقق من ذلك عند إنشاء IDataLakeMetadata وتحديثه. #98936 (Daniil Ivanik).
  • تم إصلاح عمليات قراءة Iceberg BigLake: إذ تُمرَّر الآن بيانات اعتماد ADC إلى عميل GCS S3 (مما يعالج أخطاء 403)، وتُرمَّز بيانات اعتماد OAuth2 بترميز URL قبل إرسالها، ولم يعد اجتياز مساحة الأسماء يتوقف عند استجابات BigLake HTTP 400. #98998 (Nikita Fomichev).
  • تم إصلاح خطأ تجاوز الحدود عند الاستعلام عن الأعمدة الافتراضية فقط من جدول Iceberg يحتوي على بيانات Avro. #99080 (alesapin).
  • تم إصلاح تعطل في ALTER TABLE ... REMOVE SETTINGS لمحرك جدول Iceberg. #99108 (alesapin).
  • تم إصلاح تعطل نادر جدًا عندما يحتوي جدول Iceberg على ملفات بتنسيقات مختلطة (ORC وParquet). #99168 (alesapin).
  • تم إصلاح تعطل (إلغاء مرجعية مؤشر فارغ) عند تنفيذ ALTER TABLE ... MODIFY COLUMN ... COMMENT على جداول Iceberg. #99838 (Desel72).
  • أصبح ClickHouse الآن يتعامل بشكل صحيح مع الجداول بأسلوب Spark (بمسار مطلق كامل لكل ملف، أو بمسار نسبي إلى مسار الجدول المشترك). #99935 (alesapin).
  • تم إصلاح استثناء يحدث عندما يحتوي إعداد مسار ملف البيانات الوصفية في Iceberg على بايت صفري. #100283 (Alexey Milovidov).
  • تم إصلاح خطأ نسخ ولصق كان يؤدي إلى تجاهل delta_lake_snapshot_end_version المضبوط من دون delta_lake_snapshot_start_version بصمت بدلًا من إصدار خطأ BAD_ARGUMENTS. #100454 (Mohammad Lareb Zafar).
  • تم إصلاح خطأ منطقي في جداول Iceberg المرتبة أثناء عمليات التعديل. #100499 (alesapin).
  • تم إصلاح Polaris catalog مع Azure، إذ كان catalog، منذ الإصدار 25.12، يضيف الحاوية في بداية المسار. #100583 (Konstantin Vedernikov).
  • تم إصلاح استثناء Logical error: 'partitions_count > 0' عند تنفيذ عمليات ALTER TABLE UPDATE متتالية على جدول Iceberg مُقسَّم. #101278 (Desel72).
  • أُصلِح تنفيذ insert-select من عنقود Delta Lake مع ReplicatedMergeTree. #101299 (Konstantin Vedernikov).
  • يُطرَح خطأ عند استخدام إعدادات delta_lake_snapshot_version أو إصدار CDF من دون تمكين DeltaKernel، بدلاً من إرجاع بيانات غير صحيحة بصمت. #101489 (Desel72).
  • أُصلِحت مشكلة فشل حلقة retry لعملية INSERT في Iceberg عندما كان الجدول مُنشأً باستخدام iceberg_metadata_file_path وكانت نسخة metadata المستهدفة موجودة مسبقًا. #101548 (Groene AI).
  • أُصلِح تعطل في الخادم (LOGICAL_ERROR) عند إجراء select من materialized view تستند إلى table engine ‏IcebergLocal. #101577 (Groene AI).
  • أُصلِح تعطل في IcebergLocal مع ALTER TABLE ... UPDATE عند استخدام Avro format، وكان السبب عدم فك أنواع wrapper ‏LowCardinality/Nullable قبل serialization. #102337 (Desel72).
  • أُضيف العمود hostname المفقود إلى system.delta_lake_metadata_log وsystem.iceberg_metadata_log. #102162 (Michael Russell).
  • إصلاح في CoalescingMergeTree لنوع Array. #102384 (Konstantin Vedernikov).

إصلاحات S3/Azure/تخزين الكائنات

  • تم إصلاح استثناء صادر من CachedOnDiskReadBufferFromFile::readBigAt. #97890 (Kseniia Sumarokova).
  • تم إصلاح تعطل كان يحدث عند الاستعلام عن الملفات باستخدام glob pattern (مثل file('dir/**', 'LineAsString'))، إذ كان يُطلق استثناء غير مُعالَج من filesystem إذا كان الدليل يحتوي على رابط رمزي معلّق. وأصبح الآن يتم تجاهل الروابط الرمزية المعلّقة بصمت. #98143 (Mark Andreev).
  • تم إصلاح الاستخدام المفرط للذاكرة (~514 MiB) أثناء الاكتشاف التلقائي لـ format عند قراءة بيانات غير Arrow (مثل JSON من url() أو file() بدون format صريح)، وكان السبب أن قارئ ArrowStream كان يفسّر البايتات الأولى خطأً على أنها طول metadata ضخم. #98893 (Konstantin Bogdanov).
  • تم إصلاح race condition كان يمكن أن يتسبب في ظهور الاستثناء “ReadBuffer is canceled” في queries التي تستخدم urlCluster أو cluster table functions مشابهة. #98955 (Alexey Milovidov).
  • تم إصلاح الرسالة المضللة “inflate failed: buffer error” عند قراءة ملفات مضغوطة غير موجودة عبر url() table function مع glob patterns. #99034 (Alexey Milovidov).
  • تم إصلاح استدعاءات HeadObject من نوع N+1 في globs الخاصة بتوسيع الأقواس في S3. #99219 (Konstantin Bogdanov).
  • تم إصلاح الحالات التي كانت تتسبب فيها الأرقام ذات الأصفار البادئة في path الخاص بـ hive partitioning في حدوث errors. #99458 (Yarik Briukhovetskyi).
  • تم إصلاح seek غير الصحيح في AsynchronousReadBufferFromFileDescriptor مع O_DIRECT. #99678 (Pavel Kruglov).
  • تم إصلاح خلل كان قد يؤدي إلى تخطي ClickHouse لبعض الملفات إذا كانت ترويسة Content-Length مفقودة من استجابة طلب HEAD الخاص بها (على سبيل المثال، بسبب transcoding لفك الضغط في GCS). #99971 (Yarik Briukhovetskyi).
  • لم يعد server يفشل في بدء التشغيل عند تهيئة disk من Azure blob storage بينما تكون endpoint غير قابلة للوصول مؤقتًا (مثل فشل DNS). #100701 (Raúl Marín).
  • تم إصلاح segfault في s3Cluster وdistributed queries بسبب استخدام connection pool بعد تحريره. #100837 (Konstantin Bogdanov).
  • تم إصلاح استثناء كان يتسرّب من destructor ‏S3 Client::~Client متسببًا في إنهاء server. #101798 (Gagan Dhakrey).
  • تم إصلاح عدم تسجيل المضيف والمنفذ بشكل صحيح أثناء إعادة الاتصال. #102280 (Grant Holly).
  • تم إصلاح استثناء في server داخل ClusterDiscovery عندما لا يكون لدى cluster ثابتة (مُعرَّفة في config) أي عقد حية مؤقتًا. #102661 (Kseniia Sumarokova).

إصلاحات S3Queue

  • ‏S3Queue: تم إصلاح فشل في assert بعد انقطاع اتصال ZooKeeper رغم نجاح عملية commit. #100210 (Kseniia Sumarokova).
  • تم إصلاح نص الوصف المعكوس للعمود alterable في system.s3_queue_settings وsystem.azure_queue_settings — إذ جرى تبديل دلالتي 0 و1 لتتطابقا مع السلوك الفعلي للكود. #101703 (ClickGap AI Bot).

إصلاحات الأمان والتحكم في الوصول

  • كانت table function ‏loop تستدعي inner_storage->read() مباشرةً، متجاوزةً طبقة المفسِّر التي تُطبَّق فيها سياسات الصفوف وامتيازات الأعمدة وغيرها من عمليات التحقق الأمنية. وقد أتاح ذلك لمستخدم مقيَّد بسياسات الصفوف قراءة جميع الصفوف عبر loop(table). #97682 (pufit).
  • فرض عمليات التحقق READ ON FILE على file() scalar وDESCRIBE TABLE file(). #98115 (Nikolay Degterinsky).
  • قبول بيانات اعتماد base64 بدون padding في HTTP Basic Auth. يحذف بعض عملاء HTTP padding اللاحق = في الترويسة Authorization: Basic، وكان هذا يتسبب سابقًا في فشل authentication. #98392 (Amos Bird).
  • إصلاح تجاوز في RBAC كان يسمح للمستخدمين بتنفيذ DESCRIBE لأي جدول عبر remote() أو remoteSecure() أو cluster() أو clusterAllReplicas() عند توجيهها إلى localhost، دون الحاجة إلى امتياز SHOW_COLUMNS. #98669 (pufit).
  • إصلاح مشكلة كانت فيها system.grants تُسقِط معلمات regular expression الخاصة بمنح URL وS3 في العمود access_object. #98987 (DQ).
  • إصلاح تجاوز في RBAC كان يسمح للمستخدمين بالحصول على بنية الجدول عبر DESCRIBE TABLE أو CREATE TABLE AS على table functions (mysql(), postgresql(), sqlite(), arrowFlight(), jdbc(), odbc(), إلخ) دون امتيازات الوصول المطلوبة إلى المصدر. وبالنسبة إلى الدوال التي تستنتج schema من خوادم بعيدة، أتاح ذلك أيضًا تشغيل اتصالات Outbound ‏(SSRF) دون تفويض. #99122 (pufit).
  • تقييد constraints الخاصة بالإعدادات في DDL worker لاستعلامات DDL الموزعة. #99317 (Pablo Marcos).
  • إصلاح مشكلات طفيفة في authentication عبر TOTP: خيار CLI ‏--one-time-password مع كلمة مرور فارغة، والتحقق من قيم الإعداد <digits> و<period>. #99322 (Vladimir Cherkasov).
  • أصبحت بيانات الاعتماد في connection strings الخاصة بـ JDBC وODBC وNATS الآن مخفية في query logs ومخرجات SHOW CREATE. وبالنسبة إلى connection strings بأسلوب URI، لا يُخفى إلا جزء كلمة المرور. كما أصبحت قيمة الإعداد nats_token مخفية أيضًا. #99344 (János Benjamin Antal).
  • منع قراءة بيانات اعتماد Google من ملف محلي، لأن ذلك غير آمن إذ كان يتيح قراءة بيانات اعتماد أخرى إذا كان file path معروفًا. #99584 (Konstantin Vedernikov).
  • إصلاح تجاوز MySQL dictionary source لمرشح RemoteHostFilter في معلمات DDL المضمنة. #99720 (Shaohua Wang).
  • إصلاح system.completions لكي يرشّح databases وtables وcolumns بشكل صحيح حسب access rights في جميع تركيبات المنح: على مستوى الجدول، وعلى مستوى قاعدة البيانات، ومع revoke على مستوى العمود. #100432 (Shaohua Wang).
  • تنقية query_id في HTTP handler لمنع حقن CRLF في headers الخاصة بالاستجابة عبر الترويسة X-ClickHouse-Query-Id. #100500 (Pablo Marcos).
  • كان بإمكان بعض الكتالوجات إظهار بيانات سرية في قسم SETTINGS ضمن SELECT * FROM system.databases. وقد مُنع ذلك الآن. #100800 (Konstantin Vedernikov).
  • لم تكن سياسات الصفوف تُمرَّر من المخططات الفرعية إلى المخطط الرئيسي لأغراض التسجيل، لذلك كانت تغيب عن query_log في العروض والاستعلامات الفرعية وعمليات insert-select. وهي الآن محفوظة ضمن QueryAccessInfo لأغراض التسجيل. #101044 (Narasimha Pakeer).

إصلاحات النسخ الاحتياطي والاستعادة

  • تم إصلاح عدم تطبيق max_execution_time على عمليات النسخ الاحتياطي/الاستعادة. #99205 (Kseniia Sumarokova).
  • تم إصلاح استثناء ReadBuffer is canceled. Can't read from it. في عمليات النسخ الاحتياطي/الاستعادة التي تستخدم أرشيفات zip. #100400 (Alexey Milovidov).
  • تمت إضافة التحقق من مسارات إدخالات الملفات في البيانات الوصفية للنسخ الاحتياطي لرفض اجتياز المسارات، والمسارات المطلقة، والأسماء الفارغة أثناء RESTORE. #100483 (Pablo Marcos).
  • تم إصلاح تنسيق AST واستنساخه في BACKUP FROM SNAPSHOT. #101405 (Pablo Marcos).

إصلاحات ClickHouse Keeper

  • تم إصلاح حالة data race في عميل ZooKeeper بين خيط الإرسال وخيط الاستقبال. #97887 (Pablo Marcos).
  • تم إصلاح فقدان بيانات Keeper بعد إعادة التشغيل عند استخدام Azure Blob Storage مع بيانات s3_plain الوصفية لتخزين السجل. #97987 (Antonio Andelic).
  • تم تعيين المكوّن Watch لاستجابات watch في aggregated_zookeeper_log بدلًا من تركه فارغًا. #98202 (Antonio Andelic).
  • تم إصلاح مشكلة قيام ClickHouse Keeper بقطع اتصال عملاء Java ZooKeeper بعد طلب addWatch. يتوقع Java client متن ErrorResponse بحجم 4 بايت، لكن Keeper أرسل متنًا فارغًا، مما تسبب في EOFException وانقطاع الجلسة. #98499 (Antonio Andelic).
  • تم إصلاح عدم انخفاض مقاييس Keeper zk_followers وzk_synced_followers عند توقف أحد الـ followers. كما أُضيفت المقاييس الجديدة zk_learners وzk_synced_non_voting_followers إلى الأمر mntr. #98504 (Antonio Andelic).
  • تم إصلاح تجاهل منفذ raft الآمن في Keeper للقيمتَين cipherList وdhParamsFile من إعدادات openSSL. #98509 (Antonio Andelic).
  • تم إصلاح رسائل سجل Keeper المضللة مثل “استغرق تلقي طلب الجلسة X مدة 9963 مللي ثانية”، إذ كان الوقت المُبلّغ عنه في الواقع يُقضى في انتظار idle داخل poll() بين نبضات القلب. #98510 (Antonio Andelic).
  • تم إصلاح مشكلة كانت تمنع اتصالات TCP في Keeper إيقاف تشغيل server بسلاسة بسبب عدم استجابتها لإشارة الإيقاف. #98525 (Alexey Milovidov).
  • تم إصلاح تأكيد Debug في DDLWorker ناتج عن first_failed_task_name قديم بعد حذف entry في ZooKeeper أثناء استرداد إعادة التهيئة. #99099 (Antonio Andelic).
  • تم إصلاح إحدى حالات تعطل Keeper. #99133 (JIaQi Tang).
  • تم إصلاح خطأ في Keeper كان قد يؤدي إلى تعليق read request (مما يسبب timeout للجلسة) إذا أُغلقت جلسة أخرى غير مرتبطة على server نفسه في توقيت غير مناسب تمامًا. #99484 (Michael Kolupaev).
  • تم إصلاح SEGFAULT في NuRaft بسبب race condition. #100444 (Pablo Marcos).
  • تم إصلاح فشل KeeperMap CREATE TABLE مع الرسالة “Cannot create metadata for table” عندما كانت عُقد ZooKeeper المتبقية من عملية drop جزئية قبل الإصدار 25.1 تفتقد إلى العقدة drop_lock_version. #101623 (Antonio Andelic).
  • تم إصلاح فقدان registry الخاصة بـ UDF عند انتهاء صلاحية جلسة ZooKeeper أثناء التحديث الدوري — إذ كان يمكن أن تصبح جميع User-Defined Functions غير متاحة إلى أن ينجح full refresh. #101891 (Nikita Fomichev).
  • تم إصلاح تعطل في تحديث UDF بسبب قيام ZooKeeperRetriesControl بإعادة المحاولة على جلسة ZooKeeper قديمة (منتهية الصلاحية) دون تجديدها. #102059 (Nikita Fomichev).

إصلاحات الأعطال والاستقرار

  • تم إصلاح تعطل في دوال لهجة Kusto ‏bin() وbin_at() وextract() وindexof() عند تمرير وسيطات فارغة. #95736 (NeedmeFordev).
  • تم إصلاح تعطل/إخفاق تأكيدي في الخادم في mapContainsKey/mapContainsKeyLike مع skip index من نوع tokenbf_v1. #97826 (Shankar Iyer).
  • تم إصلاح تعطل في الخادم (std::terminate) ناتج عن استثناء غير ملتقط في المدمّر الخاص بـ HTTP connection pool عند بلوغ الحد الصلب لمجموعة الاتصالات في ظل درجة Concurrency عالية. #97850 (Antonio Andelic).
  • تم إصلاح وصول خارج الحدود في ColumnConst::getExtremes كان يمكن أن يسبب تعطلًا عند تمكين extremes = 1. #98263 (Alexey Milovidov).
  • أُضيف التحقق من البيانات التالفة أثناء deserialization لـ DDSketch لمنع أخطاء segfault والاستثناءات والحلقات اللانهائية ونفاد الذاكرة عند قراءة aggregate function states التالفة الخاصة بـ quantilesDD. #98284 (Alexey Milovidov).
  • تم إصلاح استثناء نادر في executor الخاص بـ pipeline، كان يمكن أن يظهر على شكل Received signal 6 (في إصدارات build الخاصة بالتصحيح)، عندما يتزامن توسيع pipeline مع إلغاء query. #98428 (Alexey Milovidov).
  • تم إصلاح إلغاء مرجعية مؤشر فارغ في dictGetOrDefault عندما تكون وسيطة المفتاح من النوع Nullable. #98460 (Alexey Milovidov).
  • تم إصلاح حالة توقف تام في pipeline عند استخدام sort_overflow_mode = 'break' مع window functions. #98543 (Alexey Milovidov).
  • تم إصلاح تعطل ناتج عن إلغاء مرجعية مؤشر فارغ في system tables أُنشئت بين أخذ snapshot للجداول في IDatabaseTablesIterator::table() وبين تغيّر الجداول في thread أخرى أثناء التكرار اللاحق. #98792 (Grant Holly).
  • تم إصلاح انحراف في تتبع الذاكرة ناتج عن عدم التراجع عن allocations الفاشلة، والسلوك غير المعرّف لـ nallocx(0)، وخطأ بمقدار واحد في تتبع الذروة العامة. كما وُسِّع التتبع ليشمل مخازن ring المؤقتة الخاصة بـ io_uring. #98915 (Antonio Andelic).
  • تم إصلاح تعطل في الخادم (std::terminate) عند تنفيذ ALTER TABLE ... DROP PART على patch part بعد تغيير في schema (مثل ADD COLUMN). #99036 (Peng).
  • تم إصلاح تعطل في الخادم كان يمكن أن يحدث إذا طُرح استثناء تجاوز memory limit أثناء قراءة قرص cached. #99042 (Shankar Iyer).
  • تم إصلاح تعطل ناتج عن استثناء memory limit طُرح أثناء تطبيق patch part. #99086 (Anton Popov).
  • تم إصلاح تعطل عند استخدام Buffer table مع SAMPLE عندما لا تكون destination تدعمه. #99141 (Kseniia Sumarokova).
  • تم إصلاح حالة heap-use-after-free عند drop جدول بالتزامن مع query قراءة قيد التشغيل. #99483 (Alexey Milovidov).
  • تم إصلاح تجاوز سعة مخزن مؤقت على الكومة في CompressionCodecT64 وإيقافٍ للعملية في CompressionCodecMultiple عند فك ضغط بيانات مضغوطة تالفة. وأصبحت برامج الترميز الآن تُطلق استثناءً بدلاً من التعطل. #99680 (Rahul Nair).
  • تم إصلاح حلقة لا نهائية عند قراءة ملفات بتنسيق Npy ذات أبعاد شكل سالبة. #99812 (Desel72).
  • تم إصلاح تجاوز سعة مخزن مؤقت عام في الدالة CRC32 على الوسائط FixedString عند تقييمها على صفر صفوف أثناء حساب ترويسة خطة الاستعلام. #99835 (Alexey Milovidov).
  • تم إصلاح فشل تحقق في sipHash128Keyed (ودوال التجزئة ذات المفاتيح المشابهة) عندما تكون وسيطة البيانات من نوع Map بمفاتيح مصفوفية أو بأنواع مصفوفات متداخلة أخرى. #99921 (Alexey Milovidov).
  • تم إصلاح فشل تحقق عند ضرب حالات التجميع NumericIndexedVector في ثابت صحيح زوجي، وكان السبب عملية XOR ذاتية على صور Roaring النقطية ذات الأسماء المستعارة في pointwiseAddInplace. #99976 (Desel72).
  • تم إصلاح إلغاء مرجعية nullptr في قارئ Parquet عندما يواجه مسار filter-in-decoder صفحات تمت تصفيتها. #99677 (Alexey Milovidov).
  • تم إصلاح تعطل خادم محلي عندما يحتوي CREATE DICTIONARY على تعريف ذي قيمة قائمة تتضمن دالة غير موجودة. #100036 (Yakov Olkhovskiy).
  • تم إصلاح SIGSEGV عند قراءة أجزاء التصحيح بعد ALTER MODIFY COLUMN. #100107 (Nikolay Degterinsky).
  • تم إصلاح استخدام قيمة غير مهيأة في StringSearcher.h. #100225 (Konstantin Bogdanov).
  • تم إصلاح تعطل الخادم (فشل تحقق) عند استخدام الدوال التجميعية المعلمية مع المركّب Array ووسائط NULL، مثل quantileIfArrayArray(0.5)([[NULL]], [[1]]). #100679 (nerve-bot).
  • تم إصلاح تجاوز سعة مخزن مؤقت على الكومة في usearch sorted_buffer_gt::insert() كان يمكن أن يؤدي إلى تعطل أو إفساد الذاكرة بصمت أثناء بحث تشابه المتجهات. #100537 (Dustin Healy).
  • تم إصلاح تعطل الخادم (الخطأ المنطقي “Unexpected return type from __topKFilter”) عندما يكون use_top_k_dynamic_filtering مُمكّناً ويكون عمود ORDER BY من النوع Dynamic أو Variant. #100742 (Groene AI).
  • تم إصلاح تعطل الخادم عند استخدام الدالة has() مع PREWHERE/WHERE على مفتاح Tuple يحتوي على عناصر LowCardinality. #100760 (Groene AI).
  • تم إصلاح segfault ناتج عن إلغاء مرجعية مؤشر فارغ عند تحميل Dictionaries أثناء إيقاف تشغيل الخادم. #100839 (Miсhael Stetsyuk).
  • تم إصلاح تجاوز سعة مخزن مؤقت في ULIDStringToDateTime عندما يحتوي الإدخال على بايتات غير ASCII. #100843 (Konstantin Bogdanov).
  • تم إصلاح تعطل (LOGICAL_ERROR) عند الاستعلام عن جدول Merge (أو الدالة الجدولية merge()) التي تغلّف عدة جداول، بما في ذلك جدول Distributed، مع تفعيل distributed_group_by_no_merge=1. #100859 (Groene AI).
  • تم إصلاح تعطل عند إنشاء قاموس Polygon من جدول MergeTree يستخدم تسلسل الأعمدة sparse. #100964 (Anton Popov).
  • تم إصلاح تعطل (Logical error: isConst/isSparse/isReplicated assertTypeEquality) في خوارزميات الدمج عندما يؤدي النسخ الكسول للأعمدة (enable_lazy_columns_replication) إلى إنتاج أعمدة ColumnReplicated تتدفق إلى pipelines للفرز والدمج مع مدخلات تصل متأخرة. #101036 (Groene AI).
  • تم إصلاح تعطل في الخادم (SIGABRT) عند استخدام aggregate functions مع المبدّل Null المخصص للاستخدام الداخلي فقط (مثل sumNull وavgNull) ومع aggregate_functions_null_for_empty = 1. #101147 (Groene AI).
  • تم إصلاح حالة استخدام للذاكرة بعد تحريرها في مسار الكتابة لذاكرة التخزين المؤقت لنظام الملفات، وكان يمكن أن تتسبب في reads من ذاكرة محررة عند تسجيل file segments المكتملة. #101161 (Groene AI).
  • تم إصلاح تعطل في الخادم مع الرسالة “Trying to attach external table to a ready set without explicit elements” عندما يواجه distributed index analysis شرط GLOBAL IN جرى إنشاء مجموعته بدون عناصر صريحة. #101178 (Groene AI).
  • تم إصلاح aggregate functions ‏MAX/MIN على أعمدة Decimal التي كانت تُرجع نتائج غير صحيحة عند تفعيل ترجمة JIT البرمجية. #101203 (Raúl Marín).
  • تم إصلاح تعطل في الخادم (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) عند الاستعلام عن جدول MergeTree يتضمن ORDER BY CAST(lc_column, 'Type') حيث يكون lc_column من النوع LowCardinality. #101220 (Groene AI).
  • تم إصلاح سلوك غير معرّف في mergeTreeAnalyzeIndexes() في حال كانت وسيطة optimizations غير صالحة. #101253 (Azat Khuzhin).
  • تم إصلاح تعطل في الخادم (Logical error: “Variant … is empty”) عندما يقرأ query في الوقت نفسه كلاً من عمود Tuple يحتوي على نوع Dynamic Map وsubcolumn الخاص به. #101448 (Groene AI).
  • تم إصلاح تعطل LOGICAL_ERROR مع الرسالة “Current component is empty” عند الاستعلام عن system.part_moves_between_shards مع تفعيل enforce_keeper_component_tracking. #101462 (Groene AI).
  • تم إصلاح خطأ segmentation fault في DataTypeDynamic::create() عندما يولّد الـ fuzzer شجرة AST غير سليمة للنوع Dynamic. #101464 (Groene AI).
  • تم إصلاح تعطل (LOGICAL_ERROR: “ColumnUnique can’t contain null values”) عند مقارنة عمود LowCardinality بثابت NULL من نوع Variant بينما يكون use_variant_default_implementation_for_comparisons معطلاً. #101690 (Groene AI).
  • أُضيفت حماية للتدفقات الفارغة إلى Bzip2ReadBuffer بحيث يعيد EOF بدلاً من إطلاق UNEXPECTED_END_OF_FILE عندما يكون التدفق الداخلي فارغًا. #101691 (ClickGap AI Bot).
  • تم إصلاح تعطل من نوع use-after-free في مُجدول تأجير CPU عندما يستمر مؤقت الانتظار بعد انتهاء worker thread الذي تشير إليه ProfileEvents::Counters. #101761 (Antonio Andelic).
  • تم إصلاح خطأ use-after-scope في إلغاء التسلسل المتوازي للمسارات الديناميكية من النوع Object، والذي كان قد يتسبب في أعطال عند قراءة الجداول التي تحتوي على عدد كبير من المسارات الديناميكية. #101823 (Antonio Andelic).
  • تم إصلاح خطأ SIGSEGV في MergeTreeDataPartWriterWide::cancel عندما يطلق مُنشئ stream استثناءً أثناء addStreams، مما يترك إدخالًا null في column_streams. #101936 (Antonio Andelic).
  • تم إصلاح خطأ segmentation fault في mutations على materialized columns من دون expression. #102342 (zoomxi).
  • تم إصلاح segfault (أو LOGICAL_ERROR في builds الخاصة بالتصحيح) عند قراءة Parquet files مع تفعيل bloom filter push-down وشروط المساواة/عدم المساواة في clause WHERE، وكان السبب وصولًا إلى الذاكرة خارج الحدود في Parquet prefetcher. #102385 (Groene AI).
  • تم إصلاح قراءة خارج الحدود في string search functions (countSubstrings, position وغيرها) عند البحث عن needle مكوّن بالكامل من null bytes. #102401 (Raúl Marín).
  • تم إصلاح قراءة خارج الحدود في printf عند وجود % في النهاية. #102472 (Raúl Marín).
  • تم إصلاح تعطل LOGICAL_ERROR برسالة “Unexpected number of rows in column subchunk” في قارئ Parquet V3 الأصلي عند قراءة nullable columns مع filter في WHERE. #102628 (Groene AI).
  • تم إصلاح تعطل server ‏(SIGSEGV) عند قراءة ملفات Avro ذات schemas recursive التي تحتوي على مراجع دورية لأنواع رمزية. ويجري الآن اكتشاف مثل هذه schemas ورفضها برسالة خطأ واضحة. #102853 (Groene AI).
  • تم إصلاح تعطل server ‏(LOGICAL_ERROR assertion) عندما تصطدم دالة على column من النوع Variant بحد الذاكرة أو بأي Exception آخر غير متعلق بتحويل النوع أثناء تحويل النتيجة في FunctionVariantAdaptor. #102855 (Groene AI).
  • تم إصلاح تعطل في server في builds الخاصة بالتصحيح/sanitizer عند إطلاق std::length_error أثناء schema inference. #102859 (Groene AI).
  • تم إصلاح تعطل عند استخدام view مع clause WHERE حيث يُنتج الاستعلام الداخلي columns بأنواع تختلف عن metadata الخاصة بالـ view (مثل Nullable الناتج من LEFT JOIN مع join_use_nulls). #102085 (Miсhael Stetsyuk).

إصلاحات أخرى للأخطاء

  • تم إصلاح خطأ كان قد يؤدي إلى تجاهل الإعدادات الصريحة المُرسلة إلى جانب compatibility في الطلب نفسه بصمت عندما كانت قيمتها تطابق القيمة الافتراضية للخادم. #97078 (Raufs Dunamalijevs).
  • تم إصلاح مشكلة كان فيها العميل يُبلغ عن NETWORK_ERROR بدلًا من parsing error الفعلي (مع رقم الصف الصحيح) عندما تصادف عملية INSERT مع parsing متوازٍ بيانات غير صالحة. #97339 (Alexey Milovidov).
  • تم إصلاح مشكلة تعليق DROP DATABASE مع database_atomic_wait_for_drop_and_detach_synchronously إلى أجل غير مسمى عند kill للـ query. #97586 (Alexey Milovidov).
  • تم إصلاح عدم قدرة KILL QUERY على إنهاء queries العالقة في توليد WITH FILL، أو loading القاموس عبر dictGet، أو ALTER DELETE مع mutations_sync=1 على ReplicatedMergeTree. #97589 (Alexey Milovidov).
  • تم إصلاح logical error في query لسياسة إخفاء البيانات مع ON CLUSTER. #97594 (Bharat Nallan).
  • تم إصلاح partition pruning غير الصحيح عند استخدام DateTime64 سابق لعصر يونكس مع الدالة toDate(). #97746 (Yarik Briukhovetskyi).
  • تم إصلاح الخطأ Cannot schedule a fileLOGICAL_ERROR عند INSERT في Distributed بسبب حالة تسابق بين DROP وINSERT. #97822 (Azat Khuzhin).
  • تم إصلاح logical error وهو “Bad cast from type DB::ColumnConst to DB::ColumnArray” في kql_array_sort_asc/kql_array_sort_desc عند استدعائهما باستخدام argument لمصفوفات ثابتة. #98251 (Alexey Milovidov).
  • يعيد خادم HTTP الآن رسالة خطأ في body الاستجابة لردود 400 Bad Request الناتجة عن headers غير صحيحة التكوين، بدلًا من body فارغ. #98268 (Alexey Milovidov).
  • تم إصلاح نتائج غير صحيحة عند استخدام distributed index analysis (ميزة تجريبية) وquery condition cache. #98269 (Azat Khuzhin).
  • تم إصلاح فشل dictionary source لـ MongoDB مع named collections. #98528 (Pablo Marcos).
  • لم يعد مسموحًا بـ dropping عمود عندما تكون subcolumns التابعة له مستخدمة في تعبيرات default/alias لأعمدة أخرى، كما استُخدم analyzer لتعبيرات default في ALTER DROP COLUMN. #98569 (Nikita Mikhaylov).
  • أصبحت جميع DB::Exception من PocoHTTPClient::makeRequestInternalImpl الآن غير قابلة لإعادة المحاولة، بما في ذلك HTTP_CONNECTION_LIMIT_REACHED. #98598 (Sema Checherinda).
  • تم إصلاح خطأين في ترجمة expression باستخدام JIT: خطأ نسخ ولصق في type checking لـ nativeCast جعل فروع cast من عدد صحيح إلى عدد صحيح ومن عدد عشري إلى عدد عشري غير قابلة للوصول، وتمرير nullptr ‏TargetMachine غير صحيح إلى LLVM PassBuilder. #98660 (Alexey Milovidov).
  • تم إصلاح الاستثناء “Inconsistent KeyCondition behavior” في إصدارات debug عندما يحتوي المفتاح الأساسي على قيم NaN من النوع float، وذلك بجعل accurateLess وaccurateEquals يتعاملان مع NaN بما يتوافق مع ترتيب الفرز في ClickHouse. #98964 (Alexey Milovidov).
  • تم إصلاح windowFunnel مع strict_deduplication، إذ كان يعيد مستوى غير صحيح عند مصادفة حدث مكرر. #99003 (Yash).
  • أصبحت إدخالات system.trace_log الخاصة بإعادة التحميل التلقائي لقواميس ClickHouse تحتوي على معرّفات استعلام غير فارغة. #98784 (Miсhael Stetsyuk).
  • تم إصلاح مشكلة عدم إيقاظ SYSTEM START REPLICATED VIEW لمهمة التحديث. #98797 (Pablo Marcos).
  • تم إصلاح WITH FILL STALENESS الذي كان ينتج صفوفًا مُعبّأة إضافية عند قراءة البيانات على عدة دفعات (مثلًا عند استخدام index_granularity صغير). #98895 (Alexey Milovidov).
  • تم إصلاح تعطّل في إخفاء هوية الاستعلامات للمعرّفات التي تبدأ بحرف كبير، مثل Ab. #101450 (Xuewei Wang).
  • تم إصلاح تجاهل TABLE_UUID_MISMATCH في مسار الشيفرة غير الخاص بالمحلل. #99380 (Azat Khuzhin).
  • تم إصلاح clickhouse format --obfuscate الذي كان ينتج SQL غير صالح بسبب إخفاء أنواع skip index، وأسماء compression codec، وأسماء database engine، وتعريفات dictionary layout/source. #99260 (Raúl Marín).
  • التحقق من setting changes في استعلامات الإنشاء عندما يكون الـ engine نفسه يدعم settings أيضًا. #99279 (János Benjamin Antal).
  • تم إصلاح تجاهل insert_deduplication_token بصمت في استعلامات INSERT SELECT من دون ORDER BY ALL. وأصبح توفير insert_deduplication_token الآن كافيًا لتمكين deduplication بغض النظر عن ORDER BY ALL. #99206 (Desel72).
  • تأخير المعالجة إلى أن ينتهي الخادم من تحميل جميع الجداول. #99700 (Seva Potapov).
  • تم إصلاح parsing لعلامات الاقتباس بأسلوب shell في arguments الخاصة بـ executable table function. #99794 (Nikita Semenov).
  • تم إصلاح استعلامات async insert التي كانت تُظهر القيمة صفرًا لكل من written_rows وread_rows وresult_rows في query_log ومخرجات client. #99879 (Sema Checherinda).
  • تم إصلاح فشل INSERT مع VALUES عندما كانت البيانات متبوعة بتعليق SQL لاحق (-- أو /* */) في السطر التالي. ويُتخطى التعليق الآن بدلًا من تحليله كصف آخر. #100016 (Pratima Patel).
  • تم إصلاح استثناء في arrayRemove عند مقارنة tuples تحتوي على components بقيمة NULL. #100017 (Alexey Milovidov).
  • معالجة القيم السالبة داخل NumericIndexedVectorDataBSI بشكل صحيح. #100086 (Daniil Ivanik).
  • تم إصلاح مشكلة عدم التزام دالة الجدول primes بالإعداد max_rows_to_read بشكل صحيح في بعض الحالات، خصوصًا عند وجود offset وstep. #100199 (Nihal Z. Miaji).
  • لم يعد المستخدمون يرون NATURAL CROSS JOIN عند الاستعلام عن AST لاستعلام natural join يُعاد Rewrite له إلى CROSS JOIN. #100223 (Peter Nguyen).
  • بعض التغييرات الطفيفة على الدوال: أصبحت دوال h3 تتحقق من الحدود بشكل أفضل؛ وأصبحت readWKB تتحقق من حدود الحجم (مع إعداد جديد هو max_wkb_geometry_elements)؛ كما أصبحت دوال توليد الأرقام العشوائية تقيّد الحد الأقصى لعدد التكرارات. #100270 (Alexey Milovidov).
  • تم إصلاح مشكلة كان فيها cutURLParameter قد يتخطى parameters بشكل غير صحيح عندما تظهر كسلاسل فرعية ضمن parameters أخرى. #100280 (Nikita Semenov).
  • تم إصلاح استثناء LOGICAL_ERROR في estimateCompressionRatio عندما تكون parameter ‏block_size_bytes كبيرة جدًا. #100298 (Alexey Milovidov).
  • تم إصلاح تعليق DROP TABLE إلى أجل غير مسمى على جداول Kafka engine عندما يكون الـ consumers عالقين في rebalance بعد خطأ heartbeat. #100388 (Alexey Milovidov).
  • تمت مطابقة dimensions الخاصة بـ shape في تنسيق Npy مع حجم الملف وحدود overflow لمنع هجمات حجب الخدمة عبر ملفات .npy مُعدّة خصيصًا. كما رُفضت الأشكال الفارغة، وفُرض حد أقصى للذاكرة لكل row يبلغ 2 GiB. #100625 (Raúl Marín).
  • تم إصلاح تجاهل session_timezone عند parsing قيم DateTime أثناء async inserts ‏(TCP) وجميع عمليات insert عبر HTTP. #100647 (Sema Checherinda).
  • أصبح StorageRabbitMQ::shutdown الآن idempotent، مع إضافة فحوصات null وقائية، لأنه بات يُستدعى مرتين (في StreamingStorageRegistry وDatabaseCatalog). #100455 (Miсhael Stetsyuk).
  • تم إصلاح استثناء LOGICAL_ERROR عند استخدام accurateCastOrNull مع النوع الهدف QBit. #100470 (Raufs Dunamalijevs).
  • تم إصلاح عدم عمل صياغة LIMIT m OFFSET n WITH TIES (وهي مكافئة لـ LIMIT n, m WITH TIES، التي كانت تعمل بالفعل). #100491 (Nihal Z. Miaji).
  • تم إصلاح segfault حيث كانت SerializationInfoTuple::add تُجري assert_cast على مرجع SerializationInfo عادي أثناء merging للأجزاء بعد أن غيّر ALTER MODIFY COLUMN عمودًا من نوع غير Tuple إلى Tuple. #100509 (Miсhael Stetsyuk).
  • تم إصلاح الاستثناء “No set is registered for key” عند استخدام IN مع columns من نوع Nullable(Tuple) تحتوي على fields مسماة وعناصر LowCardinality. #100523 (Alexey Milovidov).
  • تم إصلاح تجاهل EXECUTE AS للبندين FORMAT وINTO OUTFILE المحددين في query. #100538 (pufit).
  • تم إصلاح عدم اتساق تنسيق AST لـ SAMPLE مع OFFSET على مستوى الاستعلام. #100579 (Pavel Kruglov).
  • تم إصلاح أخطاء “الجدول الهدف غير موجود” في العروض المادية ذات الجداول الداخلية أثناء بدء التشغيل غير المتزامن، والناجمة عن ترتيب غير صحيح لاعتماديات بدء التشغيل. #100946 (Nikolay Degterinsky).
  • تم إصلاح استثناء في optimizeLazyMaterialization عند استخدام projection مع PREWHERE إلى جانب ORDER BY ... LIMIT. #101115 (Anton Popov).
  • تم إصلاح رسالة خطأ غير صحيحة عند استدعاء intExp10 باستخدام وسيط NaN — إذ كانت تعرض intExp2 بدلًا من intExp10. #101582 (Krishna Chaitanya).
  • تم إصلاح مشكلة عدم قيام allow_statistics=0 بحظر ALTER TABLE ADD STATISTICS و ALTER TABLE DROP STATISTICS. #101585 (Krishna Chaitanya).
  • تم إصلاح مشكلة تجاهل CREATE TABLE ... AS merge() لقائمة الأعمدة المحددة صراحةً، والاعتماد بدلًا من ذلك على الاستدلال التلقائي على الأعمدة من الجداول المصدر، مما تسبب في أخطاء NOT_FOUND_COLUMN_IN_BLOCK عندما كانت قيمة merge_table_max_tables_to_look_for_schema_inference منخفضة بما يكفي وكانت الجداول المصدر ذات مخططات مختلفة. #101663 (Miсhael Stetsyuk).
  • تم إصلاح قبول إنشاء Dictionary من النوع RANGE_HASHED بصمت لسمة نطاق MAX غير موجودة، واستخدام إعداد Type غير صحيح عندما كانت سمتا النطاق min و max من نوعين مختلفين. #101732 (Yakov Olkhovskiy).
  • تم إصلاح أخطاء في الدالتين arrayLevenshteinDistanceWeighted و arraySimilarity. #101767 (Mikhail f. Shiryaev).
  • تم إصلاح تجاهل Prometheus Query API لهيئات نماذج POST. #101794 (James Cunningham).
  • تم إصلاح حالة سلبية كاذبة في shouldPatchFunction ضمن SYSTEM INSTRUMENT ADD عندما يظهر نص البحث لأول مرة داخل وسيط Template في اسم الرمز بعد فكّ التشابك. #101885 (Pablo Marcos).
  • تم إصلاح وصف system.codecs الخاص بـ AES_256_GCM_SIV ليعرض AES-256 بدلًا من AES-128. #101917 (Jimmy Aguilar Mena).
  • تم إصلاح سلوك غير معرّف عند تحليل حزم Query packet في native protocol ذات قيم QueryProcessingStage غير الصالحة. #101972 (Raúl Marín).
  • أُغلِق اتصال TCP عند حدوث استثناء أثناء تحليل initial query، لمنع قراءة بيانات غير صالحة من stream غير متزامن. #101989 (Raúl Marín).
  • تم إصلاح الحالات التي كانت فيها Time ذات القيم السالبة تُرجع نتيجة غير صحيحة عند المقارنة مع DateTime. #102056 (Yarik Briukhovetskyi).
  • تم إصلاح المسافات المفقودة عند formatting لأمر unlock snapshot. #102063 (Han Fei).
  • فشلت تهيئة جداول Alias التي لا تحتوي على جدول هدف على replica جديدة في قاعدة البيانات Replicated. #102397 (Nikolay Degterinsky).
  • لم تعد عمليات INSERT العادية من دون materialized views تطلب عددًا مفرطًا من فتحات ConcurrencyControl والخيوط (max_threads بدلًا من max_insert_threads)، مما يمنع نفاد فتحات CC وتضخم عدد الخيوط على العناقيد ذات معدل INSERT المرتفع. #102961 (Sema Checherinda).
  • أُعيد تقديم ArrowMemoryPool للسماح بإطلاق MEMORY_LIMIT_EXCEEDED لتجنّب OOM على مستوى النواة. #102999 (Azat Khuzhin).
  • تم إصلاح الإبلاغ عن نوع وسيطة غير صحيح في رسائل الخطأ الخاصة بـ string search functions (مثل locate وposition) عند تمرير الوسيطات بترتيب معكوس (locate(needle, haystack) مع function_locate_has_mysql_compatible_argument_order = 1). #103102 (Alex Kuleshov).
  • تم إصلاح مشكلة بقاء waitForPause معلّقًا إلى أجل غير مسمى عند استدعاء disableFailPoint من دون وجود أي thread متوقفة عند الـ failpoint. #103119 (Shaohua Wang).
Last modified on June 29, 2026