الانتقال إلى المحتوى الرئيسي

إصدار ClickHouse 26.5، 2026-05-21. العرض التقديمي، الفيديو

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

  • تم تغيير القيم الافتراضية لكلٍّ من date_time_input_format وcast_string_to_date_time_mode من basic إلى best_effort. وقد تنجح الآن افتراضيًا الاستعلامات التي كانت تفشل سابقًا في تحليل سلاسل datetime غير الأساسية (مثل 2024 April 4 وApr 15, 2020 10:30:00). وللاحتفاظ بسلوك التحليل الصارم السابق، اضبط هذين الإعدادين على basic (أو استخدم compatibility). #89334 (Alexey Milovidov).
  • أصبح اسم عنصر Tuple وهو null محظورًا الآن لأنه يتعارض مع اسم subcolumn المستخدم لخرائط null في Nullable، مما يؤدي إلى التباس في تحديد subcolumn. #98377 (Alexey Milovidov).
  • تمت إضافة الإعدادات dynamic_disk_allow_from_env وdynamic_disk_allow_from_zk وdynamic_disk_allow_include لمنع استخدام from_env وfrom_zk وinclude في dynamic disks. ويُعدّ هذا تغييرًا غير متوافق مع الإصدارات السابقة لأنه يحظر افتراضيًا سلوكًا كان مسموحًا به افتراضيًا من قبل. #99138 (Kseniia Sumarokova).
  • لم يعد بإمكانك استخدام Parquet reader وwriter القديمين المعتمدين على Arrow. وسيُستخدم التنفيذ native بدلًا من ذلك. #100949 (Alexey Milovidov).
  • أصبح SHOW CREATE TABLE t يفضّل الآن temporary table عندما توجد table دائمة وtemporary table كلتاهما باسم t ولم يتم تحديد database، بما يتوافق مع السلوك الحالي لـ DESCRIBE TABLE. بالإضافة إلى ذلك، أصبح syntax الخاص بـ DESCRIBE TEMPORARY TABLE مدعومًا الآن. #100966 (Alexey Milovidov).
  • تم خفض القيمة الافتراضية لـ http_max_fields من 1,000,000 إلى 1,000 وhttp_max_field_name_size من 128 KB إلى 4 KB للحد من memory usage قبل authentication بواسطة HTTP connections. وتمت إضافة الإعدادين http_max_request_header_size وhttp_headers_read_timeout. ويمكن للمستخدمين الذين يعتمدون على الحدود الأعلى السابقة استعادة هذه القيم عبر الإعدادات. #103285 (Sema Checherinda).
  • تمت إضافة column متداخلة باسم histograms إلى system.metric_log تلتقط snapshot لكل histogram metric مسجلة في كل row، مع إعداد جديد هو system_metric_log_show_zero_values_in_histograms للتحكم في إخراج القيم الصفرية. وهذا يجعل table ‏system.histogram_metric_log مهملة. #103770 (Miсhael Stetsyuk).
  • أصبح CAST إلى DateTime أو DateTime64 من دون time zone صريحة يحافظ الآن على time zone الخاصة بـ argument المصدر (عندما يكون المصدر من نوع DateTime/DateTime64 مع time zone صريحة)، بما يتوافق مع سلوك الدالتين toDateTime/toDateTime64. يُغلق #55072. #104433 (Alexey Milovidov).
  • أُزيلت table function ‏kql. استخدم SET dialect = 'kusto' لتشغيل الاستعلامات بلهجة KQL. #105101 (Alexey Milovidov).
  • أصبحت window functions ‏RANK وDENSE_RANK ترفض arguments وتُطلق NUMBER_OF_ARGUMENTS_DOESNT_MATCH، بما يتوافق مع معيار SQL. في السابق، كانت الاستعلامات مثل RANK(x) OVER (ORDER BY id) تُقبل بصمت مع تجاهل argument. ولاستعادة السلوك المتساهل السابق، اضبط allow_rank_dense_rank_arguments = 1. يُغلق #49526. #104324 (Groene AI).

ميزة جديدة

  • أُضيف إعداد جديد max_bytes_ratio_before_external_join، مماثلًا لـ max_bytes_ratio_before_external_group_by وmax_bytes_ratio_before_external_sort. ويعبّر عن عتبة النقل إلى disk لعمليات hash join كنسبة من الذاكرة المتاحة؛ وعند استخدامه مع القيمة المطلقة max_bytes_before_external_join، تُطبَّق العتبة الأصغر الناتجة. #103862 (Alexey Milovidov). أصبح الإعداد max_bytes_ratio_before_external_join مفعّلًا افتراضيًا الآن بالقيمة 0.5، على غرار max_bytes_ratio_before_external_group_by وmax_bytes_ratio_before_external_sort. وتنتقل عمليات hash join تلقائيًا إلى grace hash join بمجرد أن تتجاوز بيانات الجانب الأيمن نصف ذاكرة النظام المتاحة (عند تهيئة حدود الذاكرة). #104285 (Alexey Milovidov).
  • أُضيفت table function filesystem. وهي تتيح تمثيل بنية directory على شكل table، والاستعلام عن metadata الملفات ومحتوياتها باستخدام SQL. طُرحت في الأصل في #42039 بواسطة @perst20. راجع #42039. وراجع #50208. #53610 (Alexey Milovidov).
  • أصبح من الممكن تمرير أسماء الدوال مباشرةً إلى الدوال عالية الرتبة مثل arrayMap وarrayFilter وغيرها. على سبيل المثال، أصبح arrayMap(negate, [1, 2, 3]) الآن مكافئًا لـ arrayMap(x -> negate(x), [1, 2, 3]). #101033 (Alexey Milovidov).
  • أُضيف الإعداد send_table_structure_on_insert_with_inline_data وخيار client ‏--inline-insert-data للسماح لـ server بتحليل بيانات INSERT المضمّنة بنفسه عبر native protocol، ما يجنّب جولة الذهاب والإياب اللازمة لاستقبال بنية table ويحسّن الأداء عند وجود عدد كبير من عمليات insert الصغيرة. #101034 (Alexey Milovidov).
  • أُضيفت الدالتان tokenizeQuery وhighlightQuery لتجزئة SQL query إلى tokens وإبراز الصياغة. تُرجع tokenizeQuery tokens الخاصة بالمحلل المعجمي مع offsets بالبايت وأنواع tokens؛ وتُرجع highlightQuery ranges لإبراز الصياغة استنادًا إلى parser، مع فئات الإبراز (keyword وidentifier وfunction وnumber وstring وغير ذلك). #101054 (Alexey Milovidov).
  • أُضيف الإعداد url_base لحل relative URLs في table function ‏url وtable engine ‏URL، وفق دلالات RFC 3986. #101113 (Alexey Milovidov).
  • أُضيف دعم القيم السالبة في clause ‏LIMIT BY لاختيار rows من نهاية كل مجموعة بدلًا من بدايتها. على سبيل المثال، يعيد LIMIT -2 BY id آخر صفّين لكل id. كما أن offsets السالبة (LIMIT -1 OFFSET -1 BY id) والإشارات المختلطة (LIMIT -2 OFFSET 1 BY id) مدعومة أيضًا. #103222 (Nihal Z. Miaji).
  • أُضيف دعم للدالة json_value للإخراج باستخدام tuple وarray لتحسين أداء استعلامات JSON المتعددة. #78362 (kevinyhzou). وأُضيف أيضًا دعم وسيط JSONPath متعدد المسارات من نوع Tuple/Array في JSON_VALUE وJSON_EXISTS وJSON_QUERY، بواسطة @KevinyhZou. #101102 (Alexey Milovidov).
  • أُضيفت مَعلمة جديدة باسم kafka_autodetect_client_rack. عند ضبطها، يُكتشف Availability Zone عبر إمكانات السحابة ويُمرَّر على أنه المَعلمة client.rack في librdkafka لتجنّب الاتصالات العابرة للمناطق. #81323 (Ilya Golshtein).
  • أُضيف نوع الحدث Read إلى system.blob_storage_log لتتبّع عمليات القراءة من object storage، ويتحكم فيه الإعداد الجديد enable_blob_storage_log_for_read_operations. #96867 (Alexey Milovidov).
  • يمكن للمستخدمين الآن الاطّلاع على watches الخاصة بـ ZooKeeper التي يُصدرها clickhouse-server باستخدام الجدول الجديد system.zookeeper_watches. #99277 (Den Kalantaevskii).
  • أُضيف حدث ملف التعريف Shards الذي يحسب عدد shards المشاركة في distributed queries، مع جمعها عبر جميع الجداول. #99470 (Alexey Milovidov).
  • يمكن الآن تعريف دوال WASM المعرّفة من المستخدم على أنها DETERMINISTIC، لتخضع لطيّ الثوابت. #100005 (Vasily Chekalkin).
  • أُضيف الإعداد parallel_replicas_prefer_local_replica: عند تعطيله، تُختار parallel replicas بالكامل وفقًا لخوارزمية load balancing، مما يتيح توجيه الاستعلامات حتى مع max_parallel_replicas = 1 إلى مضيف آخر. #100139 (Alexey Milovidov).
  • أُضيفت إعدادات الخادم {disk,storage,http}_connections_rcvbuf و{disk,storage,http}_connections_sndbuf للتحكم في أحجام مخازن مقابس TCP على اتصالات HTTP الصادرة، بما يتيح للمشغّلين تجاوز autotuning الخاص بالنواة ووضع حدّ لاستخدام الذاكرة لكل اتصال. #100478 (Sema Checherinda).
  • دعم CREATE OR REPLACE MATERIALIZED VIEW بنفس دلالات الاستبدال الذرّي الخاصة بـ CREATE OR REPLACE TABLE. يعمل ذلك مع الجداول الداخلية، وجداول TO، وPOPULATE، وREFRESH، وON CLUSTER. #100539 (DQ).
  • أُضيفت histogram metrics s3_read_request_duration_microseconds وs3_read_request_bytes لمراقبة مدة اتصال طلبات GET إلى S3 وحجم البايتات المستهلكة، وهي متاحة في system.histogram_metrics وعبر Prometheus endpoint. #102058 (Sema Checherinda).
  • أُضيفت table engines Paimon وPaimonS3 وPaimonAzure وPaimonHDFS وPaimonLocal مع دعم Incremental read بالاستناد إلى تتبّع تقدّم snapshots الخاصة بـ Keeper. يعيد الوضع التزايدي الصفوف الجديدة فقط منذ آخر snapshot معتمدة. كما تتوفر قراءات delta موجَّهة للّقطات عبر paimon_target_snapshot_id، وحدود snapshots لكل استعلام عبر max_consume_snapshots. ويمكن ضبط metadata refresh في الخلفية عبر paimon_metadata_refresh_interval_sec. ويخضع ذلك للإعداد allow_experimental_paimon_storage_engine. #102343 (XiaoBinMu).
  • أُضيف إعداد جديد لجدول Kafka باسم kafka_map_virtual_columns_on_write. عند تفعيله، تُنتَج الأعمدة المسماة _key و_timestamp و_headers.name و_headers.value في مخطط Kafka table على أنها مفتاح رسالة Kafka والطابع الزمني وheaders المقابلة عند INSERT، وتُستبعَد من message payload. #103243 (Alexey Milovidov).
  • أُضيف الاستعلامان SYSTEM PAUSE VIEW [db.]name وSYSTEM PAUSE VIEWS للعروض المادية القابلة للتحديث. وعلى خلاف SYSTEM STOP VIEW، لا يقطع SYSTEM PAUSE VIEW عملية التحديث الجارية حاليًا — إذ يُسمح للتحديث قيد التنفيذ بأن يكتمل، ولا تُمنَع إلا عمليات التحديث اللاحقة. ويمكن التراجع عن ذلك باستخدام SYSTEM START VIEW أو SYSTEM START VIEWS، اللذين يزيلان الآن، بصورة موحّدة، حالتي الإيقاف والإيقاف المؤقت معًا. #103252 (Nikita Mikhaylov).
  • أُضيفت الدالة regexpPosition (مع الأسماء البديلة المتوافقة مع PostgreSQL: regexpInstr وregexp_instr) التي تُرجع موضع البايت للمطابقة رقم N للتعبير النمطي داخل سلسلة نصية. وهي تدعم إزاحة البداية، ووضع الإرجاع بعد المطابقة، وأعلام التعبير النمطي، واختيار مجموعة الالتقاط. #104172 (Abhinav Agarwal).
  • أُضيفت الدالتان الجديدتان isPrime وisProbablePrime للتحقق من أولية الأعداد. تُرجع isPrime نتيجة دقيقة للأعداد الصحيحة غير الموقعة حتى UInt64. كما تدعم isProbablePrime أيضًا UInt128 وUInt256؛ وبالنسبة إلى هذه الأنواع الأوسع، فإن 0 تعني أن العدد مركب قطعًا، و1 تعني أنه أولي على الأرجح. وتتحكم الوسيطة الاختيارية الثانية في isProbablePrime، وهي rounds، بدرجة الثقة (بحد أقصى 256)؛ إذ يحد الإعداد الافتراضي البالغ 25 جولة من معدل الإيجابيات الكاذبة لعدد مركب عشوائي إلى أقل من 10^-15، كما يمكن إلغاء isProbablePrime. #104234 (Nihal Z. Miaji). #104639 (Alexey Milovidov). #104806 (Nihal Z. Miaji).
  • أصبح clear و/clear الآن يمسحان الطرفية في أدوات سطر الأوامر الخاصة بـ ClickHouse بدلًا من تنفيذهما على أنهما استعلام خاطئ. #104318 (Tyler Hannan).
  • أصبح يُسمح الآن لدالة الجدول file بقبول Array(String) من المسارات في استعلامات SELECT. #104442 (Yue).
  • أُضيف العمودان deterministic وhigher_order إلى جدول system.functions. #104479 (Pedro Ferreira).
  • أُضيف مُعامِل اختياري لمتغير الترميز إلى bech32Encode (bech32 / bech32m) ووضع فك ترميز خام إلى bech32Decode لترميز العناوين غير الخاصة بـ SegWit (مثل Cosmos SDK وInjective وOsmosis). #98986 (Yash ).
  • يمكنك الآن كتابة البيانات بتنسيق AvroConfluent، الذي كان سابقًا مخصصًا للإدخال فقط. يتيح ذلك إنتاج رسائل Avro مؤطّرة بواسطة Confluent Schema Registry مباشرةً من ClickHouse، مثلًا عند الكتابة إلى Kafka. ويُسجَّل المخطط تلقائيًا في سجل المخططات. استخدم الإعداد الجديد output_format_avro_confluent_subject لتحديد اسم الـ subject. #101935 (János Benjamin Antal).
  • أُضيفت الدالة prettyPrintJSON لتنسيق سلسلة JSON إلى صيغة مقروءة للبشر. وهي مفيدة للوحات المعلومات أو التقارير، حيث كان تحسين التنسيق يتطلب سابقًا خطوة إضافية على جانب العميل. ويغلق ذلك #62523. #102594 (Dmitry Prokofyev).
  • تمت إضافة STRING_AGG كاسم مستعار غير حساس لحالة الأحرف لـ groupConcat للتوافق مع PostgreSQL / معيار SQL. #105125 (Alexey Milovidov).
  • أصبح الآن بالإمكان تخزين نتائج كل استعلام فرعي مؤقتًا بشكل مستقل باستخدام SETTINGS use_query_cache = true في استعلامات فرعية محددة، من دون تخزين الاستعلام الخارجي بالكامل مؤقتًا. كما يتيح الإعداد الجديد query_cache_for_subqueries = true تعميم use_query_cache على جميع الاستعلامات الفرعية دفعةً واحدة. ملاحظة: لم يعد use_query_cache في الاستعلام الخارجي يُطبَّق تلقائيًا على الاستعلامات الفرعية. #99804 (Vincent Voyer).
  • تمت إضافة تمييز الصياغة البرمجية المعتمد على المحلّل المعجمي إلى محرر الاستعلامات في واجهة الويب (play.html)، على غرار ألوان clickhouse-client. #105105 (Alexey Milovidov).

ميزة تجريبية

  • أُضيفت واجهة طرفية تجريبية عبر الويب عند /webterminal توفّر جلسة clickhouse-client تفاعلية في المتصفح عبر WebSocket. وهي معطّلة افتراضيًا؛ ويمكن تفعيلها باستخدام إعداد الخادم allow_experimental_webterminal. اطّلع عليها هنا. #100277 (Alexey Milovidov). #105191 (Alexey Milovidov). #105059 (Alexey Milovidov).
  • أصبح المحرّك Kafka2 (تجريبي، مع تخزين الإزاحات المستند إلى Keeper) يدعم الآن استعلامات SELECT المباشرة والإعداد kafka_commit_on_select. #100276 (Alexey Milovidov).
  • يمكن الآن لـ UDFs الخاصة بـ WASM إجراء تحويل قسري لمزيد من الأنواع العددية: من الأعداد الصحيحة الأصغر إلى الأعداد الصحيحة الأوسع (مثل Int8 إلى UInt64)، ومن أي عدد صحيح إلى عدد ذي فاصلة عائمة (مثل Int32 إلى Float32). #100435 (Vasily Chekalkin).
  • إضافة دعم الدالة LIKE في استعلام DELETE FROM system.webassembly_modules. #104397 (Vladimir Cherkasov).
  • دعم الأنواع الجغرافية في Iceberg. #103113 (Konstantin Vedernikov).
  • إضافة دعم العبارات المُحضّرة إلى خادم ArrowFlight SQL. #103047 (Yakov Olkhovskiy).
  • تحسين متانة محلّل KQL (لدعم لغة Kusto) عبر الحفاظ على عمق المحلّل وعدادات التراجع عبر مراحل محلّل KQL، بحيث تُتتبَّع حدود المحلّل بصورة متسقة في استعلامات KQL المعقّدة. #103528 (Yakov Olkhovskiy).

تحسين الأداء

  • أَعِد استخدام metadata cache الخاصة بتذييل Parquet عند قراءة ملفات Parquet المحلية عبر table function ‏file أو table engine ‏File. سابقًا، لم يكن يُستفاد من هذه cache إلا مع backends الخاصة بـ object storage. #104260 (Alexey Milovidov).
  • مرِّر ORDER BY ... LIMIT n عبر عمليات JOIN من نوع LEFT/RIGHT عندما لا يشير مفتاح الفرز إلا إلى columns من الجانب الذي يحتفظ به JOIN، ما يقيِّد عدد rows التي يجب أن يُنتجها الإدخال من ذلك الجانب قبل تنفيذ JOIN. ويتحكم في ذلك الإعداد الجديد query_plan_top_k_through_join (مُمكَّن افتراضيًا). #104268 (Alexey Milovidov).
  • فعِّل الإعدادين use_top_k_dynamic_filtering وuse_skip_indexes_for_top_k افتراضيًا لتحسين أداء queries من نوع ORDER BY ... LIMIT N. #99537 (Alexey Milovidov). واقصر use_top_k_dynamic_filtering افتراضيًا على columns الفرز ذات الطول الثابت، لتجنّب التراجعات في queries من نوع ORDER BY <var-length-column> LIMIT N عندما تتجاوز تكلفة مقارنة threshold لكل row وفورات I/O. ويظل السلوك السابق متاحًا عبر الإعداد الجديد use_top_k_dynamic_filtering_for_variable_length_types. #104216 (Alexey Milovidov).
  • استخدم ميزة oversize-arena في jemalloc لتقليل أخطاء الصفحات. #103958 (Nikita Taranov).
  • قلِّل عدد streams النشطة بالتزامن في UNION ALL لتقليل Peak memory usage. #100176 (Alexey Milovidov).
  • حسِّن userspace page cache قليلًا. #100300 (Alexey Milovidov). والآن أصبحت userspace page cache أفضل دائمًا من OS page cache.
  • أصبحت cold reads من object storage عبر userspace page cache (use_page_cache_for_object_storage = 1) أسرع بكثير، لأن حالات الإخفاق المتتالية في cache تُدمج الآن في HTTP request واحد بدلًا من طلب واحد لكل block بحجم page_cache_block_size. #104230 (Alexey Milovidov).
  • سرِّع index analysis الذي يتضمن CAST وتطبيق FUNCTION. يُغلق #55653. #100366 (Alexey Milovidov).
  • سرِّع queries الضخمة على جداول Merge عبر عدد هائل من underlying tables. يُغلق #32465. #100369 (Alexey Milovidov).
  • أزِل vtable من types حقول الإعدادات، ما يقلّل حجم نسخ Settings بنحو 28x ويحسّن تموضع cache عبر typed-array layout لجميع أنواع الإعدادات. #102269 (Raúl Marín).
  • أضِف الإعدادين max_threads_min_free_memory_per_thread وmax_insert_threads_min_free_memory_per_thread لتقليل query parallelism تلقائيًا عندما تنخفض الذاكرة الحرة على server. #100383 (Alexey Milovidov).
  • قلِّل memory usage على الأنظمة منخفضة الذاكرة (< 4 GiB). #100389 (Alexey Milovidov).
  • تمت إضافة OptimizeTrivialGroupByLimitPass. في استعلامات SELECT ... FROM t GROUP BY k LIMIT n البسيطة (من دون HAVING أو ORDER BY أو دوال النوافذ)، يضبط المحلل الآن max_rows_to_group_by = n + offset مع group_by_overflow_mode = 'any'، بحيث يتوقف التجميع بمجرد إنتاج n مفاتيح مميزة بدلًا من تجميع كامل الإدخال. ويتحكم في ذلك الإعداد الجديد optimize_trivial_group_by_limit_query (مُمكَّن افتراضيًا). #104473 (Amos Bird) (Alexey Milovidov).
  • فهرس min-max ضمني على مستوى الـ granule للعمودين الافتراضيين _part_offset و _block_number، بما في ذلك الإسقاطات. يتيح استبعادًا سريعًا للـ granules استنادًا إلى شروط الأعمدة الافتراضية. #103952 (Mikhail Artemenko). #104746 (Mikhail Artemenko). #105137 (Mikhail Artemenko).
  • بالنسبة إلى عائلة أساليب التجميع prealloc_serialized، تُحسب قيم hash لكل صف مسبقًا أثناء تمريرة التسلسل الدفعي، ثم تُستخدم من أجل (أ) تجنب إعادة حساب hash في emplaceKey/findKey و(ب) إجراء software prefetch لـ bucket الخاصة بالصف التالي. يسرّع ذلك التجميع متعدد المفاتيح للسلاسل/البيانات المُسلسلة عبر تقليل زمن الانتظار الناتج عن إخفاقات cache في hash table. #104475 (Amos Bird) (Alexey Milovidov).
  • query condition cache لجداول Iceberg. #102115 (Konstantin Vedernikov).
  • تحسين cramersV وcramersVBiasCorrected وtheilsU وcontingency عند استخدامها مع دوال النوافذ. يُغلق #83521. #93384 (Nihal Z. Miaji).
  • أُضيف تحسين للاستعلامات يعيد كتابة tupleElement(dictGet('dict', ('a', 'b', 'c'), key), N) إلى dictGet('dict', 'a', key)، ما يتجنب جلب سمات Dictionary غير الضرورية. ويتحكم في ذلك الإعداد optimize_dictget_tuple_element (مُمكَّن افتراضيًا). #100186 (Alexey Milovidov).
  • تفعيل buffering لخطوات الفرز على initiator من أجل distributed queries التي تتضمن فرزًا. #100661 (Nikita Taranov).
  • تحسين في الأداء لـ partial_merge JOIN. #100945 (Artem Zuikov).
  • تقليل طفيف في التخصيص الزائد للذاكرة في partial_merge JOIN. #100963 (Artem Zuikov).
  • تحسين allocations/deallocations عبر التخزين المؤقت لإعدادات sampling بدلًا من اجتياز التسلسل الهرمي الكامل لمتعقّب الذاكرة. #101267 (Azat Khuzhin).
  • تقليل overhead تخصيص الذاكرة أثناء multipart upload إلى S3 عبر التخصيص المسبق لحاويات التتبع الداخلية. #101799 (Gagan Dhakrey).
  • إضافة software prefetch في مرحلة probe الخاصة بـ hash join لتقليل زمن الوصول إلى الذاكرة مع جداول hash الكبيرة، ويتحكم في ذلك الإعداد enable_software_prefetch_in_join. #102444 (Xiaozhe Yu).
  • تحسين بنية MemoryTracker، مما حسّن أداءه بنحو ~25%. #103464 (Azat Khuzhin).
  • إعادة كتابة predicates coalesce(a, b, ...) <op> const و ifNull(a, b) <op> const قبل index analysis، بحيث تتمكن primary key و skip indexes لكل عمود في كل argument من استبعاد granules. ويتحكم في ذلك الإعداد الجديد allow_key_condition_coalesce_rewrite (مفعّل افتراضيًا). #103468 (Manuel).
  • تحسّن query performance بشكل ملحوظ عند قراءة Iceberg catalogs التي تحتوي على ملفات metadata كبيرة بتنسيق JSON، وذلك من خلال تحسين معالجة الشرطات المائلة المُهرَّبة. #103998 (Mohaidoss).
  • تجنّب overhead الخاص بـ index uncompressed cache عند تعطيل cache (server setting index_uncompressed_cache_size = 0، وهي القيمة default). #104063 (Michael Kolupaev).
  • إصلاح queries من نوع ORDER BY ... LIMIT ذات الحد الصغير التي كانت تقرأ granules أكثر من اللازم عند اقترانها بـ filter غير انتقائي في WHERE. سابقًا، كان أي filter فوق قراءة مرتبة يعطّل تقسيم المهام لكل نطاق علامات، بحيث لا يتمكن pipeline من الإلغاء بين granules وينتهي به الأمر إلى قراءة part بالكامل لكل stream. #104112 (Vladimir Cherkasov).
  • إصلاح عدم إعادة استخدام cache لأحجام hash table بعد إعادة ترتيب جانبي JOIN. #104131 (Nikita Taranov).
  • عند تفعيل fsync_after_insert، أصبح تنفيذ fsync لملفات part يتم in parallel باستخدام IO thread pool، مما يسرّع إتمام insert في wide tables. وأصبح تحميل ClickBench الكامل لجدول hits أسرع بنحو 22%. #104137 (Alexey Milovidov).
  • تحويل find_first_symbols و find_first_not_symbols و find_last_symbols_or_null و find_last_not_symbols_or_null و splitInto إلى تنفيذ متّجه على AArch64 باستخدام NEON. سابقًا، لم يكن لدى هذه helpers مسار SIMD إلا على x86 (SSE2 / SSE4.2)، وكانت تنتقل إلى حلقة scalar على ARM. يسرّع ذلك parsing لملفات TSV بنحو ~2x، ودوال URL و splitByChar بنحو ~1.3x على dataset hits من ClickBench؛ بينما يتراجع parsing الكثيف جدًا لـ JSON (بتواتر حقول أقل من 16 بايت) بشكل طفيف، بما يتماشى مع المقايضة الحالية في SSE2. #104228 (Alexey Milovidov).
  • أصبحت قراءة data عبر عمود ALIAS بسيط (مثل some_alias['key'] حيث some_alias ALIAS m) تمر عبر مسار القراءة نفسه لكل subcolumn كما لو تمت الإشارة إلى underlying column مباشرةً، مما يعيد وفورات I/O الكبيرة لأعمدة Map و Array و Tuple و Nullable المستعارة. #104245 (Raúl Marín).
  • تقليل التنافس على الأقفال في مسار القراءة Asynchronous من نظام الملفات البعيد عبر جعل AsyncReadCounters الخاص بكل query بلا أقفال. #104374 (Nikita Mikhaylov).
  • query plan أفضل قليلًا لعملية المسح المرتب لـ projections. #103723 (Mikhail Artemenko).
  • توسيع optimizeUseNormalProjections ليتعامل أيضًا مع حالة محددة لم يُرشَّح فيها شيء، لكن sorting key الخاص بـ projection يمكنه إزالة خطوة الفرز من query plan. #104680 (Mikhail Artemenko).
  • السماح لكتابة الاختصار json.path[] وتلميحات الأنواع الصريحة بالعمل بشكل صحيح على مسارات JSON محددة النوع. #99179 (Pavel Kruglov).
  • تحسين json.path[N].nested.path (التي تتوسع إلى tupleElement(tupleElement(json.path[N], 'nested'), 'path')) إلى json.path[].nested.path[N]، ما يؤدي إلى قراءة بيانات أقل بكثير. #99802 (Pavel Kruglov).
  • تحسين فحوصات الوصول لـ SHOW TABLES في system.parts عبر إخراج فحوصات امتيازات مستوى قاعدة البيانات من الحلقة الخاصة بكل جدول. #100860 (Shaohua Wang).
  • إزالة فحص وصول زائد لكل جدول لـ SHOW TABLES في المسار السريع SELECT name / SELECT database, name في system.tables. #100881 (Shaohua Wang).
  • تمكين تجميع JIT على macOS. #100947 (Alexey Milovidov).
  • تخطي تأجيل سياسة الصفوف بعد FINAL عندما تعتمد فقط على أعمدة مفتاح الفرز وتكون حتمية، وكذلك تخطي تأجيل PREWHERE المقابل الذي كانت سياسة الصفوف تفرضه في هذه الحالة. #102884 (Yarik Briukhovetskyi).
  • إضافة دعم hasAny وhasAll كمسندات ترشيح في الفهارس النصية. #103266 (Anton Popov).
  • توجيه حالة Heap طويلة العمر في MergeTree (البيانات الوصفية لكل part ولكل table) إلى arena مخصصة في jemalloc، مع إتاحتها عبر المقاييس غير المتزامنة jemalloc.mergetree_arena.*. يقلل ذلك من تجزئة الـ arena الافتراضية في حالات التشغيل المستقرة، ويمنع العناصر الباقية لكل part من تثبيت صفحات كان يمكن أن تتحلل لولا ذلك. #104136 (Raúl Marín).
  • تحسين التعامل مع timeout في client الخاص بـ ZooKeeper تحت الأحمال العالية عندما تُرسل طلبات كثيرة بأسلوب pipelining ضمن جلسة واحدة. يستخدم client الخاص بـ ZooKeeper الآن timeout قائمًا على التقدم: ما دام يتم تلقي أي بيانات من server خلال session_timeout_ms، يُمدَّد الانتظار. ويظل هناك حد أقصى صارم قدره 3 * session_timeout_ms لكل طلب لتقييد زمن الاستجابة لدى المستدعي. يغلق #100466. #104351 (Antonio Andelic).
  • نقل علامات trace الخاصة بكل حدث إلى مصفوفة منفصلة وتخصيصها عند الحاجة، ما يقلل التكلفة الإضافية لـ tracing في ProfileEvents. #105030 (Azat Khuzhin).
  • إضافة compareTrackAt إلى ColumnDecimal، ما يحسن أداء المقارنة لأعمدة Decimal. #105110 (Artem Zuikov).
  • إضافة تنفيذ SIMD لـ MD5 (AVX2 / AVX512) يحسب hash لعدة مُدخلات بالتوازي، مما يحسن الإنتاجية. #105161 (Joanna Hulboj).

تحسينات

  • تحسين مخرجات المساعدة في جميع تطبيقات ClickHouse: أصبح --help يعيد الآن رمز الخروج 0 بشكل متسق، ويطبع إلى stdout، كما يعرض الأمر الأعلى مستوى clickhouse --help جميع الأوامر الفرعية. وتمت إضافة الخيار --no-sudo إلى clickhouse start / restart (وهو مفيد في Docker)، بالإضافة إلى الأمر الفرعي clickhouse help. استكمالًا لـ #58244 من @qoega. #98148 (Alexey Milovidov).
  • تم تغيير القيمة الافتراضية للإعداد input_format_column_name_matching_mode من match_case إلى auto. وأصبحت تنسيقات الإدخال التي تطابق أسماء أعمدة الإدخال مع schema الجدول (JSONEachRow وCSVWithNames وJSONColumns وBSONEachRow وRowBinaryWithNames وغيرها) تحاول أولًا المطابقة الحساسة لحالة الأحرف، ثم تلجأ إلى المطابقة غير الحساسة لحالة الأحرف إذا أخفقت المطابقة الحساسة. ويظل السلوك الصارم السابق محفوظًا ضمن compatibility. #104320 (Alexey Milovidov).
  • تمت إضافة STDDEV كاسم مستعار غير حساس لحالة الأحرف لـ stddevSamp لتحقيق التوافق مع PostgreSQL/معيار SQL. #105120 (Alexey Milovidov).
  • تمت إضافة array_to_string كاسم مستعار غير حساس لحالة الأحرف لـ arrayStringConcat لتحقيق التوافق مع PostgreSQL. #105121 (Alexey Milovidov).
  • تمت إضافة unnest كاسم مستعار غير حساس لحالة الأحرف لـ arrayJoin لتحقيق التوافق مع PostgreSQL (بصيغة استدعاء الدالة). #105124 (Alexey Milovidov).
  • يعرض شريط التقدم في clickhouse-client الآن البيانات المؤقتة المتعلقة باستخدام القرص (مثل الفرز الخارجي أو aggregation أو JOIN) إلى جانب RAM، بما في ذلك تفصيلًا لكل مضيف في distributed queries. #105190 (Alexey Milovidov).
  • تمت إضافة system.predicate_statistics_log، وهو سجل جديد قائم على أخذ العينات لانتقائية مرشحات predicate وGranule pruning لفهارس MergeTree على مستوى كل query. وهو معطّل افتراضيًا؛ ويمكن تفعيله عبر server setting predicate_statistics_sample_rate. وهو مطلوب للتوصيات التلقائية للفهارس والإسقاطات. #98727 (Yarik Briukhovetskyi).
  • السماح بتخطي shard المحلي عند غياب الجدول إذا كان skip_unavailable_shards مفعّلًا. #100141 (Alexey Milovidov).
  • تمت إضافة تحذيرات عند بدء التشغيل (تظهر في system.warnings) عندما تكون مصفوفة Linux mdraid قيد إعادة المزامنة أو في حالة تدهور، إذ قد يؤثر كلا الأمرين في أداء IO للقرص أو يشير إلى أعطال في الأقراص. #100941 (Alexey Milovidov).
  • تظهر WASM UDFs الآن في system.functions مع origin الصحيح (WasmUserDefined)، مع تعبئة الأعمدة syntax وarguments وreturned_value من metadata نوع ClickHouse الخاصة بها. في السابق، كانت إما مفقودة أو مدرجة مكررة مع origin غير صحيح. #101053 (Vasily Chekalkin).
  • تدعم table function ‏generate_series الآن قيم step السالبة لتوليد تسلسلات تنازلية، مثل SELECT * FROM generate_series(99, 0, -1). #101056 (Alexey Milovidov).
  • إصلاح استثناءات Context has expired التي كانت تُطلقها بعض الدوال (dotProduct وformatRow وstructureToCapnProtoSchema/structureToProtobufSchema والدوال المعرفة من قبل المستخدم) عند استخدامها في مسارات التنفيذ المؤجل مثل تعبيرات DEFAULT/MATERIALIZED وإعدادات محرك الجدول، وذلك بضمان احتفاظ هذه الدوال بمرجع سياق قوي عند الحاجة. #101109 (Alexey Milovidov).
  • إصلاح الأخطاء المنطقية الزائفة Cache limits violated في الأولويات المُنشأة بحدود صفرية (مثل أولوية filesystem cache لكل query المستخدمة عند تفعيل enable_filesystem_query_cache_limit). #101428 (Alexey Milovidov).
  • الاكتشاف التلقائي للمنطقة لنقاط النهاية s3express. #101520 (Pradeep Chhetri).
  • دعم معرّفات الحقول لملفات البيانات عند الكتابة إلى Iceberg. يُغلق #102322. #102362 (Konstantin Vedernikov).
  • أصبحت اللوحة اليسرى في واجهة الويب (play.html) قابلة للتمرير بشكل مستقل، وتبقى ظاهرة عند تمرير الصفحة، كما أن النقر على جدول ينقلك إلى منطقة query. #102498 (Alexey Milovidov).
  • السماح بفتح واجهة Play في علامة تبويب جديدة عبر Ctrl/Cmd/Shift+click أو بالنقر الأوسط على شعار ClickHouse في اللوحة اليسرى. #102501 (Alexey Milovidov).
  • مقاييس جديدة لتتبّع الذاكرة المستخدمة بواسطة المفاتيح الأساسية للإسقاطات ودرجة حبيبية فهرس الإسقاطات عبر جميع الجداول. #102587 (Narasimha Pakeer).
  • تطبيق max_network_bandwidth_for_user وmax_network_bandwidth_for_all_users على عمليات القراءة والكتابة في نظام الملفات البعيد. #103080 (Azat Khuzhin).
  • تحسين متانة النسخ الاحتياطية عندما تُحدَّث Refreshable Materialized Views باستمرار، وذلك عبر اتخاذ القرارات بناءً على حالة الجداول في اللقطة بدلًا من حالة عامة مشتركة. #103384 (Nikita Mikhaylov).
  • أصبح SELECT * FROM system.databases يعرض دائمًا قواعد بيانات Data Lake Catalog بغض النظر عن الإعداد show_data_lake_catalogs_in_system_tables. في السابق كانت هذه القواعد مخفية افتراضيًا، وهو ما لم يكن متسقًا مع SHOW DATABASES الذي كان يعرضها دائمًا. #103444 (Alsu Giliazova).
  • مواءمة القيمة الافتراضية لإعداد الخادم concurrent_threads_soft_limit_ratio_to_cores في الشيفرة مع القيمة المضمّنة في config.xml (2)، بحيث يحدّ مجدول الخيوط المتزامنة الافتراضي max_min_fair من خيوط معالجة الاستعلامات إلى ضعف عدد الأنوية افتراضيًا حتى عند عدم استخدام config.xml المضمّن. #103446 (Alexey Milovidov).
  • تحسين متانة أداة sanitizer في الحالات الطرفية الخاصة بالمحلل ودوال السلاسل النصية، عبر التعامل مع الإدخال الفارغ في getURLScheme، وتجنّب العمليات الحسابية على المؤشر الصفري في فحوصات Lexer::nextToken الخاصة بـ max_query_size، والإيقاف المبكر لتقييم التتابع الجزئي UTF-8 عند فراغ سلسلة الإدخال قبل فك الترميز. #103489 (Yakov Olkhovskiy).
  • تحسين دقة استنتاج الرتابة للدالتين divide(0, x) و intDiv(0, x): في السابق، كان يُبلَّغ عن هاتين الدالتين على أنهما رتيبتان دائمًا، لكن 0 / x غير رتيبة على أي نطاق يتضمن 0 لأن 0 / 0 غير معرّف (NaN/Inf في divide، واستثناء القسمة على صفر في intDiv). وقد أدى هذا الاستنتاج الخاطئ إلى أن يُنتج KeyCondition::applyMonotonicFunctionsChainToRange نطاقات يكون فيها left > right، ما تسبب في إطلاق LOGICAL_ERROR بعنوان Invalid binary search result in MergeTreeSetIndex في بُنى debug عندما كان تعبير IN / NOT IN على المفتاح الأساسي يغلّف المفتاح داخل divide(0, key) أو intDiv(0, key). ولم تتأثر بُنى Release، إذ إن هذا التحقق مقيَّد بـ #ifndef NDEBUG. #103621 (Groene AI).
  • استبدال المقاييس غير المتزامنة HTTPConnectionPool*TCP{Rcv,Snd}BufBytes_{p50,p75,p90,p95} بهيستوغرام قائم على bucket باسم http_pool_tcp_buf_bytes (مع labels group و direction) في system.histogram_metrics. مع الإبقاء على المقاييس غير المتزامنة الإجمالية لكل مجموعة. #103704 (Sema Checherinda).
  • أصبحت server settings {disk,storage,http}_connections_{rcvbuf,sndbuf} تُعرض الآن على أنها قابلة للتغيير دون إعادة تشغيل في system.server_settings. ويمكن تحديث قيمها عبر SYSTEM RELOAD CONFIG؛ وكان مسار تطبيقها وقت التشغيل موجودًا بالفعل منذ #100478. #103772 (Sema Checherinda).
  • إضافة دعم للرموز المحلولة (Array(String)) في flameGraph. #103816 (Azat Khuzhin).
  • يمكن لعميل CLI الآن تحديد <rainbow_parentheses>false</rainbow_parentheses> في config الخاصة به في البيئات التي تتعارض فيها ألوان الطرفية مع الأقواس (وبالمثل، أصبح clickhouse format يدعم الآن الخيار --no_rainbow_parentheses). #103851 (Larry Snizek).
  • إصلاح البحث غير الحساس لحالة الأحرف في UTF-8 في MultiVolnitsky عبر التراجع عن عمليات insert الجزئية لـ putNGram عند الفشل، وتحويل needles الفاشلة إلى أدوات بحث احتياطية، ما يمنع الوصول إلى حالة غير متسقة. #103864 (Yakov Olkhovskiy).
  • تنفيذ sched_getcpu عبر rseq TLS في musl المتوافق مع glibc. #104016 (Azat Khuzhin).
  • لن يعود العرض المادي القابل للتحديث من النوع Replicated في وضع APPEND إلى إجراء refresh مرتين إذا فُقد الاتصال بـ ZooKeeper لفترة وجيزة أثناء refresh. #104051 (Michael Kolupaev).
  • السماح لـ Distributed tables التي لا تحتوي على قائمة أعمدة صريحة بالتحقق من sharding keys مقابل بنية الجدول البعيد المستنتجة. #104111 (Yue).
  • إصلاح REST catalog مع المسار Azure abfss. #104120 (Konstantin Vedernikov).
  • مراعاة إعدادات المصادقة role_arn و role_session_name في عميل S3 snapshot الخاص بـ Keeper، ما يتيح لعمليات رفع snapshot استخدام مصادقة STS المستندة إلى AssumeRole. #104140 (Alexey Milovidov).
  • إصلاح تسرّب في الذاكرة عند تشغيل الاستعلامات التي تستخدم CTEs من نوع MATERIALIZED. #104153 (Alexey Milovidov).
  • إصلاح الاستثناء في lowerUTF8 / upperUTF8 عند معالجة مجموعات بيانات كبيرة غير ASCII (مثلًا أثناء إنشاء فهارس النصوص)، حيث كان buffer الإخراج المتراكم يتجاوز 2 GiB؛ مع رفض الصفوف الفردية الطويلة جدًا برسالة خطأ واضحة. #104229 (Shaohua Wang).
  • تعزيز تحميل إحصاءات الأعمدة في MergeTree لمقاومة إخفاقات I/O العابرة، منعًا لتعطيل التحسينات المستندة إلى الإحصاءات بشكل دائم للأجزاء المتأثرة. #104372 (zoomxi).
  • لم يعد INSERT INTO ... SELECT FROM input(...) يتطلب امتياز CREATE TEMPORARY TABLE. #104470 (Alexey Milovidov).
  • تمت إضافة MergeTree setting جديدة باسم concurrent_part_removal_threshold_for_remote_disk (القيمة الافتراضية 16) تُستخدم بدلًا من concurrent_part_removal_threshold عندما يكون جزء واحد على الأقل من الأجزاء الجاري حذفها مخزنًا على disk بعيد. كانت العتبة السابقة 100 قد تؤدي إلى تعطّل DROP TABLE وعمليات حذف الأجزاء الأخرى على backends تخزين الكائنات لعشرات الثواني، لأن عمليات الحذف كانت تُنفَّذ تسلسليًا رغم أن كل عملية منها تمثل رحلة شبكة مستقلة ذهابًا وإيابًا. ويجعل الإعداد الجديد مسار الحذف المتوازي يبدأ في وقت أبكر بكثير على التخزين البعيد، مع إبقاء سلوك الأقراص المحلية دون تغيير. #104676 (Groene AI).
  • الإعداد الجديد defer_partition_pruning_after_final (الافتراضي 1) يجعل السلوك الذي قُدِّم في 26.3، والمتمثل في تخطي partition pruning تحت FINAL، قابلاً للتعطيل اختياريًا. اضبطه على 0 لاستعادة partition pruning كما كان قبل 26.3 — وهو أسرع بكثير في أعباء عمل سجلات الأحداث حيث لا يمكن أن تمتد الصفوف ذات PK نفسه عبر partitions. ويضبط compatibility = '26.2' هذه القيمة إلى 0 تلقائيًا. #104705 (Nikita Fomichev).
  • إصلاح intExp2 الذي كان يعيد نتائج غير صحيحة للمدخلات الخارجة عن النطاق (عمليات shift >= 64 ضمن JIT، والأعداد الصحيحة التي يتجاوز مقدارها INT_MAX في كلا مساري التنفيذ). #105054 (Raúl Marín).
  • إضافة علامات اقتباس إلى shell arguments المُنشأة من خيارات CLI والمدخلات parsed في clickhouse install وclickhouse git-import، بحيث تُعالَج paths وأسماء المستخدمين/المجموعات وhashes الخاصة بـ commit التي تحتوي على مسافات بيضاء أو محارف shell خاصة بشكل صحيح. #105232 (Raúl Marín).
  • أصبح محرك الجداول Alias الآن غير تجريبي ومتاحًا دون الإعداد allow_experimental_alias_table_engine. #103488 (Alexey Milovidov).
  • تمت إضافة الخيار --queries-format إلى clickhouse-benchmark للاختيار بين تنسيق الإدخال الافتراضي المحمي بعلامات تبويب، والذي يضع استعلامًا واحدًا في كل سطر (tsv)، وبين parsing الإدخال القياسي كسكربت يضم عدة queries مفصولة بـ ; (script). #99972 (Aleksandr Musorin).
  • أصبحت معاملات Tuple العنصرية tuplePlus وtupleMinus وtupleMultiply وtupleDivide وtupleModulo وtupleIntDiv وtupleIntDivOrZero تقبل الآن عددًا متغيرًا من الوسائط، بحيث تستقبل قيمتي Tuple أو أكثر من الحجم نفسه، وتُطبَّق عنصرًا بعنصر بأسلوب left-fold. وكانت في السابق تقبل argumentين فقط بالضبط. #104659 (Aruj Bansal).
  • أُضيفت واجهة ويب مدمجة جديدة عند /processors-profile تعرض خط أنابيب أي استعلام SELECT سابق على شكل خريطة حرارية، بالاعتماد على system.query_log وsystem.processors_profile_log. ويُلوَّن كل معالج بحسب قيمة elapsed_us الخاصة به، كما يعرض إحصاءات لكل معالج (الصفوف والبايتات وأوقات الانتظار) عند تمرير المؤشر فوقه. #104614 (Nikita Mikhaylov).
  • أصبح الإعداد query_plan_use_logical_join_step (واسمه البديل query_plan_use_new_logical_join_step) الآن مهملاً ولم يعد له أي تأثير؛ إذ تُستخدم خطوة الربط المنطقي دائماً. #104017 (Vladimir Cherkasov).
  • لم يعد حقل الإدخال user في play.html وغيره من صفحات الويب المدمجة (dashboard.html وjemalloc.html وmerges.html وbinary.html وwebterminal.html) مُعبأً مسبقاً بالنص الحرفي default. وهو يعرض الآن تلميح placeholder للحقل user ويكون فارغاً افتراضياً. وعند تركه فارغاً، لا تُرسل الصفحة معلمة URL باسم user= (كما أن JSON الخاص بمصادقة WebTerminal يحذف الحقل user)، لذا يطبّق الخادم آلية fallback المعتادة إلى المستخدم default — كما لم تعد بيانات اعتماد HTTP المرسلة عبر قنوات أخرى (X-ClickHouse-User وHTTP Basic وإعداد <handler><user> الخاص بكل handler) تُتجاوز. #105254 (Alexey Milovidov).
  • قارئ ORC: فُصلت القراءة المعتمدة على الإزاحة (readBigAt) عن use_prefetch، بحيث يمكن قراءة البيانات المرمّزة بأسلوب EC على HDFS بشكل صحيح حتى عندما تكون قيمة use_prefetch = false (على سبيل المثال بواسطة Gluten). #103348 (zhanglistar).
  • أصبحت الملفات التي تُنزَّل من play.html باستخدام التنسيق CSVWithNames تستخدم الآن امتداد الملف .csv. #103737 (JackFielding).
  • مزيد من التحقق من صحة الإدخال في كتالوج BigLake. #105117 (Konstantin Vedernikov).

إصلاح خطأ (سلوك غير صحيح يمكن للمستخدم ملاحظته في إصدار مستقر رسمي)

  • إصلاح التنسيق غير المتسق عبر تذكّر ما إذا كان التعبير موضوعًا بين قوسين. #92340 (Alexey Milovidov).
  • إصلاح المقارنة الدقيقة بين النوعين Decimal وFloat. #94293 (zoomxi).
  • السماح باستخدام الوسائط الموضعية في الاستعلامات الموزعة. #94359 (simonmichal).
  • إصلاح فشل التحقق في DatabaseCatalog::updateDependencies عند حذف عرض مادي ثم إعادة إنشائه بالاسم نفسه؛ وكذلك إصلاح فقدان تبعيات العروض بصمت أثناء RENAME TABLE أو EXCHANGE TABLES عندما تكون التبعيات المرجعية فارغة. #98779 (Alexey Milovidov).
  • إصلاح إنهاء الخادوم قسرًا (فشل تحقق في DatabaseCatalog::getTableImpl) الذي كان يحدث عند إنشاء جدول عبر ON CLUSTER باستخدام UUID مطابق لـ UUID قاعدة بيانات موجودة. #98861 (xiaohuanlin).
  • إصلاح استخدام skip indexes عند قراءة البيانات (مع تفعيل الإعداد use_skip_indexes_on_data_read) ومع patch parts الموجودة التي أنشأتها lightweight updates. #99543 (Alexey Milovidov).
  • إصلاح استثناء “Not-ready Set” عندما ينقل مُحسِّن الاستعلامات عامل تصفية يحتوي على IN (subquery) إلى PREWHERE. #100375 (Alexey Milovidov).
  • إصلاح الخطأ “Cannot find column” عند الجمع بين ADD COLUMN وRENAME COLUMN في عبارة ALTER TABLE واحدة. #100387 (Alexey Milovidov).
  • إصلاح العروض التي تجمع بين معاملات UNION وINTERSECT/EXCEPT وكانت تُرجع نتائج غير صحيحة بعد DETACH/ATTACH أو إعادة تشغيل الخادوم. #100390 (Alexey Milovidov).
  • إصلاح استثناء “Trying to execute PLACEHOLDER action” الذي كان قد يحدث أثناء اختبار الضغط باستخدام AST fuzzer عندما يظهر استعلام فرعي مترابط في عبارة IN. #100398 (Alexey Milovidov).
  • إصلاح استثناء الخطأ المنطقي عند الإدراج في جدول Iceberg يحتوي على عمود Date ومقسّم باستخدام تحويلات year أو month أو day. #100404 (Alexey Milovidov).
  • إصلاح استخدام skip index مع بيانات غير متوافقة بعد أن يغيّر ALTER TABLE MODIFY COLUMN نوع العمود، ما قد يؤدي إلى تعطل الخادوم في بُنى sanitizer أو إلى نتائج استعلامات غير صحيحة. #100526 (Alexey Milovidov).
  • إصلاح تسرّب بيانات الاعتماد في query_log لدوال الجداول paimonCluster وpaimonS3Cluster وpaimonAzureCluster وdeltaLakeS3. #100529 (JIaQi Tang).
  • إصلاح احتمال تعليق DROP TABLE على جداول Kafka engine إلى أجل غير مسمى بسبب حالة توقف متبادل في rd_kafka_consumer_close. #100604 (Alexey Milovidov).
  • استُبدلت قائمة source_table_engines المضمّنة ببحث وقت التشغيل عبر StorageFactory وDatabaseFactory. وأُضيف source_access_type إلى DatabaseFactory::EngineFeatures بحيث يتطلب CREATE DATABASE مع محركات المصدر (PostgreSQL وMySQL وS3 وغيرها) منح المصدر نفسها التي يتطلبها CREATE TABLE. يُصلح هذا مشكلة فشل GRANT TABLE ENGINE ON * عند ضبط table_engines_require_grant=false. إغلاق #71544. #100746 (pufit).
  • إصلاح تعطل الخادم عند القراءة من table كان عمود ALIAS فيها يحتوي على subquery مترابطة متداخلة داخل استدعاء دالة (مثل ALIAS toString(intDivOrZero(x, (SELECT ...)))). أصبح CREATE TABLE وALTER TABLE الآن يرفضان أي subquery مهما كان عمقها في تعبيرات الأعمدة DEFAULT / ALIAS / MATERIALIZED مع THERE_IS_NO_DEFAULT_VALUE. سابقًا، كان التحقق السطحي يقبل subqueries المتداخلة، لذا كانت الحالة المترابطة تتسبب في التعطل وقت القراءة، بينما كانت الحالة غير المترابطة المتداخلة تبدو وكأنها تعمل لكنها قد تؤدي إلى سلوك غير متوقع؛ أما الآن فتُرفض كلتا الحالتين وقت DDL. #100753 (Groene AI).
  • إصلاح تعطل الخادم (Logical error: Bad cast from type DB::FunctionNode to DB::ColumnNode) كان يمكن أن يحدث عند استخدام queries تحتوي على subqueries مترابطة على tables لديها تعريفات CONSTRAINT ... ASSUME، عندما تكون الإعدادات optimize_substitute_columns وconvert_query_to_cnf مفعّلة. #100756 (Groene AI).
  • إصلاح استثناء كان يمكن أن يحدث عند insert صف في JSON column، حيث كان الصف يضيف حقلًا ديناميكيًا جديدًا إلى جانب حقل ذي نوع محدد بقيمة غير متوافقة، ثم استُخدم العمود لاحقًا كمفتاح GROUP BY. #100758 (Jimmy Aguilar Mena).
  • إصلاح تجاوز IO scheduling الخاصة بـ workload بصمت في عمليات الكتابة إلى S3/تخزين الكائنات التي تمر عبر المسار DiskObjectStorageTransaction (المستخدم في disks من نوع s3_with_keeper، وصراحةً عند ضبط use_fake_transaction=false). سابقًا، كانت عمليات كتابة INSERT إلى MergeTree tables على هذه disks تتجاهل throttling الخاصة بـ CREATE RESOURCE / CREATE WORKLOAD لأن رابط resource لم يكن يُحقن مطلقًا في WriteSettings لمسار الكتابة المعاملاتي. #100777 (JIaQi Tang).
  • إصلاح تصادم schema-cache المشتركة بين Protobuf وProtobufList: كانت قراءة رسالة أولًا بصيغة FORMAT Protobuf ثم بصيغة FORMAT ProtobufList قد تفشل لأن ProtobufList كان يفرض schema المخزنة مؤقتًا بصيغة الغلاف الخاصة به. أصبح ProtobufList الآن يعود إلى نوع الرسالة المخزن مؤقتًا عند عدم توفر schema للغلاف. #100849 (Callum Cooper).
  • إصلاح heap-buffer-overflow في جسر Rust CXX بسبب عدم تطابق ABI لـ std::exception. #100931 (Azat Khuzhin).
  • أصبحت FunctionVariantAdaptor الآن ترمي ILLEGAL_TYPE_OF_ARGUMENT عندما تكون جميع بدائل Variant غير متوافقة مع دالة، بدلًا من إعادة Nullable(Nothing) بصمت. سابقًا، كان predicate من النوع WHERE function(variant_col)، حيث لا يكون أي نوع بديل متوافقًا، يعيد 0 rows من دون خطأ، بينما كان سياق SELECT المكافئ يرمي الخطأ بشكل صحيح بالفعل. #100939 (Vasily Chekalkin).
  • لم يعد TRUNCATE ALL TABLES يفشل عندما تحتوي database على views. #100943 (Alexey Milovidov).
  • أصلِح تحسين optimize_rewrite_array_exists_to_has ليتعامل بشكل صحيح مع الحالات غير المتوافقة نوعيًا (مثل Date مقابل String)، وأعِد تفعيله افتراضيًا. #100944 (Alexey Milovidov).
  • أصلِح أولوية إعدادات S3 بحيث تتجاوز إعدادات القرص في storage_configuration القسم العام <s3>، بينما تتجاوز إعدادات المستخدم/profile/مستوى query كليهما. #100975 (Alexey Milovidov).
  • أصلِح مشكلة فقدان التسلسل sparse لإشارة الصفر السالب (-0.0) في أعمدة BFloat16 وFloat32 وFloat64. #100983 (Takumi Hara).
  • أُصلِح خطآن في محلل geometry بصيغة WKT المستخدم عند قراءة ملفات GeoParquet وArrow المرمّزة بـ WKT: كانت الأشكال الهندسية MULTILINESTRING تُحلَّل خطأً على أنها Polygon (مما يسبب استثناءً في typed columns وفسادًا صامتًا للبيانات في أعمدة Geometry المختلطة)، كما أن سلسلة WKT غير صحيحة من دون keyword للنوع كانت تؤدي إلى سلوك غير معرّف بدلًا من ظهور خطأ واضح. #100997 (Vasily Chekalkin).
  • أصلِح استعلامات grouping/GROUPING SETS على جداول Distributed ذات shard واحد، والتي كانت تفشل بالرسالة “Method executeImpl is not supported for ‘grouping’ function”. #101030 (Alexey Milovidov).
  • أصلِح LOGICAL_ERROR ‏“Column identifier is already registered” في planner، والذي كان قد يحدث عند معالجة expression الجدول نفسه عدة مرات. #101048 (Alexey Milovidov).
  • أصلِح استثناء LOGICAL_ERROR ‏“Column identifier is already registered” عند استخدام الإعداد additional_result_filter مع استعلامات UNION أو EXCEPT. #101051 (Alexey Milovidov).
  • أُصلِح تعطل server ‏(Logical error: Bad cast from ColumnVector to ColumnNullable) عند استخدام * APPLY مع aggregate functions وgroup_by_use_nulls=1 مع GROUPING SETS أو ROLLUP أو CUBE. #101062 (Groene AI).
  • أصلِح حلقة لا نهائية عندما تتجاوز input_format_csv_skip_first_lines أو input_format_tsv_skip_first_lines عدد الأسطر في الملف. #101111 (Alexey Milovidov).
  • أصلِح وصولًا خارج الحدود في تحسين lazy materialization، كان يمكن أن يتسبب في استثناء في builds التصحيح. #101144 (Alexey Milovidov).
  • أصلِح type inference في CTEs العودية: أصبحت column types الآن تُوسَّع تكراريًا عبر getLeastSupertype بين جانبي UNION ALL غير العودي والعودي حتى الوصول إلى الاستقرار، مما يمنع overflow للأعداد الصحيحة في تعبيرات مثل x + 1. #101155 (Alexey Milovidov).
  • قيِّد إعدادات حجم block الضغط في MergeTree ‏(max_compress_block_size, min_compress_block_size, marks_compress_block_size, primary_key_compress_block_size) عند 256 MiB لمنع تعطل server عند ضبط قيم متطرفة عبر CREATE TABLE SETTINGS. #101159 (Groene AI).
  • إصلاح تعطل LOGICAL_ERROR في QueryAnalyzer::resolve() عندما تستخدم ROW POLICY استعلامًا فرعيًا scalar في عبارة USING الخاصة بها (مثل USING (SELECT 1)). إغلاق #100695. #101263 (Groene AI).
  • إصلاح سلوك غير معرّف في MergeTreeDataPartWriterCompact::cancel عند فشل تخصيص تدفق. #101292 (Alexey Milovidov).
  • إصلاح حالة لم تكن فيها المنطقة الزمنية تُضمَّن أثناء الإسناد في تعليمة ALTER. إغلاق #101328. ذو صلة بـ https://github.com/ClickHouse/ClickHouse/pull/100647. #101403 (Yarik Briukhovetskyi).
  • إصلاح تعطل الخادم (LOGICAL_ERROR) في استعلامات INSERT SELECT مع ORDER BY ALL عندما يُنتج مسار SELECT عدة تدفقات. #101443 (Groene AI).
  • إصلاح نتائج الاستعلام غير الصحيحة الناتجة عن إعادة ترتيب join، التي كانت تدفع عامل تصفية INNER JOIN (الذي يشير فقط إلى الجانب المُحتفَظ به من outer join) إلى عبارة ON الخاصة بـ outer join. #101504 (Vladimir Cherkasov).
  • تخطّي تطبيق lazy materialization على الخطط التي تحتوي على arrayJoin، إذ قد يؤدي ذلك إلى عدم احترام limit. إغلاق #101608. #101644 (Vladimir Cherkasov).
  • إصلاح نتائج استعلامات JOIN غير الصحيحة عندما كان تحسين mergeFilterIntoJoinCondition يُسقط بصمت شرط مساواة في WHERE مع أنواع غير متطابقة. #101652 (Xiaozhe Yu).
  • إصلاح عدم عمل تلميح الاختبار error مع أخطاء الصياغة/التحليل — إذ كان -- { error SYNTAX_ERROR } سابقًا، عند استخدامه مع query غير صحيح، يفشل برسالة “Expected server error” بدلًا من مطابقة خطأ التحليل على جانب العميل. #101675 (Groene AI).
  • إصلاح أن INTO OUTFILE ... TRUNCATE لم يكن يستخدم فعليًا إعادة التسمية atomic — إذ كانت الكتابة تتم مباشرة إلى الملف الأصلي بدلًا من ملف مؤقت، لذلك كان المحتوى الأصلي يُدمَّر عند فشل query. والآن تُكتب البيانات إلى ملف مؤقت ولا يُعاد تسميته إلا عند النجاح. #101884 (Pablo Marcos).
  • إصلاح الاستثناء Unsupported DeltaLake type: varchar(n) عند قراءة جداول Delta Lake التي يحتوي schema الخاص بها على أنواع أعمدة varchar(n) أو char(n). وتُربط هذه الأنواع الآن بـ String، بما يتوافق مع كيفية تخزين protocol الخاص بـ Delta Lake لها كمصفوفات بايت عادية في Parquet. #101973 (Flavio Malavazi).
  • إصلاح فقدان صامت للبيانات عند قراءة أرشيفات tar من S3 باستخدام schema_inference_mode=union وschemas Parquet غير المتجانسة — إذ كانت parquet metadata cache تعيد استخدام metadata الخاص بالملف الأول على نحو غير صحيح لجميع الملفات اللاحقة في الأرشيف. #101990 (Ahaan Limaye).
  • إصلاح تعطل الخادم (LOGICAL_ERROR) عند تنفيذ ALTER TABLE UPDATE/DELETE على جداول Iceberg إذا لم يكن قد نُفِّذ أي SELECT أو INSERT مسبقًا على الجدول خلال فترة تشغيل الخادم نفسها. #102113 (Alexey Milovidov).
  • إصلاح تعطل محتمل عند تنفيذ استعلام ALTER على جداول من قاعدة بيانات داخل الذاكرة (مثل الجداول المؤقتة). #102360 (Den Kalantaevskii).
  • تم إصلاح مشكلة قيام formatQuery بإنتاج grants مكررة مثل GRANT FILE ON *.*, FILE ON *.* TO x بدلًا من GRANT FILE ON *.* TO x عند تنسيق grants المتوافقة مع الإصدارات السابقة من READ/WRITE على المصدر نفسه. #102411 (Groene AI).
  • إصلاح فقدان التوازي في التجميع بعد استعلامات read-in-order عندما تكون قيمة max_streams_to_max_threads_ratio أكبر من 1. #102467 (Alexey Milovidov).
  • تم إصلاح تعطل (LOGICAL_ERROR: Unknown virtual column) عند تحديد subcolumns (مثل .null لـ Nullable، و.size0 لـ Array، وعناصر Tuple، أو مفاتيح/قيم Map) من table engine من نوع Buffer. #102470 (Groene AI).
  • إصلاح الاستثناء “Cannot fold actions for projection” في تحسين إعادة ترتيب join عندما يتم دمج LEFT/RIGHT JOIN مع join_use_nulls مع joins أخرى تتضمن أكثر من جدولين. #102516 (Alexey Milovidov).
  • تم إصلاح overflow صامت في العمليات scalar pointwise على numericIndexedVector (مثل numericIndexedVectorPointwiseAdd) عندما تكون قيمة scalar خارج النطاق. أصبحت هذه المدخلات الآن تُطلق INCORRECT_DATA بدلًا من إرجاع قيم تالفة. #102546 (FriendLey).
  • إصلاح تنسيق AST غير المتسق لعبارة INSERT مع SAMPLE وOFFSET على مستوى الاستعلام. يُغلق #102523. #102547 (zoomxi).
  • إصلاح استثناء LOGICAL_ERROR في groupConcat عند إلغاء تسلسل حالة aggregate function غير صالحة. #102558 (Christoph Wurm).
  • لم نعد نقبل الآن بيانات غير صالحة في نهاية قيم Time64 بتنسيق CSV عند استخدام input_format_csv_use_default_on_bad_values=0. يُغلق #102490. #102596 (Yarik Briukhovetskyi).
  • إصلاح استثناء UNKNOWN_ELEMENT_OF_ENUM عند insert قيمة default في JSON column مع paths من النوع Enum. يُغلق #102359. #102687 (Pavel Kruglov).
  • إصلاح تلف الملف columns_substreams.txt أثناء rename العمود في بعض الحالات. يُغلق #102259. #102689 (Pavel Kruglov).
  • إصلاح insert في Data type ‏Time أثناء parsing لـ JSON. يُغلق #102016. #102690 (Pavel Kruglov).
  • إصلاح الترميز الست عشري لعينة المحتوى في أسماء ملفات schema المخزنة مؤقتًا. يُغلق #101904. #102703 (Pavel Kruglov).
  • تم إصلاح انتهاك ترتيب الفرز (تعطل في وضع debug، وفساد صامت للبيانات في إصدار release) أثناء دمج SummingMergeTree عندما يكون مفتاح ORDER BY تعبير hash على عمود Float32 يحتوي على قيم signaling NaN. #102791 (Groene AI).
  • تم جعل DETACH DATABASE ... SYNC والعمليات الأخرى التي تستدعي waitDetachedTableNotInUse قابلة للإلغاء عبر KILL QUERY ومستجيبة لإيقاف تشغيل server، ما يمنع التعليق إلى أجل غير مسمى عندما يحتفظ query متزامن بمرجع إلى table. #102804 (Antonio Andelic).
  • تم إصلاح احتمال إرجاع نتيجة غير صحيحة في ANY RIGHT JOIN. #102893 (Nikita Taranov).
  • تم إصلاح فشل طلبات S3 مع ظهور ios_base::clear: unspecified iostream_category error بدلًا من إعادة المحاولة، وكان السبب أن Poco BufferedStreamBuf::flushBuffer لا يتعامل مع عمليات الكتابة القصيرة من طبقة socket. #102894 (Sema Checherinda).
  • تم إصلاح فشل table function ‏input('auto') عبر HTTP interface في استعلامات INSERT SELECT. #102902 (Miсhael Stetsyuk).
  • تم تعطيل تحسين LIMIT البسيط عند استخدام row policies/additional_table_filters (للسماح بإجراء index analysis بالتوازي). #102921 (Azat Khuzhin).
  • تم إخفاء secret key في دالة SQL ‏HMAC. إصلاح #102927. #102997 (Mikhail f. Shiryaev).
  • تم إصلاح الاستثناء MULTIPLE_EXPRESSIONS_FOR_ALIAS الذي كان يظهر في distributed queries التي تشير إلى استدعاء quantile نفسه عدة مرات (مثلًا في SELECT وHAVING وORDER BY) عند تفعيل optimize_syntax_fuse_functions. #103014 (tanner-bruce).
  • تم إصلاح حالة اكتشفها CI حيث جرى تمرير set غير جاهز عندما يعتمد filter على column في الجهة اليسرى. يُغلق #102966. #103029 (Yarik Briukhovetskyi).
  • تم إصلاح castOrNull إلى JSON في بعض الحالات. يُغلق #101818. #103036 (Pavel Kruglov).
  • تم إصلاح حالة كان فيها SELECT DISTINCT يُرجع بصمت نتائج غير مكتملة عندما كانت aggregate projection تطابق query وكانت بعض parts في table لا تحتوي على بيانات projection (على سبيل المثال، أُضيفت projection إلى table يحتوي بالفعل على بيانات، ولم يُشغَّل MATERIALIZE PROJECTION). يُغلق #102951. #103052 (Nihal Z. Miaji).
  • تم إصلاح الاستثناء TOO_FEW_ARGUMENTS_FOR_FUNCTION عندما ينهار predicate في WHERE مثل AND(OR(A, A), A) إلى argument واحد على المستوى الأعلى أثناء استخراج التعبيرات المشتركة في analyzer. #103072 (Peng).
  • إصلاح خطأ منطقي Function writeSlice expects same column types for GenericArraySlice and GenericArraySink كان يظهر عند تقييم if/ifNull على tuples أو maps أو arrays التي تحتوي على عنصر QBit. كانت ColumnQBit::structureEquals تقارن بشكل غير صحيح الـ tuple الداخلية لأحد أعمدة QBit مع الغلاف الخارجي للآخر، لذلك كان يتم اعتبار أعمدة QBit المتطابقة بنيويًا مختلفة. #103084 (Groene AI).
  • جعل DETACH DATABASE مع database_atomic_wait_for_drop_and_detach_synchronously يستجيب لـ KILL QUERY بدلًا من أن يظل معلّقًا إلى أجل غير مسمى عند الاحتفاظ بمرجع إلى table. #103095 (Alexey Milovidov).
  • إصلاح segfault عند حذف وحدة WASM باستخدام predicate ليس معرّفًا (مثل WHERE 1=1). #103101 (Joe Redfern).
  • إصلاح مشكلة في التوافق مع الإصدارات السابقة حيث كانت العملاء القدامى يفشلون مع UNEXPECTED_PACKET_FROM_SERVER عند الإدراج في server أحدث عبر remote() أو Distributed tables، وكان السبب هو استدعاء sendProgress بلا شرط في نهاية processInsertQuery. #103148 (Sema Checherinda).
  • يجب ألا يقوم IN، عند استخدام argument ثانٍ من نوع tuple غير ثابت، بإجراء CAST لعناصر tuple إلى نوع الطرف الأيسر، لأن ذلك قد يسبب overflow. يغلق #103055. #103169 (Yarik Briukhovetskyi).
  • إصلاح استخدام قيمة غير مهيأة في دالة protocol. #103187 (Pavel Kruglov).
  • إصلاح LOGICAL_ERROR (Bad cast … to ColumnLowCardinality) أثناء index analysis في MergeTree عندما تقارن عبارة WHERE Key column من نوع LowCardinality مع ثابت محوَّل إلى نوع يحتوي على LowCardinality متداخل (على سبيل المثال Variant(LowCardinality(Date), String)). #103211 (Groene AI).
  • إصلاح Logical error: 'index < bucket_count' في عائلة aggregate function timeSeries*ToGrid (مثل timeSeriesResampleToGridWithStaleness وtimeSeriesChangesToGrid وtimeSeriesResetsToGrid وtimeSeriesRateToGrid) عند استدعائها باستخدام parameters قصوى لـ timestamp كانت ستؤدي إلى overflow في العمليات الحسابية الموقعة ذات 64-bit أثناء حساب عدد buckets. كما وُضع حد أقصى لإجمالي عدد grid buckets عند 16 مليونًا لمنع تخصيص كميات كبيرة من الذاكرة بالخطأ نتيجة مدخلات خبيثة. #103223 (Groene AI).
  • إصلاح الاستثناء Logical error: 'Port is already connected' أثناء توسيع pipeline في مسار FINAL الكسول لـ ReplacingMergeTree. أثرت هذه المشكلة في queries التي تستخدم query_plan_optimize_lazy_final = 1 عندما كانت ReadFromMergeTree::initializePipeline تُدرج تحويلات داخلية (مثل Resize) تربط processors الخاصة بالـ sub-pipeline معًا، مما جعل LazyUnorderedReadFromMergeTreeSource::expandPipeline يحاول توصيل منافذ output كانت متصلة مسبقًا. #103230 (Groene AI).
  • إصلاح نتائج غير صحيحة من LIMIT BY وDISTINCT عندما يكون الإدخال عبارة عن UNION ALL من subqueries مرتبة. كان مُحسِّن query plan يتعامل خطأً مع هذا union على أنه مرتب عالميًا، مما أدى إلى إرجاع صفوف إضافية. #103231 (Nihal Z. Miaji).
  • إصلاح احتمال حدوث تعطل أثناء حساب الإحصاءات في Map type مع lazy replication. يغلق #102390. #103273 (Pavel Kruglov).
  • إصلاح حالة data race في dictionary sources الخاصة بـ ClickHouse وMySQL وPostgreSQL وXDBC، حيث يقرأ clone() const من السلسلة invalidate_query_response نفسها التي يكتب إليها isModified() const. #103277 (Miсhael Stetsyuk).
  • إصلاح الاكتشاف غير الصحيح للرتابة في Date32. يُغلق #101265. #103283 (Yarik Briukhovetskyi).
  • قصر سلاسل حزمة Hello عبر TCP قبل المصادقة على 64 كيلوبايت، وإضافة server setting باسم handshake_timeout_milliseconds للحد من إجمالي وقت المصافحة، بما يمنع clients غير الموثَّقين من استهلاك قدر مفرط من الذاكرة أو إبقاء threads مشغولة إلى أجل غير مسمى. #103284 (Sema Checherinda).
  • إصلاح الخلل الذي كانت فيه قيمة min_value > max_value في إحصاءات ColumnIndex الخاصة بـ Parquet لأعمدة String. #103334 (Saurabh Kumar Ojha).
  • إصلاح التعامل غير الصحيح مع صفوف NULL لمدخلات Nullable(Tuple(...)) في flattenTuple وtupleToNameValuePairs. يحتفظ flattenTuple الآن بخريطة null الخارجية بحيث تظل صفوف NULL كما هي. ويغيّر tupleToNameValuePairs الآن نوع value في النتيجة إلى Nullable(T) متى أمكن ذلك عندما يكون الإدخال Nullable(Tuple(...))، بحيث تُنتج صفوف NULL [('a', NULL), ('b', NULL)] بدلًا من [('a', 0), ('b', 0)]. وعندما يتعذر تغليف element type داخل Nullable (مثل Array)، تُستخدم default values بدلًا من NULL. يُغلق #103312. #103383 (Nihal Z. Miaji).
  • التحقق من بيانات Dynamic المسطّحة المشوَّهة في Native format. #103392 (Pavel Kruglov).
  • إصلاح RPC stale كان يتسبب في تعطل replication بعد مزامنة snapshot. #103406 (Seva Potapov).
  • إصلاح الخطأ LOGICAL_ERROR ‏“Cannot pop N rows from X” الذي كان يؤدي إلى إيقاف server (في builds الخاصة بالتصحيح / sanitizer) عند قراءة document من BSON مشوَّه يحتوي على value يكون نوع BSON الخاص بها غير متوافق مع column type المستهدَف داخل عمود Nullable(T) أو Array(Nullable(T)). وأصبح الصف المشوَّه الآن يُنتج استثناء ILLEGAL_COLUMN واضحًا كما هو مقصود. #103418 (Groene AI).
  • إصلاح إيقاف server في arrayFill وarrayReverseFill عند تطبيقهما على عمود Array(String) يكون صفه الأول فارغًا مع lambda ثابتة القيمة false. إذ تسبب underflow في حلقة aggregate / المصفوفة الفرعية في تحويل فهرس size_t إلى SIZE_MAX، مما أدى لاحقًا إلى قراءة خارج الحدود داخل ColumnString::doInsertManyFrom. وهذه من family نفسها الخاصة بالخلل #12263. #103424 (Groene AI).
  • إصلاح ACCESS_DENIED / UNKNOWN_TABLE في RMVs اللاحقة من نوع APPEND مع SQL SECURITY DEFINER عندما يؤدي EXCHANGE في RMV upstream من نوع REPLACE إلى تبديل identity الخاصة بتخزين الهدف أثناء resolution. #103427 (Alexander Gololobov).
  • تعبئة عمود _time من table function ‏url. #103437 (Nikita Taranov).
  • إصلاح احتمال حدوث قراءة خارج الحدود في مسار فك الضغط لمرمّز ALP عند معالجة مُدخلات تالفة ذات عرض بتات غير صالح. #103457 (Raufs Dunamalijevs).
  • إصلاح خلل كان قد يؤدي إلى فقدان اسم filesystem cache عند تنسيق الاستعلام SYSTEM SYNC FILESYSTEM CACHE '<name>' ON CLUSTER ...، مما يجعل العقد البعيدة تزامن جميع ذواكر التخزين المؤقت لنظام الملفات بدلًا من ذاكرة التخزين المؤقت المطلوبة فقط. #103469 (Asish Kumar).
  • إصلاح معالجة المسار المرمّز بصيغة URL في deltaLakeAzure. يغلق #103509. #103525 (Smita Kulkarni).
  • إصلاح مشكلة heap-use-after-free عند ضرب حالة AggregateFunction بعدد صحيح (مثل quantilesExactState(...) * N). كانت حلقة الرفع إلى الأس بالتربيع تدمج الحالة مع نفسها، وهو سلوك غير معرّف عندما يعيد merge الخاص بالدالة التجميعية تخصيص مساحة التخزين الداخلية. يغلق STID 0988-40af. #103536 (Groene AI).
  • إصلاح الخطأ النادر LOGICAL_ERROR “Part X intersects previous part Y” الذي كان يظهر أثناء بدء تشغيل جدول ReplicatedMergeTree عندما يكون على القرص جزءان فارغان غير متوقعين لهما نطاقات blocks متداخلة من دون أن يحتوي أحدهما الآخر. كان هذا الاستثناء يوقف خيط Attach الجدول ويمنع تشغيله. #103537 (Groene AI).
  • إصلاح Logical error: Incorrect mark rows for part ... (توكيد مخصص للتنقيح فقط) الذي كانت mutations تُحفّزه في جداول MergeTree ذات index granularity غير تكيفية (index_granularity_bytes = 0) عندما تكون علامة البيانات الأخيرة غير مكتملة (ويمكن إعادة إنتاجه بأعلى موثوقية عبر DETACH/ATTACH متبوعًا بـ lightweight DELETE). #103538 (Groene AI).
  • إصلاح مشكلة قيام clickhouse-local بإرجاع 0 rows بصمت عند القراءة من الملفين الوهميين /proc و/sys عبر file() table function (مثل SELECT * FROM file('/proc/cpuinfo', 'RawBLOB')). #103548 (Ashrith Bandla).
  • إصلاح التعامل مع الوسيط max_string_length في GenerateRandom table engine. #103550 (Alex Kuleshov).
  • إصلاح إخفاء بيانات الاعتماد المتداخلة في logs. #103552 (Vitaly Baranov).
  • إصلاح اكتشاف SVE الذي كان يستخدم تعليمات SVE حتى عند عدم توفرها. #103568 (Raúl Marín).
  • إصلاح parsing معاملات التخزين الخاصة بـ GenerateRandom. #103574 (Konstantin Bogdanov).
  • إصلاح حلقة لا نهائية في WITH FILL للبيانات التي تبدأ بـ ±inf. #103580 (Konstantin Bogdanov).
  • إصلاح JSONExtract إلى نوع Variant الذي كان يقتطع الأرقام العشرية في JSON بصمت. سابقًا، كان JSONExtract('{"x": 3.14}', 'x', 'Variant(Int64, Float64)') يعيد Int64=3 وكان JSONExtract('{"x": 3.14}', 'x', 'Variant(String, Int64)') يعيد Int64=3، ما يؤدي إلى إسقاط الجزء الكسري. الآن تُحفَظ القيمة الكسرية بالكامل دون فقدان: إذ يتولاها عضو Float64/Decimal عند وجوده، وإلا يلتقط عضو String قيمة JSON الأصلية. أما أنواع Variant التي تحتوي على أعضاء عددية صحيحة فقط (مثل Variant(Int64, Int32)) والاستخراج المباشر كعدد صحيح (JSONExtract(json, 'Int64'), JSONExtractInt, إلخ) فلم يطرأ عليها تغيير. #103620 (Groene AI).
  • إصلاح SYSTEM INSTRUMENT REMOVE عند استدعائه من دون وسائط، إذ كان يُنتج std::bad_optional_access (رمز الخطأ 1001) بدلًا من SYNTAX_ERROR (رمز الخطأ 62). #103622 (Pablo Marcos).
  • إصلاح خطأ منطقي / سلوك غير معرّف في windowID وtumble ضمن window view عند استدعائهما بسلسلة منطقة زمنية بوصفها الوسيطة الثالثة. #103641 (Alexey Milovidov).
  • أصبح تسجيل عميل S3 يتعامل الآن مع استجابات HTTP 400 التي تتضمن ترويسة x-amz-bucket-region غير فارغة (أي منطقة توقيع SigV4 خاطئة) على أنها حالة معلوماتية تشير إلى المنطقة الخاطئة، مع سطر سجل أوضح بدلًا من المسار العام ذي طابع الخطأ. كما أُضيف موفّر بيانات الاعتماد لهوية الويب الخاص بـ STS إلى سلسلة بيانات اعتماد S3 فقط عند تهيئة هوية الويب، ما يقلل التحذيرات الزائفة في عمليات النشر التي لا تستخدمه. يغلق #99140. #103673 (MeltonSmith).
  • إصلاح SYSTEM SYNC REPLICA <db>.<tbl> IF EXISTS لكي ينجح بصمت عندما لا تكون قاعدة البيانات موجودة، بما يطابق السلوك الحالي عند غياب الجدول والسابقة التي أرساها DROP TABLE IF EXISTS. سابقًا، كان الاستعلام يطرح UNKNOWN_DATABASE رغم وجود IF EXISTS. يغلق #103629. #103689 (Groene AI).
  • إصلاح الخطأ المنطقي Arguments of 'plus' have incorrect data types الذي كانت ترميه FunctionBinaryArithmetic::executeImpl2 عندما يحتوي جدول MergeTree على Array(LowCardinality(...)) في مفتاح الفرز، وتستخدم عبارة WHERE الدالتين plus / minus بين ذلك العمود وثابت Array من نوع عنصر مختلف. وأصبح KeyCondition::getMonotonicityForRange الآن يزيل LowCardinality تكراريًا قبل استدعاء التوجيه العددي الداخلي. #103701 (Groene AI).
  • إصلاح حالة تسابق عند تغيير حجم dynamic cache في الإصدار 26.1+. #103702 (Kseniia Sumarokova).
  • إصلاح مشكلة كانت فيها فهارس التخطي النصية و bloom_filter على أعمدة ALIAS التي احتوى تعبيرها على lambda ذات ثوابت ملتقطة (مثل arrayMap((k, v) -> concat(k, '=', v), mapKeys(m), mapValues(m)))) تُتجاهل بصمت. #103708 (Anton Popov).
  • إصلاح position وpositionCaseInsensitive عندما تكون start_pos قريبة من UINT64_MAX، إذ كانا يعلقان أو يتسببان في خطأ segmentation fault بسبب تجاوز في حساب مؤشرات الذاكرة. #103766 (Raúl Marín).
  • إصلاح سلوك غير معرّف أثناء تحليل قيمة DateTime تحتوي على جزء كسري مزدوج. #103773 (Yarik Briukhovetskyi).
  • تم إصلاح تراجع في صحة البيانات في 26.x، حيث كانت الدالتان if وmultiIf المجمّعتان باستخدام JIT، عند استخدام نوع نتيجة Decimal ووجود قيمة literal غير Decimal (عدد صحيح أو فاصلة عائمة) في أحد الفروع، تُرجعان بصمت قيمة أصغر بمقدار 10^scale. ولم يتأثر المسار البطيء (غير المعتمد على JIT). الحل المؤقت في الإصدارات المتأثرة: SET compile_expressions = 0. #103809 (Groene AI).
  • إصلاح تمرير tokenizer من text index إلى الدوال المدعومة. #103826 (Elmi Ahmadov).
  • إصلاح النتائج الخاطئة من numbers وgenerate_series والمصادر المشابهة الملتزمة بالنطاق عندما يستخدم الشرط WHERE العامل IN أو NOT IN على tuple تُختزل عناصره إلى Key column واحدة (على سبيل المثال، WHERE tuple(number, number) NOT IN (tuple(1, 2))). يُغلق #103660. #103835 (Groene AI).
  • إبقاء ذروة الذاكرة الفعلية لخوارزمية hash join ذات auto-spilling تحت max_bytes_before_external_join. سابقًا، كان كلٌّ من التخصيص المسبق المعتمد على الإحصاءات، ومضاعفة hash table في مكانها، وbuckets داخل الذاكرة غير المقيّدة في GraceHashJoin قادرًا على دفع query إلى تجاوز الحد المهيأ والتسبب في MEMORY_LIMIT_EXCEEDED. #103838 (Alexey Milovidov).
  • إصلاح حالة تعليق عند إيقاف clickhouse-local عندما تكون logs النظام (مثل text_log أو filesystem_cache_log) مهيأة. كانت SystemLogs::flushImpl تستدعي BaseDaemon::instance().flushTextLogs()، التي تُطلق std::bad_cast خارج clickhouse-server وتُبقي threads الحفظ قيد التشغيل إلى أن يحجب pthread_cond_destroy تدمير طوابير log النظام. #103874 (Alexey Milovidov).
  • رفض استعلامات CTE من نوع MATERIALIZED التي يُفضي body الخاص بها إلى column types مستنتجة مختلفة عبر مراجع مختلفة، مع إظهار خطأ TYPE_MISMATCH واضح بدلًا من تعطل server بخطأ Bad cast من نوع LOGICAL_ERROR. كان هذا يحدث سابقًا عندما كان body الخاص بـ CTE يشير إلى identifiers من النطاق الخارجي (مثل alias من projection الخاصة بالـ subquery المستدعية) التي كانت تُضمَّن inline كثوابت مختلفة لكل مرجع. #103879 (Groene AI).
  • إصلاح use-of-uninitialized-value في مُحسّنات query plan الخاصة بتحويل JOIN (tryConvertAnyOuterJoinToInnerJoin, tryConvertAnyJoinToSemiOrAntiJoin) عندما يحتوي filter فوق ANY OUTER JOIN على دالة غير deterministic مثل rand أو now أو rowNumberInAllBlocks. لم يعد المُحسِّن يحاول constant-fold لهذه filters ويترك JOIN دون تغيير، مما يمنع أيضًا التحويلات غير الصحيحة إلى INNER/SEMI/ANTI JOIN التي قد تُسقط rows بصمت. #103880 (Groene AI).
  • إصلاح use-after-free في StorageKafka2 كان قد يتسبب في تعطل server عندما تُستبدل session لـ Keeper بينما يكون consumer محتفظًا بأقفال topic-partition من النوع ephemeral. #103890 (Groene AI).
  • تم إصلاح LOGICAL_ERROR بالنص “Primary key type mismatch” الذي كان يُطلق عند تنفيذ join على table من نوع EmbeddedRocksDB عبر JOIN ... USING (key) مقابل subquery يكون فيها Key column من type مختلف (مثل Nullable(UInt64) أو Int64 أو Decimal) عن primary key الخاصة بالتخزين. أصبح planner الآن يرفض DirectKeyValueJoin عند عدم تطابق type ويعود إلى HashJoin، الذي يتعامل مع تحويل النوع. #103928 (Groene AI).
  • لم يعد SET max_threads = DEFAULT (وكذلك max_final_threads وmax_parsing_threads) يفقد حالة auto. سابقًا، بعد إعادة تعيين أحد هذه الإعدادات، كان system.settings يعرض عدد الأنوية المحسوب (مثلًا 32) بدلًا من 'auto(32)'، وكان الخادم يتصرف كما لو أن القيمة قد ثُبِّتت صراحةً. #103991 (Groene AI).
  • إصلاح الخطأ SIZES_OF_ARRAYS_DONT_MATCH عند قراءة أعمدة AggregateFunction(topK(N), String) التي زادت قيمة alpha_size المحفوظة فيها نتيجة دورة deserialize+serialize سبقت الإصدار 25.12. #104002 (Raúl Marín).
  • إصلاح ثغرة حقن SQL في مصادر القواميس PostgreSQL وCassandra وXDBC: كانت مفاتيح السلاسل النصية التي تحتوي على single quotes تُهرَّب باستخدام \' (backslash)، بينما تتعامل هذه الأنظمة الخلفية معه على أنه backslash حرفي لا كتسلسل تهريب، ما يتيح حقن SQL عشوائي في استعلامات lookup الخاصة بالقواميس. يُخرج ExternalQueryBuilder الآن تهريب '' القياسي في SQL لهذه الأنظمة الخلفية؛ بينما تواصل مصادر القواميس ClickHouse وMySQL استخدام التهريب عبر backslash. #104009 (Shaohua Wang).
  • إصلاح احتمال عدم تطابق النوع في aggregation عند تغيير column type من/إلى LowCardinality، من دون إعادة بناء min-max projection. #104013 (Nikita Taranov).
  • إصلاح حلقة لا نهائية من query optimization نتجت عن عدم تمرير منع إزالة column غير المستخدم عند دمج expressions. #104083 (János Benjamin Antal).
  • إصلاح LOGICAL_ERROR في StreamingStorageRegistry::renameTable عند إعادة تسمية streaming tables على دفعات (S3Queue وKafka وRabbitMQ)، وذلك باستخدام تتبّع الهوية المستند إلى UUID بدلًا من الاسم. #104101 (Nikita Taranov).
  • إصلاح نتائج غير صحيحة عندما كان CTE مُنشأً باستخدام UNION ALL يحتوي على فرع SELECT DISTINCT، بينما كان query الخارجي يُسقِط فقط subset من columns الخاصة بـ CTE. كانت RemoveUnusedProjectionColumnsPass في analyzer الجديد تزيل على نحو غير صحيح column غير المُشار إليه من إسقاط DISTINCT الداخلي، ما أدى إلى دمج rows كان ينبغي أن تظل متميزة (القيمة نفسها في column المُسقَط لكن قيمة مختلفة في column المحذوف) في row واحدة. #104114 (Groene AI).
  • إصلاح عدة مشكلات صحة في حالات طرفية في الإعداد optimize_inverse_dictionary_lookup، حيث كان التحسين قد يحذف rows بصمت أو يمنع ظهور exceptions. يغلق #103270. ويغلق #103085. #104133 (Nihal Z. Miaji).
  • إصلاح كتابة خارج الحدود أثناء deserialize لحالة quantileTiming. #104141 (Alexey Milovidov).
  • إصلاح سلوك غير معرّف عند تحويل قيمة Float64 خارج النطاق إلى integer type عريض (UInt64, Int64, Int128, UInt128, Int256, UInt256). سابقًا، كانت القيم المساوية لـ Float64(numeric_limits<T>::max()) (التي تُقرَّب للأعلى إلى قيمة تتجاوز الحد الأقصى الفعلي) تتجاوز فحص الحدود وتنتج UB في التحويل اللاحق. وقد أثّر ذلك في parsing لمعاملات aggregate function (topK, histogram, uniqUpTo, groupArrayInsertAt، وغيرها)، وكذلك في settings ذات النوع الصحيح عبر SET <setting> = <Float64>. يغلق #103817. #104154 (Groene AI).
  • إصلاح استثناء LOGICAL_ERROR “Unexpected return type from comparison. Expected UInt8. Got Const(Nullable(UInt8))” عند مقارنة Tuple(Tuple(Nullable(...))) متداخلة (أو ذات تداخل أعمق) مع قيمة String حرفية. أصبح نوع الإرجاع للمقارنة يُستنتج الآن بشكل صحيح على أنه Nullable(UInt8)، بما يتوافق مع سلوك وقت التشغيل. #104171 (Groene AI).
  • إصلاح تعطل الخادم (UndefinedBehaviorSanitizer: reference binding to null pointer، وsegfault في إصدارات release) عند SELECT ... FROM <ReplacingMergeTree(version, is_deleted)> FINAL PREWHERE is_deleted = <expr> AND <other column expr> عندما تكون query_plan_optimize_lazy_final = 1. فقدت خطوة القراءة lazy-FINAL غير المتقاطعة العمود is_deleted من ترويسة الخرج لأن PREWHERE استهلكه كمدخل من دون إعادة تمريره ضمن الخرج. ثم قامت خطوة addIsDeletedFilter اللاحقة بإلغاء مرجعية مؤشر ActionsDAG::Node فارغ. #104177 (Groene AI).
  • عند استدعاء جدول system.failpoints، كان يستخدم failpoint، ما قد يؤدي إلى تعطيله. #104237 (Pedro Ferreira).
  • إصلاح MemorySanitizer: use-of-uninitialized-value في الدوال detectLanguage* عندما يحتوي الإدخال على محرف UTF-8 ينتهي تمامًا عند حدّ buffer. #104257 (Raúl Marín).
  • إصلاح خطأ منطقي (Bad cast from type DB::CachedObjectStorage to DB::S3ObjectStorage) كان يؤدي إلى إيقاف parsing الوسائط الخاصة بـ table functions وengines لبحيرات البيانات (icebergS3, deltaLakeS3، إلخ) عند استدعائها باستخدام SETTINGS disk = '...' على disk تكون object storage الأساسية له مغلفة بمُزيّن مثل filesystem cache. يُغلق #89300. #104258 (Groene AI).
  • إصلاح parsing تعبيرات الفهرسة الموضوعة بين قوسين على columns المسماة values، مثل (values['a'])، بحيث لم تعد تُفسَّر على أنها تعبيرات جدول VALUES القياسية في SQL. #104312 (Desel72).
  • إصلاح تعطل الخادم/LOGICAL_ERROR في thread الإخلاء الخلفية الخاصة بـ filesystem cache (SLRUFileCachePriority::collectEvictionInfo) الذي كان يمكن أن يحدث عندما تكون keep_free_space_size_ratio أو keep_free_space_elements_ratio مرتفعة بما يكفي لتحفيز الإخلاء، بينما تكون جميع cache entries قد رُقّيت بالفعل إلى protected queue الخاصة بـ SLRU (مع فراغ الجزء probationary). #104313 (Groene AI).
  • إصلاح الاستثناءات (NOT_FOUND_COLUMN_IN_BLOCK, LOGICAL_ERROR, AMBIGUOUS_COLUMN_NAME) عند استخدام projections مع عروض UNION ALL أو window functions أو حالات تعارض أسماء الأعمدة مع الأسماء المستعارة. هذا تراجع ناتج عن #88798. #104317 (Amos Bird).
  • إصلاح احتمال حدوث underflow أثناء parsing مصفوفات Postgres. #104322 (Grant Holly).
  • أصبحت الدوال التي تُرجِع نوعًا غير Nullable (مثل Array أو Tuple أو Map) تقبل الآن وسائط Nullable. وتشمل الدوال المتأثرة extractAll وextractAllGroups وextractAllGroupsHorizontal وextractAllGroupsVertical وextractGroups وsplitByChar وsplitByString وsplitByRegexp وsplitByWhitespace وsplitByNonAlpha وalphaTokens. وتُنتِج صفوف الإدخال ذات القيمة NULL القيمةَ الافتراضية لنوع النتيجة (مثل مصفوفة فارغة) بدلًا من إثارة الخطأ “Nested type is not allowed inside Nullable type”. #104326 (Alexey Milovidov).
  • إصلاح إحصاءات Iceberg مع جدول مُقسَّم إلى partition. وهذا يُغلق #104321. #104329 (Konstantin Vedernikov).
  • إصلاح خطأ منطقي فادح عند بدء تشغيل الخادم على macOS (وفي إصدارات jemalloc المشابهة)، حيث كانت Jemalloc::verifySetup تُبلّغ خطأً عن عدم تطابق في jemalloc_enable_background_threads لأن mallctls الاختيارية background_thread / max_background_threads غير موجودة؛ ويُتجاوز التحقق عندما لا تكون mallctls هذه متاحة، كما أن getValue لم تعد تترك المخرجات غير مهيّأة عند الفشل. يُغلق #102183. #104330 (SAYON DEEP).
  • إصلاح تراجع في السلوك الصحيح حيث كان يمكن لاستعلامات SELECT مع max_rows_to_read_leaf وread_overflow_mode_leaf = 'throw' أن تُطلق TOO_MANY_ROWS بشكل غير صحيح حتى عندما كان skip index سيخفض حجم القراءة إلى ما دون الحد الأقصى على مستوى leaf. وكانت الإعدادات المناظرة لغير leaf (max_rows_to_read / read_overflow_mode) تُعالَج بالفعل. #104331 (Groene AI).
  • أصبحت toUUID وtoUUIDOrNull وtoUUIDOrZero وtoUUIDOrDefault وCAST إلى UUID وNullable(UUID) وaccurateCastOrNull إلى UUID، وكذلك input formats التي تفسّر UUID من النص (Avro وMsgPack وJSONExtract و…)، ترفض الآن السلاسل النصية التي لها الطول الصحيح لكنها تحتوي على محارف غير ستّ عشرية. سابقًا كانت مثل هذه المدخلات تتحول بصمت إلى UUID مُختلق بسبب تجاوز نهاية جدول lookup للأرقام الستّ عشرية؛ أما الآن فإن toUUID يُطلق CANNOT_PARSE_UUID، وتُرجع متغيرات Or* القيمة NULL / zero UUID / القيمة الافتراضية المورَّدة. #104370 (Groene AI).
  • إصلاح Bad cast LOGICAL_ERROR في caseWithExpression (وفي SQL ‏CASE expr WHEN ... THEN ... ELSE ...) عندما ينتهي النوع الأعلى الخاص بـ THEN فقط والنوع الأعلى الخاص بـ (THENs + ELSE) إلى مخازن ColumnDecimal مختلفة — على سبيل المثال، قيم THEN ‏(UInt16, Int8) مع ELSE من النوع Decimal(9, 2). يُغلق #104335. #104378 (Groene AI).
  • أصبحت الأعطال الداخلية المُبلَّغ عنها عبر logExceptionBeforeStart (عمليات flush الخاصة بالإدراج غير المتزامن، وعمليات refresh للعروض materialized-view، وأخطاء التحليل التي تُثار أثناء الاستعلامات الداخلية) تزيد الآن بشكل صحيح من ProfileEvents ‏FailedInternalQuery وFailedInternalSelectQuery وFailedInternalInsertQuery إلى جانب العدادات الظاهرة للمستخدم FailedQuery وFailedSelectQuery وFailedInsertQuery. سابقًا كانت هذه العدادات الداخلية تبقى عند الصفر في حالات الفشل التي تقع قبل بدء تنفيذ الاستعلام، مما كان يؤدي إلى تقليل احتساب فئة رئيسية من الأعطال الداخلية. #104399 (Groene AI).
  • إصلاح الخطأ Code: 36. BAD_ARGUMENTS Expected literal, got {name:Type} الذي كان يظهر عند استخدام query parameter داخل الإعداد base_backup في عبارة BACKUP أو RESTORE (على سبيل المثال BACKUP ... SETTINGS base_backup = S3({backup_name:String}, ...)). أُدخل هذا التراجع في 26.1.5 عبر PR #99205. يُغلق #103324. #104413 (Groene AI).
  • إصلاح توقفٍ للخادم في عمليات الكتابة إلى IcebergLocal/IcebergS3 عندما تتبع عملية INSERT العبارة ALTER TABLE ... DROP COLUMN مع قيمة iceberg_metadata_staleness_ms أكبر من الصفر. تُبطِل ALTER الآن cache المحلي لملفات Iceberg metadata بحيث ترى عمليات القراءة والكتابة اللاحقة الـ schema الجديدة. #104419 (Groene AI).
  • إصلاح أوامر DROP ROLE وDROP USER وDROP SETTINGS PROFILE وDROP ROW POLICY وDROP QUOTA وDROP MASKING POLICY بحيث تزيل المراجع إلى الـ entity المحذوف من أي access entity آخر كان يشير إليه (مثل قائمة DEFAULT ROLE الخاصة بالمستخدم، وقائمة TO الخاصة بـ settings profile، والمستفيدين في row policy)، مع حفظ هذا التنظيف على disk. سابقًا، كانت in-memory state تبدو صحيحة لأن SHOW CREATE يرشّح UUIDs غير المعروفة، لكن ملفات .sql على disk كانت تحتفظ بإدخالات ID('<dropped-uuid>') المعلّقة، ثم كانت هذه المراجع تعود للظهور عند إعادة تشغيل server التالية، لتظهر على شكل أخطاء ACCESS_ENTITY_NOT_FOUND أثناء distributed query execution. #104427 (Groene AI).
  • إصلاح توقفٍ للخادم يحدث مع azureBlobStorage ومحرك AzureBlobStorage وDeltaLake-on-Azure عند استخدام connection string يكون فيه عنوان BlobEndpoint يحتوي على منفذ فارغ أو غير رقمي أو خارج النطاق (مثل BlobEndpoint=http://host:abc/). يعيد الخادم الآن خطأ BAD_ARGUMENTS واضحًا بدلًا من التوقف في builds الخاصة بـ debug/sanitizer. #104460 (Groene AI).
  • السماح باستخدام معرّف غير مقتبس كاسم مستخدم في table functions ‏remote وremoteSecure، بما يتوافق مع كيفية قبول وسيطات database وtable لمعرّفات غير مقتبسة. سابقًا، كان مثل هذا query يفشل مع خطأ authentication مضلّل يشير إلى المستخدم default. #104465 (Alexey Milovidov).
  • إصلاح Logical error: Incorrect ASTSelectWithUnionQuery (modes: M, selects: N) الذي يحدث عندما يحتوي جسم SQL user-defined function على UNION ALL داخلي بين قوسين (مثل CREATE FUNCTION f AS x -> (SELECT 1 UNION ALL (SELECT 1 UNION ALL SELECT 1))). #104477 (Groene AI).
  • إصلاح uniqThetaIntersect الذي كان يعيد cardinality الخاصة بالـ argument الأول بدلًا من 0 عندما تكون قيمة state الثانية من uniqTheta فارغة — على سبيل المثال، ناتج uniqThetaMergeStateIf(s, predicate) عندما يستبعد الـ predicate كل row. #104529 (Groene AI).
  • تم إصلاح قيام SHOW TABLES وsystem.tables باقتطاع القائمة بصمت في قواعد بيانات DataLakeCatalog المعتمدة على كتالوجات Iceberg REST (iceberg-rest, onelake, biglake). فعندما كان خادم الكتالوج يجزّئ استجابة list-tables أو list-namespaces إلى صفحات (مثل Microsoft Fabric / OneLake عند تجاوز ~50 جدولًا لكل مساحة اسم)، كانت الجداول الموجودة في الصفحات اللاحقة تصبح غير مرئية بصمت لـ SHOW TABLES وsystem.tables، رغم أنه كان يمكن الاستعلام عنها عبر SELECT مباشر. وأصبح RestCatalog الآن يتبع رمز المتابعة next-page-token المعرّف في مواصفة Iceberg REST OpenAPI، بما يطابق السلوك الحالي لكل من PaimonRestCatalog وUnityCatalog. #104531 (Groene AI).
  • تستنتج الدالة الجدولية input الآن بنيتها من عبارة FORMAT في استعلام INSERT المحيط بها عندما يكون لهذا format مخطط ثابت (LineAsString, RawBLOB, JSONAsString، إلخ)، لذلك لم يعد المستخدمون بحاجة إلى تكرار البنية على هيئة input('line String') لهذه formats. #104532. #104533 (Groene AI).
  • تم تحديث نوع بيانات الحقول في history الخاصة بـ Iceberg من Int32 إلى Int64. يغلق #94176. #104579 (Smita Kulkarni).
  • تم إصلاح Inconsistent AST formatting وLOGICAL_ERROR عند تحليل استدعاء دالة تأتي فيه lambda بعد فاصلة، مثل SELECT substring(x, `x` -> `x`). وكان المحلّل يدمج الوسائط السابقة بصمت في الطرف الأيسر من lambda، مما ينتج عنه استدعاء بوسيط واحد لا يمكن إعادة تحليله إلى AST نفسها. وهو يحافظ الآن على عدد الوسائط الأصلي للدالة. #104626 (Groene AI).
  • يفضّل CHECK TABLE t الآن جدول TEMPORARY على الجدول الدائم الذي يحمل الاسم نفسه عند عدم تقديم محدِّد database، بما يطابق أولوية الترتيب المستخدمة بالفعل في SHOW CREATE TABLE وDESCRIBE TABLE وOPTIMIZE TABLE وALTER TABLE. سابقًا، كان CHECK TABLE t يتجاهل الجداول المؤقتة بالكامل، لذلك كان يفشل مع UNKNOWN_TABLE على جدول Log أو File مؤقت رغم أن هذين المحركين يدعمان CHECK. متابعة لـ #100966. #104637 (Groene AI).
  • تم إصلاح مشكلة تؤدي إلى إنهاء Keeper ودخوله في حلقة إعادة تشغيل عند إرسال get /keeper/availability_zone مع quorum_reads=true إلى Keeper لم يُضبط فيه <placement>. #104663 (myeongjun).
  • تم إصلاح سباق بيانات TOCTOU في FutureSetFromTuple::buildOrderedSetInplace كان يؤدي إلى logical error. #104673 (Miсhael Stetsyuk).
  • تم إصلاح عدة دوال كانت تعيد نتائج مختلفة للمدخل نفسه بحسب ما إذا كانت الوسائط قد وصلت على هيئة أعمدة أو ثوابت: bitRotateLeft / bitRotateRight (قيم shift الحدّية)، وlength(FixedString) / concatWithSeparator مع مدخلات LowCardinality(Nullable)، وroundDown على NaN، وrightUTF8 على UTF-8 غير صالح. #104710 (Raúl Marín).
  • تم إصلاح anyHeavy الذي كان يعيد قيمة غير ثقيلة عندما تكون القيمة الأكثر تكرارًا هي default الخاصة بالعمود وتكون البيانات موزعة عبر عدة parts من MergeTree (مسار قراءة الأعمدة sparse). #104712 (Raúl Marín).
  • إصلاح عدة عيوب في التعامل مع قيود الإعدادات: كان بالإمكان تجاوز قيود MergeTreeSettings المعلنة على الاسم canonical للإعداد عبر الكتابة إلى alias لذلك الإعداد؛ كما كان التحقق من قيد disallowed_values يطرح استثناءً في مسارات clamp (الاستعلامات secondary، وعُمّال ON CLUSTER، وعروض SQL SECURITY DEFINER) بدلًا من إسقاط التغيير بصمت. #104737 (Raúl Marín).
  • إصلاح استثناء LOGICAL_ERROR (Metadata is not initialized) الذي كانت تسببه أوامر OPTIMIZE TABLE وALTER TABLE ... DELETE وALTER TABLE ... ADD COLUMN وغيرها من صيغ ALTER عند تنفيذها على جدول Iceberg / IcebergLocal / DeltaLake / Hudi مرفق كسولًا ولم تكن metadata الخاصة به قد حُمِّلت بعد (وهو أمر شائع بعد إعادة تشغيل server، أو بعد فشل سابق في كتابة metadata وترك ملف metadata تالفًا على القرص). أصبحت العملية الآن إما تتابع بشكل طبيعي إذا جرى تحميل metadata بنجاح، أو تُظهر سبب فشل التحميل الفعلي كاستثناء عادي للمستخدم بدلًا من إيقاف server في builds الخاصة بـ debug / sanitizer. #104738 (Groene AI).
  • إصلاح segfault ناتج عن خطأ use-after-free في AvroConfluentRowInputFormat. #104751 (Miсhael Stetsyuk).
  • أصبحت المتغيرات scalar من numericIndexedVectorPointwiseMultiply وnumericIndexedVectorPointwiseDivide وnumericIndexedVectorPointwiseEqual وnumericIndexedVectorPointwiseNotEqual ترفع الآن INCORRECT_DATA عند استدعائها باستخدام scalar من نوع UInt64 أكبر من Int64::max. #104784 (FriendLey).
  • إصلاح خلل كان يتسبب في التراجع عن override لإعداد تم ضبطه يدويًا عبر اسم alias الخاص به (مثل SET enable_analyzer = 1 بدلًا من SET allow_experimental_analyzer = 1) بعد تطبيق إعداد compatibility، وذلك عند إجراء تغيير لاحق على إعداد compatibility. #104829 (Raúl Marín).
  • إصلاح تعطيل AWS logger بعد https://github.com/ClickHouse/ClickHouse/commit/0e8ad4355c9d. #104837 (Konstantin Bogdanov).
  • إصلاح ثلاث دوال إضافية كانت تُرجع نتائج مختلفة للمدخل نفسه بحسب ما إذا كانت arguments قد وصلت على هيئة columns أو constants: الدالة transform (وكذلك caseWithExpression عبرها) مع قيمة default ثابتة من نوع Date/Date32/Enum/FixedString، وعوامل المقارنة بين String وFixedString ثابت، وكذلك if/ifNull/nullIf مع فرع FixedString تحت condition ثابت. #104858 (Raúl Marín).
  • إصلاح إيقاف server بسبب Bad cast from type DB::ColumnConst to DB::ColumnNullable أثناء partition pruning لجداول MergeTree عندما يحتوي partition expression على سلسلة دوال تختزل إلى قيمة ثابتة واحدة (مثل floor(NULL, toRelativeYearNum(...))). #104861 (Groene AI).
  • إصلاح data race في ThreadSanitizer داخل مُنشئ النسخ ContextData: كانت table_function_results تُنسخ من object المصدر دون الحصول على table_function_results_mutex، لذا كان من الممكن أن يتسابق كاتب Context::executeTableFunction concurrent مع القراءة غير المتزامنة داخل مُنشئ النسخ. #104879 (Groene AI).
  • إصلاح فحوصات اتساق data part للأنواع ذات structure الديناميكية، مع اكتشاف columns&#95;substreams.txt التالف. إعادة تقديم لـ https://github.com/ClickHouse/ClickHouse/pull/103858 مع تغييرات إضافية. #104888 (Pavel Kruglov).
  • إصلاح حالة تسابق بين DROP وUNDROP في DatabaseCatalog. #104915 (Azat Khuzhin).
  • إصلاح تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات عند وجود مقاطع جرى تنزيلها جزئيًا، بما في ذلك استعادة احتساب الاستخدام بعد فشل الإخلاء. #104921 (Antonio Andelic).
  • أصبح DETACH TABLE على جدول مؤقت (من دون الكلمة المفتاحية TEMPORARY) يُطلق الآن SYNTAX_ERROR بشكل صحيح، بما يطابق سلوك DETACH TEMPORARY TABLE. سابقًا، كان يضبط بصمت العلامة الداخلية is_detached ثم يعود من دون خطأ. لإزالة جدول مؤقت، استخدم DROP TEMPORARY TABLE أو DROP TABLE (إذ يحلّ الأخير الجدول المؤقت عبر Context::ResolveExternal). يُغلق #103475. #104943 (Groene AI).
  • أصبحت الدالة الجدولية filesystem تراعي max_memory_usage / max_server_memory_usage عند تحميل محتوى الملف. سابقًا، كان من الممكن أن تتجاوز قراءات المحتوى الكبيرة أو الكثيرة المتوازية هذا الحد من دون إطلاق MEMORY_LIMIT_EXCEEDED، لينتهي الأمر بدلًا من ذلك بإنهاء العملية بسبب نفاد الذاكرة. #104956 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR كان يُطلق عند تصفية system.detached_tables باستخدام uuid (مثل SELECT count() FROM system.detached_tables WHERE uuid = '...'). يُرجع الاستعلام الآن النتيجة المتوقعة بدلًا من التسبب في إيقاف الخادم. #104979 (Groene AI).
  • لم تعد flattenTuple تُطلق LOGICAL_ERROR عند استدعائها على tuple لا تحتوي بنيتها المتداخلة إلا على أوراق Tuple() فارغة (مثل Tuple(c0 Array(Tuple())) أو Tuple(c0 Tuple())). وتُنتج هذه المدخلات الآن استثناءً ظاهرًا للمستخدم من نوع ILLEGAL_TYPE_OF_ARGUMENT يوضح أن نتيجة التسطيح ستكون tuple فارغة. #104989 (Groene AI).
  • إصلاح توقف الخادم وخلل يُرجع نتائج خاطئة بصمت عند الاستعلام باستخدام loop(remote(...)) (أو أي loop() يغلّف تخزينًا يمكنه تأجيل aggregation) مع GROUP BY. كان المخطِّط الخارجي يضيف MergingAggregatedStep استنادًا إلى مرحلة المعالجة التي يبلّغ عنها التخزين الداخلي، لكن LoopSource يحقق دائمًا select الداخلي الخاص به على هيئة QueryProcessingStage::Complete ويُخرج مقاطع أعمدة عادية، لذا كان MergingAggregatedTransform يتسبب في LOGICAL_ERROR (Chunk info was not set for chunk in MergingAggregatedTransform) عند enable_parallel_replicas = 1، وفي غير ذلك كان يُسقط التجميع الخارجي بصمت. #105001 (Groene AI).
  • تعطّل clickhouse-benchmark --reconnect (بصورته المجردة، من دون قيمة) دون قصد في 25.4 بسبب تغيير حوّل --reconnect إلى خيار عددي يتطلب قيمة. وتعمل الصيغة المجردة الآن مجددًا، وتعادل --reconnect=1 (إعادة الاتصال عند كل query). #105006 (Groene AI).
  • إصلاح مخرجات JSON غير سليمة لأسماء الأعمدة المنتهية بتسلسلات UTF-8 غير مكتملة. #105012 (Pablo Marcos).
  • إصلاح فقدان بيانات صامت بعد EXCHANGE TABLES أو CREATE OR REPLACE TABLE لجدول المصدر الخاص بعرض مادي. ويُحتفَظ الآن بحافة الاعتمادية بين المصدر والعرض الخاصة بـ MV على الاسم الأصلي، بحيث تستمر في العمل عند عمليات insert. هذا تراجع أُدخل في #98779؛ ويستعيد السلوك الذي كان موجودًا قبل هذا التراجع. #105029 (Sema Checherinda).
  • إصلاح الخطأ CANNOT_COMPILE_CODE Could not find symbol __fixunsdfti عند الترجمة البرمجية باستخدام JIT للتعبيرات التي تحوّل Float إلى UInt128، مثل toUInt128(<Float64 expression>). كان محلّل الرموز في JIT يفتقد دوال builtins من compiler-rt الخاصة بالتحويل من أعداد الفاصلة العائمة غير الموقّعة ذات 128 بت إلى أعداد صحيحة. يُغلق #105031. #105048 (Raúl Marín).
  • إصلاح عدم طباعة clickhouse-local لرسائل السجل الناتجة عن query فاشلة عند تعيين send_logs_level. #105067 (Alexey Milovidov).
  • إصلاح النتائج غير الصحيحة عند الإشارة إلى العرض المعلَّم نفسه أكثر من مرة في query واحدة باستخدام قيم وسيطات مختلفة. سابقًا، كان المُحلِّل يدمج هذه الاستدعاءات في استدعاء واحد، ما كان يؤدي بصمت إلى إسقاط جميع عوامل التصفية باستثناء الأول. #105170 (Alexey Milovidov).
  • إصلاح ظهور صف TOTALS مرتين في أسفل جدول النتائج في واجهة الويب play.html. #103803 (Alexey Milovidov).
  • رفض المتجهات غير المنتهية (NaN, ±Inf) أثناء البحث المتجهي (سواء كانت متجهات البحث أو متجهات مرجعية)؛ إذ كانت تتسبب سابقًا في سلوك غير معرّف في usearch. #104079 (Groene AI).
  • PromQL: إصلاح عامل التجميع للمتجهات الفارغة. #104425 (Vitaly Baranov).
  • PromQL: إصلاح معالجة الأخطاء في واجهة Prometheus query API. #104741 (Vitaly Baranov).
  • إصلاح حالة تسابق في MergeTreeTransaction::afterCommit حيث كان من الممكن، بعد فقدان الاتصال بين كتابة CSN الخاصة بـ commit إلى ZooKeeper وإنهاء transaction، أن تصل استجابة COMMIT إلى client قبل أن تصبح قيمتا creation_csn وremoval_csn الجديدتان مرئيتين في system.parts. #104708 (Tuan Pham Anh).
  • إصلاح النمو الأُسّي للذاكرة في parser الخاص بـ KQL عند تحويل فهرسة المصفوفات المتداخلة (arr[arr[arr[...]]]). #105142 (Alexey Milovidov).
  • إصلاح النتائج غير الصحيحة في RIGHT ANY JOIN عندما يحتوي الجدول الأيمن على عدة rows لكل key، وتُقسَّم كتلة المخرجات بسبب حدود الحجم. يُغلق #99431. #102064 (Vladimir Cherkasov).
  • التحقق من تجاوز سعة المكدس في قارئ Avro أثناء إلغاء تسلسل الأنواع المتداخلة. #102417 (Pavel Kruglov).
  • إصلاح تكرار rows في system.completions لإعدادات MergeTree — إذ كان كل اسم إعداد يظهر مرتين لأن كلًا من getMergeTreeSettings وgetReplicatedMergeTreeSettings كانا يُفرَّغان رغم تطابق أسماء الإعدادات فيهما. يُغلق #102013. #102015 (Groene AI).
  • إصلاح StorageObjectStorageQueue ‏(S3Queue، AzureQueue) الذي كان يمنع إيقاف التشغيل إلى أن تُقرأ الملفات المُعالجة جزئيًا بالكامل من تخزين الكائنات. أصبح المصدر الآن يوقف القراءة فورًا عند إيقاف التشغيل؛ ويضمن إلغاء التكرار عدم تكرار الصفوف التي جرى بثّها مسبقًا إلى جدول الوجهة قبل إيقاف التشغيل عند إعادة محاولة الملف في بدء التشغيل التالي. #103126 (Tuan Pham Anh).
  • إصلاح عمليات insert متعددة blocks إلى table engine ‏Alias مع insert_deduplication_token بحيث يتم الاحتفاظ بجميع blocks. #103246 (Enric Calabuig).
  • إصلاح JSONHas وJSONExtractBool على أعمدة JSON الأصلية، حيث كانا يعيدان القيمة المستخرجة (بعد تحويلها إلى UInt8) بدلًا من 0/1. #103313 (zxuhan7).
  • حماية input format ‏CustomSeparated من البيانات المشوهة أو العدائية التي تُهمل format_custom_row_after_delimiter. كان اكتشاف header، وschema inference، والصفوف ذات الأعمدة المتغيرة، يؤدي سابقًا إلى تجميع fields بلا حدود، وكان يمكن أن يخصص عدة غيغابايت من الذاكرة قبل الفشل. أصبحت عمليات القراءة الآن تفشل مع INCORRECT_DATA بمجرد أن يحتوي صف واحد على أكثر من 1,000,000 field. #103404 (Groene AI).
  • إصلاح RESTORE لجداول MergeTree المتماثلة replicated بحيث يستخدم إلحاق الأجزاء المستعادة backup_restore_keeper_max_retries بدلًا من ميزانية إعادة المحاولة العادية الخاصة بـ insert في Keeper. #104610 (Pablo Marcos).
  • إصلاح النتائج الخاطئة الناتجة عن WHERE p AND <LowCardinality(Nullable(int)) constant> على جداول MergeTree. كانت مثل هذه queries تعيد سابقًا صفر rows لأن part pruning كان يستنتج قيمة NULL افتراضية من النوع LowCardinality(Nullable(...)) وينشئ قيد notEquals(x, NULL)، مما يؤدي إلى استبعاد كل part. #104767 (Groene AI).
  • إصلاح نتيجة aggregation غير الصحيحة عند التجميع بواسطة دالة غير حقنية لعمود يكون أيضًا partition key (مثلًا PARTITION BY a مع GROUP BY intDiv(a, 2) أو a % 2). لم تكن values القادمة من partitions مختلفة والتي تطابق المجموعة نفسها تُدمج، مما كان ينتج rows مجموعات مكررة عند allow_aggregate_partitions_independently = 1. #104869 (Nihal Z. Miaji).
  • إصلاح حالة تسابق في نقل snapshot في Keeper، حيث كان يمكن إزالة snapshot أو نقلها أثناء إرسالها إلى follower قيد الاستعادة. #104941 (Antonio Andelic).
  • إصلاح خطأ صامت يؤدي إلى نتائج خاطئة في hilbertEncode وmortonEncode، حيث كانت الوسيطة الأولى Tuple غير الثابتة (قناع النطاق) تستخدم قيم الصف 0’s لتحديد إزاحة البتات لكل صف. أصبحت الدالتان الآن تحسبان قيم القناع لكل صف، لذا لم تعد النتيجة تعتمد على كون الإدخال ثابتًا أو على حجم block. #104992 (Groene AI).
  • إصلاح clickhouse-local الذي كان يتجاهل بصمت configuration على مستوى المستخدم (profiles، users، quotas، وإعدادات التحكم بالوصول) عند الاكتشاف التلقائي لـ configuration file من ./clickhouse-local.xml أو ~/.clickhouse-local/config.xml أو /etc/clickhouse-local/config.xml. كانت هذه settings تُطبَّق سابقًا فقط عند تمرير --config-file أو عند وجود ./config.xml في current directory؛ أما الآن فجميع مسارات الاكتشاف تتصرف بشكل متسق. #105008 (Groene AI).
  • إصلاح مشكلة أعمدة BFloat16 التي كانت تُرجع بصمت صفر تطابقات عند مقارنتها بقيمة نصية ثابتة (مثل WHERE bf16_col = '49.9'). #105042 (Raúl Marín).
  • إصلاح التعامل مع CLEAR COLUMN وTTL أثناء عمليات الدمج في SummingMergeTree وAggregatingMergeTree وCoalescingMergeTree عندما تكون الأعمدة المطلوبة للدمج غير موجودة أو منتهية الصلاحية. يغلق #101953. #105203 (Antonio Andelic).
  • إصلاح حالة تسابق بين DNSCacheUpdater::run وContext::reloadClusterConfig عبر إضافة تحقق صريح من عدم كون shared->clusters_config قيمة فارغة قبل فك مرجعها. #105220 (Mikhail f. Shiryaev).
  • إصلاح تحليل التاريخ والوقت بصيغة best_effort في toDateTime64 بدقة ms وns. #105233 (Kaviraj Kanagaraj).
  • إصلاح قيام OSIOWaitMicroseconds بالإبلاغ عن انتظار I/O على مستوى عمر الخيط بدلًا من انتظار I/O على مستوى query. #105246 (Mikhail f. Shiryaev).
  • أصبح table engine Hudi الآن يرفع INCORRECT_DATA (وهو استثناء عادي على مستوى query) بدلًا من LOGICAL_ERROR عندما لا يطابق ملف Parquet في directory الجدول اصطلاح التسمية الخاص بـ Hudi وهو [FileId]_[FileWriteToken]_[Timestamp].[extension]. في السابق، كانت أسماء الملفات هذه تتسبب في استثناء في builds التصحيح. #105266 (Groene AI).
  • إصلاح حالة تعطل متبادل في ParallelFormattingOutputFormat عند فشل الجدولة: عندما throws scheduleFormatterThreadForUnitWithNumber (مثل CANNOT_SCHEDULE_TASK)، كانت الوحدة تُترك في الحالة READY_TO_FORMAT من دون خيط formatter يعالجها، مما يؤدي إلى تعليق. تُغلَّف الآن استدعاء الجدولة داخل try/catch ويُمرَّر أي فشل عبر onBackgroundException لكي يخرج collector بشكل سليم. #105275 (Azat Khuzhin).
  • إصلاح فقدان بيانات صامت في Distributed async inserts عند التعافي من إيقاف غير طبيعي: إذا كان آخر ملف .bin في Batch محفوظة سليمًا لكن ملفًا في الوسط كان تالفًا، كانت DistributedAsyncInsertBatch::recoverBatch تتحقق فقط من ترويسة الملف الأخير، ثم كانت sendBatch تضع علامة العطب على Batch بأكملها — بما في ذلك الملفات السليمة — مما يؤدي إلى فقدان rows الخاصة بها. أصبح الآن التحقق من ترويسة كل ملف يتم على حدة، بحيث لا يُنقل إلى broken/ إلا الملف التالف فعليًا، بينما تصل rows السليمة إلى الـ shard البعيد. #105281 (Groene AI).
  • إصلاح تراجع في clickhouse extract-from-config --try: عندما كانت config تستخدم attributes من نوع from_env ولم يكن فيها عنصر include_from (أو كان يشير إلى ملف مفقود)، كانت جميع substitutions الخاصة بـ from_env تُسقط بصمت وتُعاد كسلاسل فارغة. وقد أدى ذلك إلى تعطيل اكتشاف المنفذ في نقطة دخول Docker في الإصدار 26.2.5. يغلق #101704. #105283 (Groene AI).
  • إصلاح فشل INSERT INTO في جدول SQLite بسبب خطأ صياغي من SQLite عندما تكون value المُدرجة من نوع Enum أو JSON أو AggregateFunction وكان تمثيلها النصي يحتوي على علامة اقتباس مفردة. أصبح الإعداد output_format_values_escape_quote_with_quote مُراعًى الآن في عمليات serialization المقابلة (في السابق كان يراعيه فقط String وFixedString). #105285 (Groene AI).
  • إصلاح الخطأ Code: 44. ILLEGAL_COLUMN: Cannot add column ...: column with this name already exists الذي كانت تطرحه الاستعلامات الموزعة مع allow_push_predicate_ast_for_distributed_subqueries = 1 (القيمة الافتراضية) عند مطابقة tuple في GLOBAL IN مع استعلام فرعي يحتوي الإسقاط فيه على أسماء أعمدة مكررة، مثل (x, y) GLOBAL IN (SELECT number, number FROM numbers(5)). #105290 (Groene AI).
  • إصلاح reinterpret إلى Array(LowCardinality(...))، والتي كانت تُرجع خطأ NOT_IMPLEMENTED مُربكًا أثناء وقت التشغيل؛ وهي تُرجع الآن ILLEGAL_TYPE_OF_ARGUMENT أثناء التحقق من النوع. #105301 (Raúl Marín).
  • أصبحت minMap/maxMap (بصيغة array) وminMappedArrays/maxMappedArrays تتعامل الآن مع NaN بشكل متسق مع ORDER BY: إذ يُعامل NaN على أنه الأخير (ولا يُعاد إلا إذا كانت جميع القيم NaN). سابقًا، كانت النتائج تعتمد على موضع NaN في البيانات بسبب دلالات المقارنة غير المرتبة في IEEE 754، وكانت تختلف عن صيغة وسيط Map في minMap/maxMap التي أُصلحت في #100448. #105331 (Raúl Marín).
  • إصلاح تسرّب في الذاكرة في cache ‏ColumnsDescription لكل table ضمن جداول عائلة MergeTree التي تحتوي على أعمدة Nested. ولم يكن يتم إخلاء entries مطلقًا عبر دورات ALTER ADD COLUMN/DROP COLUMN عندما يكون share_nested_offsets = 1 (القيمة الافتراضية). #105376 (Groene AI).
  • إصلاح الاستثناء BAD_ARGUMENTS ‏“It’s a bug! Only integer types are supported by __bitWrapperFunc” الذي كان يُطرح عندما يحتوي SELECT مع skip index من النوع TYPE set(N) على عنصر WHERE تكون نتيجة تقييمه من النوع Float أو BFloat16 أو أي نوع آخر غير صحيح (على سبيل المثال WHERE c0 + 0.1 أو WHERE log(c0)). ويعود skip index الآن إلى مسار filter العادي في هذه الحالة. #105384 (Groene AI).

تحسينات البناء/الاختبار/التغليف

  • إيقاف استخدام مكتبات compiler-rt وترويساته الخاصة بالنظام. يُغلق #91475. #102857 (Konstantin Bogdanov).
  • تحديث صورة Docker الأساسية من نوع distroless لإصلاح ثغرات OpenSSL الأمنية في libssl3t64. #103583 (Rahul Nair).
  • ضمان استلام مفتاح GPG بشكل موثوق أثناء عمليات الإصدار عبر ربط عدة خوادم مفاتيح Ubuntu بالتتابع، بدلًا من انتهاء المهلة على keyserver.ubuntu.com. #103834 (Mikhail f. Shiryaev).
  • إزالة عمليات التحقق في CMake وقت البناء ومنعها (check_*, try_compile, try_run). وبما أن المصرّف وسلسلة الأدوات محددان مسبقًا، فلم تعد هناك حاجة إلى اكتشاف الميزات وقت التهيئة، وقد أصبح ذلك الآن محظورًا على مستوى المشروع بأكمله؛ وأي سلوك خاص بإصدار معيّن يجب تقييده صراحةً باستخدام CMAKE_CXX_COMPILER_VERSION. #103980 (Alexey Milovidov).
  • ترقية libarchive من 3.8.6 إلى 3.8.7. #104047 (Robert Schulze).
  • تحديث mongo-c-driver إلى 2.3.0. #104300 (Raúl Marín).
  • تحديث تبعيات LLVM للإصدار 22.x. #104381 (Joshua Carp).
  • تمكين بناء صنفي embedded-client وPTY descriptor على MacOS وFreeBSD باستخدام دوال POSIX المحمولة posix_openpt / grantpt / unlockpt وإزالة حواجز #if الخاصة بـ Linux فقط. #104436 (Alexey Milovidov).
  • ترقية librdkafka إلى الإصدار 2.14.1. #105222 (János Benjamin Antal).

إصدار ClickHouse 26.4، 2026-04-30. العرض التقديمي، الفيديو

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

  • يستخدم المعامل IN الآن دلالات مطابقة دقيقة للقيم مع النوع Bool: إذ لا تطابق قيم Bool إلا القيمتان 0 و1 داخل المجموعة. سابقًا، كانت القيم الرقمية الأكبر من 255 في مجموعة IN تُحوَّل خطأً إلى true عند مقارنتها بـ Bool، لذلك كان SELECT CAST(1, 'Bool') IN (256) يعيد 1. أما الآن، فهو يعيد 0 بشكل صحيح. يُغلق #92980. #93115 (Ashrith Bandla).
  • جرى تحديث مكتبة H3 إلى الإصدار v4، مما يحسّن دقة حسابات الطول والمساحة والمقاييس الأخرى. ويُعد هذا التغيير غير متوافق مع الإصدارات السابقة لأن النتائج الجديدة تختلف عن النتائج السابقة. #100348 (Alexey Milovidov).
  • لم يعد مسموحًا باستخدام SELECT كمُعرّف bareword داخل عنصر في قائمة تعبيرات WITH. #101059 (Aruj Bansal).
  • يغيّر هذا التصحيح طريقة تعامل جدول Merge مع الأعمدة الافتراضية. فإذا كان underlying table يحتوي على _table أو _database، فستُقرأ هذه الأعمدة من التخزين؛ وإلا فستُملأ بعد خطوة القراءة باستخدام خطوة expression. #101742 (Mikhail Artemenko).
  • يرفض المعامل IN الآن أيضًا تحويلات Decimal الفاقدة للدقة داخل الأنواع المركبة (Tuple وArray وMap)، مما يجعل سلوكه متسقًا مع مقارنات القيم scalar على المستوى الأعلى. في السابق، كانت فحوصات الدقة تُطبَّق فقط على قيم scalar في المستوى الأعلى: فعلى سبيل المثال، كان CAST('33.3', 'Decimal64(1)') IN (33.33) يعيد 0 بشكل صحيح، لكن CAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33]) كان يعيد 1 خطأً لأن التحويل الفاقد للدقة حدث داخل Array. أما الآن، فتعيد كلتا الحالتين 0 بشكل صحيح. #101812 (Nihal Z. Miaji).
  • خُفِّضت القيم الافتراضية لكلٍّ من http_max_fields من 1,000,000 إلى 1,000 وhttp_max_field_name_size من 128 KB إلى 4 KB للحد من استخدام الذاكرة قبل authentication بواسطة HTTP connections. وأُضيفت الإعدادات http_max_request_header_size وhttp_headers_read_timeout. ويمكن للمستخدمين الذين يعتمدون على الحدود الأعلى السابقة استعادتها عبر الإعدادات. #103285 (Sema Checherinda).

ميزة جديدة

  • إضافة ميزة الكتابة التلقائية إلى القرص لعمليات hash join وparallel hash join عبر تحويلها إلى grace hash join عند بلوغ حد الذاكرة. ويتحكم الإعداد max_bytes_before_external_join في هذا السلوك. #97813 (János Benjamin Antal).
  • إضافة دعم Arrow Flight SQL. #91170 (Yakov Olkhovskiy).
  • إضافة دعم Incremental read لمحركات الجداول Paimon مع تتبّع تقدّم اللقطة عبر Keeper، بما في ذلك قراءات delta موجّهة للّقطات باستخدام paimon_target_snapshot_id، مع توسيع تغطية الاختبارات لسيناريوهات type mapping وpartition pruning وIncremental read. #93655 (XiaoBinMu).
  • أصبحت الدالة stem الآن غير تجريبية (وكان يتعيّن سابقًا تمكين الإعداد allow_experimental_nlp_functions). #102399 (Jimmy Aguilar Mena). ويمكنك الآن بسهولة تطبيق الاشتقاق على جميع الكلمات/الرموز في الأعمدة String وFixedString وArray([Fixed]String) وNullable وLowCardinality وConst باستخدام الدالة stem. #99137 (Jimmy Aguilar Mena).
  • تنفيذ سلوك جديد للإعدادات max_insert_block_size_rows وmax_insert_block_size_bytes وmin_insert_block_size_rows وmin_insert_block_size_bytes في عملية squashing ضمن إعداد التوافق use_strict_insert_block_limits. #94207 (Kirill Kopnev).
  • إضافة الدالة arrayAutocorrelation(arr [, max_lag]) التي تحسب الارتباط الذاتي المُطبَّع لمصفوفة رقمية لكل قيمة lag. وتدعم أنواع المصفوفات الصحيحة والعائمة والعشرية. #94776 (Wenyu Chen).
  • إضافة دالة SQL باسم obfuscateQuery. يُغلق #98010. #98305 (Xuewei Wang).
  • إضافة دعم النوعين Map وJSON/Object كـ dictionary attributes. ويمكن الآن لـ dictionaries تخزين الأنواع المعقدة واسترجاعها، بما في ذلك Map(String, String) وMap(String, Array(String)) وJSON وNullable(JSON)، في كلٍّ من تخطيطي FLAT وHASHED. #98627 (yanglongwei).
  • إضافة إعدادَي MergeTree جديدين — replicated_fetches_min_part_level وreplicated_fetches_min_part_level_timeout_seconds — يتيحان لـ replicas تخطي fetching للأجزاء المُدرجة حديثًا (غير المدمجة) من النظائر، مما يقلل الحمل الإضافي الناتج عن replication أثناء ingestion الكثيف. #98625 (tanner-bruce).
  • إضافة دعم MergeTree skip index لأعمدة JSON باستخدام JSONAllPaths مع أنواع الفهارس bloom_filter وtokenbf_v1 وngrambf_v1 وtext (inverted)، مما يتيح granule skipping استنادًا إلى مجموعة JSON paths الموجودة في كل granule. #98886 (Pavel Kruglov).
  • تدعم الدالة printf الآن format strings غير الثابتة، مما يتيح استخدام أنماط format مختلفة لكل row استنادًا إلى قيم column. #98991 (Yash ).
  • إضافة projection index جديد، commit_order، يعيد تنظيم البيانات وفق ترتيب الإدراج. #99004 (Mikhail Artemenko).
  • إضافة الدالة highlight التي تُغلّف مواضع ظهور مصطلحات البحث في سلسلة نصية بوسوم HTML (الوسومان الافتراضيان هما <em>/</em>). تدعم المطابقة غير الحساسة لحالة الأحرف لـ ASCII، والدمج التلقائي للتطابقات المتداخلة، ووسومي الفتح/الإغلاق المخصصين. #99131 (Peng).
  • تنفيذ quotas استنادًا إلى hash الخاص بالـ normalized query لحماية خدمات ClickHouse العامة من إساءة الاستخدام. 1. دعم NORMALIZED_QUERY_HASH باعتباره نوع quota key - مع buckets منفصلة لكل normalized query فريدة، بحيث يتتبع CREATE QUOTA q KEYED BY normalized_query_hash كل query مميزة على حدة. 2. دعم QUERIES_PER_NORMALIZED_HASH باعتباره نوع مورد quota — ما يقيّد الحد الأقصى لعدد مرات تنفيذ أي normalized query واحدة ضمن interval، بحيث يمنع MAX queries_per_normalized_hash = 100 تشغيل أي query pattern واحدة أكثر من 100 مرة. #99586 (Alexey Milovidov).
  • يمكن للمستخدمين الآن كتابة استعلامات join باستخدام الصياغة NATURAL JOIN، التي تطابق تلقائيًا جميع columns التي تحمل الاسم نفسه وتزيل تكرار هذه columns في النتيجة. #99840 (Peter Nguyen).
  • دعم SET TIME ZONE 'tz' كـ Alias for SET session_timezone. #99883 (phulv94).
  • إضافة دعم للاستعلامات المعلَّمة في واجهة الويب (play.html): يتم اكتشاف query parameters مثل {name:Type}، وتُعرَض حقول إدخال لملء values الخاصة بها. #100041 (Alexey Milovidov).
  • دعم clause ‏VALUES القياسية في SQL كتعبير table داخل FROM، مثل SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val). #100143 (Desel72).
  • إضافة وحدات متوافقة مع PostgreSQL إلى العامل EXTRACT: ‏EPOCH وDOW وDOY وISODOW وISOYEAR وWEEK وCENTURY وDECADE وMILLENNIUM. كما تم إصلاح EXTRACT(WEEK FROM date) الذي كان يُطلق خطأً سابقًا. #100274 (Alexey Milovidov).
  • إضافة دعم لقيم interval المركبة القياسية في SQL مع محددات النطاق TO، مثل INTERVAL '1:30' HOUR TO MINUTE. ويجري داخليًا تفكيكها إلى مجموع intervals. #100453 (Desel72).
  • إضافة metrics غير متزامنة لذاكرة buffer استقبال TCP وإرساله في النواة (sk_rmem_alloc, sk_wmem_alloc) الخاصة بـ sockets في HTTP connection pool، مع الإبلاغ عنها على شكل النسب المئوية p50/p75/p90/p95 وإجماليات لكل مجموعة connection. #100575 (Sema Checherinda).
  • إضافة web UI خاصة بـ jemalloc profiling لـ ClickHouse Keeper، ومتاحة على /jemalloc عبر منفذ HTTP control. #100606 (murphy-4o).
  • تنفيذ الأمر SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x' لكلٍّ من النمطين ordered وunordered. #100709 (Bharat Nallan).
  • تمت إضافة الدالة JSONAllValues التي تُرجع جميع القيم من عمود JSON على هيئة Array(String)، مع تسلسل القيم بتمثيل نصي وترتيبها حسب أسماء المسارات. كما أُضيف دعم الفهرس النصي لعبارة JSONAllValues على أعمدة JSON. وعند إنشاء فهرس نصي على JSONAllValues(json_column)، يُستخدم تلقائيًا لتصفية الاستعلامات على الأعمدة الفرعية لـ JSON (مثل json_column.key1 = 'value'). #100730 (Anton Popov).
  • تمت إضافة إعداد جديد باسم input_format_column_name_matching_mode يتيح درجات مختلفة من حساسية حالة الأحرف في تنسيقات الإدخال. #99346 (manerone).
  • تمت إضافة الأمر watch إلى clickhouse-keeper-client مع دعم watch في الأوامر get وexists وls. #100834 (Den Kalantaevskii).
  • تمت إضافة الطلب getChildrenRecursive ‏(ListRecursive) إلى ClickHouse Keeper والأمر lsr إلى clickhouse-keeper-client. وهذا يغلق #99916. #100998 (Konstantin Vedernikov).
  • تمت إضافة دالة جديدة arrayTranspose تأخذ Array ثنائي الأبعاد (مصفوفة) وتبدّل صفوفه وأعمدته: SELECT arrayTranspose([[1, 2, 3], [4, 5, 6]]). #101214 (Vitaly Baranov).
  • أصبح الإعداد auto_statistics_types mergetree مضبوطًا افتراضيًا على 'minmax, uniq' — إذ تُنشأ إحصاءات minmax وuniq تلقائيًا لجميع الأعمدة المناسبة في الجداول الجديدة - كما أصبح materialize_statistics_on_insert مضبوطًا افتراضيًا على false — إذ تُبنى الإحصاءات الآن أثناء عمليات الدمج بدلًا من وقت الإدراج، مما يقلل العبء الإضافي على عمليات الإدراج. استخدم SET materialize_statistics_on_insert = 1 لاستعادة السلوك السابق. #101275 (Han Fei).
  • تمت إضافة إعداد التحديث prefer_dependency_replica لسلاسل تبعية العروض المادية لتقليل البيانات المفقودة الناتجة عن تأخر النسخ المتماثل بين النسخ. #101591 (Seva Potapov).
  • تمت إضافة الدالة hasPhrase (بالاسم البديل matchPhrase) للبحث عن العبارات (تسلسلات متصلة من الرموز). البحث هنا brute-force، أي إنه غير مدعوم بعد بواسطة الفهرس النصي. #101997 (Elmi Ahmadov).
  • تمت إضافة histogram metrics ‏s3_read_request_duration_microseconds وs3_read_request_bytes لمراقبة مدة اتصال طلبات S3 GET وعدد البايتات المستهلكة، وهي تظهر في system.histogram_metrics وعبر Prometheus endpoint. #102058 (Sema Checherinda).
  • يمكن الآن إضافة قيم 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. وهذا يغلق #95914. #102421 (Nihal Z. Miaji).
  • أصبح الفهرس النصي الآن في مرحلة GA ويظل مفعّلًا بغض النظر عن الإعداد compatibility، مما يمنع تعطيله بشكل غير متوقع أثناء استعادة النسخ الاحتياطية أو عند التشغيل في وضع التوافق. #101518 (Nikita Fomichev).

ميزة تجريبية

  • إضافة ALTER TABLE ... EXECUTE remove_orphan_files إلى جداول Iceberg لتحديد الملفات غير المُشار إليها وإزالتها من التخزين الكائني. #99127 (murphy-4o).
  • إضافة الإعداد query_plan_optimize_join_order_randomize الذي يضفي عشوائية على الإحصاءات المستخدمة في إعادة ترتيب join، وهو مفيد لأغراض الاختبار. #100643 (Vladimir Cherkasov).
  • إضافة دعم دالة AI إلى ClickHouse، بما يتيح للمستخدمين استدعاء نقاط نهاية OpenAI وAnthropic باستخدام SQL. وتُعد aiGenerate أول دالة من هذا النوع. #100831 (George Larionov).
  • إضافة دوال AI: ‏aiClassify وaiExtract وaiTranslate للاستفادة من واجهات برمجة تطبيقات نماذج اللغة الكبيرة في ClickHouse. #100832 (George Larionov).
  • تمت إضافة system.histogram_metric_log، وهو جدول نظام جديد يلتقط لقطات دورية لجميع مقاييس المدرج التكراري (مثل زمن الاستجابة في S3/Azure، ومدد مراحل معالجة طلبات Keeper). كذلك، يتغير العمود value في system.histogram_metrics إلى Float64 لأنه أكثر مرونةً وتوافقًا مع نموذج بيانات Prometheus. #103046 (Miсhael Stetsyuk). ومن المرجح أن تتغير بنية الجدول في الإصدارات القادمة.

تحسين الأداء

  • أصبح ClickHouse الآن قادرًا على استبعاد أجزاء البيانات بالكامل في استعلامات SELECT استنادًا إلى إحصاءات الحد الأدنى/الحد الأقصى. #94140 (zoomxi).
  • تقليل التنافس على الأقفال أثناء عمليات readonly على جداول ReplicatedMergeTree التي اكتملت فيها mutations. #95771 (Eduard Karacharov).
  • مراعاة optimize_read_in_order عند قراءة projections. يغلق #89453. #95885 (Andrey Zvonov).
  • مجموعة صغيرة من التحسينات في Hash Join وConcurrent Hash Join. #96663 (Yarik Briukhovetskyi).
  • تحسين تحويل DISTINCT عبر تعطيل تحسين أعمدة LowCardinality عندما تكون بيانات الإدخال متميزة تقريبًا. #97113 (Nihal Z. Miaji).
  • تحسين أداء استعلامات LIKE المذكورة في #97723. ويمكن لهذه الاستعلامات الآن استخدام فهارس النص. #98149 (Elmi Ahmadov).
  • أصبحت الدوال الرياضية المتجهة (exp, log, sigmoid, tanh) أسرع الآن على AArch64 (باستخدام NEON/SVE) وعلى FreeBSD/Darwin، بعدما كانت تستخدم سابقًا مسار scalar احتياطيًا أبطأ. #98230 (Raúl Marín).
  • يمكن الآن للاستعلامات التي تُجري filtering على أعمدة primary key في MergeTree باستخدام بدائل regexp على سلاسل حرفية، مثل ^(abc-1|abc-2)، الاستفادة من pruning للمفتاح الأساسي عندما تشترك البدائل في prefix واحد. #98988 (Yash ).
  • تعميم التصفية الديناميكية top-k في ORDER BY ... LIMIT لدعم الأنواع Nullable وString وCOLLATE. #99033 (murphy-4o).
  • تسريع hash join على المفاتيح Int32 وInt64 ذات النطاق الصغير باستخدام hash table بفهرسة مباشرة. #99275 (Hechem Selmi).
  • تسريع الاستعلامات غير المتصلة لأعمدة LowCardinality ذات Dictionary واحد. #99285 (Ivan Babrou).
  • تسريع الدالتين 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).
  • تفعيل تحسينات تستند إلى أقسام الرابط (-ffunction-sections, -fdata-sections, --icf=all) لتقليل حجم binary وتحسين الاستفادة من ذاكرة cache الخاصة بالتعليمات. #99474 (Alexey Milovidov).
  • إصلاح التوسع السلبي للاستعلامات القصيرة التي تتضمن التجميع على الأجهزة ذات العدد الكبير من الأنوية. فعندما يقرأ الاستعلام عددًا قليلًا من العلامات، لم يعد خط المعالجة يتوسع إلى max_threads بعد التجميع، مما يتجنب الأعباء الإضافية الناتجة عن تدفقات شبه فارغة. #99493 (Alexey Milovidov).
  • تحسين أداء الاستعلامات التي تستخدم النسخ المتماثلة المتوازية عبر اختيار حجم مهمة القراءة على نحو صحيح. #99801 (Nikita Taranov).
  • السماح بالاستباق في الجلب عند قراءة ملف بعيد عبر ذاكرة تخزين الصفحات المؤقتة في فضاء المستخدم. #99919 (Alexey Milovidov).
  • تجنب الحساب غير الضروري للعمود الفرعي .size من النوع String أثناء تعداد الأعمدة الفرعية. #99941 (Pavel Kruglov).
  • جعل شريط التقدم في clickhouse-client أقل تذبذبًا عند العمل من فندق مع clusters تضم عددًا كبيرًا جدًا من replicas. #100145 (Alexey Milovidov).
  • تشغيل MemoryWorker في clickhouse-local عند تفعيل page cache، بحيث يمكن استخدام userspace page cache فعليًا. #100306 (Alexey Milovidov).
  • تحسين الاستعلامات عبر دفع clause LIMIT إلى داخل UNION ALL. #100364 (Alexey Milovidov).
  • إضافة دعم ترجمة JIT لمقارنات الأعمدة String وFixedString في ORDER BY، مما يحسن أداء الفرز في مرحلة الدمج بنسبة 6–17% لمفاتيح الفرز التي تعتمد بكثافة على السلاسل النصية. بالمشاركة في التأليف مع @lgbo-ustc. #100577 (Raúl Marín).
  • عند تفعيل read_in_order_use_virtual_row مع الإعداد الجديد read_in_order_use_virtual_row_per_block، أصبحت معلومات حدود الصفوف الافتراضية تُرسَل الآن بعد قراءة كل block من MergeTree، مما يسمح لعملية الدمج بإعادة ترتيب أولويات المصادر أثناء التدفق للأجزاء التي تُصفّى بياناتها بالكامل بواسطة WHERE/PREWHERE/JOIN. يُغلق #99945. #100603 (Vladimir Cherkasov).
  • تسريع تحويل Float إلى String للقيم الصحيحة الكبيرة عبر توسيع المسار السريع itoa مع تقريب متوافق مع dragonbox. #100649 (Raúl Marín).
  • استبدال dragonbox بـ zmij للحصول على تحويل Float إلى String أسرع بمقدار 1.5x-3x. #100650 (Raúl Marín).
  • تسريع تحويل Int128/UInt128 إلى سلسلة نصية عبر استبدال القسمة البرمجية باختزال Barrett وفكّ تكرار حلقة التحويل. #100671 (Raúl Marín).
  • تجنب إنشاء threads زائدة في الدمج المتوازي لـ uniqExact. #100686 (Jiebin Sun).
  • إضافة دمج متوازٍ على دفعات لـ uniqExact. #100687 (Jiebin Sun).
  • تحسين التوازي في الاستعلامات ذات views البسيطة (مع table أساسية من MergeTree) التي تُنفذ باستخدام parallel replicas. #100815 (Igor Nikonov).
  • يضيف دعم parallel replicas عبر views البسيطة (بما في ذلك عروض UNION ALL المؤهلة فوق جداول MergeTree) عند تعيين parallel_replicas_allow_view_over_mergetree=1. ويتيح ذلك تنفيذ الاستعلام الخارجي للـ view بالتوازي بدلًا من الاستعلام الداخلي، مما يزيد من مستوى التوازي في الاستعلامات عبر العقد. #100958 (Igor Nikonov).
  • تحسين القراءة وفق ترتيب primary key في full_sorting_merge عند وجود عوامل تصفية تتضمن IN في query plan. #101261 (Nikita Taranov).
  • تحسين allocations/deallocations عبر تخزين إعدادات sampling مؤقتًا بدلًا من اجتياز كامل التسلسل الهرمي لـ memory tracker. #101267 (Azat Khuzhin).
  • إصلاح تراجع كبير في أداء INSERT عندما يكون deduplicate_insert = 'enable' (وهو الإعداد الافتراضي منذ 26.2)، وذلك عبر تأجيل حساب hash البيانات من squashing إلى جهة المصب، واستخدام تجزئة دفعية للأعمدة عبر updateHashWithValueRange، مما يقلّل الحمل الإضافي من نحو ~2.5s إلى ~0.5s لـ 5M صفوف مع 22 عمودًا. #101494 (Sema Checherinda).
  • تقليل الحمل الإضافي لأقفال التحليل باستخدام try_lock لتجنّب احتساب زمن عمليات الاستحواذ غير المتنازع عليها، مع إزالة قياس مدة الاحتفاظ بالقفل. #101502 (Antonio Andelic).
  • استبدال تعليمات AVX-512 المضمنة المكتوبة يدويًا في arrayDotProduct بحلقات مستقلة عن المنصة قابلة للتوجيه التلقائي، مع إضافة دعم AVX2 وARM NEON. #101571 (Peng).
  • تحسين الأداء في INSERT VALUES لأعمدة Map وArray وTuple عند تمرير القيم كسلاسل نصية مُهربة (مثل '{\'key\':1}')، مع تجنّب الرجوع غير الضروري إلى parser تعبيرات SQL. #102119 (Joanna Hulboj).
  • إصلاح الاستخدام المفرط للمعالج من قِبل table engineRabbitMQ. #102711 (Jaap Elst).
  • أصبح مُحسِّن join order الآن يستنتج predicates مساواة انتقالية من شروط join الحالية. فعلى سبيل المثال، عند وجود A.x = B.x AND B.x = C.x، يتعرّف على التكافؤ A.x = C.x، مما يتيح للمُحسِّن النظر في عمليات join مباشرة بين الجداول المرتبطة انتقاليًا. ويمكن أن يحسّن ذلك جودة plan في schemas النجمية وندفة الثلج، حيث ترتبط جداول الأبعاد عبر جدول وقائع مشترك. وتتحكم في هذه الميزة setting الجديدة enable_join_transitive_predicates (وهي معطلة افتراضيًا). #98479 (Alexander Gololobov).
  • تحسين TRUNCATE DATABASE TABLES LIKE عبر الإلغاء المسبق لعمليات merges بالتوازي. #98597 (Shaohua Wang).
  • إضافة دعم الرتابة لعملية الضرب، مما يتيح pruning باستخدام primary key لتعبيرات key * constant. #98983 (Amos Bird).
  • لم تعد cache dictionaries تأخذ قفلًا exclusive في hasKeys؛ مما يقلّل التزاحم على الأقفال باستخدام قفل مشترك لقراءات cache. #100796 (liuguangliang).
  • تضمين subquery الخاصة بـ VIEW داخل query tree لإتاحة تطبيق المزيد من التحسينات على VIEW. #100830 (Dmitry Novik).
  • تحسين loading الخاصة بـ cache عند بدء تشغيل الخادم. #101500 (Kseniia Sumarokova).
  • تطبيق التجسيد المادي الكسول للأعمدة في ReplacingMergeTree مع FINAL عندما يكون الشرط انتقائيًا بما يكفي. #101647 (Nikolai Kochetov).
  • إعادة تمكين التحسين optimize_rewrite_array_exists_to_has (وهو معطّل افتراضيًا منذ 23.10). فهو يعيد كتابة arrayExists(x -> x = elem, arr) إلى has(arr, elem) الأسرع بكثير، ويتجاوز الآن إعادة الكتابة على نحو صحيح عندما لا يكون نوع عنصر المصفوفة وelem متوافقين مع has (مثل Date مقابل String)، بحيث تواصل الاستعلامات التي كانت تتعطل سابقًا العمل. يُغلق #71431. #100944 (Alexey Milovidov).

تحسينات

  • تحسين مخرجات EXPLAIN PLAN pretty=1: طباعة أعمدة مخرجات الاستعلام ذي المستوى الأعلى، وإظهار تسميات/رموز علاقة join مع عدد الصفوف التقديري للنتيجة والمحلية، وتضمين أعمدة المخرجات لكل خطوة في خطوات join/source. تغطي هذه التغييرات جزء Information Deficit من #98117. #99462 (Kirill Kopnev).
  • إضافة إعداد لجدول MergeTree باسم share_nested_offsets (القيمة الافتراضية true). عند ضبطه على false، تُعامل أعمدة Array ذات الأسماء المنقطة (مثل n.a وn.b) على أنها أعمدة مستقلة بدلاً من مشاركة ملفات offsets والتحقق من تساوي أحجام المصفوفات كجزء من دلالات Nested القديمة. #98416 (Amos Bird).
  • يمكن للمستخدمين الآن تحديد عدة authentication methods في إعداد users.xml/yaml (وكان ذلك ممكناً دائماً في SQL). #91998 (Flip-Liquid).
  • إعادة تحميل اتصالات Raft بين العقد التي تستخدم TLS تلقائياً. #93455 (Evgeny).
  • توسيع cast_keep_nullable ليعمل مع النوعين Dynamic/JSON. عند تفعيله، فإن تحويل NULL من الأنواع التي يمكن أن تكون Nullable سيُرجع NULL، وإلا فسيتسبب NULL في الخطأ CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN. #96504 (Seva Potapov).
  • تقليل استهلاك الذاكرة لهياكل البيانات الداخلية (ISerialization objects) عبر إدخال مجمّع كائنات. #96563 (Nikita Mikhaylov).
  • إضافة دعم للحقلين password وidentity في إعداد XML الخاص بـ keeper-client. #96800 (Grigorii Sokolik).
  • تحسين عمليات الكتابة إلى Iceberg لـ Unity Catalog. #98162 (Konstantin Vedernikov).
  • إضافة الإعداد finalize_projection_parts_synchronously للسماح بإنهاء projection parts بشكل متزامن أثناء INSERT، ما يقلل peak memory usage للجداول التي تحتوي على projections كثيرة مع الحفاظ على السلوك غير المتزامن الحالي افتراضياً. #98228 (Amos Bird).
  • إضافة العمود projections_duration_ms إلى system.part_log لتسجيل مدة merge/rebuild لكل projection بالمللي ثانية. #98292 (Amos Bird).
  • تحسين إلغاء queries التي تستخدم ExpressionTransform وNumbersRangedSource عبر KILL QUERY وإلغاء query (Ctrl+C) في clickhouse-client. #98908 (Roman Vasin).
  • استبدال قائمة source_table_engines المرمّزة مسبقاً ببحث وقت التشغيل عبر StorageFactory::getAllStorages(). يضيف هذا عمليات تحقق من الوصول لبعض table engines غير المشمولة، ويغلق #71544. #98984 (pufit).
  • إضافة إعداد للتحكم في سلوك عدم تطابق النوع لـ Variant وDynamic (throw أو إرجاع null). #99085 (Bharat Nallan).
  • تحسين التوافق بين Iceberg وSpark: إصلاح التعامل غير المتسق مع المسارات الناتج عن المزج بين مسارات التخزين ومسارات البيانات الوصفية؛ وفرض أن تسجّل جداول Iceberg موقع الجدول على هيئة عنوان URL أو مسار مطلق؛ وإضافة آلية fallback لحساب أحجام الملفات في Azure لأن بعض قارئات ClickHouse لا تدعم عدّ البايتات بعد الاجتياز؛ ومعالجة version-hint.txt بطريقة متوافقة مع Spark؛ وإدخال تجريدات على مستوى الأنواع تجعل الخلط بين أنواع المسارات أصعب مستقبلًا؛ وإضافة اختبارات لـ Azure وLocal تتحقق من قابلية التشغيل البيني بين المحركات من دون تحميل/تنزيل وسيط؛ وإصلاح استخدام عمليات الحذف الموضعي، التي كانت تعتمد سابقًا على استدلالات استنتاج المسار في مواضع لا يكون فيها هذا النهج مناسبًا. #99163 (Daniil Ivanik). #100420 (Daniil Ivanik).
  • إصلاح احتمال حدوث race condition في IPartitionStrategy::cached_result، والذي أُدخل في https://github.com/ClickHouse/ClickHouse/pull/92844. #99400 (Arthur Passos).
  • يمكن للمستخدمين الآن كتابة أنواع بيانات Interval في ClickHouse بتنسيق Arrow. #99519 (Peter Nguyen).
  • إضافة دعم native لاستيراد أنواع بيانات UUID وتصديرها بتنسيقات Arrow وParquet. يمكن للمستخدمين الآن الاستعلام مباشرةً عن بيانات UUID ونقلها بين ClickHouse وأدوات البيانات الأخرى من دون الحاجة إلى تحويلها يدويًا إلى سلاسل نصية أو استخدام حلول بديلة. كما أُضيف استدلال منطقي تلقائي لعناصر UUID ذات المستوى الأعلى، ودعم لتلميح مخطط صريح لعناصر UUID المتداخلة. #99521 (Ivan).
  • دعم أرشيفات 7z على object storage. يُغلق #70968. #99600 (Alexey Milovidov).
  • إضافة أحداث ProfileEvents ‏ObjectStorageListedObjects وObjectStorageGlobFilteredObjects وObjectStoragePredicateFilteredObjects وObjectStorageReadObjects لأغراض introspection لخط أنابيب سرد الملفات وقراءتها في object storage (S3 وAzure وغيرهما). #99778 (Sema Checherinda).
  • إصلاح فشل table function ‏merge مع الخطأ UNKNOWN_IDENTIFIER عند الاستعلام عن أعمدة غير موجودة في جميع الجداول الموزعة/البعيدة الأساسية. #99833 (Alexey Milovidov).
  • نضمّن الآن وقت commit في metric الإجمالي لوقت تنفيذ mutation في ReplicatedMergeTree. كان هذا الوقت مفقودًا بعد #96376. #99936 (alesapin).
  • إضافة سجل كتابة مسبقة للكائنات الثنائية الكبيرة (blob) المعلقة للإزالة في MetadataStorageFromDisk، مما يحسّن المتانة والاتساق بين البيانات الوصفية وobject storage البعيد عند حذف الكائنات. #100019 (Maksim Kita).
  • تعطيل AI SQL generation (الأمر ??) في العميل embedded (بروتوكولا SSH وWebSocket) لمنع الوصول إلى متغيرات بيئة الخادم. #100290 (Alexey Milovidov).
  • تغيير الواجهة الخاصة بعمليات insert في Iceberg مع catalog. وإهمال الإعدادات التالية: storage_catalog_type وstorage_aws_access_key_id وغيرها. #100334 (Konstantin Vedernikov).
  • اعرض علامات الجدولة على شكل 4 مسافات عند اللصق في clickhouse-client. يُغلق #100405. #100416 (Raúl Marín).
  • تجنّب فحص كتالوج بحيرة البيانات البعيد بالكامل بحثًا عن تلميحات الجداول “Maybe you meant …” عندما يكون show_data_lake_catalogs_in_system_tables معطّلًا. #100452 (Alsu Giliazova).
  • طبّق distributed_index_analysis_min_indexes_bytes_to_activate بعد تقليم الأقسام. #100477 (Azat Khuzhin).
  • أصلِح فشل التحقّق في push down لمرشح bloom في Parquet عند استخدام عبارات IN/NOT IN الفارغة. #100543 (zoomxi).
  • أصبحت إحصاءات الأعمدة MinMax تخزّن القيمتَين الصغرى والكبرى على هيئة Field (مُحدَّد النوع) بدلًا من Float64. ويتضمن التنسيق المُسلسل اسم نوع العمود إلى جانب القيم. كما رُفع إصدار ملف الإحصاءات إلى V2؛ وتستلزم الملفات المكتوبة بإصدارات أقدم إعادة materialization ‏(ALTER TABLE … MATERIALIZE STATISTICS ALL). إصلاح #53140. #100605 (Han Fei).
  • حدّث cppkafka ليتضمن إصلاحًا لحالة deadlock عند إغلاق Consumer. #100612 (Azat Khuzhin).
  • تحتوي معلومات الكائن المستخدمة في parsing لملفات البيانات في Iceberg الآن على عدد صفوف الملف وحجم الملف بالبايت، بعد parsing لهما من manifest file. #100645 (Daniil Ivanik).
  • أضف معلمة التهيئة use_separate_cache_arena لإتاحة التحكم في فصل Arena الخاصة بذاكرة cache. #100664 (Seva Potapov).
  • يضيف دعمًا أصليًا لاستيراد نوعَي البيانات StringView وBinaryView من Apache Arrow إلى أعمدة String في ClickHouse، مما يحسّن التوافق مع ingestion المعتمد على Arrow. #100762 (Ivan).
  • أصبحت بعض server settings في Keeper تُعاد تحميلها ديناميكيًا إذا تغيّر config file أثناء runtime: max_requests_batch_size, max_requests_batch_bytes_size, max_request_size, quorum_reads. #100773 (Michael Kolupaev).
  • زِد profile events ‏MemoryAllocatedWithoutCheck/MemoryAllocatedWithoutCheckBytes في إصدار release. #100899 (Pavel Kruglov).
  • يستبعد تتبّع الذاكرة في Cgroupv2 الآن slab_reclaimable من ذاكرة النواة، مما يوفّر قياسًا أدق لاستخدام الذاكرة غير القابلة للاسترداد. #100901 (Antonio Andelic).
  • يعطّل use_partition_pruning = 0 الآن أيضًا تقليم فهرس MinMax وتحسين العد على أعمدة مفتاح partition، بالإضافة إلى تعطيل التقليم المستند إلى مفاتيح partition. #100904 (Nihal Z. Miaji).
  • يطبع pretty=1 في EXPLAIN [PLAN] الآن expressions بصيغة سهلة القراءة. #100927 (Kirill Kopnev).
  • يدعم accurateCastOrNull وaccurateCastOrDefault الآن أنواع الهدف Tuple، بما في ذلك Tuples المتداخلة التي تحتوي على عناصر Nullable. في السابق، كانت هذه الدوال ترفض أهداف Tuple لأن Tuple لم يكن مدعومًا داخل Nullable. إغلاق #100820. #100942 (Nihal Z. Miaji).
  • إصلاح تكرار المخططات في واجهة Play عند التبديل بين المظهرين الفاتح والداكن. #101058 (Alexey Milovidov).
  • تحديث chdig إلى v26.3.1 (واجهة perfetto، ومخططات sparklines في الملخص لـ CPU/Memory/Merges/Queries، وsystem.warnings، والبحث باستخدام regexp في السجلات). #101092 (Azat Khuzhin). وتحديث chdig إلى v26.4.3 (تحسينات perfetto، وإصلاحات للمشاركة عبر pastila.nl، وفروقات flamegraph، وتغيير الإعدادات آنيًا). #103145 (Azat Khuzhin).
  • يمكنك الآن وضع فاصلة ختامية في clause WITH قبل query SELECT. #101093 (Aruj Bansal).
  • إضافة MergeTree setting ‏compress_per_column_in_compact_parts للتحكم في كيفية تنظيم blocks المضغوطة داخل compact parts. عندما تكون قيمته true (وهي القيمة الافتراضية، مع الحفاظ على السلوك الحالي)، يبدأ كل column block مضغوطة جديدة، مما يتيح فك الضغط انتقائيًا. وعندما تكون قيمته false، تُحزم جميع columns داخل granule في block مضغوطة واحدة، مما يحسن compression ratio وأداء القراءة في workloads التي تقرأ جميع columns دائمًا. #101114 (Amos Bird).
  • عرض نافذة معلومات الجدول في واجهة Play فقط عند تمرير المؤشر فوق اسم الجدول، وليس فوق الصف بأكمله. #101118 (Alexey Milovidov).
  • إضافة أيقونات خاصة بكل engine وتحسين تجربة استخدام قائمة الجداول في الشريط الجانبي لواجهة Play. #101134 (Alexey Milovidov).
  • دعم Nullable(Tuple) في formats ‏Arrow وArrowStream وORC وParquet القديمة. #101272 (Nihal Z. Miaji).
  • عرض صف TOTALS كتذييل للجدول في web UI ‏(play.html). #101286 (Alexey Milovidov).
  • دعم وضع الاستعلامات المتعددة في web UI ‏(play.html): تشغيل عدة queries دفعة واحدة مع تنفيذ متوازٍ للاستعلامات الشبيهة بـ SELECT، وعرض نتائج كل query على حدة. #101290 (Alexey Milovidov).
  • إصلاح تغيير حجم columns في web UI ‏play.html بعد إعادة هيكلة result table إلى مكوّن ويب. #101295 (Alexey Milovidov).
  • إضافة إمكانية تقييد عدد عمليات flushes لملف profile الخاص بـ jemalloc عند MEMORY_LIMIT_EXCEEDED لكل interval زمني. #101396 (Azat Khuzhin).
  • تمت إضافة إعدادات Keeper ‏nuraft_streaming_mode (القيمة الافتراضية false) وnuraft_max_log_gap_in_stream وnuraft_max_bytes_in_flight_in_stream. يُغلق #90743. #101427 (Kseniia Sumarokova).
  • تمت إضافة المقياس غير المتزامن CGroupMemoryUsedWithoutPageCache الذي يبلّغ عن استخدام ذاكرة cgroup مع استبعاد كلٍّ من OS page cache الخاصة بالنواة وuserspace page cache الخاصة بـ ClickHouse، بما يماثل MemoryResidentWithoutPageCache. كما جرى توضيح وصف المقياس CGroupMemoryUsed. #101513 (Francesco Ciocchetti).
  • أُضيف تبسيط نحوي على مستوى parser لصياغة الدالة القياسية OVERLAY في SQL. الدالة overlay موجودة بالفعل؛ وتضيف هذه الميزة دعم الصيغة المعتمدة على الكلمات المفتاحية باستخدام PLACING وFROM وFOR كفواصل. #101681 (Desel72).
  • تمت إضافة اسم مستعار للعمود INDEX_LENGTH إلى جدول النظام information_schema.tables، على غرار الأسماء المستعارة الحالية المكتوبة بأحرف كبيرة في هذا الجدول. #101705 (Robert Schulze).
  • أصبح جدول النظام information_schema.tables يتجاهل الآن أجزاء الجدول غير النشطة. وهذا يجعل قيم أحجام الجداول المعروضة أكثر واقعية. #101706 (Robert Schulze).
  • أصبحت الدالة ngrams ترفض الآن أطوال ngram غير الصالحة. مثال: أصبح SELECT ngrams('abc', 0) يُرجع خطأً. #101922 (Robert Schulze).
  • متابعة لـ #91820 و#90837: تصفية الخوارزميات غير المدعومة من رسالة الخطأ؛ وتشغيل الاختبارات الخاصة بـ FIPS في بنيات FIPS. #102067 (Mikhail f. Shiryaev).
  • قَصر ارتفاع الخلية على ثلاثة أسطر في web UI ‏(play.html)، مع إتاحة توسيع الخلايا بالنقر عليها. #102154 (Alexey Milovidov).
  • تمت إضافة خيار جديد يتيح فرض نمط (virtual/path) لنقاط نهاية S3. يحل #82019 و#76007، وهو استكمال لـ https://github.com/ClickHouse/ClickHouse/pull/83168. #102378 (Konstantin Vedernikov).
  • أصبح الإعداد restore_replace_external_engines_to_null يتجاوز الآن أيضًا استعادة قواعد البيانات ذات المحركات الخارجية (مثل DataLakeCatalog وMySQL وPostgreSQL وS3) بدلًا من الفشل أو بدء اتصالات خارجية. #102400 (Nikita Fomichev).
  • إضافة دعم تحليل الفهرس النصي للدالة hasPhrase عبر وضع HINT. #102438 (Elmi Ahmadov).
  • تمت معاملة STATISTICS على أنها للقراءة فقط في ColumnDependency لإصلاح LOGICAL_ERROR أثناء MATERIALIZE STATISTICS ALL. #102627 (Konstantin Bogdanov).
  • إنشاء system.asynchronous_metric_log وتعبئته في وضع keeper-as-server. #102664 (Miсhael Stetsyuk).
  • إضافة خيار الإعداد default_system_log_flush_policy.skip_alias_columns للسماح بتجاهل أعمدة ALIAS في جداول سجلات النظام، مما يعالج مشكلة سجلات النظام المعتمدة على S3 التي ترفض أعمدة ALIAS. #102669 (Miсhael Stetsyuk).
  • لا تُمكِّن الإحصاءات التلقائية لجداول النظام، إذ نادرًا ما تستفيد منها. #102862 (Han Fei).
  • دعم المُجزِّئ array لتحسين LIKE. #102880 (Elmi Ahmadov).
  • إرسال MemoryAllocatedWithoutCheck حتى في بنيات الإصدار. #103064 (Azat Khuzhin).
  • إتاحة untracked_memory لكل خيط تنفيذ في system.stack_trace. #103065 (Azat Khuzhin).

إصلاح خطأ (خلل يمكن للمستخدم ملاحظته في إصدار مستقر رسمي)

  • إصلاح الخطأ Block structure mismatch in stream الناتج عن إرجاع أعمدة غير ضرورية بسبب Lazy materialization. يُصلح #95191. #96682 (Nikolai Kochetov).
  • إصلاح خطأ منطقي في استعلام سياسة إخفاء البيانات مع ON CLUSTER. #97594 (Bharat Nallan).
  • إصلاح خلل عند استخدام Unity catalog فوق GCS. #98456 (Melvyn Peignon).
  • أصبح DataLakeCatalog الآن يراعي إعداد http_forbid_headers في إعدادات الخادم عند التحقق من الإعداد auth_header. #98827 (Michael Anastasakis).
  • إصلاح استدعاءات HeadObject من نوع N+1 لأنماط globs ذات توسيع الأقواس في S3. #99219 (Konstantin Bogdanov).
  • التحقق من تغييرات الإعدادات في استعلامات CREATE عندما يكون المحرّك نفسه يدعم الإعدادات أيضًا. #99279 (János Benjamin Antal).
  • إصلاح فشل ALTER TABLE UPDATE/DELETE مع الخطأ Missing columns عندما يحتوي جدول على عمود MATERIALIZED يعتمد تعبيره على عمود EPHEMERAL. #99281 (Yash ).
  • أصبحت بيانات الاعتماد في سلاسل اتصال JDBC وODBC وNATS تُحجب الآن في سجلات الاستعلامات ومخرجات SHOW CREATE، مما يمنع الكشف غير المقصود عن المعلومات الحساسة. وبالنسبة إلى سلاسل الاتصال بصيغة URI (مثل {scheme}://{user}:{password}@{host})، لا يُحجب سوى جزء كلمة المرور، بينما يبقى الباقي مرئيًا لتسهيل استكشاف الأخطاء وإصلاحها. كما أصبح الإعداد nats_token يُحجب الآن أيضًا. #99344 (János Benjamin Antal).
  • إصلاح قيام parseDateTimeBestEffort بتحليل كلمات تبدأ ببادئات أسماء الأشهر بشكل غير صحيح في التنسيق DD-month-YYYY. يُغلق #99345. #99350 (Pavel Kruglov).
  • إصلاح تجاهل TABLE_UUID_MISMATCH عند عدم استخدام analyzer. #99380 (Azat Khuzhin).
  • إصلاح خلل كان يؤدي إلى تجاهل الإعدادات الصريحة المرسلة إلى جانب compatibility في الطلب نفسه بصمت إذا كانت قيمتها تطابق القيمة default على الخادم. #99402 (Raufs Dunamalijevs).
  • إصلاح الحالات التي كانت فيها الأرقام ذات الأصفار البادئة في مسار hive partitioning تتسبب في أخطاء. يُصلح #98801. #99458 (Yarik Briukhovetskyi).
  • إصلاح heap-use-after-free عند حذف جدول بالتزامن مع استعلام قراءة قيد التشغيل (19 حالة في CI خلال آخر 90 يومًا). #99483 (Alexey Milovidov).
  • إصلاح خلل في Keeper حيث كان من الممكن أن يعلق read request (مما يؤدي إلى انتهاء مهلة session) إذا أُغلقت session أخرى غير مرتبطة على الخادم نفسه في توقيت غير مناسب تمامًا. #99484 (Michael Kolupaev).
  • التحقّق من بنية العمود قبل تطبيق التصحيحات. #99531 (Seva Potapov).
  • إصلاح فشل التحقّق rows_sources في الدمج العمودي عند التبديل السريع بين SYSTEM STOP/START MERGES أثناء دمج جدول يحتوي على أعمدة Dynamic. #99532 (Alexey Milovidov).
  • إصلاح تشذيب الأقسام غير الصحيح للدالة toWeek()، الذي كان يتسبب في أن تُرجع الاستعلامات التي تحتوي على WHERE toWeek(date, mode) = N نتائج فارغة للأسابيع 49–52 في الجداول المُقسّمة باستخدام toYYYYMM(date). #99542 (Takumi Hara).
  • إصلاح استثناء في الدوال التي تعمل على ColumnReplicated مع صفوف غير مُشار إليها ناتجة عن JOIN. #99564 (Hechem Selmi).
  • إصلاح عدم قيام CLEAR COLUMN بإعادة بناء projections، وعدم إعادة تقييم materialized columns التي تعتمد على العمود الذي جرت إزالته، مما قد يسبب استثناءات أو تلفًا في البيانات أثناء عمليات الدمج اللاحقة. #99565 (Desel72).
  • إصلاح استثناء (Bad get: has Tuple, actual type String) في ConditionSelectivityEstimator عندما يستخدم استعلام عامل IN مع query parameter قياسي واحد (مثل WHERE col IN ({p:String})) على جدول يحتوي على column statistics ويكون use_statistics مفعّلًا. #99614 (Ilya Yatsishin).
  • يجب ألّا يُوسَم الجزء الذي يحتوي على projections غير معروفة بأنه مفقود نهائيًا. #99623 (Sema Checherinda).
  • إصلاح استثناء logical error نادر أثناء الدمج العمودي عند تنفيذ SYSTEM STOP MERGES وSYSTEM START MERGES بالتوازي. #99628 (Desel72).
  • إصلاح مرجع متدلٍّ في injectRequiredColumns كان يتسبب في تعطل أثناء الدمج. #99679 (Tuan Pham Anh).
  • إصلاح سلوك غير معرّف في قارئ Avro format عند قراءة numeric values تتجاوز سعة column type الهدف. وأصبحت الاستعلامات الآن تفشل عند حدوث overflow بدلًا من إنتاج قيم غير صحيحة بصمت. #99697 (asyablue22).
  • إصلاح تحليل علامات الاقتباس بأسلوب shell في arguments الخاصة بـ executable table function. #99794 (Nikita Semenov).
  • إصلاح إيقاف خاطئ في NativeReader عند deserialization لتدفق Native format مع عدم تطابق عدد الصفوف: جرى تغييره من LOGICAL_ERROR إلى INCORRECT_DATA بحيث يُعالَج الخطأ على أنه خطأ بيانات بدلًا من تشغيل abort() في builds الخاصة بـ sanitizer/debug. #99822 (Rahul Nair).
  • إصلاح إنهاء العملية أثناء deserialization لعمود Tuple عندما يكون نوع serialization في التدفق binary هو DETACHED. #99823 (Rahul Nair).
  • إصلاح استثناء LOGICAL_ERROR زائف أثناء تغيير حجم filesystem cache ديناميكيًا بسبب race condition في ترقية الطابور الفرعي SLRU. #99850 (Alexey Milovidov).
  • إصلاح إبلاغ استعلامات async insert عن written_rows وread_rows وresult_rows على أنها صفر في query_log ومخرجات العميل. #99879 (Sema Checherinda).
  • إصلاح الاستثناء “Bad cast from type X to Y” في KILL QUERY عندما يُرجع الاستعلام الداخلي على جداول النظام أعمدةً مغلّفةً في ColumnConst. #99881 (Alexey Milovidov).
  • إصلاح خطأ منطقي في استعلام فرعي مترابط داخل وسيطة untuple. #99917 (Vladimir Cherkasov).
  • إصلاح استثناء عند استدعاء right أو rightUTF8 أو دوال substring أخرى بطول INT64_MIN (-9223372036854775808)، إذ كان ذلك يؤدي سابقًا إلى سلوك غير معرّف بسبب فيض عددي. تُبلّغ الدوال الآن بشكل صحيح عن الخطأ ARGUMENT_OUT_OF_BOUND. #99934 (Jimmy Aguilar Mena).
  • أصبح ClickHouse الآن يتعامل بشكل صحيح مع الجداول بأسلوب Spark (حيث يكون لدينا مسار مطلق كامل لكل ملف أو مسار نسبي إلى مسار الجدول المشترك). يُصلح #92348. #99935 (alesapin).
  • إصلاح الاستثناء “Inconsistent AST formatting” في ALTER TABLE ... MODIFY QUERY مع استعلامات فرعية متداخلة تحتوي على SETTINGS عندما يحتوي ALTER نفسه أيضًا على SETTINGS. #99938 (Nikita Mikhaylov).
  • التراجع عن #97114 “Move join step row estimation before check for 1 child” بسبب الاشتباه في تراجع الأداء. #99957 (Alexander Gololobov).
  • إصلاح خلل كان قد يؤدي إلى تخطي ClickHouse لبعض الملفات إذا كان ترويس Content-Length مفقودًا من استجابة طلب HEAD الخاص بها (على سبيل المثال، بسبب decompressive transcoding في GCS). #99971 (Yarik Briukhovetskyi).
  • إصلاح فشل assertion (استثناء في debug builds، ونتائج غير صحيحة في release builds) عند ضرب حالات التجميع aggregate states الخاصة بـ NumericIndexedVector في ثابت صحيح زوجي، وكان السبب self-XOR على bitmaps من نوع Roaring ذات alias في pointwiseAddInplace. #99976 (Desel72).
  • منع استثناء Unexpected return type في filter pushdown القديم عبر JOIN USING متسلسل عندما تتغير أنواع المفاتيح بعد تحويلات join. #99999 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR “Unexpected node type for table expression … Actual IDENTIFIER” عندما يُستخدم استعلام فرعي scalar داخل وسيطة غير محلولة لدالة جدول، مثل SELECT * FROM remote('localhost', view(SELECT 2 AS x), concat(x, (SELECT 1))). #100014 (Alexey Milovidov).
  • إصلاح فشل INSERT مع VALUES عندما كانت البيانات متبوعةً بتعليق SQL ختامي (-- أو /* */) في السطر التالي. يُتجاوز التعليق الآن بدلًا من تحليله على أنه صف آخر. #100016 (Pratima Patel).
  • إصلاح استثناء في arrayRemove عند مقارنة قيم tuple ذات مكونات NULL. #100017 (Alexey Milovidov).
  • إصلاح تسرّب البيانات بين المستخدمين في system.asynchronous_inserts: كان بإمكان أي مستخدم لديه صلاحية SELECT على الجدول رؤية إدخالات async insert المعلّقة الخاصة بمستخدمين آخرين. تُصفّى الإدخالات الآن بحسب المستخدم الحالي، ما لم يكن لدى المستخدم امتياز SHOW_USERS. #100024 (Shaohua Wang).
  • إصلاح حالة كان فيها التحويل من Time64 إلى UInt64 يقيّد القيم عند 24 ساعة. #100025 (Yarik Briukhovetskyi).
  • إصلاح تعطل الخادم المحلي عندما يحتوي CREATE DICTIONARY على تعريف بقيمة قائمة تتضمن دالة غير موجودة. #100036 (Yakov Olkhovskiy).
  • إصلاح عدم قدرة التنسيقين CSV وMsgPack على تحليل Nullable(Tuple) بشكل صحيح. يغلق #99753. #100038 (Nihal Z. Miaji).
  • إصلاح فشل CREATE VIEW مع UNKNOWN_IDENTIFIER عند استخدام اسم مستعار لتعبير دالة في WITH (مثل tuple(...)) كطرف أيمن لـ IN. #100042 (Peng).
  • إصلاح فشل aggregate functions الخاصة بالسلاسل الزمنية (مثل timeSeriesResampleToGridWithStaleness) مع ILLEGAL_TYPE_OF_ARGUMENT عند استخدامها مع initializeAggregation أو AggregatingMergeTree في وضع parallel replicas. #100053 (Alexey Milovidov).
  • تصحيح معالجة القيم السالبة داخل NumericIndexedVectorDataBSI. #100086 (Daniil Ivanik).
  • إصلاح عدم احتفاظ الدالتين accurateCastOrDefault وto*OrDefault بنوع العمود Const للمدخلات الثابتة. #100132 (Alexey Milovidov).
  • أصبحت query parameters المحذوفة من النوع LowCardinality(Nullable(T)) تأخذ القيمة الافتراضية NULL بشكل صحيح، تمامًا مثل Nullable(T). #100144 (Denys Melnyk).
  • إصلاح استخدام قيمة غير مهيّأة في StringSearcher.h. #100225 (Konstantin Bogdanov).
  • السماح بإلغاء الاستعلامات الفرعية scalar وpipelines الأخرى أثناء التحليل عبر Ctrl+C. سابقًا، لم يكن للضغط على Ctrl+C أثناء تنفيذ استعلام فرعي scalar طويل التشغيل أي تأثير حتى يكتمل الاستعلام الفرعي. كما تم إصلاح شريط التقدم وإحصاءات JSON لكي يبلّغا بشكل صحيح عن الصفوف المقروءة أثناء تنفيذ الاستعلام الفرعي scalar، سواء في clickhouse-client أو clickhouse-local. بالمشاركة في التأليف مع @YjyJeff. #100230 (Raúl Marín).
  • إصلاح استثناء LOGICAL_ERROR في queries التي تتضمن أعمدة Dynamic مع عمليات CROSS JOIN وRuntime Filters، وكان السبب أن ColumnVariant::filter كان يشارك مؤشرات variant column بدلًا من استنساخها في مسار تحسين hasOnlyNulls. يغلق https://github.com/ClickHouse/ClickHouse/pull/100147. #100234 (Pavel Kruglov).
  • إصلاح خلل في Array من النوع variant قد يعيد تفسير نوع البيانات عند استدعاء الدالة arrayFirst/arrayLast. على سبيل المثال، كان Array(Variant(Date, Bool)) يتحول سابقًا إلى Bool عندما يكون variant type الأساسي الفعلي هو Date. #100255 (timothygk).
  • بعض التغييرات الطفيفة على الدوال: أصبحت دوال h3 تتحقق من الحدود بشكل أفضل؛ وأصبحت readWKB تتحقق من حدود الحجم (إعداد جديد، max_wkb_geometry_elements)؛ كما أصبحت دوال التوليد العشوائي تقيّد الحد الأقصى لعدد التكرارات في حساباتها. متابعة لـ #93543. #100270 (Alexey Milovidov).
  • إصلاح مشكلة كانت تؤدي فيها cutURLParameter إلى تخطي المعلمات بشكل غير صحيح عندما تظهر كسلاسل فرعية ضمن معلمات أخرى. #100280 (Nikita Semenov).
  • إصلاح استثناء عند احتواء إعداد مسار ملف metadata في Iceberg على null byte. #100283 (Alexey Milovidov).
  • إصلاح الزيادة التربيعية في عدد الاستعلامات المنفذة عند استخدام distributed_index_analysis مع predicates تحتوي على استعلامات فرعية IN. #100287 (Anton Popov).
  • إصلاح استثناء “Block structure mismatch” عند استخدام GROUP BY ... WITH TOTALS HAVING مع UNION DISTINCT وتعبيرات Nullable. #100293 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR في estimateCompressionRatio عندما تكون المعلمة block_size_bytes كبيرة جدًا. #100298 (Alexey Milovidov).
  • إصلاح استثناء “Inconsistent AST formatting” في builds التصحيح عند استخدام GROUP BY CUBE(...) WITH ROLLUP أو تركيبات مشابهة. #100376 (Alexey Milovidov).
  • إصلاح استثناء عند إنشاء view بأسماء alias للأعمدة مع SELECT * أو استعلامات EXCEPT/INTERSECT. #100386 (Alexey Milovidov).
  • إصلاح تعليق DROP TABLE إلى أجل غير مسمى على جداول Kafka engine عندما يعلق المستهلكون في عملية rebalance بعد خطأ heartbeat. #100388 (Alexey Milovidov).
  • إصلاح استثناء ReadBuffer is canceled. Can't read from it. في عمليات النسخ الاحتياطي/الاستعادة التي تستخدم أرشيفات zip. #100400 (Alexey Milovidov).
  • إصلاح استثناء TOO_MANY_ROWS في استعلامات SELECT count() مع max_rows_to_read / force_primary_key عندما تكون البيانات موزعة على عدة parts ذات حدود granule غير متطابقة. #100408 (Alexey Milovidov).
  • إصلاح system.completions ليُرشِّح databases وtables وcolumns بشكل صحيح حسب access rights في جميع تركيبات grant: grant لكل table، ولكل DB، وrevoke لكل column. #100432 (Shaohua Wang).
  • إصلاح SEGFAULT في NuRaft بسبب race condition. #100444 (Pablo Marcos).
  • أصبحت min/max/argMin/argMax الآن تتعامل مع NaN بشكل متسق مع ORDER BY: يُتخطى NaN دائمًا (ولا يُعاد إلا إذا كانت جميع القيم NaN). سابقًا، كانت النتائج تعتمد على موضع NaN في البيانات بسبب دلالات المقارنة غير المرتبة في IEEE 754. #100448 (Raúl Marín).
  • أُصلح خلل ناتج عن النسخ واللصق، إذ كان يتم تجاهل delta_lake_snapshot_end_version بصمت عند ضبطه بدون delta_lake_snapshot_start_version بدلًا من إصدار الخطأ BAD_ARGUMENTS. #100454 (Mohammad Lareb Zafar).
  • إن StorageRabbitMQ::shutdown ليس idempotent (إذ يصل دائمًا إلى المؤشرات الضعيفة ثم يدمّر المؤشرات المشتركة المقابلة)، لكنه بات يُستدعى الآن مرتين: مرة في StreamingStorageRegistry ثم في DatabaseCatalog. يجعل هذا الإصلاح الأسلوب idempotent ويضيف تحققات دفاعية من القيم الفارغة. #100455 (Miсhael Stetsyuk).
  • أُصلح استثناء LOGICAL_ERROR عند استخدام accurateCastOrNull مع النوع الهدف QBit. #100470 (Raufs Dunamalijevs).
  • أُصلح استثناء LOGICAL_ERROR “Stream … not found” عند الإدراج في جدول يحتوي على أعمدة Array(JSON) متداخلة ضمن wide parts مع optimize_on_insert=0. #100475 (Pavel Kruglov).
  • أُضيف التحقق من مسارات مُدخلات الملفات في البيانات الوصفية للنسخ الاحتياطي لرفض اجتياز المسار، والمسارات المطلقة، والأسماء الفارغة أثناء RESTORE. #100483 (Pablo Marcos).
  • أُصلح عدم عمل صياغة LIMIT m OFFSET n WITH TIES. وهذه الصياغة مكافئة لـ LIMIT n, m WITH TIES التي كانت تعمل بالفعل. #100491 (Nihal Z. Miaji).
  • أُصلح الاستثناء “No set is registered for key” عند استخدام IN مع أعمدة Nullable(Tuple) التي تحتوي على حقول مسماة وعناصر LowCardinality. #100523 (Alexey Milovidov).
  • أُصلح خلل heap-buffer-overflow في usearch sorted_buffer_gt::insert() كان يمكن أن يسبب تعطلًا أو إفسادًا صامتًا للذاكرة أثناء vector similarity search. #100537 (Dustin Healy).
  • أُصلح تجاهل EXECUTE AS لعبارتي FORMAT و INTO OUTFILE المحددتين في الاستعلام. #100538 (pufit).
  • أُصلح عدم اتساق تنسيق AST لـ SAMPLE مع OFFSET على مستوى الاستعلام. يُغلق #100576. #100579 (Pavel Kruglov).
  • أُصلح Polaris catalog مع azure. فمنذ الإصدار 25.12، بدأ هذا الكتالوج مع azure بإضافة bucket في بداية المسار. على سبيل المثال: abfss://polaris-polaris@<some_url>.windows.net/polaris-polaris/<other-path> بدلًا من abfss://polaris-polaris@<some_url>.windows.net/<other-path>. يزيل طلب السحب هذا الـ bucket من المسار. #100583 (Konstantin Vedernikov).
  • أُصلح استثناء عدم تطابق النوع في التحويل عندما يكون العمود default ثابتًا في بعض blocks. يُغلق #100574. #100616 (Pavel Kruglov).
  • يُصلح حالات NOT_FOUND_COLUMN_IN_BLOCK التي يحتوي فيها جزء projection SELECT على أعمدة غير موجودة في جزء SELECT الأصلي من الاستعلام. يُغلق #100194. #100623 (Yarik Briukhovetskyi).
  • يتحقق من أبعاد shape لتنسيق Npy مقارنةً بحجم الملف وحدود overflow لمنع حجب الخدمة الناتج عن ملفات .npy مُصمَّمة بأبعاد كبيرة على نحو غير معقول. ويرفض أيضًا الأشكال الفارغة، ويضع حدًا أقصى للذاكرة لكل صف يبلغ 2 GiB. #100625 (Raúl Marín).
  • يُصلح تجاهل session_timezone عند parsing قيم DateTime أثناء async inserts ‏(TCP) وجميع عمليات insert عبر HTTP. #100647 (Sema Checherinda).
  • يتيح تمرير sharding key إلى table functions ‏cluster() وclusterAllReplicas() عند استخدام table function كمصدر (مثل cluster('name', view(...), sharding_key)). #100665 (Sergey Veletskiy).
  • يُصلح crash في server ‏(فشل assertion) عند استخدام Parametric aggregate functions مع combinator ‏Array وargument من نوع NULL، مثل quantileIfArrayArray(0.5)([[NULL]], [[1]]). #100679 (nerve-bot).
  • يُصلح Exception عند حساب common supertype لـ tuples الفارغة وغير الفارغة عند تفعيل use_variant_as_common_type. #100699 (Antonio Andelic).
  • لم يعد server يفشل في بدء التشغيل عندما يكون قرص Azure blob storage مُعدًّا لكن endpoint غير متاح مؤقتًا (مثل فشل DNS). #100701 (Raúl Marín).
  • يُصلح سلوكًا غير معرّف في positiveModulo عندما لا يتسع divisor غير الموقّع داخل نوع النتيجة الموقّع. #100705 (Raúl Marín).
  • يُصلح crash في server ‏(logical error “Unexpected return type from __topKFilter”) عند تفعيل use_top_k_dynamic_filtering وكان عمود ORDER BY من النوع Dynamic أو Variant. #100742 (Groene AI).
  • يُصلح crash في server عند استخدام الدالة has() مع PREWHERE/WHERE على مفتاح Tuple يحتوي على عناصر LowCardinality. #100760 (Groene AI).
  • يُصلح فشل assertion ‏file_offset_of_buffer_end <= getFileSize() ‏(Exception في إصدارات debug) عند القراءة من جداول Log أو StripeLog على S3 object storage مع عمليات كتابة concurrent. #100763 (Alexey Milovidov).
  • يُصلح Exception في مُقدِّر selectivity للإحصاءات عندما تحتوي WHERE clause على function expression (مثل toDecimal64(col, 3)) في table مع تفعيل statistics. ويتجاوز المُقدِّر الآن مثل هذه predicates بدلًا من محاولة إجراء type cast غير صالح. #100764 (Han Fei).
  • يُصلح حالة نادرة قد ينتج فيها join مع إعادة الترتيب نتيجة غير صحيحة. #100790 (Yarik Briukhovetskyi).
  • إصلاح أنواع الوسائط غير الصحيحة في AggregateFunction ضمن العدّ البسيط المُحسَّن، والتي كانت تتسبب في ظهور الاستثناء NUMBER_OF_ARGUMENTS_DOESNT_MATCH عند الاستعلام عن تعبيرات مثل count(v0 + v1) على الجداول الموزعة. #100794 (YjyJeff).
  • قد تعرض بعض الكتالوجات بعض البيانات السرية في قسم SETTINGS ضمن نتيجة الاستعلام select * from system.databases. يمنع هذا التغيير حدوث هذا السلوك. #100800 (Konstantin Vedernikov).
  • إصلاح سلوك غير معرّف (تجاوز السعة في الأعداد الصحيحة الموقَّعة) في toStartOfInterval عند استخدام الفواصل Week أو Quarter أو Year مع وسيطة origin وقيم فاصلة متطرفة. #100817 (Raúl Marín).
  • إصلاح مشكلة عدم قدرة مُركِّبات الدوال التجميعية If وDistinct وDistinctIf وIfState ذات نوع الإرجاع Tuple ووسيطة Nullable واحدة أو أكثر على قراءة الحالات المُسلسلة الأقدم بعد إدخال Nullable(Tuple). يغلق #98917. #100826 (Nihal Z. Miaji).
  • إصلاح segfault في s3Cluster والاستعلامات الموزعة بسبب استخدام تجمع الاتصالات بعد تحريره. #100837 (Konstantin Bogdanov).
  • إصلاح segfault الناتج عن فكّ إشارة مؤشّر فارغ عند تحميل القواميس أثناء إيقاف تشغيل الخادم. يُستدعى Context::getUserDefinedSQLObjectsStorage (الذي يفكّ إشارة user_defined_sql_objects_storage) بواسطة خيوط القواميس بالتزامن مع استدعاء الخيط الرئيسي لـ Context::shutdown (الذي يضبط user_defined_sql_objects_storage على null). نحتاج إلى التأكد من تعطيل التحديثات المستقبلية في مُحمّل القواميس، وإنهاء استعلامات القواميس الجارية حاليًا، والانتظار حتى تنتهي خيوط تحميل القواميس — وكل ذلك قبل تشغيل Context::shutdown. وهذا مماثل لما نفعله مع الاستعلامات العادية. #100839 (Miсhael Stetsyuk).
  • إصلاح تجاوز سعة المخزن المؤقت في ULIDStringToDateTime عندما يحتوي الإدخال على بايتات غير ASCII. #100843 (Konstantin Bogdanov).
  • إصلاح التعطل (LOGICAL_ERROR) عند الاستعلام عن جدول Merge (أو دالة الجدول merge()) الذي يغلّف عدة جداول، من بينها جدول Distributed، مع تفعيل distributed_group_by_no_merge=1. #100859 (Groene AI).
  • عند تفعيل Cast_keep_nullable، لن يُطلق استثناءً عند التحويل من null ديناميكي إلى Variant. #100864 (Seva Potapov).
  • إصلاح قيام أوامر get وexists وls في clickhouse-keeper-client بطباعة رسائل خطأ watch_id المكررة إلى stdout بدلًا من stderr. #100893 (Mohammad Lareb Zafar).
  • إصلاح الاستثناء في intDiv/intDivOrZero عند التعامل مع المصفوفات من tuples قابلة للإسناد إلى null، مثل SELECT intDiv([divide((1, 2), ... AND NULL)], 2). #100895 (Raúl Marín).
  • تقييم وسائط المحرك لـ StorageAlias قبل تخزين التعريف، بحيث تُحوَّل تعبيرات مثل currentDatabase() إلى قيم حرفية قبل حفظها في قاعدة البيانات. #100902 (Nikolay Degterinsky).
  • إصلاح processAndOptimizeTextIndexFunctions عندما يكون query_plan_merge_expressions = 0، حيث تكون ExpressionStep فوق ReadFromMergeTree مباشرةً. يُصلح هذا #100879. #100909 (Jimmy Aguilar Mena).
  • تحديث replxx ليتضمن إصلاحًا لمشكلة الوصول خارج الحدود في do_complete_line. #100925 (Azat Khuzhin).
  • إصلاح النتائج غير الصحيحة عندما يستخدم JOIN مع تحسين shard-by-PK ذاكرة التخزين المؤقت لشروط الاستعلام، وتُستبعَد بعض الأجزاء بسبب الشروط المخزنة مؤقتًا. #100926 (Groene AI).
  • إصلاح divide وintDiv اللتين كانتا تُرجعان ILLEGAL_DIVISION عند استخدامهما في تعبيرات التصفية أثناء تحليل الفهرس في بعض الحالات. #100928 (Nihal Z. Miaji).
  • إصلاح أخطاء “جدول الهدف غير موجود” في materialized views ذات الجداول الداخلية أثناء بدء التشغيل غير المتزامن، وكانت ناتجة عن ترتيب غير صحيح لاعتماديات بدء التشغيل. #100946 (Nikolay Degterinsky).
  • إصلاح سلوك غير معرّف (تجاوز سعة الأعداد الصحيحة الموقعة) في parseDateTimeBestEffort عند تحليل سلاسل datetime التي تحتوي على أكثر من 18 رقمًا كسريًا للثانية. #100948 (Vasily Chekalkin).
  • إصلاح تعطل عند استخدام فهرس بحث نصي مع clause IN تحتوي على subquery من نوع Tuple، مثل WHERE (id, str) IN (SELECT (id, str) FROM ...)، أو عندما لا يتطابق عدد columns في الـ subquery مع الـ Tuple على الجانب الأيسر من IN. #100959 (Anton Popov).
  • إصلاح تعطل عند بناء Dictionary من نوع Polygon من جدول MergeTree يستخدم serialization للأعمدة sparse. #100964 (Anton Popov).
  • إصلاح الخطأ المنطقي “Invalid action query tree node” عند استخدام INTERSECT ALL / UNION ALL مع expressions مطوية إلى ثوابت. #100977 (Alexey Milovidov).
  • إصلاح aggregate function sumCountOrDefault عندما يحتوي argument واحد أو أكثر على Nullable، إذ لم تكن قادرة على قراءة الحالات الأقدم التي جرت لها serialize بعد إدخال Nullable(Tuple). يُغلق هذا #100882. #101021 (Nihal Z. Miaji).
  • إصلاح تعطل (Logical error: isConst/isSparse/isReplicated assertTypeEquality) في خوارزميات merge عندما يُنتج النسخ الكسول للأعمدة (enable_lazy_columns_replication) أعمدة ColumnReplicated تتدفق إلى pipelines الفرز بالدمج مع مدخلات تصل متأخرة. #101036 (Groene AI).
  • إصلاح خطأ UNKNOWN_IDENTIFIER غير الصحيح عندما يُستخدم alias نفسه لعدة expressions في SELECT؛ ويُبلَّغ الآن عن الخطأ الصحيح MULTIPLE_EXPRESSIONS_FOR_ALIAS. #101040 (Alexey Milovidov).
  • إصلاح أعمدة ALIAS من النوعين DateTime/DateTime64 التي لم تكن تطبّق تحويل timezone عندما تختلف timezone المُعلنة عن timezone الخاصة بالتعبير. #101043 (Alexey Milovidov).
  • إصلاح عدم تسجيل سياسات الصفوف في query_log للعروض والاستعلامات الفرعية وINSERT ... SELECT. رغم تطبيق سياسات الصفوف أثناء تخطيط الاستعلام، لم تكن تُمرَّر من المخططات الفرعية إلى المخطط الأب لأغراض التسجيل. والآن تُحفَظ سياسات الصفوف (للتسجيل فقط) في QueryAccessInfo بحيث يمكن لكلٍّ من المخططات والمخططات الفرعية تعبئتها. #101044 (Narasimha Pakeer).
  • إصلاح استثناء في DirectJoinMergeTreeEntity عندما تحتوي كتل خط المعالجة على أعمدة ColumnConst مدمجة مع أعمدة عادية. #101046 (Alexey Milovidov).
  • إصلاح المسافة الزائدة في تنسيق الاسم المستعار لأعمدة 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، ما كان يؤدي إلى إرجاع عدد صفوف أقل من المتوقع. #101071 (Nihal Z. Miaji).
  • إصلاح التعطل عند استخدام تنسيق Regexp مع regular expression غير صالح في الإعداد format_regexp. #101074 (Nihal Z. Miaji).
  • إصلاح الخطأ “Illegal type Decimal64 of start parameter” في aggregate functions الخاصة بالسلاسل الزمنية عند استخدام serialize_query_plan=1 مع parallel replicas. #101083 (Groene AI).
  • إصلاح استثناء في optimizeLazyMaterialization عند استخدام projection مع PREWHERE وORDER BY ... LIMIT. #101115 (Anton Popov).
  • إصلاح تعطل الخادم (SIGABRT) عند استخدام aggregate functions مع combinator الداخلي فقط Null (مثل sumNull وavgNull) مع تفعيل الإعداد aggregate_functions_null_for_empty = 1. #101147 (Groene AI).
  • إصلاح حالة use-after-free في مسار الكتابة في filesystem cache، كانت قد تتسبب في القراءة من ذاكرة جرى تحريرها عند تسجيل file segments المكتملة (رصدها MemorySanitizer في BuzzHouse). #101161 (Groene AI).
  • إصلاح تعطل الخادم مع الخطأ “Trying to attach external table to a ready set without explicit elements” عندما يواجه distributed index analysis مسند GLOBAL IN جرى إنشاء مجموعته دون عناصر صريحة. #101178 (Groene AI).
  • إصلاح إرجاع الدالتين التجميعيتين MAX/MIN على أعمدة Decimal نتائج غير صحيحة عند تفعيل ترجمة JIT البرمجية (بعد بلوغ threshold الترجمة). #101203 (Raúl Marín).
  • إصلاح تعطيل تحسينات minmax_count_projection وتحسينات COUNT(*) البسيطة بشكل دائم بعد lightweight delete، حتى بعد دمج جميع الأجزاء التي تحمل قناع lightweight delete. #101212 (Anton Popov).
  • إصلاح حالة قد تؤدي إلى ظهور الخطأ المنطقي Having zero bytes, ... من cache بسبب الكتابة فوق كائن بعيد بين list وread، ما كان يؤدي سابقًا إلى بيانات وصفية قديمة للكائن. #101219 (Kseniia Sumarokova).
  • إصلاح تعطل الخادم (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) عند الاستعلام عن جدول MergeTree باستخدام ORDER BY CAST(lc_column, 'Type')، حيث يكون lc_column من النوع LowCardinality. #101220 (Groene AI).
  • إصلاح تنظيف processing nodes القديمة في S3Queue. #101230 (Kseniia Sumarokova).
  • إصلاح سلوك غير معرّف في mergeTreeAnalyzeIndexes() في حال كانت وسيطة optimizations غير صالحة. #101253 (Azat Khuzhin).
  • إصلاح الاستثناء Logical error: 'partitions_count > 0' عند تنفيذ عمليات ALTER TABLE UPDATE متتالية على جدول Iceberg مقسّم إلى partition. #101278 (Desel72).
  • إصلاح نتائج query غير الصحيحة عند استخدام ثابت صحيح كبير (مثل 256 أو 2147483648) كـ predicate منطقية في WHERE clause مع AND على جداول MergeTree. على سبيل المثال، كان SELECT count() FROM t WHERE (2147483648 > b) AND 2147483648 يُرجع 0 بشكل غير صحيح بدلًا من مطابقة جميع الصفوف. #101287 (Groene AI).
  • إصلاح insert-select من delta lake cluster مع replicated merge tree. #101299 (Konstantin Vedernikov).
  • إصلاح التعطل المصحوب بالرسالة “Logical error: Reading from materialized CTE before materialization” عندما يشير scalar subquery إلى سلسلة من materialized CTEs المعتمدة على بعضها بعضًا. #101305 (Groene AI).
  • إصلاح data race على storage_id في IStorage::getDependentViewsByColumn. #101385 (Nikolay Degterinsky).
  • إصلاح تنسيق واستنساخ AST لعبارة BACKUP FROM SNAPSHOT. #101405 (Pablo Marcos).
  • إصلاح تعطل 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).
  • طرح خطأ عند استخدام إعداد delta_lake_snapshot_version أو إصدار CDF بدون تمكين DeltaKernel، بدلًا من إرجاع بيانات خاطئة بصمت. #101489 (Desel72).
  • إصلاح الاستثناء NOT_FOUND_COLUMN_IN_BLOCK عند استخدام ARRAY JOIN مع JOIN USING وتمكين الإعداد analyzer_compatibility_join_using_top_level_identifier. إغلاق #101240. #101507 (Vladimir Cherkasov).
  • إصلاح فشل حلقة إعادة محاولة INSERT في Iceberg عندما يكون الجدول قد أُنشئ باستخدام iceberg_metadata_file_path وتكون نسخة البيانات الوصفية المستهدفة موجودة بالفعل. #101548 (Groene AI).
  • إزالة Nullable من عمود النتيجة في arrayIntersect والدوال ذات الصلة لتجنّب عدم التطابق بين التسلسل وإلغاء التسلسل. #101569 (George Larionov).
  • إصلاح تعطل الخادم (LOGICAL_ERROR) عند تنفيذ SELECT من عرض مادي يستند إلى table engine من نوع IcebergLocal. #101577 (Groene AI).
  • إصلاح رسالة الخطأ غير الصحيحة عند استدعاء intExp10 بوسيطة NaN — إذ كانت تعرض intExp2 بدلًا من intExp10. #101582 (Krishna Chaitanya).
  • إصلاح عدم قيام allow_statistics=0 بحظر ALTER TABLE ADD STATISTICS وALTER TABLE DROP STATISTICS بعد إعادة الهيكلة في #100288. #101585 (Krishna Chaitanya).
  • إصلاح فشل KeeperMap CREATE TABLE مع الرسالة “Cannot create metadata for table” عندما تكون عقد ZooKeeper المتبقية من عملية حذف جزئية قبل الإصدار 25.1 تفتقد العقدة drop_lock_version. #101623 (Antonio Andelic).
  • إصلاح خطأ منطقي محتمل أثناء قراءة subcolumns في Map. يُغلق #100769. يُغلق #101336. #101641 (Pavel Kruglov).
  • إصلاح أولوية المطابقة التامة للعمود الفرعي مقارنةً بمطابقة البادئة في getSubcolumnData لتجنّب تعطل محتمل. يُغلق #101271. #101645 (Pavel Kruglov).
  • إصلاح تعطل (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).
  • ما الجديد: تم إصلاح نص الوصف المعكوس للعمود alterable في system.s3_queue_settings وsystem.azure_queue_settings — إذ جرى تبديل دلالتي 0 و1 لتتوافقا مع السلوك الفعلي في الشيفرة. #101703 (ClickGap AI Bot).
  • إصلاح توجيه positiveModulo(tuple, number) بشكل غير صحيح إلى القسمة بدلًا من باقي القسمة. #101709 (ClickGap AI Bot).
  • إصلاح تعطل يحدث عند تهيئة thread_pool_size على disk مغلّف بـ cache. سابقًا، كانت FileCacheSettings::loadFromConfig() ترفض thread_pool_size باعتباره setting غير معروف، مما كان يمنع الخادم من البدء. هذا setting هو parameter صالح في IDisk يتحكم في عدد threads المستخدمة في عمليات النسخ من disk إلى disk أثناء عمليات نقل الأجزاء في الخلفية. #101712 (Francisco).
  • إصلاح إنشاء Dictionary ‏RANGE_HASHED الذي كان يقبل بصمت سمة النطاق MAX غير الموجودة، ويستخدم تهيئة نوع خاطئة عندما كانت سمتا الحد الأدنى والحد الأقصى للنطاق من نوعين مختلفين. كان الخلل ناتجًا عن خطأ نسخ ولصق في buildRangeConfiguration، إذ كان يبحث عن min_attr_name بدلًا من max_attr_name للسمة القصوى. #101732 (Yakov Olkhovskiy).
  • إصلاح تعطل use-after-free في scheduler الخاص بتأجير CPU عندما يستمر مؤقت الانتظار بعد انتهاء عمر worker thread الذي تشير إليه ProfileEvents::Counters. #101761 (Antonio Andelic).
  • إصلاح خلل في الدالتين arrayLevenshteinDistanceWeighted و arraySimilarity. يغلق #101725. #101767 (Mikhail f. Shiryaev).
  • إصلاح تجاهل Prometheus Query API لهيئات نماذج POST. #101794 (James Cunningham).
  • إصلاح تسرّب Exception من destructor ‏S3 Client::~Client بما يؤدي إلى إنهاء server. #101798 (Gagan Dhakrey).
  • إصلاح use-after-scope في deserialization المتوازي للمسارات الديناميكية من النوع Object، وهو ما كان قد يؤدي إلى أعطال عند قراءة جداول تحتوي على عدد كبير من المسارات الديناميكية. #101823 (Antonio Andelic).
  • إصلاح مخرجات غير صحيحة في الدالة formatDateTime مع Formatter ‏%W في بعض إعدادات formatting المعينة (غير default). #101847 (Robert Schulze).
  • إصلاح النتيجة السلبية الكاذبة في shouldPatchFunction ضمن SYSTEM INSTRUMENT ADD عندما يظهر نص البحث لأول مرة داخل argument قالب في اسم الرمز بعد فكّ تشويشه. #101885 (Pablo Marcos).
  • إصلاح فقدان UDF registry عند انتهاء session الخاصة بـ ZooKeeper أثناء refresh الدوري — إذ كان من الممكن أن تصبح جميع user-defined functions غير متاحة إلى أن ينجح full refresh. #101891 (Nikita Fomichev).
  • إصلاح وصف system.codecs لـ AES_256_GCM_SIV لكي يعرض AES-256 بدلًا من AES-128. #101917 (Jimmy Aguilar Mena).
  • إصلاح استخدام extremes خاطئة في min-max index أُنشئ على JSON column، مما أدى إلى نتيجة query خاطئة. يغلق #101700. #101918 (Pavel Kruglov).
  • أصبحت splitByString tokenizer ترفض الآن سلاسل الفاصل الفارغة. #101928 (Robert Schulze).
  • إصلاح مشكلة أن materialize_skip_indexes_on_merge=false لا يمنع text indexes (full-text) أثناء merge. سابقًا، لم يكن يتم تعطيل سوى skip indexes غير النصية (minmax و set و bloom_filter)؛ أما text indexes فكانت تستمر في البناء، مما يهدر CPU وعمليات I/O. #101932 (Groene AI).
  • كانت sparseGrams tokenizer تُولّد tokens أطول من الحد الأقصى المحدد للطول (وكان سبب ذلك وجود +2 مضمّنة في التنفيذ). #101934 (Elmi Ahmadov).
  • إصلاح SIGSEGV في MergeTreeDataPartWriterWide::cancel عند قيام مُنشئ stream برمي استثناء أثناء addStreams، مما يترك إدخالًا فارغًا في column_streams. #101936 (Antonio Andelic).
  • إصلاح استثناء يحدث عند الاستعلام عن جداول Merge أو Distributed مع full-text index وشروط ترشيح مركبة تجمع بين has*Tokens وLIKE، عندما يكون query_plan_direct_read_from_text_index مُمكّنًا. #101939 (Jimmy Aguilar Mena).
  • إصلاح سلوك غير معرّف عند تحليل حزم query في native protocol التي تحتوي على قيم QueryProcessingStage غير صالحة. #101972 (Raúl Marín).
  • إغلاق TCP connection عند حدوث استثناء أثناء تحليل initial query، لمنع قراءة بيانات غير صالحة من stream فقد التزامن. #101989 (Raúl Marín).
  • إصلاح خلل سباق SLRU في filesystem cache في الإصدار 26.1+، والذي قد يؤدي إلى logical error عند حجز المساحة. وفي build التصحيح قد يؤدي أيضًا إلى فشل assert: 'Previous state is Evicting, but expected state to be Active while setting Evicting flag for 2c1e3484ecdc6b78a8978fa5b17c5097:0:339 (state: Evicting)'.. #101991 (Kseniia Sumarokova).
  • إصلاح استثناء عند تحويل سلسلة نصية تحتوي على بيانات لاحقة إلى النوع الفارغ Tuple(). #102011 (Alexey Milovidov).
  • إصلاح الترتيب غير الصحيح للصفوف في queries التي تستخدم ORDER BY مع خوارزمية join ‏grace_hash. إذ كان يمكن أن تُرجع queries المتأثرة النتائج بترتيب خاطئ، ما يؤدي بصمت إلى مخرجات غير صحيحة. #102036 (János Benjamin Antal).
  • إصلاح LOGICAL ERROR ‏(Unexpected size of index type) كان يمكن أن يحدث في queries من نوع RIGHT JOIN وFULL JOIN عند ضبط الإعداد max_bytes_in_join. #102042 (Jimmy Aguilar Mena).
  • إصلاح حالات كان فيها Time ذي القيم السالبة يُرجع نتيجة غير صحيحة عند المقارنة مع DateTime. يُغلق #101670. #102056 (Yarik Briukhovetskyi).
  • إصلاح تعطل في refresh الخاص بـ UDF سببه أن ZooKeeperRetriesControl كان يعيد المحاولة على session قديمة (منتهية الصلاحية) لـ ZooKeeper من دون تجديدها. #102059 (Nikita Fomichev).
  • إصلاح المسافات المفقودة عند formatting لعبارة unlock snapshot. close https://github.com/clickhouse/clickhouse/issues/101723. #102063 (Han Fei).
  • إصلاح تعطل (SIGSEGV) عند الاستعلام عن view فيها WHERE clause، عندما يُنتج الاستعلام الداخلي columns بأنواع تختلف عن metadata الخاصة بالـ view (مثل Nullable الناتج من LEFT JOIN مع join_use_nulls). #102085 (Miсhael Stetsyuk).
  • إصلاح مشكلة عدم طرد entries الخاصة بـ VectorSimilarityIndexCache نهائيًا بعد إزالة part بسبب عدم تطابق مفاتيح cache. #102152 (Seva Potapov).
  • إرسال NACK للرسائل المعطوبة عند استخدام rabbitmq storage. #102157 (Seva Potapov).
  • إصلاح خطأ منطقي عند تحليل سلسلة tuple فارغة وغير صحيحة. #102289 (Nihal Z. Miaji).
  • إصلاح نتائج التجميع غير الصحيحة (صفوف مكررة) عند استخدام optimize_aggregation_in_order=1 مع أعمدة GROUP BY المرتبة بشكل مختلف عن مفتاح الفرز الخاص بالجدول. #102299 (Groene AI).
  • إصلاح تعطل في IcebergLocal ALTER TABLE ... UPDATE عند استخدام تنسيق Avro، وكان السبب عدم فك تغليف الأنواع LowCardinality/Nullable قبل التسلسل. #102337 (Desel72).
  • تم إصلاح خطأ segmentation fault في mutations على الأعمدة materialized من دون expression. يغلق #102185. #102342 (zoomxi).
  • إصلاح في Coalescing merge tree لنوع array. هذا يغلق #89509. #102384 (Konstantin Vedernikov).
  • إصلاح segfault (أو LOGICAL_ERROR في debug builds) عند قراءة Parquet files مع تفعيل bloom filter push down وشروط المساواة/عدم المساواة في WHERE clause. كان التعطل يحدث بسبب وصول إلى الذاكرة خارج الحدود أثناء استرجاع بيانات bloom filter في Parquet prefetcher، وكان يمكن أن يتسبب أيضًا في نتائج استعلام خاطئة وغير deterministic. #102385 (Groene AI).
  • إصلاح abort لـ LOGICAL_ERROR أثناء تغيير الحجم الديناميكي لذاكرة filesystem cache من نوع SLRU، وكان السبب مشاركة إحصاءات eviction عبر الطوابير الفرعية ومسار recovery غير الصحيح للمرشحين الذين فشلوا. #102396 (Antonio Andelic).
  • إصلاح الفشل في التهيئة على replica جديدة لجداول alias من دون target table في Database Replicated. يغلق #101320. #102397 (Nikolay Degterinsky).
  • إصلاح قراءة خارج الحدود في string search functions (countSubstrings, position, etc.) عند البحث عن needle مكوّنة بالكامل من null bytes. #102401 (Raúl Marín).
  • لم تعد إعدادات text index الكامل (enable_full_text_index, allow_experimental_full_text_index, use_skip_indexes_on_data_read) معطلة عندما يشير إعداد compatibility إلى إصدار أقدم من 26.1. وكان هذا سابقًا قد يمنع SharedDatabaseCatalog من إنشاء جداول تحتوي على text indexes. #102422 (Nikita Fomichev).
  • إصلاح قراءة خارج الحدود في printf عند وجود % في النهاية. #102472 (Raúl Marín).
  • إصلاح استثناء chassert وهو ReadBuffer is canceled في debug builds داخل AsynchronousMetrics، وكان السبب أن rewind لا يعيد ضبط علامة إلغاء buffer. #102524 (Yuri Fedoseev).
  • تم إصلاح hasToken / hasTokenOrNull مع needles التي تتكون فقط من فواصل (مثل '()' و'!!!') على columns التي تحتوي على text index: كان index سابقًا يتخطى جميع granules بصمت بدلًا من إطلاق BAD_ARGUMENTS (في hasToken) أو إعادة NULL (في hasTokenOrNull). #102544 (Jimmy Aguilar Mena).
  • إصلاح حالات نفاد الذاكرة (OOM) في الطلبات المتعددة الضخمة داخل Keeper. بالنسبة إلى تتبّع OpenTelemetry، كنّا نخصّص دائمًا أكثر من 1 KiB لوحدات OpenTelemetry spans في كائنات ZooKeeperRequest، ما يعني أنّنا في الطلبات المتعددة الكبيرة جدًا كنّا نحاول تخصيص أكثر من 10 GiB إضافية من الذاكرة. ولإصلاح ذلك، نحتفظ الآن بالبيانات المشتركة في ذاكرة ثابتة ونستخدم std::unique_ptr بدلًا من std::optional في ZooKeeperOpentelemetrySpans. #102586 (Miсhael Stetsyuk).
  • إصلاح تضخّم CurrentMetric الخاص بـ NamedCollection بسبب CREATE NAMED COLLECTION IF NOT EXISTS عند وجود مجموعات موجودة مسبقًا، وكذلك عدم تهيئته للمجموعات المُحمّلة من config أو من تخزين SQL عند بدء التشغيل. يُغلق #102507. #102598 (Pablo Marcos).
  • إصلاح استثناء في getStructureOfRemoteTable عندما يعيد الجزء المحلي أعمدة فارغة بسبب تنفيذ DDL متزامن. #102604 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR عند استهداف عدة استعلامات CREATE TABLE IF NOT EXISTS متزامنة للجدول نفسه من نوع S3Queue في Shared database. #102610 (Nikita Taranov).
  • إصلاح تعطّل LOGICAL_ERROR برسالة “Unexpected number of rows in column subchunk” في قارئ Parquet V3 الأصلي عند قراءة nullable columns مع عامل التصفية WHERE. #102628 (Groene AI).
  • إصلاح وصف حدث profile AzureWriteMicroseconds الذي كان يذكر “read” بدلًا من “write”. #102639 (Miсhael Stetsyuk).
  • خطأ في row policy يؤدي إلى ظهور استثناء ‘Not found column in block’ في بعض الحالات الخاصة. #102648 (Yarik Briukhovetskyi).
  • إصلاح استثناء في server ضمن ClusterDiscovery عندما لا تكون هناك مؤقتًا أي عقدة حيّة في cluster ثابت (مُعرّف في config). #102661 (Kseniia Sumarokova).
  • إصلاح الاستدلال الخاطئ على Data type للتاريخ في حالة حدوث overflow بعد ضبط timezone. يُغلق #102601. #102674 (Pavel Kruglov).
  • إصلاح مشكلة بقاء SYSTEM WAIT VIEW معلّقًا إلى الأبد عند حذف refreshable materialized view أثناء الانتظار. #102681 (Nikolay Degterinsky).
  • إصلاح حالة CASE مع expression من نوع Dynamic كانت تُرجع ELSE لجميع الصفوف. يُغلق #102511. #102684 (Pavel Kruglov).
  • إصلاح serialization للنوع Dynamic المسطّح مع data types مُرمّزة بصيغة binary. يُغلق #101911. #102692 (Pavel Kruglov).
  • إصلاح format&#95;schema&#95;source=&#39;query&#39; الذي كان يتجاهل بصمت النتائج متعددة الصفوف. يُغلق #101905. #102698 (Pavel Kruglov).
  • الإبلاغ عن رمز الخروج الفعلي عبر عميل SSH بدلًا من تعيين جميع الأخطاء إلى 1. يغلق #101741. #102700 (Konstantin Bogdanov).
  • إصلاح فقدان ترويسات HTTP في معالجات الاستعلامات الديناميكية/المعرّفة مسبقًا. يغلق #101846. #102706 (Konstantin Bogdanov).
  • تطبيق تصحيح معاينة Poisson على ملفات تعريف الكومة المطوية الخاصة بـ jemalloc لمطابقة خرج jeprof. سابقًا، كان التنسيق المطوي يقلّل من تقدير أحجام التخصيص الفعلية لأنه لا يأخذ احتمال المعاينة في الحسبان. #102759 (Antonio Andelic).
  • إصلاح التعطل في الدالة hasPhrase عند استخدام وسيطة NULL. #102802 (Nikita Taranov).
  • إصلاح تعطل الخادم (SIGSEGV) عند قراءة ملفات Avro ذات المخططات التكرارية التي تحتوي على مراجع دورية للأنواع الرمزية. وأصبح الآن يتم اكتشاف هذه المخططات ورفضها برسالة خطأ واضحة بدلًا من التعطل. #102853 (Groene AI).
  • إصلاح تعطل الخادم (تأكيد LOGICAL_ERROR) عندما تواجه دالة على عمود Variant حدّ الذاكرة أو استثناءً آخر غير متعلق بتحويل النوع أثناء تحويل النتيجة في FunctionVariantAdaptor. ويُمرَّر الاستثناء الآن بشكل صحيح بدلًا من تصنيفه خطأً على أنه خطأ داخلي. #102855 (Groene AI).
  • إصلاح تعطل الخادم في بُنى debug/sanitizer عند رمي std::length_error أثناء استنتاج المخطط (مثلًا بسبب القيم المتطرفة لـ input_format_msgpack_number_of_columns أو بيانات إدخال غير سليمة). #102859 (Groene AI).
  • جعل تمثيل null في تسلسل الأعمدة المكررة والمتناثرة يراعي الإعدادات (مثل format&#95;tsv&#95;null&#95;representation). #102888 (Hechem Selmi).
  • نُقل إلى الإصدارات الأقدم في #103499: إصلاح فشل طلبات S3 مع ios_base::clear: unspecified iostream_category error بدلًا من إعادة المحاولة، وكان السبب أن Poco BufferedStreamBuf::flushBuffer لا يتعامل مع عمليات الكتابة القصيرة من طبقة socket. #102894 (Sema Checherinda).
  • إصلاح بقاء تحسينات minmax_count_projection وCOUNT(*) البسيطة معطّلة بشكل دائم بعد lightweight delete، حتى بعد دمج جميع الأجزاء التي تحمل قناع lightweight delete واختفائها. #102900 (Anton Popov).
  • إصلاح الأعطال العشوائية في jemalloc بسبب LTO. #102913 (Azat Khuzhin).
  • تحسين سلاسل OR في سياسة الصفوف إلى IN في المحلّل الجديد. #102915 (Azat Khuzhin).
  • إصلاح تلف البيانات الوصفية في jemalloc الناتج عن تحرير ذاكرة تخزين الصفحات المؤقتة بمحاذاة خاطئة، ما قد يؤدي إلى أعطال. #102918 (Azat Khuzhin).
  • لم تعد عمليات INSERT العادية من دون العروض المادية تطلب عددًا مفرطًا من فتحات التزامن والخيوط في ConcurrencyControl (max_threads بدلًا من max_insert_threads)، مما يمنع استنزاف فتحات CC وتضخّم عدد الخيوط في المجموعات ذات معدل INSERT مرتفع. #102961 (Sema Checherinda).
  • إعادة إدخال ArrowMemoryPool للسماح بإطلاق MEMORY_LIMIT_EXCEEDED لتفادي OOM على مستوى النواة. #102999 (Azat Khuzhin).
  • إصلاح تجاهل cast_string_to_date_time_mode عند استخدام CAST إلى Nullable(DateTime). يغلق #101840. #103035 (Pavel Kruglov).
  • إضافة دعم لأعمدة ALIAS في تحسين direct read لفهرس النص. #103037 (Anton Popov).
  • نُقل إلى الإصدارات الأقدم في #103454: إصلاح مشكلة كان فيها SELECT DISTINCT يعيد بصمت نتائج غير مكتملة عندما يطابق aggregate projection الاستعلام، بينما لا تحتوي بعض parts في الجدول على بيانات projection (على سبيل المثال، إذا أُضيف الـ projection إلى جدول يحتوي مسبقاً على بيانات ولم يُشغَّل MATERIALIZE PROJECTION). يغلق #102951. #103052 (Nihal Z. Miaji).
  • إصلاح النتائج الخاطئة التي كانت تُرجَع بواسطة WHERE x AND toNullable(N) على جداول MergeTree عندما تكون N عدداً صحيحاً أعرض من UInt8 (مثل 256 أو 65535 أو 2147483648 أو أي عدد صحيح سالب). كان المرشح يستبعد جميع الصفوف بشكل غير صحيح لأن splitFilterNodeForAllowedInputs استخدم صفراً من NULL عند تحويل remainder من Nullable بعد اختزال AND إلى قيمة منطقية، مما حوّل المقارنة إلى NULL ضمن المنطق ثلاثي القيم. #103077 (Groene AI).
  • إصلاح نوع argument غير الصحيح الذي كان يُبلَّغ عنه في رسائل error الخاصة بـ string search functions (مثل locate وposition) عند تمرير arguments بترتيب معكوس (locate(needle, haystack) مع function_locate_has_mysql_compatible_argument_order = 1). #103102 (Alex Kuleshov).
  • إصلاح بقاء waitForPause معلّقاً إلى أجل غير مسمى عند استدعاء disableFailPoint بدون وجود أي thread متوقفة عند failpoint. #103119 (Shaohua Wang).
  • قصر سلاسل حزمة TCP Hello قبل المصادقة على 64 كيلوبايت، وإضافة server setting باسم handshake_timeout_milliseconds للحد من إجمالي وقت المصافحة، مما يمنع العملاء غير الموثَّقين من استهلاك ذاكرة مفرطة أو إبقاء threads مشغولة إلى أجل غير مسمى. #103284 (Sema Checherinda).
  • إصلاح حالة كانت فيها إحصاءات min_value > max_value في Parquet ColumnIndex لأعمدة String. #103334 (Saurabh Kumar Ojha).
  • التحقق من وجود بيانات Dynamic flattened غير سليمة في Native format. #103392 (Pavel Kruglov).
  • تعبئة العمود _time من table function ‏url. #103437 (Nikita Taranov).
  • إصلاح اكتشاف SVE الذي كان يستخدم تعليمات SVE حتى عند عدم توفرها. #103568 (Raúl Marín).

تحسينات البناء/الاختبار/التغليف

  • تستخدم تبعية Libstemmer (Snowball) الآن الإصدار الأحدث v3.0.1. #99256 (Jimmy Aguilar Mena).
  • إضفاء طابع عشوائي على الإعدادات في clickhouse-test: use_skip_indexes_for_top_k, use_top_k_dynamic_filtering, query_plan_max_limit_for_top_k_optimization. #91782 (Nikita Fomichev).
  • تنفيذ اختبار stress للدوال للتحقق من سلامة خصائصها المختلفة. #93543 (Michael Kolupaev).
  • توفير إعداد CMake خاص لـ llvm-project بدلًا من استيراد الإعداد من upstream. #97453 (Konstantin Bogdanov).
  • إضفاء طابع عشوائي على المزيد من إعدادات optimize_* في البنية التحتية للاختبارات لتحسين تغطية passes تحسين الاستعلامات. #97547 (Alexey Milovidov).
  • استخدام سلسلة أدوات Rust nightly-2026-03-22. #98602 (Konstantin Bogdanov).
  • استخدام wasmtime v42.0.1. #98603 (Konstantin Bogdanov).
  • استخدام llvm-project 22.1.1. #98882 (Konstantin Bogdanov).
  • استبدال SANITIZE_COVERAGE (callbacks مخصصة لـ sanitizer، ودقة على مستوى الرموز) بتغطية LLVM المعتمدة على المصدر (WITH_COVERAGE, -fprofile-instr-generate -fcoverage-mapping) ضمن pipeline التغطية الليلية لكل اختبار. يقرأ الخادم الآن تعيين التغطية الخاص به من أقسام ELF عند بدء التشغيل، ويجمع tuples بالشكل (file, line_start, line_end) لكل اختبار عبر أمر جديد SYSTEM SET COVERAGE TEST 'name'. ويستخدم اختيار الاختبارات في فحوصات CI المستهدفة استعلامات نطاق الأسطر على table جديدة باسم checks_coverage_lines في CIDB، مع ترتيب الاختبارات المرشحة بحسب عدد أسطر diff المعدلة التي تغطيها. #99513 (Nikita Fomichev).
  • إصلاح خطأ link في llvm-libc عند build باستخدام -O0. #100023 (Zheguang Zhao).
  • إصلاح رسالتي error عند بدء تشغيل الحاوية إذا لم يتضمن configuration الإعدادين logger.log وlogger.errorlog (على سبيل المثال، عندما يُفترض أن تذهب جميع log messages إلى STDOUT/STDERR). #100239 (Simon).
  • تفضيل ld64.lld على ld الخاص بـ Apple (cctools-port ld64) في builds الخاصة بـ MacOS. من شأن ذلك أن يقلل بشكل كبير أزمنة الربط على Darwin، لأن ld64 الخاص بـ cctools-port بطيء جدًا مع -ffunction-sections و-dead_strip. ويجري الرجوع إلى ld إذا لم يكن ld64.lld متاحًا. #100275 (Alexey Milovidov).
  • اختبارات لضمان عدم تسجيل الأدلة لأي secrets ‏(REST + Glue). #100307 (Konstantin Vedernikov).
  • تكرار الاختبارات التي عُدّلت مؤخرًا باستخدام إعدادات عشوائية مختلفة. #100385 (Alexey Milovidov).
  • تتبّع تبعيات ملفات #embed في CMake وتمكين وضع التبعيات في ccache لضمان إعادة بناء صحيحة. #100411 (Alexey Milovidov).
  • إضافة اختبارات للتحقق من صحة استعلامات TPC-H. #100580 (Raufs Dunamalijevs).
  • استخدام aws-sdk-cpp 1.11.771. #100582 (Konstantin Bogdanov).
  • السماح لملفات XML الخاصة باختبارات الأداء بالإشارة إلى ملفات SQL query خارجية وإعدادات عبر السمة file. #100747 (Raufs Dunamalijevs).
  • إصلاح التجميع مع -march=x86-64-v4 بإضافة التضمين المفقود TargetSpecific.h في LowerUpperImpl.h. #100932 (Alexey Milovidov).
  • إصلاح البناء على gentoo بإضافة —no-default-config إلى cxxflags. #100973 (Isak Ellmer).
  • تمت إضافة utils/auto-bisect/ — وهو إطار عمل للتنصيف يعتمد على shell، ينزّل binaries جاهزة البناء من CI ويشغّل سكربت اختبار يوفّره المستخدم للعثور على أول commit تسبب في تراجع، من دون الحاجة إلى بناء محلي. #100989 (Nikita Fomichev).
  • تعطيل ThinLTO افتراضيًا في CMake، بحيث لم تعد builds المطورين المحلية تفعّله ضمنيًا. ولا تتأثر builds الإصدار الخاصة بـ CI لأنها تمرّر -DENABLE_THINLTO=1 صراحةً. #101041 (Alexey Milovidov).
  • إضافة benchmark ‏TPC-DS SF1 إلى اختبارات الأداء. #101209 (Raufs Dunamalijevs).
  • تمت إضافة اختبارات stateless لعمليات DELETE الخفيفة في MergeTree، وتغطي: دورة حياة العلامة has_lightweight_delete، وصحة COUNT(*) مع optimize_trivial_count_query، وسلامة الأعمدة MATERIALIZED/DEFAULT، واستعادة العلامة في ReplicatedMergeTree، وread_in_order مع الصفوف المحذوفة، ودورات حذف/دمج متعددة، وإخفاء العمود _row_exists، وتنوع الشروط، وفرض RBAC على ALTER DELETE. #101792 (Nikita Fomichev).
  • يتم الآن نشر Docker image ‏Distroless بمتغيرَي ubuntu وalpine للإصدارات الموسومة. #101941 (Rahul Nair).
  • تعرض stack traces الآن مسارات نسبية واضحة ومباشرة (مثل src/Common/Exception.cpp) بدلًا من مسارات مشوَّشة بدليل البناء (مثل ./ci/tmp/fast_build/./src/Common/Exception.cpp). #102000 (Raúl Marín).
  • إضافة Style check في CI يرفض الملفات الأكبر من 5 ميغابايت التي يتم commit لها إلى repository، مع whitelist لبيانات الاختبار الحالية المشروعة. وإزالة الملف غير المستخدم zookeeper_log.parquet بحجم 14 ميغابايت. #102080 (Raúl Marín).
  • إزالة نحو 400 توجيه #include غير مستخدم من headers لتقليل أوقات التجميع. #102585 (Raúl Marín).
  • استخدام wasmtime ‏v43.0.1. #102603 (Konstantin Bogdanov).
  • استخدام openssl 3.5.6. #102606 (Konstantin Bogdanov).
  • استخدام xz 5.8.3. #102607 (Konstantin Bogdanov).
  • ترقية الصورة الأساسية distroless في Docker من Debian 12 ‏(glibc 2.36، OpenSSL 3.0) إلى Debian 13 ‏(glibc 2.41، OpenSSL 3.5)، مما يقلّص نطاق التعرّض لثغرات CVE إلى عدم وجود أي ثغرات قابلة للوصول. #101678 (Rahul Nair).

إصدار ClickHouse ‏26.3 LTS بتاريخ 2026-03-26. العرض التقديمي، الفيديو

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

  • قد يؤدي الرجوع إلى إصدار أقدم بعد الترقية إلى فقدان البيانات. انشر إصدارات التسلسل الخاصة بأنواع البيانات إلى أنواع البيانات المتداخلة. على سبيل المثال، كان إصدار التسلسل String ‏with_size_stream يُطبَّق سابقًا فقط على أعمدة String من المستوى الأعلى وعناصر Tuple. أما الآن فأصبح يُطبَّق على أي نوع String داخل أي نوع متداخل مثل Array/Map/Variant/JSON/إلخ. يتحكم في هذا السلوك إعداد MergeTree ‏propagate_types_serialization_versions_to_nested_types، وهو مفعّل افتراضيًا الآن. بعد هذا التغيير، لن تتمكن الإصدارات الأقدم من قراءة أجزاء البيانات المُنشأة حديثًا، لكن يمكن للإصدار الجديد قراءة الأجزاء القديمة دون أي مشاكل. الترقية آمنة، لكن الرجوع إلى إصدار أقدم ليس كذلك — إذا احتجت إلى التراجع بعد الترقية إلى 26.3، فستصبح البيانات التي كتبها 26.3 في الأعمدة ذات الأنواع المتداخلة غير قابلة للقراءة! راجع #101429 للتفاصيل. #94859 (Pavel Kruglov).
  • إزالة نوع skip index ‏hypothesis. كانت هذه ميزة غامضة وتجريبية ذات فائدة عملية محدودة. سيؤدي إنشاء الجداول باستخدام INDEX ... TYPE hypothesis الآن إلى ظهور خطأ. #96874 (Alexey Milovidov).
  • إزالة الدالة التجريبية detectProgrammingLanguage. #99567 (Alexey Milovidov).
  • إصلاح أسبقية العامل NOT لتتوافق مع معيار SQL: أصبح NOT الآن أقل ارتباطًا من IS NULL وBETWEEN وLIKE والعوامل الحسابية. على سبيل المثال، أصبح NOT (x) IS NULL الآن يُفسَّر على أنه NOT (x IS NULL) بدلًا من (NOT x) IS NULL. قد يغيّر هذا نتائج queries التي كانت تعتمد على السلوك السابق (غير القياسي). #97680 (Alexey Milovidov).
  • تصحيح البيانات الوصفية للإسقاطات العادية بحيث يجري التعرّف على الإسقاطات ذات مفاتيح الفرز متعددة الأعمدة بشكل صحيح. يستند هذا إلى #90429. #91352 (Amos Bird).
  • إصلاح مشكلة عدم احترام ملفات skip index للإعداد replace_long_file_name_to_hash، مما كان يسبب أخطاء “اسم الملف طويل جدًا” وتعطّل قراءة الفهارس ذات الأسماء الطويلة. أصبحت أسماء ملفات skip index الآن تُحوَّل إلى hash عند تجاوزها max_file_name_length، على غرار ملفات الأعمدة. وهذا متوافق مع الإصدارات السابقة (يمكن للخوادم الجديدة قراءة الأجزاء القديمة)، لكن الرجوع إلى إصدار أقدم (أو استخدام خوادم قديمة أثناء rolling upgrade) قد يؤدي إلى تجاهل الفهارس ذات الأسماء الطويلة. #97128 (Raúl Marín).
  • تفعيل async insert افتراضيًا. سيقوم ClickHouse الآن بتجميع جميع عمليات insert الصغيرة افتراضيًا. يُضبط هذا الإعداد ضمن compatibility. إذا قمت بتعيين compatibility=<version less than 26.2> فستكون القيمة الافتراضية هي السابقة، أي false. يمكنك إيقاف/تفعيل async inserts على عدة مستويات: في config ضمن profiles المستخدمين، أو على مستوى session، أو query، أو MergeTree table. #97590 (Sema Checherinda).
  • تغيير القيمة الافتراضية لـ mysql_datatypes_support_level من فارغة إلى decimal,datetime64,date2Date32، مما يفعّل المواءمة الصحيحة افتراضيًا من MySQL DATE إلى Date32، ومن DECIMAL/NUMERIC إلى Decimal، ومن DATETIME/TIMESTAMP مع precision إلى DateTime64. سابقًا، كانت أعمدة MySQL DATE تُواءَم إلى Date، وهو ما لا يمكنه تمثيل التواريخ السابقة لـ 1970-01-01، مما كان يسبب تلف البيانات. #97716 (Alexey Milovidov).
  • قبول مصفوفة من أسماء الأجزاء بدلًا من regexp في mergeTreeAnalyzeIndexes{,UUID} لأن regexp بطيء (ميزة تجريبية). #98474 (Azat Khuzhin).
  • تغيير القيمة الافتراضية لـ stderr_reaction من throw إلى log_last في UDFs القابلة للتنفيذ. لم تعد UDFs التي تكتب تحذيرات إلى stderr تفشل عندما يكون رمز الخروج 0. وتتضمن الاستثناءات المرتبطة برمز الخروج الآن محتوى stderr. #99232 (Xu Jia).

ميزة جديدة

  • تمت إضافة Bucketed Serialization لأعمدة Map في MergeTree (map_serialization_version = 'with_buckets'). تُقسَّم المفاتيح إلى buckets قائمة على hash، بحيث إن قراءة مفتاح واحد (m['key']) لا تتطلب سوى قراءة bucket واحدة بدلًا من العمود بالكامل، ما يوفّر تسريعًا يتراوح بين 2x و49x لعمليات lookup على مفتاح واحد، وذلك بحسب حجم map. ويمكن التحكم في عدد الـ buckets واستراتيجية توزيعها عبر MergeTree settings الجديدة التالية: map_serialization_version, max_buckets_in_map, map_buckets_strategy, map_buckets_coefficient، وmap_buckets_min_avg_size. #99200 (Pavel Kruglov).
  • دعم materialized CTE. يتيح ذلك تقييم CTE مرة واحدة فقط أثناء تنفيذ query وتخزين نتائجه في temporary tables. يغلق #53449. #94849 (Dmitry Novik).
  • السماح باستخدام بعض الدوال القياسية في SQL من دون أقواس لأغراض التوافق، مثل NOW. يغلق #52102. #95949 (Aly Kafoury).
  • يمكنك الآن استخدام دالة natural sort key بالشكل naturalSortKey(s). #90322 (Nazarii Piontko).
  • يمكنك الآن استخدام إدخال JSON/Object الأصلي مع دوال JSONExtract. يغلق #88370. #96711 (Fisnik Kastrati).
  • إذا كان query parameter من النوع Nullable ولم يتم تحديده، فسنفترض أن قيمته هي NULL. #93869 (Vikash Kumar).
  • دعم auxiliary ZooKeeper لقاعدة البيانات Replicated. #95590 (RinChanNOW).
  • دعم الدالة has مع JSON type للتحقق من وجود path، على غرار Map. #96927 (DQ).
  • تمت إضافة table function ‏mergeTreeTextIndex(database, table, index)، التي تتيح قراءة البيانات مباشرةً من text index. ويمكن استخدام هذه الدالة لأغراض introspection أو لإجراء aggregations فوق بيانات text index. #97003 (Anton Popov).
  • إضافة MergeTree setting ‏table_readonly لتمييز الجداول بأنها read-only، مما يمنع inserts والتعديلات. #97652 (Alexey Milovidov).
  • إضافة setting جديدة use_partition_pruning والاسم البديل alias ‏use_partition_key. اضبطها على false لتعطيل partition pruning استنادًا إلى partition key. #97888 (Nihal Z. Miaji).
  • تنفيذ ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>') لجداول Iceberg. #97904 (murphy-4o). #99130
  • السماح لكل entry من النوع type=http داخل <protocols> بتحديد مفتاح <handlers> مخصص يشير إلى قسم config منفصل <http_handlers_*>، ما يتيح قواعد توجيه HTTP مختلفة لكل منفذ. #98414 (Amos Bird).
  • إضافة الخيار pretty=1 إلى EXPLAIN للحصول على مخرجات شجرية ذات مسافات بادئة، وإضافة compact=1 لطيّ خطوات Expression، مما يجعل خطط الاستعلام أكثر قابلية للقراءة. #98500 (Kirill Kopnev).
  • إضافة إعداد الخادم restore_access_entities_with_current_grants. عند تمكينه، تقتصر امتيازات المستخدمين/الأدوار المستعادة من النسخ الاحتياطية على ما يُسمح للمستخدم الذي يجري الاستعادة بمنحه (بنفس دلالات GRANT CURRENT GRANTS)، بدلًا من الفشل مع ACCESS_DENIED. #98795 (pufit).
  • إضافة الدالتين caseFoldUTF8 وremoveDiacriticsUTF8 لطيّ حالة Unicode وإزالة العلامات التشكيلية. #98973 (George Larionov).
  • إضافة دالة السلاسل النصية normalizeUTF8NFKCCasefold لتطبيع Unicode من نوع NFKC_Casefold، والذي يجمع بين تطبيع NFKC وطيّ الحالة. #99276 (George Larionov).
  • إضافة المُجزِّئ asciiCJK إلى فهارس النص الكامل وإلى الدالة tokens. وهو يقسم النص باستخدام قواعد حدود الكلمات في Unicode: تتكوّن كلمات ASCII باستخدام محارف الربط (الشرطة السفلية، النقطتان، النقطة، وعلامة الاقتباس المفردة)، بينما تتحول محارف Unicode غير التابعة لـ ASCII إلى tokens أحادية المحرف. #99357 (Amos Bird).
  • تمت إضافة الإعدادين max_skip_unavailable_shards_num وmax_skip_unavailable_shards_ratio لتقييد عدد shards التي يمكن تخطيها بصمت عند تمكين skip_unavailable_shards. إذا تجاوز عدد shards غير المتاحة أو نسبتها العتبة المُعدّة، يُطرَح استثناء بدلًا من إرجاع نتائج غير مكتملة بصمت. #99369 (Alexey Milovidov).
  • يمكن للمستخدمين الآن استخدام الكلمة المفتاحية SOME في تعبيرات الاستعلامات الفرعية. وهي تتصرف بصورة مطابقة تمامًا لـ ANY. #99842 (Artem Kytkin).
  • إضافة الإعداد output_format_trim_fixed_string لإزالة null bytes اللاحقة من قيم FixedString في تنسيقات الإخراج النصية. #97558 (NeedmeFordev).
  • دعم تعبيرات ربط الجداول الموضوعة بين قوسين في عبارة FROM، مثل SELECT * FROM (t1 CROSS JOIN t2). #97650 (Alexey Milovidov).
  • تنفيذ الدالة toDaysInMonth: تُرجع عدد الأيام في شهر التاريخ المحدد. #99227 (Vitaly Baranov).

ميزة تجريبية

  • إضافة دعم تجريبي لـ UDFs المستندة إلى WebAssembly، ما يتيح تنفيذ منطق دوال مخصصة باستخدام WebAssembly وتشغيلها داخل ClickHouse. شكر خاص لـ Alexey Smirnov لمساهمته في دعم backend الخاص بـ Wasmtime. #88747 (Vladimir Cherkasov). تحسينات إضافية تدريجية على دعم WASM UDF. #99373 (Vasily Chekalkin).
  • إضافة دعم لهجات SQL خارجية باستخدام مكتبة polyglot. #99496 (Alexey Milovidov).
  • إضافة compression codec للأعداد ذات الفاصلة العائمة ALP (من دون fallback إلى ALP_rd للقيم المزدوجة غير القابلة للضغط). #91362 (Nazarii Piontko).
  • إضافة Lazy Type Hints تجريبية لأعمدة JSON. عند تفعيلها عبر allow_experimental_json_lazy_type_hints، فإن ALTER TABLE ... MODIFY COLUMN json JSON(path TypeName) الذي يضيف type hints أو يعدّلها فقط يكتمل فورًا كعملية تقتصر على metadata، من دون إعادة كتابة البيانات التاريخية. تُطبَّق type hints عند query time على parts القديمة، ويجري materialize لها أثناء عمليات INSERT وbackground merges. #97412 (tanner-bruce).
  • تمكين reads المتوازية من YTsaurus table engine. #97343 (MikhailBurdukov).

تحسين الأداء

  • تحسين أداء بحيرات البيانات. في الإصدارات السابقة، لم تكن القراءة من تخزين الكائنات تعيد تكييف pipeline مع عدد خيوط المعالجة. يوفّر هذا تحسينات هائلة في الأداء (~40x) على الأجهزة متعددة الأنوية. #99548 (Alexey Milovidov).
  • أصبحت العلاقة بين enable_parallel_replicas و automatic_parallel_replicas_mode كما يلي: لا يمكن لأي استعلام استخدام النسخ المتماثلة المتوازية إلا إذا كانت قيمة enable_parallel_replicas > 0. بالإضافة إلى ذلك، إذا كانت automatic_parallel_replicas_mode=1، فيُتخذ قرار استخدام النسخ المتماثلة المتوازية أثناء التخطيط استنادًا إلى الإحصاءات المجمّعة مسبقًا. أما إذا كانت automatic_parallel_replicas_mode=0، فستُستخدم النسخ المتماثلة المتوازية في جميع الاستعلامات المدعومة بغضّ النظر عن أي إحصاءات. وهناك استثناء مهم، وهو distributed insert-select مع النسخ المتماثلة المتوازية: في هذه الحالة، ستُنفّذ الاستعلامات دائمًا كما لو كانت automatic_parallel_replicas_mode=0. #97517 (Nikita Taranov).
  • إتاحة partition pruning عندما يحتوي predicate على أي عامل مقارنة (=, <, >, !=) ويكون partition key ملفوفًا ضمن سلسلة دوال حتمية؛ فعلى سبيل المثال، في PARTITION BY x، ستستخدم predicates مثل cityHash64(x) % 5 > 2 و toYYYYMM(x) < 2026 و toYYYYMM(x) = 2026 أو toYYYYMM(x) != 2026 جميعها partition key لأغراض pruning. يُغلق #28800. #98432 (Nihal Z. Miaji).
  • إتاحة تحسين read-in-order وprimary-key pruning عندما يكون النوع الهدف في CAST هو Nullable ويكون التحويل رتيبًا؛ فعلى سبيل المثال، مع PRIMARY KEY x، يمكن لـ ClickHouse استخدام تحسين read-in-order مع ORDER BY x::Nullable(UInt64)، كما يمكنه تطبيق primary-key pruning على predicates مثل WHERE x::Nullable(UInt64) > 500000. #98482 (Nihal Z. Miaji).
  • إتاحة index pruning وfilter pushdown عندما تجري مقارنة column صحيحة بقيمة Float حرفية؛ فعلى سبيل المثال، يمكن الآن لـ predicates مثل WHERE x < 10.5 استخدام primary key لأغراض pruning، كما أصبحت filters مثل prime < 1e9 أو number < 1e5 تُدفع إلى primes() و numbers() table functions بدلًا من التسبّب في تنفيذ غير محدود. يُغلق #85167. #98516 (Nihal Z. Miaji).
  • إضافة cache جديدة من نوع SLRU لبيانات Parquet الوصفية لتحسين أداء القراءة، عبر إزالة الحاجة إلى إعادة تنزيل الملفات لمجرد قراءة metadata. #98140 (Grant Holly).
  • دعم تبديل طرفَي ANTI وSEMI وFULL joins استنادًا إلى إحصاءات المُحسِّن. #97498 (Hechem Selmi).
  • تحسين تخطي granules في pointInPolygon عند التعامل مع polygons كبيرة، وإصلاح مشكلة تسبّب pointInPolygon في طرح خطأ أثناء index analysis خلال primary key pruning. #91633 (Nihal Z. Miaji).
  • تحسين أداء الدالة levenshteinDistance. #94543 (Joanna Hulboj).
  • تحسين تحويلات نوع Decimal على مستوى Batch عبر تجنّب استدعاء الدوال لكل عنصر. #95923 (Konstantin Bogdanov).
  • تدعم جداول Iceberg الآن الجلب المسبق غير المتزامن للبيانات الوصفية عبر إعداد الجدول iceberg_metadata_async_prefetch_period_ms، الذي يعبّئ ذاكرة التخزين المؤقت للبيانات الوصفية مسبقًا بشكل دوري. بالإضافة إلى ذلك، يتيح إعداد الاستعلام iceberg_metadata_staleness_ms لاستعلامات SELECT استخدام البيانات الوصفية المخزنة مؤقتًا إذا كانت أحدث من مدة التقادم المحددة، مما يلغي استدعاءات Iceberg catalog أثناء معالجة الطلبات. #96191 (Arsen Muk).
  • يستخدم وضع S3Queue المرتب الخاصية S3 ListObjectsV2 StartAfter لتجنب إعادة إدراج السجل الكامل للبادئة، مما يقلل استدعاءات ListObjects. #96370 (Venkata Vineel ).
  • خفض استخدام الذاكرة لعمليات insert مع إزالة التكرار. عمومًا، تكون الكتلة الأصلية مطلوبة لإزالة التكرار، لكن في insert المتزامن يمكن الاستغناء عنها وتوفير الذاكرة. #96661 (Sema Checherinda).
  • استخدام قيمة خاصة بالمعمارية لحجم سطر cache بدلًا من قيمة ثابتة مقدارها 64. #97357 (Nikita Taranov).
  • تحسين طفيف في القراءة من قاموس text index، مما يحسّن الأداء العام لتحليل text index. #97519 (Anton Popov).
  • تسريع فك ضغط LZ4 للكتل بحجم 16 بايت على ARM. #97774 (Raúl Marín).
  • إعادة هيكلة tokenization إلى interface جديدة عالية الأداء، مع استبدال واجهة API القديمة ذات نمط iterator لدعم SIMD وtokenizers ذات الحالة. جزء من #90268. #97871 (Amos Bird).
  • تحسين أداء تحليل text index للاستعلامات التي تحتوي على conditions مركبة تشمل أعمدة مفهرسة وأخرى غير مفهرسة. في السابق، كان تحسين الإنهاء المبكر أثناء index analysis يُعطَّل بشكل غير صحيح في مثل هذه الحالات. #98096 (Anton Popov).
  • تحسين أداء الاستعلامات التي تحتوي على expressions ثابتة تُنشئ Arrays أو خرائط طويلة جدًا. #98287 (Alexey Milovidov).
  • إصلاح تحليل شرط المفتاح لمفاتيح primary من النوع DateTime64 عند مقارنتها بثوابت صحيحة، وهو ما كان يؤدي سابقًا إلى عدم تطبيق Granule pruning. #98410 (Amos Bird).
  • أصبح الإعداد optimize_syntax_fuse_functions مفعّلًا افتراضيًا. #98424 (Alexey Milovidov).
  • تحسين الدالة التجميعية avgWeighted باستخدام مجمّعات محلية بدلًا من التمرير والتخزين لكل صف عبر aggregate state، مما يحسّن الأداء بنسبة تصل إلى 27% لمدخلات Nullable. #98793 (Antonio Andelic).
  • يحسّن الأداء ويقلل استخدام الذاكرة لدوال window المتوازية في بعض السيناريوهات، وكذلك لأحمال عمل arrayFold التي تتضمن Arrays كبيرة. ويمكن أن يقلل هذا أيضًا من ضغط أخطاء الصفحات ويحسّن الاستقرار عند حدود الذاكرة الضيقة بالنسبة إلى الاستعلامات المتأثرة. #98892 (filimonov).
  • تحسين أداء sorted merges. #99013 (Artem Zuikov).
  • تحسين INTERSECT ALL وEXCEPT ALL. #99097 (Raufs Dunamalijevs).
  • دعم تحسين read_in_order_use_virtual_row لعمليات القراءة بالترتيب العكسي. #99198 (Vladimir Cherkasov).
  • تقليل التنافس على الذاكرة المخبئية في عمليتَي RIGHT وFULL JOIN من خلال التحقق من تعيين JoinUsedFlags قبل الكتابة. #99274 (Hechem Selmi).
  • تحسين PrefetchingHelper::calcPrefetchLookAhead باستبدال حسابات الفاصلة العائمة بحسابات صحيحة بالكامل، ما يحسّن تنظيم ذاكرة التعليمات المخبئية ويقلّل كلفة الدورات أثناء حلقات التجميع. #99327 (Riyane El Qoqui).
  • تقليل استهلاك Keeper للذاكرة باستبدال absl::flat_hash_set بـ CompactChildrenSet لتخزين العقد التابعة. وتخزّن الحاوية الجديدة من 0 إلى 1 من العقد التابعة ضمنيًا من دون تخصيص على heap، وهو ما يغطي غالبية عقد Keeper. ويؤدي ذلك إلى تقليل حجم KeeperMemNode من 144 إلى 128 بايت. #99860 (Antonio Andelic).
  • أصبحت الإسقاطات التجميعية مدعومة الآن بشكل صحيح في العروض. يُصلح هذا #32753. #88798 (Amos Bird).
  • دعم تحسين تحويل الربط من OUTER إلى INNER مع join_use_nulls. يُغلق هذا #90978. #95968 (Vladimir Cherkasov).
  • تحسين قراءة الأعمدة الفرعية عبر احتساب الأحجام بشكل صحيح قبل القراءة. وهذا يقلّل استخدام الذاكرة ويُسرّع قراءة الأعمدة الفرعية. #96251 (Pavel Kruglov).
  • جعل الذاكرات المخبئية mark وuncompressed وpage تستخدم ساحة jemalloc منفصلة لتجنّب تجزؤ الذاكرة عند خلط التخصيصات قصيرة العمر، مثل الاستعلامات والطلبات، مع التخصيصات الأطول عمرًا الخاصة بالذواكر المخبئية. #96812 (Seva Potapov). #98812. #99021
  • يمكن للجداول التي تحتوي على قواعد DELETE TTL الآن استخدام خوارزمية الدمج العمودي. #97332 (murphy-4o).
  • تطبيق فهارس تخطي البيانات أثناء تحليل الفهرس الموزع. #97767 (Azat Khuzhin).
  • تُحمَّى علامات الفهارس الثانوية مسبقًا الآن عند تمكين الإعداد prewarm_mark_cache (إذ تُحمَّل إلى الذاكرة المخبئية لعلامات الفهرس أثناء جلب أجزاء البيانات وعند بدء تشغيل الجدول). #97772 (Anton Popov).
  • تقليل عمليات القفل أثناء التحكم في الوصول. #97894 (Nikita Taranov).
  • عند تمكين apply_row_policy_after_final أو apply_prewhere_after_final، أصبحت شروط AND المركبة في سياسات الصفوف وPREWHERE تُفكَّك الآن لاستخراج عناصر مفتاح الفرز لتحليل فهرس المفتاح الأساسي. سابقًا، إذا كان عامل التصفية المؤجل يحتوي على مزيج من predicates خاصة بمفتاح الفرز وأخرى لا تخص مفتاح الفرز (مثل x > 1 AND y != ‘foo’)، كان التعبير بالكامل يُستبعَد من تحليل الفهرس. أما الآن، فتُستخرَج عناصر مفتاح الفرز (مثل x > 1) وتُستخدم في تقليم الحبيبات، حتى من تعبيرات AND المتداخلة. #98513 (Yarik Briukhovetskyi).
  • تقليل التنازع على الأقفال في MergeTreeBackgroundExecutor من خلال جعل تحرير موارد المهمة يتم من دون أخذ القفل. يغلق #93620. #98604 (Dmitry Novik).
  • إصلاح الاستهلاك المفرط للذاكرة (~514 MiB) أثناء الاكتشاف التلقائي لـ format عند قراءة بيانات غير Arrow (مثل JSON من url أو file من دون تحديد format صراحةً)، وكان السبب أن قارئ ArrowStream يفسّر البايتات الأولى خطأً على أنها طول هائل لـ metadata. #98893 (Konstantin Bogdanov).

تحسينات

  • يتيح تحليل ملفات GeoParquet التي تحتوي على أنواع Geo مختلفة ضمن العمود نفسه. #97851 (Mark Needham).
  • تقديم دالة SQL ‏tokensForLikePattern التي تُقسِّم أنماط LIKE إلى tokens مع مراعاة دلالات أحرف البدل: يُعامَل % و _ كأحرف بدل، وتُعامَل أحرف البدل المُهربة (\%, \_) كقيم حرفية، وتُستبعَد الـ tokens المجاورة لأحرف البدل غير المُهربة. #97872 (Amos Bird).
  • إضافة العنصر النائب {_schema_hash} إلى S3 table engine لإدراج hash لتعريفات أعمدة الجدول في مسار S3. #98265 (Miсhael Stetsyuk).
  • أصبحت SymbolIndex و addressToSymbol و system.symbols و buildId تعمل الآن على macOS عبر تحليل جداول رموز Mach-O. #99014 (Alexey Milovidov).
  • أصبح جدول system.stack_trace يعمل الآن على macOS، مما يتيح استبطان stack traces لجميع threads الخاصة بالـ server. #98982 (Alexey Milovidov).
  • إضافة خيار config خاص بكل server في LDAP باسم <follow_referrals> (القيمة الافتراضية false) للتحكم في ما إذا كان LDAP client يتبع الإحالات. يؤدّي تعطيل تتبّع الإحالات إلى تجنّب حالات timeout والتعليق عند البحث انطلاقًا من base DN لجذر نطاق Active Directory. كما نُقلت log messages المرتبطة بالإحالات من warn إلى trace. #96765 (paf91).
  • أصبحنا الآن نتتبّع أي data skipping indices استُخدمت أثناء تنفيذ query في جدول query_log ضمن عمود جديد باسم skip_indices. يُصلح هذا #78676. المؤلف الأصلي @pheepa. #87862 (Grant Holly).
  • لم تعد تلميحات ACCESS_DENIED تكشف أسماء الأعمدة ما لم يكن المستخدم قادرًا على إظهار جميع الأعمدة المطلوبة؛ بينما تظل أسماء database/table مرئية في التلميح. #91067 (filimonov).
  • إضافة thread تنظيف مخصص لـ MergeTree لمنع تأخّر التنظيف تحت أحمال merge الكثيفة. يحل هذا #86181. #91574 (Amos Bird).
  • إعادة تحميل config الخاصة بالـ cluster إذا تغيّرت عناوين IP الخاصة باسم مضيف الـ server المحلي، بدلًا من عناوين IP لأي host. يُصلح هذا #81215 و#70156 و#65268. #93726 (Zhigao Hong).
  • السماح للإعداد optimize_aggregators_of_group_by_keys بتحسين aggregate functions بشكل صحيح في استعلامات GROUPING SETS. #93935 (Xiaozhe Yu).
  • Keeper-bench: الإبلاغ عن الأخطاء في metrics وإنشاء ملف metrics بصيغة json لوضع —input-request-log. #95748 (Mohammad Lareb Zafar).
  • إضافة clause جديدة ROLE إلى CREATE USER. #97074 (Vitaly Baranov).
  • يمكنك الآن تعيين إعدادات internal_replication لعنقود تم إنشاؤه بواسطة قاعدة البيانات Replicated. #97228 (Pervakov Grigorii).
  • الإعداد الجديد allow_nullable_tuple_in_extracted_subcolumns يتحكم في ما إذا كانت الأعمدة الفرعية المستخرجة Tuple(...) من Tuple وVariant وDynamic وJSON ستُعاد بصيغة Nullable(Tuple(...)) (مع NULL للصفوف المفقودة) أو بصيغة Tuple(...) (مع قيم tuple الافتراضية للصفوف المفقودة). هذا الإعداد معطّل افتراضيًا، ولا يمكن تغييره إلا بإعادة تشغيل الخادم. #97299 (Nihal Z. Miaji).
  • إضافة معلومات عن المرشحات المؤجلة كعنصر منفصل في مخرجات استعلام EXPLAIN (عند استخدام Row Policies/PREWHERE مع FINAL). ذو صلة: #91065. #97374 (Yarik Briukhovetskyi).
  • تفعيل type_json_allow_duplicated_key_with_literal_and_nested_object افتراضيًا. يتيح ذلك تجنب الأخطاء المتعلقة بالمفاتيح المكررة أثناء تحليل JSONات مثل {"a" : 42, "a" : {"b" : 42}}، والتي يمكن أن يصوغها ClickHouse انطلاقًا من بيانات JSON الأصلية {"a" : 42, "a.b" : 42}. #97423 (Pavel Kruglov).
  • تحسين في Keeper: الأمر find_super_nodes مفيد جدًا لأغراض تصحيح الأخطاء عند حدوث زيادة غير متوقعة في عدد العقد في Keeper. لكن إذا وُجدت عدة super nodes، يصبح من شبه المستحيل العثور على أكثر من واحدة، لأن الأمر يعلق إلى الأبد أثناء اجتياز الأبناء لأول super node يعثر عليها. يمنع هذا PR اجتياز أبناء super nodes. #97819 (pufit).
  • دعم أولي للإكمال التلقائي في clickhouse-keeper-client. #97828 (Konstantin Bogdanov).
  • تفريغ مخازن التسجيل المؤقتة غير المتزامنة في حال حدوث تعطل. #97836 (Azat Khuzhin).
  • تفعيل ميزة impersonate افتراضيًا (راجع EXECUTE AS target_user). #97870 (Vitaly Baranov).
  • تحسين إلغاء الاستعلامات مع table engine الخاص بـ SQLite باستخدام KILL QUERY وإلغاء الاستعلام (Ctrl+C) في clickhouse-client. #97944 (Roman Vasin).
  • إضافة server setting باسم jemalloc_profiler_sampling_rate للتحكم في lg_prof_sample الخاص بـ jemalloc، وإظهاره بوصفه مقياسًا غير متزامن باسم jemalloc.prof.lg_sample. #97945 (Antonio Andelic).
  • دعم weights في تنفيذ الطابور المحدود المتزامن. #97962 (Daniil Ivanik).
  • إضافة sslmode إلى المفاتيح المسموح بها لمصادر dictionary في PostgreSQL. سابقًا، لم يكن sslmode موجودًا في قائمة السماح dictionary_allowed_keys في PostgreSQLDictionarySource.cpp، مما جعل من المستحيل تهيئة وضع SSL لاتصالات dictionary في PostgreSQL. وقد منع ذلك Dictionaries من الاتصال بخوادم PostgreSQL التي تتطلب SSL (مثل AWS RDS، الذي يفرض SSL افتراضيًا)، إذ كان الاتصال يفشل في تفاوض TLS ويرفض الخادم الرجوع الاحتياطي غير المشفر. #98014 (mcalfin).
  • اعرض خطأً واضحًا من نوع “no such file” عند تمرير مسار ملف غير موجود إلى clickhouse أو clickhouse-local، بدلًا من رسالة عامة مربكة. #98048 (Raúl Marín).
  • يمكن الآن إنشاء Text indexes على الأعمدة Nullable([Fixed]String) وArray(Nullable([Fixed]String)). #98118 (Jimmy Aguilar Mena).
  • تجنّب حذف named collections التي تُعد تبعيات لـ dictionary sources. #98127 (Pablo Marcos).
  • تمكين join algorithm grace_hash للاستعلامات التي تحتوي على totals. #98144 (János Benjamin Antal).
  • ألغِ background merges مبكرًا في DROP DATABASE لـ ordinary shared merge tree. #98161 (Shaohua Wang).
  • حسِّن إلغاء queries مع MongoDB وMySQL باستخدام KILL QUERY وcancel query ‏(Ctrl+C) في clickhouse-client. #98187 (Roman Vasin).
  • أزل NetlinkMetricsProvider واستخدم procfs حصريًا لجمع metric الخاصة بـ taskstats لكل thread. فالجمع المستند إلى Netlink يسبب مشكلات في البيئات المعتمدة على الحاويات، كما أن tail latency فيه أسوأ عند وجود contention. #98229 (Amos Bird).
  • أعد هيكلة معالجة Iceberg manifest file لإصلاح المشكلات المتعلقة بـ manifest file caching. #98231 (Daniil Ivanik).
  • نأخذ الآن في الحسبان الحالات التي يكون فيها sorting key للـ table عبارة عن expression مثل toDate(time)، ويمكننا اتخاذ قرارات بشأن عدم تأجيل expressions من هذا النوع إذا كانت جزءًا من filters. #98237 (Yarik Briukhovetskyi).
  • أضف metric جديدة باسم MaxAllocatedEphemeralLockSequentialNumber للحد الأقصى للرقم sequential المخصّص لعُقد القفل ephemeral من نوع znode في ZooKeeper. #98243 (Miсhael Stetsyuk).
  • حدّث ClickStack إلى version 2.20.0. #98252 (Aaron Knudtson).
  • أُضيف حدث profile جديد KeeperRequestTotalWithSubrequests يحتسب كل subrequest داخل multi-request على حدة، مما يوفّر رؤية أفضل لعبء العمل الفعلي في Keeper. ويستمر الحدث الحالي KeeperRequestTotal في احتساب كل multi-request باعتباره request واحدة. #98348 (Antonio Andelic).
  • يقوم SYSTEM RELOAD DICTIONARIES الآن بإعادة تحميل Dictionaries بترتيب طوبولوجي، بحيث ترى Dictionaries التي تستخدم Dictionaries أخرى كمصدر بياناتٍ مُحدَّثة بعد إعادة التحميل. #98356 (Alexey Milovidov).
  • أعد تشغيل ذاكرة التخزين المؤقت للإحصاءات بعد تغيير MergeTree setting. #98520 (Han Fei).
  • لا تشارك في distributed index analysis إلا replicas “الحية” (القابلة للاتصال). #98521 (Azat Khuzhin).
  • أضِف الإعداد access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users (معطّل/مسموح به افتراضيًا) لمنع استخدام ملفات تعريف الإعدادات المعرّفة في config (باستثناء ملف التعريف default) مع المستخدمين المعرّفين عبر SQL. #98662 (Alexander Tokmakov).
  • ضع حدًا لعدد العقد المستخدمة في الاستدلال التلقائي للنسخ المتماثلة المتوازية بحيث يطابق العدد الفعلي للعقد في المجموعة، بدلًا من الاعتماد فقط على الإعداد max_parallel_replicas. #98668 (Nikita Taranov).
  • نفّذ الطلبات التحوطية والقراءة غير المتزامنة لتحليل الفهرس الموزّع. #98724 (Azat Khuzhin).
  • أصبحت إزالة التسلسل لحالات AggregateFunction الثنائية تتطلب الآن استهلاك الإدخال بالكامل. وإذا وُجدت بايتات زائدة غير ضرورية في النهاية، فإن ClickHouse يطرح استثناءً بدلًا من قبول بيانات حالة غير سليمة البنية. #98786 (Nihal Z. Miaji).
  • اجعل TRUNCATE DATABASE يستجيب لإلغاء الاستعلام. #98828 (Shaohua Wang).
  • حسِّن keeper-bench عبر استخدام pipelining للطلبات، وفترة إحماء، وإحصاءات لكل عملية، وبذور قابلة لإعادة الإنتاج، ومعالجة أفضل للأخطاء. #98906 (Antonio Andelic).
  • ادعم SAMPLE clause في تحليل الفهرس الموزّع. #98931 (Azat Khuzhin).
  • اعرض عنوان المخطط في لوحة المعلومات حتى عندما يُرجع الاستعلام نتيجة فارغة أو يواجه خطأً. #98975 (Yash ).
  • لم تعد رسائل أخطاء المحلّل تسرد جميع أعمدة الجدول (ما كان قد ينتج عنه استثناءات بحجم يتجاوز 150KB). وأصبحت قوائم الأعمدة الآن مقيّدة بحد أقصى قدره 10 عناصر. #99002 (Yash ).
  • أرجِع إحصاءات الأعمدة بشكل صحيح من الاستعلامات الفرعية التي تتضمن joins لكي يتمكن الاستعلام الأب من استخدامها في إعادة ترتيب join. #99096 (Alexander Gololobov).
  • علِّم جلسة ZooKeeper على أنها منتهية الصلاحية فور بدء الإنهاء، بدلًا من انتظار انتهاء خيط الإرسال. يتيح ذلك للخيوط الأخرى إنشاء جلسة جديدة دون تأخير. #99102 (Raúl Marín).
  • استخدم المزيد من الدوال الرياضية من LLVM-libc: exp, exp2, expm1, fabs, fabsl, floor, fmodl, log, log2, logf, pow, scalbn, scalbnl, copysignl, nan, nanf, nanl، وثوابت explogxf المشتركة. #99118 (Konstantin Bogdanov).
  • قلّل استهلاك الذاكرة وأصلِح احتمال تكرار المخرجات في التنسيق المطوي لـ system.jemalloc_profile_text. #99121 (Antonio Andelic).
  • أضِف العمود is_subrequest إلى system.aggregated_zookeeper_log للفصل بين الطلبات المستقلة والطلبات الفرعية داخل طلبات Multi/MultiRead. سابقًا، كانت الطلبات الفرعية تُجمَّع في نفس الحاويات الخاصة بالطلبات المستقلة، وبما أن كل عملية فرعية كانت تُسجَّل مع المدة الإجمالية للطلب المتعدد، فقد أصبح متوسط زمن الاستجابة مضللًا. أما الآن فأصبح زمن استجابة الطلبات الفرعية صفرًا. #99169 (Miсhael Stetsyuk).
  • السماح باستخدام الأمر ALTER TABLE MODIFY COLUMN x TTL ... دون تحديد نوع العمود. #99208 (Nikolay Degterinsky).
  • تخطي طلبات Keeper المتقادمة للجلسات التي انقطعت بالفعل، لتجنب جولات Raft غير الضرورية. ويُحدَّد الحد الأقصى لعدد الجلسات المنتهية التي يجري تتبعها بواسطة إعداد coordination max_finished_sessions_cache_size. #99246 (Antonio Andelic).
  • دعم الفهرس النصي المبني على mapValues(map) مع المعامل IN. #99286 (Anton Popov).
  • دعم الإكمال الشبيه بالـ shell في clickhouse keeper-client (معالجة إكمال الوسائط داخل علامات الاقتباس، مثل 'foo ba'، ومعالجة الوسائط المُفلَّتة، مثل foo\ ba، وجعل ls يطبع العقد بين علامتَي اقتباس إذا كانت تحتوي على مسافات بيضاء). #99312 (Azat Khuzhin).
  • منع توقّف أمر Keeper mntr بسبب التنافس على الأقفال. #99472 (Antonio Andelic).
  • تقليل التنافس على الأقفال في dispatcher الخاص بـ Keeper عبر استدعاء دوال callbacks وتمرير طلبات القراءة خارج نطاق mutex، وإضافة حراس أقفال مُوصَّفة لأغراض الرصد. #99751 (Antonio Andelic).
  • التساهل مع غياب الحشو في نهاية آخر كتلة من ملفات Parquet. #99857 (Seva Potapov).

إصلاح خطأ (سلوك غير صحيح يلاحظه المستخدم في إصدار مستقر رسمي)

  • يُصلح كيفية حفظ هدف جدول Alias كتبعية DDL عندما لا يكون مؤهلًا بالكامل: إذ يُحفَظ الآن مع قاعدة بيانات جدول Alias بدلًا من قاعدة بيانات الجلسة. #95175 (Enric Calabuig).
  • إصلاح النتيجة الخاطئة أو حدوث استثناء أثناء قراءة الأعمدة الفرعية لأعمدة ALIAS. #95408 (Pavel Kruglov).
  • إصلاح مشكلة العمود المفقود عند استخدام alias لمعرّف غير قياسي في JOIN مع analyzer القديم. يُصلح #25594 و#47288 و#53263. #95679 (Zhigao Hong).
  • يُصلح تعطلًا في دوال لهجة Kusto bin() وbin_at() وextract() وindexof() عند تمرير وسيطات فارغة. #95736 (NeedmeFordev).
  • يمنع تركيب local_object_storage (المستخدم في بحيرات البيانات فوق نظام الملفات المحلي وربما بواسطة LocalDisk) في أي مكان خارج user_files_path في clickhouse-client. #96201 (Daniil Ivanik).
  • في table engine ‏DeltaLake، أُصلح سباق منطقي عند تغيير إصدار اللقطة، وأزيلت عمليات إعادة تحميل اللقطة الثقيلة الزائدة عن الحاجة. #96226 (Kseniia Sumarokova).
  • إصلاح خطأ منطقي عند إرفاق part في MergeTree إذا وُجدت عدة عمليات إعادة تسمية متسلسلة بين الفصل والإرفاق. #96351 (Alexey Milovidov).
  • إصلاح خلل كان يؤدي إلى تجاهل الإعدادات الصريحة المرسلة إلى جانب compatibility في الطلب نفسه بصمت إذا كانت قيمتها تطابق القيمة الافتراضية في الخادم. #97078 (Raufs Dunamalijevs).
  • إصلاح قيام العميل بالإبلاغ عن NETWORK_ERROR بدلًا من خطأ التحليل الفعلي (مع رقم الصف الصحيح) عندما تواجه عملية INSERT مع التحليل المتوازي بيانات غير صالحة. #97339 (Alexey Milovidov).
  • إصلاح عدم قدرة الدالة التجميعية sumCount على قراءة الحالات المُسلسلة الأقدم بعد إدخال Nullable(Tuple). يُغلق #97370. #97502 (Nihal Z. Miaji).
  • إصلاح استثناء في مقارنة tuple تتضمن عناصر من النوع Nothing (مثل المقارنة مع عناصر tuple من NULL) عند استخدامها مع GROUPING SETS وORDER BY. #97509 (Alexey Milovidov).
  • إصلاح احتساب uncompressed_hash غير الحتمي لأجزاء Compact في MergeTree عند استخدام عدة codecs للضغط، مما قد يتسبب في سلوك غير صحيح لإزالة التكرار. #97522 (Alexey Milovidov).
  • إصلاح خطأ منطقي يتعلق بتيار مفقود أثناء INSERT SELECT مع JSON وbuckets في البيانات المشتركة. يُغلق #97331. #97523 (Pavel Kruglov).
  • إصلاح الإبلاغ الخاطئ عن استثناءات MEMORY_LIMIT_EXCEEDED على أنها CORRUPTED_DATA أثناء عمليات الدمج في SummingMergeTree وCoalescingMergeTree. #97537 (János Benjamin Antal).
  • إصلاح استثناء “Context has expired” في الاستعلامات الفرعية المترابطة التي تحتوي على دوال جداول مثل url(). #97544 (Alexey Milovidov).
  • إصلاح الاستثناءات والسلوك غير الصحيح في optimize_syntax_fuse_functions مع الإسقاطات التجميعية، وأنواع Date، والحفاظ على أسماء الأعمدة. #97545 (Alexey Milovidov).
  • إزالة query rewrite غير الصحيح من replaceRegexpOne إلى extract، والذي كان يؤدي إلى نتائج خاطئة عندما لا يتطابق regexp؛ وكذلك إصلاح الاستثناء عند استخدام replaceRegexpOne مع GROUP BY ... WITH CUBE وgroup_by_use_nulls=1. #97546 (Alexey Milovidov).
  • إصلاح تعليق DROP DATABASE إلى أجل غير مسمى مع database_atomic_wait_for_drop_and_detach_synchronously عند إنهاء الاستعلام. #97586 (Alexey Milovidov).
  • إصلاح عدم قدرة KILL QUERY على إنهاء الاستعلامات العالقة أثناء توليد WITH FILL، أو تحميل Dictionary عبر dictGet، أو ALTER DELETE مع mutations_sync=1 على ReplicatedMergeTree. #97589 (Alexey Milovidov).
  • كانت دالة الجدول loop تستدعي inner_storage->read() مباشرةً، متجاوزةً طبقة المفسّر التي تُطبَّق فيها row policies وامتيازات column-level وغيرها من فحوصات الأمان. وقد أتاح ذلك لمستخدم مقيَّد بواسطة row policies قراءة جميع الصفوف عبر loop(table) حتى عندما كان تنفيذ SELECT مباشر يُرجع صفوفًا معدومة. #97682 (pufit).
  • إصلاح partition pruning غير الصحيح في حالات استخدام DateTime64 الأسبق من حقبة يونكس مع الدالة toDate(). #97746 (Yarik Briukhovetskyi).
  • بعد هذا التصحيح، ستُرجع hasPartitionId القيمة false إذا وُجد partition آخر ذو معرّف partition أعلى ضمن مجموعة data part. #97748 (Mikhail Artemenko).
  • إصلاح الأعطال المحتملة أثناء قراءة granules الفارغة في shared data المتقدمة ضمن JSON. يُغلق #97563. #97778 (Pavel Kruglov).
  • إصلاح الخطأ Cannot schedule a file LOGICAL_ERROR عند تنفيذ INSERT على Distributed بسبب حالة تسابق بين DROP وINSERT. #97822 (Azat Khuzhin).
  • إصلاح crash/assert في ClickHouse server عند استدعاء mapContainsKey/mapContainsKeyLike مع skip index من النوع tokenbf_v1. #97826 (Shankar Iyer).
  • إصلاح استثناءات LOGICAL_ERROR الناتجة عن LowCardinality داخل الأنواع المركبة (Variant وDynamic وTuple) في concatWithSeparator وformat والاستعلامات الفرعية في IN وGLOBAL IN وعمليات الربط مع runtime filters. #97831 (Raúl Marín).
  • إصلاح استثناء LOGICAL_ERROR، ‏Chunk info was not set for chunk in MergingAggregatedTransform، عند استخدام ARRAY JOIN مع دالة الجدول merge() عبر عدة جداول Distributed مع GROUP BY. #97838 (Raúl Marín).
  • إصلاح تعطل الخادم (std::terminate) الناتج عن استثناء غير مُلتقط في destructor الخاص بـ HTTP connection pool عند بلوغ الحد الصارم لمجموعة الاتصالات في ظل Concurrency مرتفع. إذ كان الاستثناء HTTP_CONNECTION_LIMIT_REACHED قد يتسرب من ~PooledConnection عند إعادة connection إلى الـ pool، مما يؤدي إلى SIGABRT. #97850 (Antonio Andelic).
  • إصلاح نتيجة غير صحيحة عند استخدام الخوارزمية grace_hash مع عمليات join غير المتساوية، عندما يتعذر معالجة الكتلة اليسرى بالكامل بسبب قيود الحجم على ناتج join. #97866 (János Benjamin Antal).
  • إصلاح تراجع في كفاءة الأداء عند فحص metadata الخاصة بـ DeltaLake، أُدخل في #96686. #97880 (Kseniia Sumarokova).
  • إصلاح data race في عميل ZooKeeper بين sendThread وreceiveThread. #97887 (Pablo Marcos).
  • إصلاح خلل كان يمنع استخدام CTE مع distributed insert selects. استكمال لـ https://github.com/ClickHouse/ClickHouse/pull/87789. إغلاق #95837. #97889 (Yarik Briukhovetskyi).
  • إصلاح استثناء صادر من CachedOnDiskReadBufferFromFile::readBigAt. إغلاق #97325. #97890 (Kseniia Sumarokova).
  • إصلاح استثناء LOGICAL_ERROR في المحرك Alias مع materialized columns بسبب عدم تطابق الأعمدة. إغلاق #97907. #97921 (Kai Zhu).
  • إصلاح فقدان بيانات Keeper بعد إعادة التشغيل عند استخدام Azure Blob Storage مع metadata من نوع s3_plain لتخزين السجل. #97987 (Antonio Andelic).
  • إصلاح الترجمة البرمجية الخاطئة من JIT للدالة sign لأنواع الأعداد الصحيحة الأوسع من Int8 — إذ كانت القيم خارج النطاق -128..127 قد تنتج إشارة غير صحيحة. #98012 (Alexey Milovidov).
  • إصلاح استثناء DUPLICATE_COLUMN وظهور قيم NULL صامتة عند قراءة جداول Delta Lake التي تستخدم وضع تعيين الأعمدة “name” مع حقول struct التي تحتوي أسماؤها على نقاط (مثل STRUCT<`a.foo`: STRING, `b.foo`: STRING>). #98013 (Caio Ishizaka Costa).
  • إصلاح mutation بعد lightweight update وsecondary indices. #98044 (Raúl Marín).
  • إصلاح نتيجة غير صحيحة لاستعلامات FINAL عند الجمع بين skip indexes الخاصة بالمفتاح الأساسي وتلك غير المرتبطة به. #98097 (Raúl Marín).
  • فرض التحقق من READ ON FILE على file() scalar وDESCRIBE TABLE file(). #98115 (Nikolay Degterinsky).
  • إصلاح تعطل كان يحدث عند الاستعلام عن الملفات باستخدام نمط glob (مثل file('dir/**', 'LineAsString'))، إذ كان يُطلق استثناءً غير معالَج من نظام الملفات (STD_EXCEPTION) إذا كان الدليل يحتوي على رابط رمزي غير صالح. وأصبحت هذه الروابط الرمزية غير الصالحة الآن تُتخطى بصمت، ويُرجع الاستعلام نتائج جميع الملفات الصالحة. #98143 (Mark Andreev).
  • إصلاح خطأ segfault في تحسين خطة الاستعلام عند تحويل outer join إلى inner join باستخدام arrayJoin في تعبير التصفية. #98147 (Alexey Milovidov).
  • إصلاح عدم عمل تنسيق ProtobufList مع Kafka engine بسبب عدم إعادة ضبط حالة القراءة بين الرسائل. #98151 (Alexey Milovidov).
  • إصلاح خطأ منطقي في analyzer_compatibility_join_using_top_level_identifier و ARRAY JOIN، مع إغلاق #98164. #98179 (Vladimir Cherkasov).
  • تعيين المكوّن Watch لاستجابات watch في aggregated_zookeeper_log بدلًا من تركه فارغًا. #98202 (Antonio Andelic).
  • إذا لم تكن أعمدة مفتاح التقسيم مشمولة ضمن مفتاح الفرز، فقد يؤدي partition pruning، بشكل غير صحيح، إلى تخطي partitions تحتوي على rows كان ينبغي أن “تفوز” أثناء إزالة التكرار في FINAL. #98242 (Yarik Briukhovetskyi).
  • إصلاح الخطأ المنطقي “Bad cast from type DB::ColumnConst to DB::ColumnArray” في kql_array_sort_asc/kql_array_sort_desc عند استدعائهما باستخدام معاملات Array ثابتة. #98251 (Alexey Milovidov).
  • إصلاح وصول خارج الحدود في ColumnConst::getExtremes كان قد يتسبب في تعطل عند تفعيل extremes = 1. #98263 (Alexey Milovidov).
  • إصلاح احتمال حدوث حالة توقف تام عندما تعمل عمليتا MOVE PARTITION متزامنتان على الزوج نفسه من الجداول ولكن في اتجاهين متعاكسين. #98264 (Alexey Milovidov).
  • يُرجع خادم HTTP الآن رسالة خطأ في body الاستجابة لردود 400 Bad Request الناتجة عن headers غير سليمة، بدلًا من body فارغ. #98268 (Alexey Milovidov).
  • إصلاح نتائج غير صحيحة مع distributed index analysis (ميزة تجريبية) وquery condition cache. #98269 (Azat Khuzhin).
  • إصلاح استثناء LOGICAL_ERROR “Invalid binary search result in MergeTreeSetIndex” الناتج عن تحويل toDate على أعمدة المفتاح عندما تتجاوز البيانات الحد 65535. #98276 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR عندما يُستبدل RIGHT JOIN مغلف داخل CROSS JOIN بواسطة تحسين query_plan_join_swap_table في مسار الشيفرة القديم لخطوة join. #98279 (Alexey Milovidov).
  • التحقق من صحة البيانات التالفة أثناء إلغاء التسلسل لـ DDSketch لمنع حالات segfault والاستثناءات والحلقات اللانهائية ونفاد الذاكرة عند قراءة حالات دوال التجميع quantilesDD التالفة. #98284 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR “Trying to execute PLACEHOLDER action” عند الرجوع إلى الأعمدة المترابطة من الاستعلامات الخارجية داخل دوال lambda مثل arrayMap. #98285 (Alexey Milovidov).
  • إصلاح استثناء الخطأ المنطقي في caseWithExpression عندما يتضمن تعبير CASEmaterialize(NULL) أو argumentات أخرى من النوع Nullable(Nothing). #98290 (Alexey Milovidov).
  • إصلاح استثناء التحويل غير الصحيح عند التصفية على العمود الافتراضي _table في table function ‏merge. #98291 (Alexey Milovidov).
  • إصلاح فشل متقطع في إزالة التكرار، إذ كانت عمليات الإدراج المعاد تُزال تكراراتها بشكل غير صحيح بسبب عدم اتساق ترتيب التنظيف بين دليلي ZooKeeper ‏blocks/ وdeduplication_hashes/. #98293 (Alexey Milovidov).
  • إصلاح استثناء عند استخدام ORDER BY ... WITH FILL مع LIMIT BY في الوقت نفسه. #98361 (Alexey Milovidov).
  • إصلاح تلف صامت للبيانات عند إدراج عمود Date من Parquet/Arrow في عمود Enum — إذ يرفض الآن تحويل النوع غير المتوافق على نحو صحيح بدلًا من تخزين قيم enum غير صالحة. #98364 (Alexey Milovidov).
  • إصلاح استثناء عند قراءة ملف Arrow يحتوي على عمود Array إلى جدول يحتوي على عمود Nested. #98365 (Alexey Milovidov).
  • إصلاح تعلّق mutations الخاصة بـ MATERIALIZE INDEX وMATERIALIZE PROJECTION عندما يُحذف الفهرس أو الإسقاط قبل اكتمال mutation. #98369 (Alexey Milovidov).
  • إصلاح استثناء عند القراءة من Nullable(Tuple(...)) عندما يتعارض اسم أحد عناصر Tuple مع العمود الفرعي null الخاص بـ Nullable. #98372 (Alexey Milovidov).
  • إصلاح الاستثناء “Column … query tree node does not have valid source node” عند تنفيذ joining لجدول Merge (يلف جدول Distributed) مع جدول آخر. #98376 (Alexey Milovidov).
  • إصلاح التحويل غير الصحيح من Parquet ‏Bool إلى FixedString في القارئ native ‏V3، والذي كان ينتج raw bytes بدلًا من التمثيل النصي. #98378 (Alexey Milovidov).
  • إصلاح tryGetColumnDescription لتصفية الأعمدة الفرعية بحسب نوع العمود الأصل، بما يتسق مع أساليب lookup الأخرى للأعمدة. #98391 (Alexey Milovidov).
  • قبول credentials المشفرة بـ base64 من دون padding في HTTP Basic Auth. بعض عملاء HTTP يحذفون padding اللاحق = في ترويسة Authorization: Basic، وكان هذا يتسبب سابقًا في فشل authentication. #98392 (Amos Bird).
  • إصلاح نتائج partition pruning غير الصحيحة بعد دمج الأجزاء التي تحتوي على أعمدة partition key من النوع Nullable، وكان السبب حدود min-max index الخاطئة. #98405 (Amos Bird).
  • إصلاح exception نادر في executor الخاص بـ pipeline، قد يظهر على شكل Received signal 6 (في builds الخاصة بـ debug فقط)، عندما يتزامن توسيع pipeline مع إلغاء query. #98428 (Alexey Milovidov).
  • إصلاح exception ‏“Column identifier is already registered” عند استخدام count_distinct_optimization مع clauseQUALIFY. #98433 (Alexey Milovidov).
  • إصلاح exception ‏“cannot be inside Nullable type” عند استخدام IN/NOT IN مع arguments لأعمدة من النوع LowCardinality (مثل a NOT IN (b) حيث تكون a من النوع LowCardinality(String)). #98443 (Alexey Milovidov).
  • إصلاح exception ‏“Pipeline stuck” في joinsfull_sorting_merge الناتج عن حالة deadlock في PingPongProcessor عندما أنشأ تحسين FilterBySetOnTheFly تبعية دائرية مع MergeJoinTransform. #98454 (Alexey Milovidov).
  • إصلاح exceptionLOGICAL_ERROR ‏“Projection cannot increase the number of rows in a block” عند دمج الأجزاء التي تحتوي على TTL يحذف جميع rows وprojection تجميعي مع مفتاح GROUP BY ثابت. #98458 (Alexey Milovidov).
  • إصلاح exception من نوع logical error عند استخدام CROSS JOIN مع INNER JOIN USING معًا. #98459 (Alexey Milovidov).
  • إصلاح إلغاء مرجعية مؤشر null في dictGetOrDefault عندما تكون argument الخاصة بالمفتاح من النوع Nullable. #98460 (Alexey Milovidov).
  • إصلاح exception في queriesDISTINCT عند استخدام projections تجميعية، وعندما يتسبب materialize في اختلافات في النوع LowCardinality بين query وprojection. #98462 (Alexey Milovidov).
  • إصلاح exception ‏LOGICAL_ERROR عند استخدام arrayJoin داخل filter expression مع OUTER JOIN مع تفعيل join_use_nulls. #98464 (Alexey Milovidov).
  • إصلاح exception من نوع logical error ‏“Replica decided to read in WithOrder mode, not in ReverseOrder” عند استخدام parallel replicas مع optimize_aggregation_in_order. #98467 (Alexey Milovidov).
  • تم إصلاح مشكلة قيام ClickHouse Keeper بقطع اتصال عملاء Java ZooKeeper بعد طلب addWatch. يتوقع Java client وجود body من ErrorResponse بحجم 4 بايت في استجابة addWatch، لكن Keeper كان يرسل body فارغًا، مما تسبب في EOFException وقطع session. وقد أدى ذلك إلى تعطيل CuratorCache في Apache Curator وأي تطبيق Java يستخدم watches دائمة. يُصلح هذا #98079. #98499 (Antonio Andelic).
  • إصلاح عدم انخفاض مقاييس Keeper zk_followers وzk_synced_followers عند تعطل follower. وإضافة المقاييس الجديدة zk_learners وzk_synced_non_voting_followers إلى الأمر mntr ذي الأحرف الأربعة. يصلح #54173. #98504 (Antonio Andelic).
  • إصلاح استثناء LOGICAL_ERROR في renameAndCommitEmptyParts، والذي كان يمكن أن يحدث عند تشغيل TRUNCATE TABLE بالتزامن مع OPTIMIZE TABLE باستخدام معاملات MergeTree. #98508 (Alexey Milovidov).
  • إصلاح تجاهل منفذ raft الآمن في Keeper للقيمتَين cipherList وdhParamsFile من إعدادات openSSL، إذ كان يستخدم القيم الافتراضية دائمًا بدلًا من القيم التي يحددها المستخدم. يغلق #51188. #98509 (Antonio Andelic).
  • إصلاح رسائل السجل المضللة في Keeper مثل “Receiving request for session X took 9963 ms”، حيث كان الوقت المُبلّغ عنه يُقضى فعليًا في انتظار خامل داخل poll() بين نبضات القلب، لا في تنفيذ العملية نفسها. يصلح #79026. #98510 (Antonio Andelic).
  • إصلاح نتيجة غير متوقعة مع read_in_order_use_virtual_row والدوال الرتيبة. يغلق #97837. #98514 (Vladimir Cherkasov).
  • إصلاح LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in' عند استخدام PREWHERE مع subquery لـ IN على جداول MergeTree. #98522 (Alexey Milovidov).
  • إصلاح اتصالات Keeper عبر TCP التي كانت تمنع إيقاف server بسلاسة بسبب عدم الاستجابة لإشارة الإيقاف. #98525 (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).
  • إصلاح فشل MongoDB dictionary source عند استخدام named collections. يغلق #97840. #98528 (Pablo Marcos).
  • إصلاح LOGICAL_ERROR عندما يكون Identifier فارغًا بعد substitution للمعلمات. #98530 (Pervakov Grigorii).
  • إصلاح حالة deadlock في pipeline عند استخدام sort_overflow_mode = 'break' مع window functions. #98543 (Alexey Milovidov).
  • إصلاح rollback للعمود في محرك Buffer أثناء التعامل مع استثناء عند append لكتلة جديدة. كان المنطق السابق قد يؤدي إلى تلف in-memory state للأعمدة. #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).
  • تم إصلاح استخدام text index مع skip indexes الأخرى. سابقًا، كان يمكن أن تظهر أخطاء منطقية مثل “Trying to get non-existing mark” عندما يستخدم filter الاستعلام text index مع skip indexes عادية أخرى في الوقت نفسه. #98555 (Anton Popov).
  • تم إصلاح الخطأ المنطقي “TABLE_FUNCTION is not allowed in expression context” عندما تظهر table function ذات alias عدة مرات ضمن نطاق query نفسه (على سبيل المثال، في كلٍّ من clauses PREWHERE وQUALIFY). #98557 (Alexey Milovidov).
  • تم إصلاح distributed index analysis مع expressions (وليس الأعمدة فقط) في PK، وهو ما كان يؤدي إلى انعدام Filtering للحبيبات الزائدة على replicas البعيدة. #98561 (Azat Khuzhin).
  • تم منع dropping العمود عندما تكون subcolumns التابعة له مستخدمة في expressions من نوع default/alias لأعمدة أخرى، مع استخدام analyzer لتعبيرات default عند alter drop column. #98569 (Nikita Mikhaylov).
  • تم إصلاح إعادة محاولة طلبات S3 بشكل غير صحيح عند حدوث أخطاء غير قابلة لإعادة المحاولة (بما في ذلك HTTP_CONNECTION_LIMIT_REACHED) في HTTP client. #98598 (Sema Checherinda).
  • تم إصلاح overflow عشري عند partition pruning مع DateTime64. #98628 (Yarik Briukhovetskyi).
  • تم إصلاح خطأين في ترجمة expression باستخدام JIT: خطأ نسخ ولصق في type checking لـ nativeCast جعل فروع cast من عدد صحيح إلى عدد صحيح ومن float إلى float غير قابلة للوصول، وتمرير nullptr TargetMachine غير صحيح إلى LLVM PassBuilder، مما منع تسجيل passes التحسين الخاصة بالهدف. #98660 (Alexey Milovidov).
  • تم إصلاح تجاوز RBAC كان يسمح للمستخدمين بتنفيذ DESCRIBE لأي table عبر remote() أو remoteSecure() أو cluster() أو clusterAllReplicas() عند توجيهها إلى localhost، من دون الحاجة إلى privilege ‏SHOW_COLUMNS. #98669 (pufit).
  • تم إصلاح الاستثناء BAD_GET ونتائج query غير الصحيحة عندما يُستخدم expression غير Boolean (على سبيل المثال sin(col)) في كلٍّ من WHERE وSELECT مع JOIN، بسبب إفساد تحسين دفع filter إلى الأسفل لعُقد 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).
  • تم إصلاح الاستثناء “Bad cast from type DB::TableFunctionNode to DB::QueryNode” عند استخدام table function ‏input كـ argument لـ remote. #98694 (Alexey Milovidov).
  • تم إصلاح إعادة إحياء Outdated data parts الناتجة عن تنظيف empty covering parts بشكل غير صحيح. #98698 (Shaohua Wang).
  • إصلاح استثناء في LogicalExpressionOptimizerPass عندما تُرجع دالة منطقية ضمن مقارنة equals نوع Variant. #98712 (Alexey Milovidov).
  • إصلاح قيام parseDateTimeBestEffort بتحليل الكلمات التي تبدأ ببادئات الأشهر أو أيام الأسبوع بشكل غير صحيح. يُغلق #97965. #98742 (Pavel Kruglov).
  • إصلاح استثناء UNKNOWN_IDENTIFIER عند الاستعلام عن table function ‏merge() أو محرك Merge على جداول تحتوي على JSON columns ذات parameters مختلفة (مثل حقول SKIP مختلفة) وأعمدة ALIAS تشير إلى مسارات JSON فرعية، مع تمكين analyzer الجديد. يُغلق #97812. #98753 (Pavel Kruglov).
  • إصلاح تحسين optimize_skip_unused_shards مع analyzer في حال استخدام تخزين Distributed داخل View. #98754 (Nikolai Kochetov).
  • إصلاح الوصول إلى subcolumn في Tuple بالاسم (مثل SELECT x.a لـ Tuple(a UUID, b Int32)) في external tables المُمرَّرة عبر --external في clickhouse-client. يُغلق #96925. #98755 (Pavel Kruglov).
  • إصلاح استثناء reverseUTF8 عند إدخال UTF-8 غير صالح (مبتور). #98770 (Alexey Milovidov).
  • إصلاح اكتشاف مدى فائدة skip index من نوع Set مع OR مع false (أي or(x, 0)) بوصفه predicate. #98776 (Azat Khuzhin).
  • إصلاح استثناء LOGICAL_ERROR (عدم تطابق بنية block في removeUnusedColumns) الذي قد يحدث مع FINAL + PREWHERE + expression ثابتة في WHERE + aggregateات لا تعتمد على الأعمدة مثل count(). #98778 (Alexey Milovidov).
  • جعل entries ‏system.trace_log الخاصة بإعادة التحميل التلقائي لـ Dictionaries في ClickHouse تحتوي على Query id غير فارغ. #98784 (Miсhael Stetsyuk).
  • إصلاح عطل كان قد يؤدي إلى إلغاء مرجع مؤشر null في system tables التي أُنشئت بين لحظة أخذ snapshot للجداول في استدعاء IDatabaseTablesIterator::table() وبين تغيّر الجداول في thread أخرى أثناء التكرار اللاحق. #98792 (Grant Holly).
  • إصلاح عدم قيام SYSTEM START REPLICATED VIEW بإيقاظ مهمة refresh. #98797 (Pablo Marcos).
  • إصلاح الاستثناء “Inconsistent table names” عند استخدام table function ‏view() التي تحتوي على JOINs داخل JOIN آخر (فقط مع analyzer القديم). #98809 (Alexey Milovidov).
  • إصلاح ضبط RLIMIT_SIGPENDING (عبر pending_signals). #98829 (Azat Khuzhin).
  • إصلاح الاستثناء عند تركيب loop مع cluster table functions. #98860 (Konstantin Bogdanov).
  • كانت LEFT ANTI JOIN التي تتضمن عدة أعمدة لمفاتيح الربط تُرجع نتائج غير صحيحة عندما يكون enable_join_runtime_filters=1 (وهو الإعداد الافتراضي). #98871 (Alexander Gololobov).
  • إصلاح WITH FILL STALENESS الذي كان يُنتج صفوفًا إضافية مُعبأة عند قراءة البيانات على عدة chunks (على سبيل المثال، مع قيمة صغيرة لـ index_granularity). #98895 (Alexey Milovidov).
  • إصلاح الخطأ LOGICAL_ERROR التالي: “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B”. #98900 (Azat Khuzhin).
  • إصلاح انحراف تتبّع الذاكرة الناتج عن عدم التراجع عن allocations الفاشلة، والسلوك غير المعرّف لـ nallocx(0)، وخطأ زيادة بمقدار واحد في تتبّع الذروة العامة. كما جرى توسيع التتبّع ليشمل ring buffers الخاصة بـ io_uring. #98915 (Antonio Andelic).
  • منع Attach إلى جداول data lake المحلية خارج مسارات المستخدم، وليس فقط منع إنشائها. #98936 (Daniil Ivanik).
  • إصلاح race condition كان يمكن أن يتسبب في ظهور الاستثناء “ReadBuffer is canceled” في queries التي تستخدم urlCluster أو cluster table functions مشابهة. #98955 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR في Financial functions (financialNetPresentValue, financialInternalRateOfReturn، وغيرها) عند تمرير arguments من النوع BFloat16. #98958 (Alexey Milovidov).
  • إصلاح عدم تطبيق skip indexes (وشروط primary key) على أعمدة ALIAS عند تعطيل دمج expression في query plan (query_plan_merge_expressions = 0 أو query_plan_enable_optimizations = 0). #98960 (Peng).
  • زيادة InsertQuery ProfileEvent من أجل async inserts. يغلق #98626. #98962 (Narasimha Pakeer).
  • إصلاح الاستثناء “Inconsistent KeyCondition behavior” في builds التصحيح عندما يحتوي primary key على قيم float من نوع NaN، وذلك بجعل accurateLess وaccurateEquals يتعاملان مع NaN بصورة متسقة مع ترتيب الفرز في ClickHouse. يغلق #98075. #98964 (Alexey Milovidov).
  • لم يعد SummingMergeTree يجمع أعمدة Bool (وأنواع domain الأخرى). وتُحفظ قيم Bool كما هي بدلًا من جمعها حسابيًا. #98976 (Yash ).
  • إصلاح الاستثناء Scalar doesn’t exist الذي كان يحدث عند الاستعلام عن shard بعيد مع ضبط optimize_const_name_size وتعيين enable_scalar_subquery_optimization = 0. إذ لم تكن الثوابت الكبيرة المستبدلة بمراجع __getScalar في query البعيد تُرسَل إلى الـ shard، مما كان يؤدي إلى فشل query. #98979 (andriibeee).
  • إصلاح NOT_FOUND_COLUMN_IN_BLOCK في بعض الاستعلامات التي تستخدم GROUP BY وتعبيرات تتضمن بحثًا عكسيًا في Dictionary، ومقارنات لتحويل Date/DateTime، ومقارنات tuple. يغلق #98888. #98980 (Nihal Z. Miaji).
  • تم إصلاح سلوك غير معرّف (إلغاء إشارة مرجع لمؤشر فارغ) عند تعديل عمود version/sign/is_deleted إلى EPHEMERAL أو ALIAS في محركات MergeTree. وأصبحت هذه التعديلات تُرفَض الآن على نحو صحيح. #98985 (Alexey Milovidov).
  • تم إصلاح مشكلة كانت تتسبب في أن system.grants لا تُدرج معلمات regular expression الخاصة بامتيازات URL وS3 في العمود access_object. #98987 (DQ).
  • تم إصلاح قراءات Iceberg BigLake: أصبحت بيانات اعتماد ADC تُمرَّر الآن إلى عميل GCS S3 (ما يعالج أخطاء 403)، وتُشفَّر بيانات اعتماد OAuth2 بترميز URL قبل إرسالها (ما يعالج حالات فشل المصادقة للرموز المميزة التي تحتوي على محارف خاصة)، ولم يعد اجتياز مساحة الأسماء يتوقف عند استجابات BigLake HTTP 400. #98998 (Nikita Fomichev).
  • تم إصلاح فشل clickhouse-client في تبديل timezone عندما يستخدم متغير البيئة TZ صيغة file path الخاصة بـ POSIX (مثل TZ=:/etc/localtime). #99000 (Yash ).
  • إصلاح تقليم غير صحيح أو أقل فاعلية عند استخدام startsWith أو LIKE أو NOT LIKE مع عمود FixedString. بالإضافة إلى ذلك، يمكن الآن لدالة التحويل من FixedString إلى String تقليم granules عند تطبيقها على Key column. يغلق #98940. #99001 (Nihal Z. Miaji).
  • تم إصلاح windowFunnel مع strict_deduplication، إذ كان يعيد مستوى غير صحيح عند مصادفة حدث مكرر. #99003 (Yash ).
  • إصلاح خطأ كان يتسبب في تجاهل EXISTS لعبارتي LIMIT وOFFSET في الاستعلامات الفرعية، ما يؤدي إلى نتائج غير صحيحة عندما لا يُرجع الاستعلام الفرعي أي صفوف بسبب offset أو limit صفري. يغلق #88722. #99005 (andriibeee).
  • إصلاح استثناء “Block structure mismatch” عندما تواجه عملية تحسين دفع التصفية إلى الأسفل تعبير AND يُختصر إلى قيمة ثابتة مع GROUPING SETS. #99010 (Alexey Milovidov).
  • إصلاح استثناء عند قراءة patch parts (التحديثات الخفيفة) من دون العمود _part_offset في query plan. #99023 (Alexey Milovidov).
  • استعلام مثل SELECT * FROM table WHERE pk_id = '' حيث يكون pk_id هو primary key ومن النوع String سيستخدم الآن فهرس primary key على نحو صحيح لتصفية granules. #99027 (Shankar Iyer).
  • إصلاح استثناء DEPENDENCIES_NOT_FOUND في Kafka engine عندما تكون materialized view في حالة detached بينما يقوم background thread ببث streaming data. #99028 (Alexey Milovidov).
  • إصلاح الاستثناء الذي يحدث عند إنشاء جدول يحتوي على عمود EPHEMERAL يحمل الاسم نفسه لعمود افتراضي (مثل _part_offset). #99031 (Alexey Milovidov).
  • إصلاح الرسالة المضللة “inflate failed: buffer error” عند قراءة ملفات مضغوطة غير موجودة عبر دالة الجدول url() باستخدام أنماط glob. تُرجع الآن نتيجة فارغة كما هو متوقع عند تمكين http_skip_not_found_url_for_globs. #99034 (Alexey Milovidov).
  • إصلاح تعطل الخادم (std::terminate) عند تنفيذ ALTER TABLE ... DROP PART على patch part بعد تغيير في المخطط (مثل ADD COLUMN). كان التعطل ناتجًا عن غياب أعمدة النظام (_part) من البيانات الوصفية لـ coverage part الفارغ، مما أدى إلى استثناء غير ملتقط داخل NOEXCEPT_SCOPE. #99036 (Peng).
  • كان من الممكن أن تتعطل عملية خادم ClickHouse إذا طُرح استثناء لتجاوز حد الذاكرة أثناء قراءة من قرص مخزنة مؤقتًا. وقد أُصلح ذلك الآن. #99042 (Shankar Iyer).
  • إصلاح LOGICAL_ERROR عند الاستعلام عن جدول يحتوي على كلٍّ من ROW POLICY وعمود ALIAS باستخدام dictGet. كانت المشكلة ناتجة عن الوصول المبكر إلى تعبير الجدول أثناء تحليل عمود ALIAS في المحلل الجديد. #99065 (Peng).
  • إصلاح خطأ تجاوز الحدود عند محاولة المستخدم الاستعلام عن الأعمدة الافتراضية فقط من جدول Iceberg مع Avro format للبيانات. هذه حالة نادرة جدًا، لذا لا نعدّها حرجة. يُصلح #88238. #99080 (alesapin).
  • إصلاح segfault في CTE递归 مع remote() + view(). #99081 (Konstantin Bogdanov).
  • تخطي تحليل الفهرس الإضافي غير الضروري عند تطبيق تحسين read-in-order. #99084 (Vladimir Cherkasov).
  • إصلاح تعطل ناتج عن استثناء تجاوز حد الذاكرة طُرح أثناء تطبيق patch part. #99086 (Anton Popov).
  • إصلاح تأكيد debug في DDLWorker كان سببه تقادم first_failed_task_name بعد حذف إدخال ZooKeeper أثناء استعادة إعادة التهيئة. #99099 (Antonio Andelic).
  • إصلاح إعادة بناء الفهارس النصية أثناء عمليات الدمج مع TTL. #99107 (Anton Popov).
  • إصلاح تعطل في استعلام ALTER TABLE ... REMOVE SETTINGS لمحرك جدول Iceberg. يُصلح #86330. #99108 (alesapin).
  • إصلاح خلل في تحسين query_plan_convert_any_join_to_semi_or_anti_join كان يُرجع نتيجة غير صحيحة للصفوف غير المتطابقة. ذو صلة: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi).
  • إصلاح استثناء LOGICAL_ERROR في ASTColumnsExceptTransformer::transform. #99119 (Pablo Marcos).
  • إصلاح تجاوز RBAC الذي كان يتيح للمستخدمين الحصول على بنية الجدول عبر DESCRIBE TABLE أو CREATE TABLE AS على دوال الجداول (mysql(), postgresql(), sqlite(), arrowFlight(), jdbc(), odbc() وغيرها) من دون امتيازات الوصول المطلوبة إلى المصدر. وبالنسبة إلى الدوال التي تستنتج المخطط من خوادم بعيدة، كان ذلك يتيح أيضًا تشغيل اتصالات صادرة (SSRF) من دون تخويل. #99122 (pufit).
  • إصلاح تعطل Keeper (segfault في NuRaft) أثناء إعادة التهيئة الديناميكية ونقل القيادة. #99133 (JIaQi Tang).
  • إصلاح التعطل عند استخدام جدول Buffer مع SAMPLE عندما لا تدعمه الوجهة. #99141 (Kseniia Sumarokova).
  • إصلاح LOGICAL_ERROR الناتج عن عدم تطابق ترتيب الأعمدة في patch parts. #99164 (Pablo Marcos).
  • إصلاح تعطل نادر جدًا عند احتواء جدول Iceberg على ملفات بتنسيقات مختلطة (ORC وParquet). يُصلح #88126. #99168 (alesapin).
  • إصلاح عدم تطبيق max_execution_time على backup/restore. #99205 (Kseniia Sumarokova).
  • إصلاح تجاهل insert_deduplication_token بصمت في استعلامات INSERT SELECT من دون ORDER BY ALL. سابقًا، كان يتم تعطيل deduplication بالكامل لعمليات INSERT SELECT غير المرتبة، حتى عند تقديم token صريح من المستخدم. الآن، يكفي تقديم insert_deduplication_token لتمكين deduplication بغض النظر عن ORDER BY ALL. #99206 (Desel72).
  • إصلاح الإفراط في التحقق من الوصول أثناء تحسين InverseDictionaryLookupPass، وذلك عبر التحقق من grant CREATE_TEMPORARY_TABLE مرة واحدة قبل المرور بدلًا من التحقق منه لكل عقدة تمت زيارتها. #99210 (Mikhail Artemenko).
  • إصلاح قيام clickhouse format --obfuscate بإنتاج SQL غير صالح بسبب إخفاء أنواع skip index، وأسماء compression codec، وأسماء database engine، وتعريفات dictionary layout/source. #99260 (Raúl Marín).
  • إصلاح خلل كان يجعل المقارنة بين النوعين Time[64] وDateTime[64] مربكة في بعض الحالات؛ والآن، في مثل هذه الحالات، تتم ترقية قيم Time[64] إلى DateTime[64] بإضافة 1970-01-01 كجزء التاريخ. #99267 (Yarik Briukhovetskyi).
  • تقييد constraints الخاصة بالإعدادات في عامل DDL لاستعلامات DDL الموزعة. #99317 (Pablo Marcos).
  • إصلاح مشكلات طفيفة في authentication باستخدام TOTP: خيار CLI --one-time-password مع كلمة مرور فارغة، والتحقق من قيم الإعداد <digits> و<period>. #99322 (Vladimir Cherkasov).
  • إصلاح الخطأ المنطقي unordered_map::at: key not found في Avro output format عند تسلسل أعمدة Enum8/Enum16 التي تحتوي على values غير موجودة في تعريف enum. #99332 (Desel72).
  • إصلاح CHECK TABLE عند استخدام التسلسل المتناثر داخل Tuple مع Dynamic. يغلق #96588. #99351 (Pavel Kruglov).
  • إصلاح التحقق المتشدّد أكثر من اللازم من المعالجة المسبقة للفهرس النصي. #99359 (Anton Popov).
  • إصلاح التوافق عند ترقية الجداول المُكررة ذات فهارس minmax الضمنية من الإصدار 25.10 إلى الإصدارات الأحدث. #99392 (Raúl Marín).
  • أُزيل دعم الدوال المنفية (notEquals, notLike, notIn) من تحليل الفهرس النصي. لم يكن بالإمكان لهذه الدوال تخطي أي حبيبات مطلقًا، لذا فإن تحليل الفهرس لها لم يكن يضيف سوى عبء إضافي من دون أي فائدة. #99393 (Anton Popov).
  • إصلاح optimize_skip_unused_shards مع المحلّل الجديد في الحالة التي يُستخدم فيها جدول Distributed داخل استعلام IN فرعي. #99436 (Nikolai Kochetov).
  • إصلاح heap-use-after-free في INTERSECT/EXCEPT عندما يُنتج الاستعلام أسماء أعمدة مكررة. #99471 (Alexey Milovidov).
  • إصلاح خطأ منطقي في ALTER TABLE ... DROP PART عند استخدام معلمة استعلام محددة النوع لاسم الجزء. #99489 (Alexey Milovidov).
  • إصلاح استثناء NOT_FOUND_COLUMN_IN_BLOCK عندما يُشار إلى شرط فهرس نصي (مثل hasAllTokens) في كلٍّ من عبارتي SELECT وWHERE عبر اسم مستعار. #99504 (Anton Popov).
  • إصلاح النتائج غير الصحيحة عند استخدام hasAllTokens مع OR بين أعمدة لها فهارس نصية منفصلة. #99505 (Anton Popov).
  • تهيئة ذاكرة تخزين الصفحات المؤقتة في clickhouse-local حتى يصبح الإعداد page_cache_max_size فعّالًا. #99510 (Alexey Milovidov).
  • إصلاح حالة نادرة يُوسم فيها جزء بيانات على نحو غير صحيح بأنه تالف ويُفصل بعد استعلام DETACH/ATTACH TABLE. #99529 (Anton Popov).
  • إصلاح استثناء std::length_error عند الاستعلام عن جداول النظام الفارغة باستخدام تنسيق Pretty عبر واجهة HTTP. #99541 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR عند استخدام ALTER TABLE ADD COLUMN لإنشاء عمود EPHEMERAL بالاسم نفسه لعمود افتراضي (مثل _part_offset). #99549 (Alexey Milovidov).
  • إصلاح مشكلة عدم طرد إدخالات VectorSimilarityIndexCache مطلقًا بعد إزالة الجزء بسبب عدم تطابق مفاتيح ذاكرة التخزين المؤقت. #99575 (Seva Potapov).
  • منع قراءة بيانات اعتماد Google من ملف محلي. هذا الإعداد غير آمن لأنه يتيح قراءة بيانات اعتماد أخرى إذا كان مسار الملف معروفًا. #99584 (Konstantin Vedernikov).
  • إصلاح تراجع الأداء في analyzer، واستبعاد الأعمدة غير المستخدمة من ARRAY JOIN. #99587 (Dmitry Novik).
  • إصلاح قراءة الفهرس النصي في جدول يحتوي على lightweight deletes وسياسات صفوف. #99661 (Anton Popov).
  • إصلاح إلغاء الإشارة إلى nullptr في قارئ Parquet عندما يواجه مسار filter-in-decoder صفحات مستبعَدة بالتصفية. يُغلق #99676. #99677 (Alexey Milovidov).
  • إصلاح عملية seek غير الصحيحة في AsynchronousReadBufferFromFileDescriptor مع O_DIRECT. يُغلق #99358. #99678 (Pavel Kruglov).
  • إصلاح heap-buffer-overflow في CompressionCodecT64 وإنهاء العملية في CompressionCodecMultiple عند فك ضغط بيانات مضغوطة تالفة. وقد اكتُشفت كلتا المشكلتين بواسطة أهداف libFuzzer الجديدة. وأصبحت codecs الآن تطلق استثناءً بدلًا من التعطل. #99680 (Rahul).
  • تأخير المعالجة إلى أن ينتهي server من تحميل جميع الجداول. #99700 (Seva Potapov).
  • إصلاح تجاوز مصدر قاموس MySQL لـ RemoteHostFilter في معاملات DDL المضمّنة. #99720 (Shaohua Wang).
  • إصلاح خطأ منطقي عند التكرار عبر جداول data lake في system.tables. #99739 (Konstantin Vedernikov).
  • إصلاح تحليل predicates باستخدام الدالة IN عبر الفهرس النصي مع preprocessor. كما أُصلح تصادم tokens التي يجري البحث عنها في الفهرس النصي، وهو ما كان قد يؤدي إلى نتائج غير صحيحة. #99755 (Anton Popov).
  • إصلاح حلقة لا نهائية عند قراءة ملفات التنسيق Npy ذات أبعاد shape السالبة. #99812 (Desel72).
  • إصلاح global-buffer-overflow في الدالة CRC32 على arguments من نوع FixedString عند تقييمها مع صفر صفوف أثناء حساب ترويسة query plan. #99835 (Alexey Milovidov).
  • إصلاح التعطل (إلغاء الإشارة إلى مؤشر فارغ) عند تنفيذ ALTER TABLE ... MODIFY COLUMN ... COMMENT على جداول Iceberg. #99838 (Desel72).
  • إصلاح الإعداد aggregate_functions_null_for_empty ليعمل مع aggregate functions التي تُرجع أنواعًا غير Nullable مثل Array أو Map (مثل groupArray وsumMap). #99839 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR في الدالة midpoint عند استدعائها بأنواع أعداد صحيحة مختلطة موقعة/غير موقعة. #99867 (Alexey Milovidov).
  • إصلاح استثناء “عدم تطابق بنية الكتلة” في queries التي تحتوي على HAVING clause، حيث يتضمن filter expression كِلَا من تجميع ملفوف داخل دالة تُنتج NULL وmaterialize(0). #99915 (Alexey Milovidov).
  • إصلاح فشل assertion في sipHash128Keyed (ودوال hash ذات المفاتيح المشابهة) عندما تكون وسيطة البيانات من نوع Map بمفاتيح Array أو بأنواع Array متداخلة أخرى. #99921 (Alexey Milovidov).
  • إصلاح الاستثناء LOGICAL_ERROR “Set غير جاهز” في الدالة IN أثناء تحسين خطة الاستعلام باستخدام convertAnyJoinToSemiOrAntiJoin. #99939 (Alexey Milovidov).

تحسينات في البناء/الاختبار/التغليف

  • تقليل وقت الترجمة بإزالة تضمينات ملفات الترويسة الثقيلة ونقل إنشاءات القوالب المكلفة خارج ملفات الترويسة. #97893 (Raúl Marín).
  • تقليل وقت ترجمة الدوال الحسابية وملفات الترويسة المرتبطة بها عبر تصغير مصفوفات توزيع القوالب وإزالة التضمينات الثقيلة. #98204 (Raúl Marín).
  • استخدام mongo-c-driver 2.2.2. #98304 (Konstantin Bogdanov).
  • استخدام postgres REL_18_3. #98306 (Konstantin Bogdanov).
  • تمكين jemalloc allocator في builds الخاصة بـ UBSan لتجنب تراكم RSS الناتج عن ضعف سلوك glibc malloc في استعادة الذاكرة. #98444 (Alexey Milovidov).
  • استخدام Rust v0 symbol mangling وإزالة الرموز الداخلية من مكتبة PRQL لتقليل تضخم أسماء الرموز الناتج عن مكتبات parser combinator. #98446 (Alexey Milovidov).
  • إضافة مجموعة benchmark ‏TPC-H وملف README الخاص بـ TPC-DS إلى tests/benchmarks. #98495 (Raufs Dunamalijevs).
  • إضافة اختبارات صحة لجميع استعلامات TPC-DS البالغ عددها 99. #99204 (Raufs Dunamalijevs).
  • إضافة اختبار تكامل يعيد إنتاج الخلل المتعلق بـ DDL CREATE TABLE + ALTER مع نسخة متماثلة غير متصلة (#44070)، مع تمييزه كإخفاق متوقع. #99259 (Raufs Dunamalijevs).
  • دمج jemalloc مع البادئة je_ وإزالة استخدام --wrap الخاص بالمُرابط. #99342 (Azat Khuzhin).

إصدار ClickHouse 26.2 بتاريخ 2026-02-26. العرض التقديمي، الفيديو

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

  • أصبحت إزالة التكرار مفعّلة افتراضيًا لجميع عمليات insert. في السابق، كانت غير مفعّلة لعمليات async inserts ولـ MVs، لكنها كانت مفعّلة لعمليات insert المتزامنة. الهدف هو توحيد القيم الافتراضية في كلتا طريقتَي insert. إذا كانت إزالة التكرار معطّلة صراحةً على الـ cluster لديك، فعليك ضبط deduplicate_insert='backward_compatible_choice' صراحةً للحفاظ على السلوك السابق. وينطبق الأمر نفسه على deduplicate_blocks_in_dependent_materialized_views. #95970 (Sema Checherinda).
  • تم تحسين تنسيق تخزين الإحصاءات. أصبحت جميع الإحصاءات الآن تُخزَّن في ملف واحد. #93414 (Anton Popov). إذا لم تكن قد فعّلت إحصاءات الجدول صراحةً، فيمكنك تجاهل هذا البند.
  • تقييد البيانات الوصفية داخل الذاكرة لـ S3(Azure)Queue. أُعيدت تسمية جداول النظام من azure_queue إلى azure_queue_metadata_cache ومن system.s3queue إلى s3queue_metadata_cache. #95809 (Kseniia Sumarokova).
  • في السابق، كان تطبيق دالة على عمود Variant يعيد قيم NULL بصمت عندما يكون النوع الفرعي للـ variant غير متوافق مع الدالة؛ أما الآن، فإنه يطرح استثناءً، ما قد يؤدي إلى تعطّل الاستعلامات التي كانت تعتمد على سلوك NULL الصامت. #95811 (Bharat Nallan).
  • أصبحت أعمدة DATE من PostgreSQL تُستنتج الآن على أنها Date32 في ClickHouse (في الإصدارات السابقة، كانت تُستنتج على أنها Date، ما كان يؤدي إلى overflow للقيم الواقعة خارج نطاق ضيق). كما أصبح مسموحًا بإدراج قيم Date32 مرة أخرى إلى PostgreSQL. يغلق هذا #73084. #95999 (Alexey Milovidov).
  • أصبحت دلالات الإعداد do_not_merge_across_partitions_select_final أوضح. في السابق، كان يمكن تفعيل هذه الميزة تلقائيًا عندما لا يكون الإعداد مضبوطًا صراحةً في ملفات config. وقد تسبب ذلك مرارًا في حدوث التباس، وللأسف أدى إلى بعض المشكلات في بيئات production. أما الآن، فأصبحت القواعد أبسط: يفعّل do_not_merge_across_partitions_select_final=1 هذه الوظيفة دون أي شرط. وإذا كان do_not_merge_across_partitions_select_final=0، فسيُستخدم الوضع التلقائي فقط إذا كان الإعداد الجديد enable_automatic_decision_for_merging_across_partitions_for_final=1، ولن يُستخدم في غير ذلك. وللحفاظ على السلوك السابق قدر الإمكان، ضُبطت القيم الافتراضية على do_not_merge_across_partitions_select_final=0 و enable_automatic_decision_for_merging_across_partitions_for_final=1. #96110 (Nikita Taranov).
  • عند إنشاء جدول S3 مع تحديد الأعمدة صراحةً، يتحقق ClickHouse الآن من أن أسماء تلك الأعمدة موجودة فعلًا في schema الخاصة بالملف البعيد. الاستعلامات التي كانت تعمل سابقًا رغم عدم تطابق أسماء الأعمدة ستفشل الآن عند إنشاء الجدول. يغلق هذا #96089. #96194 (Konstantin Vedernikov).
  • يُحظر استخدام الاستعلامات الفرعية في ORDER BY وفي تعبيرات مفاتيح الجداول الأخرى. #96847 (Alexey Milovidov).
  • أصبح apply_row_policy_after_final مفعّلًا افتراضيًا. في البداية، عندما كانت قيمة optimize_move_to_prewhere_if_final=0، كان كلٌّ من ROW POLICY وPREWHERE يراعيان FINAL ويُطبَّقان بعد FINAL. لكن هذا السلوك تعطّل بسبب #87303، الذي تجاهل optimize_move_to_prewhere_if_final لمرشّح ROW POLICY. ولإصلاح ذلك، يفعّل طلب السحب هذا الإعداد apply_row_policy_after_final الذي قُدِّم في #91065. ومع تفعيل apply_row_policy_after_final، سيواصل ROW POLICY مراعاة FINAL افتراضيًا كما كان سابقًا. ويُعد طلب السحب هذا تغييرًا غير متوافق لأنه يغيّر السلوك عند optimize_move_to_prewhere_if_final=1. والآن، لجعل ROW POLICY يُطبَّق قبل FINAL، ينبغي استخدام apply_row_policy_after_final بدلًا من optimize_move_to_prewhere_if_final. #97279 (Nikolai Kochetov).
  • أصبح النوع Date الآن يُسلسَل باعتباره النوع الأصلي date32 في Arrow ضمن تنسيقات Arrow/ArrowStream، بدلًا من uint16. وستتعرّف أدوات مثل PyArrow الآن على العمود بشكل صحيح باعتباره نوع تاريخ. ويمكن استعادة السلوك القديم باستخدام الإعداد output_format_arrow_date_as_uint16. ولا يزال دعم قراءة ملفات Arrow القديمة التي كانت تستخدم uint16 لأعمدة Date متاحًا. #96860 (Alexey Milovidov).

ميزة جديدة

  • يمكن للمستخدمين الآن استخدام ClickStack (واجهة observability) مباشرةً من ClickHouse، وهو ما يفيد في debugging والتطوير المحلي. #96597 (Aaron Knudtson).
  • دعم كلمات المرور لمرة واحدة المستندة إلى الوقت (TOTP) بوصفها طريقة authentication. #71273 (Vladimir Cherkasov).
  • إضافة إعداد قاعدة البيانات lazy_load_tables. عند تمكينه، لا تُحمَّل الجداول أثناء بدء تشغيل قاعدة البيانات — وبدلًا من ذلك، يُنشأ StorageTableProxy خفيف الوزن، ثم يُنشأ table engine الفعلي عند أول وصول. #96283 (xiaohuanlin).
  • تمت إضافة الإعداد input_format_max_block_wait_ms لإخراج data blocks عند انتهاء المهلة، مع السماح بمعالجة البيانات المتبقية عند إغلاق HTTP connection بشكل غير متوقع. #94509 (Mostafa Mohamed Salah).
  • تكامل catalog لـ Google BigLake. هذا يُغلق #95339. #97104 (Konstantin Vedernikov).
  • تمت إضافة system table ‏system.tokenizers التي تعرض جميع أدوات tokenizer المتاحة. #96753 (Robert Schulze).
  • إضافة system table جديدة system.user_defined_functions لمراقبة loading status وconfiguration الخاصة بـ UDF. #90340 (Xu Jia).
  • إضافة table ‏system.jemalloc_stats التي تعرض إحصاءات allocator الذاكرة jemalloc (عبر malloc_stats_print) لتشخيص memory usage على الخوادم المبنية باستخدام jemalloc. كما تمت إضافة endpoint ‏HTTP باسم /jemalloc.html على ClickHouse HTTP interface من أجل تصور تفاعلي لهذه الإحصاءات. #97077 (Antonio Andelic).
  • تمت إضافة table ‏system.jemalloc_profile_text لقراءة heap profiles الخاصة بـ jemalloc وتحليلها. ويتحكم الإعداد jemalloc_profile_text_output_format في output format ‏(raw أو symbolized أو collapsed؛ والقيمة default هي collapsed). ويتحكم jemalloc_profile_text_symbolize_with_inline في resolution الخاصة بـ inline frame ‏(عند تمكينه، تُدرج inline frames على حساب بطء symbolization؛ وعند تعطيله، يتم تخطيها للحصول على مخرجات أسرع). وبالنسبة إلى الصيغة collapsed، يتحكم jemalloc_profile_text_collapsed_use_count في ما إذا كانت stacks تُوزن بحسب عدد التخصيصات الحية (true) أو البايتات الحية (false، وهي القيمة default). يسهّل ذلك profiling الذاكرة وتصور flame graph لملفات jemalloc heap profile. ويُصلح #93248. #97218 (Antonio Andelic).
  • إضافة الإعداد default_dictionary_database، الذي يتيح لـ ClickHouse تحليل external dictionaries المشار إليها من دون محدد قاعدة بيانات ضمن قاعدة بيانات default محددة. وهذا يبسّط migration من القواميس العامة المعرّفة عبر XML إلى Dictionaries معرّفة عبر SQL لكل قاعدة بيانات، بما يسمح لاستعلامات القواميس الحالية (مثل dictGet(‘name’, …)) بالاستمرار في العمل من دون تعديل. #91412 (Dmitrii Plotnikov).
  • دعم auxiliary ZooKeeper لـ DatabaseReplicated. #91683 (RinChanNOW).
  • تنفيذ table function جديدة باسم primes وsystem table جديدة system.primes تحتوي على الأعداد الأولية بترتيب تصاعدي. يُغلق #90839. #92776 (Nihal Z. Miaji).
  • تدعم async inserts النصاب المتوازي (parallel quorum). وتتم مطابقة البيانات المُدرجة عبر النصاب. وإذا عُثر على بيانات مكررة، ينتظر الاستعلام حتى تتم أيضًا مطابقة البيانات المُدرجة سابقًا. #93356 (Sema Checherinda).
  • أُضيفت الدالتان colorOKLABToSRGB وcolorSRGBToOKLAB لتحويل القيمة من sRGB إلى OKLAB والعكس. #93361 (Pranav Tiwari).
  • أُضيف إعداد جديد هو deduplicate_insert يتجاوز insert_deduplicate وasync_insert_deduplicate. #94413 (Sema Checherinda).
  • يتيح إعداد الخادم insert_deduplication_version الترحيل إلى قيمة hash موحّدة لإزالة التكرار. #95409 (Sema Checherinda).
  • أُضيفت دالة hash باسم xxh3_128. #96055 (Raúl Marín).
  • أُضيف الاستعلام OPTIMIZE <table> DRY RUN PARTS <part names> لمحاكاة عمليات الدمج دون اعتماد الجزء الناتج. وقد يكون ذلك مفيدًا لأغراض الاختبار: التحقق من صحة الدمج في الإصدار الجديد، وإعادة إنتاج الأخطاء المرتبطة بالدمج بصورة حتمية، وقياس أداء الدمج بشكل موثوق. #96122 (Anton Popov).
  • أُضيف فحص جديد مفعّل افتراضيًا عبر الإعداد check_named_collection_dependencies لتجنّب حذف المجموعات المسمّاة المستخدمة بواسطة الجداول. #96181 (Pablo Marcos).
  • أُضيفت system.fail_points لفحص نقاط الإخفاق الموجودة في الخادم وما إذا كانت مفعّلة أم لا. وسيساعد ذلك على أتمتة الاختبارات. #96762 (Pedro Ferreira).
  • أُضيف التحكم في الوصول المستند إلى الأدوار إلى Glue catalog. استخدم الإعداد aws_role_arn، ويمكن استخدام aws_role_session_name اختياريًا. #90825 (Antonio Andelic).
  • أُضيف إعداد add_minmax_index_for_temporal_columns الذي ينشئ، عند تفعيله، MinMax indexes تلقائيًا لجميع الأعمدة Date وDate32 وTime وTime64 وDateTime وDateTime64. #93355 (Michael Jarrett).
  • أُضيف دعم الأسماء المستعارة الموسّعة للجداول في JOINs (استعلامات مثل SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). ويغلق #95131. #95331 (Yarik Briukhovetskyi).
  • أُضيف دعم ALTER TABLE RENAME COLUMN لجداول Iceberg. في السابق، كان الدعم يقتصر على ADD COLUMN, DROP COLUMN, and MODIFY COLUMN فقط. #97455 (murphy-4o).

ميزة تجريبية

  • أصبح الفهرس النصي الآن متاحًا للاستخدام العام (GA). #96794 (Robert Schulze).
  • أصبح نوع البيانات QBit لتخزين المتجهات المكمّمة والمعبأة على مستوى البت (المستخدم في البحث التقريبي عن أقرب الجيران) متاحًا للاستخدام العام، ولم يعد يتطلب تفعيل إعداد تجريبي. #95358 (Raufs Dunamalijevs).
  • يمكن الآن لميزة vector search في ClickHouse استخدام النسخ المتماثلة في العنقود لتوزيع الحمل وعمليات البحث عبر أجزاء الفهرس المتجهي. ويتيح ذلك لـ ClickHouse دعم فهارس متجهية كبيرة تتجاوز سعة ذاكرة جهاز افتراضي واحد. #95876 (Shankar Iyer).
  • إضافة server-side AST fuzzer، مع التحكم فيه عبر الإعدادين ast_fuzzer_runs وast_fuzzer_any_query. وعند تفعيله، يُجري الخادم تحويرات عشوائية على كل استعلام بعد تنفيذه المعتاد، مع تجاهل النتائج. #97568 (Alexey Milovidov).
  • إضافة الدالة iif إلى لهجة KQL التجريبية. #94790 (happyso).
  • يراعي استنتاج المخطط الآن allow_experimental_nullable_tuple_type. وعند تفعيله، فإنه يسمح بأن تكون أنواع Tuple المستنتجة من النوع Nullable(Tuple(...))، بحيث يمكن أن تصبح الكائنات المتداخلة المفقودة NULL بدلًا من Tuple مكوَّن من عناصر NULL. #95525 (Nihal Z. Miaji).
  • أصبح الإعداد use_statistics_cache مفعّلًا افتراضيًا الآن، بحيث تُخزَّن إحصاءات الأعمدة مؤقتًا في الذاكرة لتسريع تحسين الاستعلامات دون الحاجة إلى إعادة تحميلها من كل جزء بيانات. #95950 (Han Fei).

تحسين الأداء

  • السماح باستخدام أي expression حتمي في المفتاح الأساسي لتخطي البيانات (مثل ORDER BY cityHash64(user_id) / ORDER BY length(user_id)). بالنسبة إلى التعبيرات الحتمية، يمكن لـ ClickHouse تطبيق expression على ثوابت query واستخدام النتيجة في index المفتاح الأساسي مع predicates مثل = و IN و has. وإذا كان expression أيضًا تقابليًا (injective) (مثل ORDER BY hex(p) أو ORDER BY reverse(tuple(reverse(p), hex(p))))، فيمكن استخدام index بفعالية مع الصيغ المنفية: != و NOT IN و NOT has. يُغلق #10685. يُغلق #82161. #92952 (Nihal Z. Miaji).
  • تحسين format تخزين الإحصاءات. أصبحت جميع الإحصاءات الآن مخزنة في ملف واحد. #93414 (Anton Popov).
  • السماح بالقراءة المتوازية لمحركات/دوال الجداول البعيدة في filesystem cache. #71781 (Kseniia Sumarokova).
  • السماح باستخدام userspace page cache مع الملفات المحلية ودوال الجداول الخاصة بـ object storage. #77874 (Michael Kolupaev).
  • تجنّب عمليات memcpy غير الضرورية في userspace page cache. #77884 (Michael Kolupaev).
  • أصبحت القيمة الافتراضية لـ concurrent_threads_scheduler الآن max_min_fair بدلًا من fair_round_robin. يحسّن ذلك العدالة تحت الأحمال العالية عبر إعطاء الأولوية للاستعلامات ذات الخانات المخصّصة الأقل، بحيث لا تتأثر الاستعلامات القصيرة سلبًا بالاستعلامات طويلة التشغيل. #95300 (Sergei Trifonov).
  • إذا كان استعلام FINAL يستخدم شرط المفتاح الأساسي للتصفية ثم تتبعه skip indexes لشروط أخرى، فستتحقق خطوة المعالجة PrimaryKeyExpand الآن فقط من تقاطع نطاقات المفتاح الأساسي التي جرى اختيارها مبدئيًا. #94903 (Shankar Iyer).
  • عند استخدام parallel replicas مع table functions مثل s3(...)، أصبحت الاستعلامات التي تحتوي على subquery واحد يغلّف table function تُوزَّع الآن تلقائيًا بالتوازي عبر replicas، بينما كان التوزيع المتوازي سابقًا يقتصر على المراجع المباشرة إلى table functions فقط. يُغلق #92264. #96332 (phulv94).
  • تمكين تقسيم ملفات البيانات وملفات النظام داخل cache إلى segments منفصلة. #87834 (MikhailBurdukov).
  • تسريع بعض عمليات hash join من خلال تنفيذ التوجيه الديناميكي لـ ColumnVector::replicate. #79573 (Raúl Marín).
  • تحسين الأداء لـ parallel hash join في حالات predicates المعقدة. سابقًا، كانت الصفوف غير المنضمّة تُعالَج في thread واحد، وهو ما لم يكن مثاليًا؛ وفكرة هذا التحسين هي موازاة معالجة الصفوف غير المنضمّة عبر عدة threads. يمكن التحكم به عبر الإعداد parallel_non_joined_rows_processing. وهو مُمكَّن افتراضيًا. #92068 (Yarik Briukhovetskyi).
  • تحسين طفيف في parsing الخاص بـ JSON type. #93614 (Pavel Kruglov).
  • تحسين البصمة الذاكرية لـ AST. يكون هذا التحسين مفيدًا لأن الحقول لا تُستخدم عند عدم استخدام التمييز البصري، وعند عدم وجود parsing لعبارات VALUES. #93974 (Ilya Yatsishin).
  • تحسين استهلاك الذاكرة لكائنات AST من النوع Tuple المسمّاة. توضع أسماء الأعمدة كسلاسل نصية داخل كائن tuple بدلًا من الاحتفاظ بها في عقد AST حرفية عامة. #94704 (Ilya Yatsishin).
  • جرى تحسين إزالة الافتراضية بإضافة خيارات ربط إضافية. #94737 (Nikita Taranov).
  • تحسين أداء استنساخ replica لجداول ReplicatedMergeTree التي تحتوي على parts كثيرة من خلال batching لطلبات ZooKeeper. #94847 (c-end).
  • عندما كانت خطوة القراءة تحتوي مسبقًا على مرشحات PREWHERE، لم يكن من الممكن إضافة مرشح جديد. يؤخر هذا التغيير تحسين PREWHERE إلى ما بعد تحسين runtime filter في JOIN، بحيث يمكن أيضًا دفع runtime filters إلى PREWHERE. #95838 (Alexander Gololobov).
  • تسريع ضغط codec ‏T64 باستخدام الإرسال الديناميكي على x86. #95881 (Raúl Marín).
  • تسريع uniq على الأنواع الرقمية عبر batching لعمليات insert عند الإمكان (Not null، وليس ‎-If، وبدون GROUP BY، وبدون IPv6 أو String). #95904 (Raúl Marín).
  • تحسينات منخفضة المستوى في Keeper: تبيّن أن ZooKeeper::observeOperations يستحوذ على أكثر من 20% من استهلاك CPU لخيط الاستقبال في ZooKeeper. ويعالج هذا التغيير ذلك عبر: 1. استخدام CityHash64 بدلًا من SipHash في AggregatedZooKeeperLog::stats لأنه أسرع بأكثر من 10 مرات. 2. استخدام std::array<std::atomic<UInt32>, N> بدلًا من std::unordered_map وstd::mutex في Coordination::ErrorCounter. #95962 (Miсhael Stetsyuk).
  • إزالة المحاذاة إلى 64 بايت لـ ProfileEvents::Counter لتوفير الذاكرة. #96097 (Azat Khuzhin).
  • تحسين الذاكرة: تقليص حجم البنية CachedOnDiskReadBufferFromFile بمقدار 50 مرة. #96098 (Azat Khuzhin).
  • عدم نسخ البيانات القديمة عند تغيير حجم hash table إذا كانت فارغة. #96180 (Raúl Marín).
  • دعم JOIN runtime filters لعمليات RIGHT OUTER JOIN. #96183 (Hechem Selmi).
  • أصبح التحسين enable_join_runtime_filters مفعّلًا افتراضيًا الآن. #89314 (Alexey Milovidov).
  • سابقًا، كان تحسين direct read للفهرس النصي يُطبَّق فقط عندما كانت جميع parts تحتوي على text index من نوع materialized. يضيف هذا PR دعمًا جزئيًا: إذا كانت بعض parts تحتوي على text index من نوع materialized، فستستخدمها تلك parts، بينما ستعود parts التي لا تحتوي على text index من نوع materialized إلى تنفيذ filter expression الأصلية. #96411 (Anton Popov).
  • أُضيفت indexes ثانوية من نوع minmax على أعمدة الوقت، وindexes من نوع bloom_filter على عمودَي query_id وinitial_query_id في log tables الخاصة بالنظام لتسريع التصفية. #96712 (Alexey Milovidov).
  • يُطبَّق الآن تحسين lazy materialization على جميع فروع استعلام UNION ALL، وليس على الفرع الأول فقط. وستستفيد الاستعلامات التي تجمع بين قراءات متعددة مرتبة ومقيّدة من جداول MergeTree مختلفة عبر UNION ALL من تأجيل قراءة الأعمدة في كل فرع، مما يقلّل من عمليات I/O. #96832 (Federico Ginosa).
  • تحسين حساب minmax skip index أثناء INSERT من خلال إزالة نسخة بيانات غير ضرورية وتفعيل الحساب المتجهي لقيم min/max للأعمدة الرقمية. #97392 (Raúl Marín).
  • أصبح DeltaLake في Storage يأخذ نتيجة count() من البيانات الوصفية لـ delta lake ويعرض إحصاءات الجدول الصحيحة في system.tables (إجمالي البايتات/الصفوف). #96190 (Kseniia Sumarokova).
  • تُزال الأعمدة غير المستخدمة أيضًا من خطوة القراءة عند القراءة من MergeTree. ويكون ذلك مفيدًا بشكل خاص عندما يُدفَع عامل التصفية إلى PREWHERE. #89982 (János Benjamin Antal).
  • تحسين معالجة استعلام SHOW TABLES من خلال جلب أسماء الجداول فقط، وتحسين getLightweightTablesIterator ليُرجع بنية تحتوي على أسماء الجداول فقط. يحلّ #93835. #94467 (Smita Kulkarni).
  • تحسين assumeNotNull وcoalesce وifNull لتمكين تقليم المفتاح الأساسي وskip index لشرطيات النطاق عندما تكون أعمدة المفتاح مغلّفة بهذه الدوال. يغلق #94689. #94754 (Nihal Z. Miaji).
  • إضافة الامتدادين with_data وwith_stat إلى طلب getChildren في Keeper. يتيح ذلك جلب ليس فقط قائمة العناصر الأبناء، بل أيضًا stat و/أو data الخاصة بها في عملية واحدة. #94826 (Nikolay Degterinsky).
  • يُجرى تحليل الفهرس مرة واحدة فقط (في معظم الحالات)، بغض النظر عمّا إذا كان التنفيذ سينتهي إلى خطة محلية أو خطة تستخدم parallel replicas. #94854 (Nikita Taranov).
  • السماح بتمكين distributed index analysis استنادًا إلى عدد الأجزاء (distributed_index_analysis_min_parts_to_activate) وحجم الفهارس (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin).
  • تمكين تحسين PREWHERE لجداول Iceberg. #95476 (Konstantin Vedernikov).
  • تقليل استهلاك الذاكرة لبعض أصناف AST. #95514 (Raúl Marín).
  • تقييد عدد تدفقات pipeline المُولَّدة عند تمكين split_intersecting_parts_ranges_into_layers. يساعد ذلك على تجنب الاستهلاك المفرط للذاكرة. #96478 (Nikita Taranov).
  • تنفيذ تحسين المجموعات المتكافئة لعمليات joins المتعددة. تستفيد الاستعلامات التي تتضمن عدة عمليات INNER JOIN متتالية الآن من تحسين أفضل لـ filter pushdown. وعندما تُربط الجداول باستخدام أعمدة متكافئة (مثلًا، t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id WHERE t1.id > 10)، تُدفَع عوامل التصفية المطبقة على أي جدول في السلسلة تلقائيًا إلى جميع الجداول. يغلق #96550. #96596 (Vladimir Cherkasov).
  • تحسين فحص البيانات الوصفية لـ delta lake. يستخدم تغييرات من طلب السحب PR في delta-kernel https://github.com/delta-io/delta-kernel-rs/pull/1827. #96686 (Kseniia Sumarokova).
  • في قاعدة البيانات Replicated، لا تُحدِّث العنقود المخزَّن مؤقتًا مع كل استعلام صوري. #96897 (Tuan Pham Anh).
  • استخدم فهرس المفتاح الأساسي عند التصفية باستخدام startsWithUTF8 إذا كانت البادئة تحتوي فقط على محارف ASCII. #97055 (vkcku).

تحسينات

  • إضافة تتبّع OpenTelemetry لطلبات Keeper. #91332 (Miсhael Stetsyuk).
  • خيارات configuration جديدة: logger.startup_console_level و logger.shutdown_console_level للسماح بتجاوز مستوى السجل الخاص بالـ console أثناء بدء تشغيل ClickHouse وإيقافه، على التوالي. #95919 (Garrett Thomas).
  • مراعاة التجاوزات عبر سطر الأوامر عند إعادة تحميل configuration. يُغلق #80294. #80295 (Alexey Milovidov).
  • السماح بتجاوزات key-value لـ parameters الخاصة بـ named collection في table function ‏mongodb. #89616 (vanchaklar).
  • يعمل الآن تحسين read-in-order لجداول Iceberg مع دوال فرز معقّدة مثل icebergBucket و icebergTruncate، وليس فقط مع مراجع column البسيطة. #90256 (Konstantin Vedernikov).
  • إضافة column جديد باسم parts_postpone_reasons في system.mutations لتحسين التشخيص، ويعرض أسباب تأجيل parts. #92206 (Shaohua Wang).
  • تتبّع التغييرات في عدد الصفوف المطلوب قراءتها (بسبب inserts/deletes أو استخدام query condition cache) في DataflowStatisticsCache. #93636 (Nikita Taranov).
  • دعم query ‏SYSTEM RESET DDL WORKER [ON CLUSTER]. يطلب هذا إعادة تعيين state الخاص بـ DDLWorker في thread الرئيسي له. ويفيد ذلك في refresh حالة replica النشط عند تحديث معرّفات المضيفين. #93780 (Tuan Pham Anh).
  • دعم mutation_ids في system.part_log لنوعي الحدث MUTATE_PART و MUTATE_PART_START. #93811 (Shaohua Wang).
  • يمكن الآن إعداد عمليات Background ‏(Mutate و Merge) بشكل مستقل عبر profile ‏‘background’. سابقًا، كانت هذه العمليات تشترك في Settings مع queries العادية عبر profile ‏‘default’. #93905 (Arsen Muk).
  • إضافة مزيد من المعلومات إلى system.crash_log. #94112 #95857 (Miсhael Stetsyuk).
  • تمت إضافة metric جديد باسم QueryNonInternal لتتبّع عدد queries غير الداخلية الجاري تنفيذها. يُعرَض هذا metric باسم ClickHouseMetrics_QueryNonInternal ويساعد operators على مراقبة Concurrency الخاصة بالـ query مقارنةً بالحد max_concurrent_queries، الذي ينطبق فقط على queries غير الداخلية. #94284 (Ashwath Singh).
  • دعم جمع إحصاءات بايتات الإدخال لـ columns من compact parts في RuntimeDataflowStatisticsCacheUpdater. #94626 (Nikita Taranov).
  • إضافة check لاكتشاف سوء إعداد Keeper الذي يؤدي إلى فشل تجميع cluster. يُغلق #60932. #94682 (Konstantin Bogdanov).
  • تحسين deserialization لبادئات JSON أثناء loading الخاص بالـ part. #94848 (Pavel Kruglov).
  • إعادة تنظيم مسار الكتابة باستخدام مسار INSERT الكامل، مما يؤدي إلى تشغيل العروض المادية على الجدول الهدف. #94890 (Kai Zhu).
  • استخدام تحسينات خطة البحث عن التشابه المتجهي فقط إذا كان الفهرس موجودًا لعمود البحث. #94998 (Eduard Karacharov).
  • التحقق من حد الذاكرة الإجمالي قبل مصادقة المستخدم، وإصدار (total) memory limit exceeded إذا كان الحد الإجمالي أكبر من المسموح به. #95003 (Nikolai Kochetov).
  • إضافة خيار الضبط throw_on_unmatched_row_policies الذي، عند تمكينه، يطلق استثناءً إذا نفّذ مستخدم استعلامًا على جدول لديه سياسات صفوف ولكن لا تنطبق أيٌّ منها على ذلك المستخدم — مما يمنع السلوك الملتبس المتمثل في إرجاع جميع الصفوف بسبب سوء ضبط التحكم في الوصول. #95014 (Vitaly Baranov).
  • تحديث رموز وصول S3 ديناميكيًا في الاستعلامات الطويلة مع Unity Catalog. ويغلق هذا #93981. #95069 (Konstantin Vedernikov).
  • تعطيل اضمحلال الصفحات المتسخة في jemalloc إذا كان ClickHouse تحت ضغط ذاكرة مستمر لمدة memory_worker_decay_adjustment_period_ms ميلي ثانية. وإعادة تمكين اضمحلال الصفحات المتسخة في jemalloc إذا كان ClickHouse يعمل في ظروف طبيعية للمدة الزمنية نفسها. #95145 (Antonio Andelic).
  • دعم ZooKeeper الإضافي في S3Queue باستخدام الإعداد keeper_path من s3Queue. #95203 (Diego Nieto).
  • مراعاة max_parts_to_merge_at_once في عمليات دمج الأجزاء الخاصة بحذف TTL. #95315 (Kseniia Sumarokova).
  • إضافة connection_address وconnection_port إلى query_log لعكس الاتصال الفعلي (address وport يُستبدلان عند الاتصال عبر proxy وauth_use_forwarded_address=1). #95471 (Yakov Olkhovskiy).
  • إصلاح احتساب الذاكرة غير الصحيح لذاكرة التخزين المؤقت لشروط الاستعلام. وكانت المشكلة الأساسية أنه لم يأخذ في الحسبان مفتاح ذاكرة التخزين المؤقت المكوَّن من عدة سلاسل نصية (مثل part_name ومعرّف الجدول وشرط SQL بالكامل). #95478 (Nikita Mikhaylov).
  • سيتيح الخادم الذي يبدأ باستخدام التهيئة المضمنة التعامل مع المستخدمين والمنح، مع حفظها في الدليل access، كما في التهيئة العادية. وهذا يحسّن الاختبار. كما جرى تمكين جميع access_control_improvements في التهيئة المضمنة وفي clickhouse-local. #95481 (Alexey Milovidov).
  • تحسين رسائل خطأ المصادقة الخاصة بـ S3 لتتضمن تلميحًا للتحقق من بيانات الاعتماد عند رفض الوصول. #95648 (Gerald Latkovic).
  • تمكين ذاكرة التخزين المؤقت للإحصاءات وضبط فترة تحديثها على 300 ثانية. #95841 (Han Fei).
  • إضافة اسم المكوّن إلى system.aggregated_zookeeper_log. #95882 (Antonio Andelic).
  • تخطّي القراءات من object storage عند الاستعلام عن جداول DeltaLake من system.tables. #95899 (Antonio Andelic).
  • تفعيل enable_max_bytes_limit_for_min_age_to_force_merge افتراضيًا إذا كانت قيمة الإعداد compatibility هي 26.2 أو أعلى. #95917 (Christoph Wurm).
  • أصبح Delta Lake متاحًا الآن على MacOS. إغلاق #95979. #95985 (Alexey Milovidov).
  • في الإصدارات السابقة، عند دمج تعبيرات ALTER المتعارضة مع UPDATE وRENAME COLUMN، كان يُطرَح خطأ منطقي بدلًا من استثناء مناسب. إغلاق #70678. #96022 (Alexey Milovidov).
  • تحسين مخرجات المساعدة لجميع تطبيقات ClickHouse وإضافة الخيار --no-sudo مع بعض الإصلاحات. وهذا استكمال لـ #58244 من Ilya Yatsishin. #96025 (Alexey Milovidov).
  • إضافة alias ‏distanceCosine لـ cosineDistance لأن جميع دوال المسافة الأخرى لديها بالفعل alias بهذا الشكل. #96065 (Raufs Dunamalijevs).
  • إضافة دعم لامتداد with_data في Keeper لتحسين جلب الجداول في Database Replicated. #96090 (Nikolay Degterinsky).
  • تحديث chdig إلى v26.2.1 (ميزات جديدة ودعم MacOS). #96113 (Azat Khuzhin).
  • تحسين filter pushdown لـ numbers وprimes. يمكن لـ ClickHouse الآن اشتقاق حدود قيم متحفظة من شروط WHERE عندما يتعذر اشتقاق حدود دقيقة، وتقييد توليد التسلسل بناءً على ذلك (على سبيل المثال، بالنسبة إلى WHERE number % 5 < 2 AND number > 100 AND number < 300، لن يولّد ClickHouse إلا الأرقام بين 100 و300، ثم يطبّق predicate)، ما يتجنب عمليات المسح غير المحدودة. إغلاق #84853. إغلاق #93913. #96115 (Nihal Z. Miaji).
  • كان Formatter يضع SELECT سابقًا بين قوسين عند وجود clause ‏COMMENT لإزالة اللبس في parsing. وبدلًا من ذلك، يُخرِج COMMENT قبل AS SELECT، مما يزيل هذا اللبس من دون أقواس. #96293 (Alexey Milovidov).
  • أصبح إعداد allow_impersonate_user في config موجودًا الآن ضمن القسم access_control_improvements بدلًا من كونه server setting مستقلًا. #96451 (Vitaly Baranov).
  • جعل إعداد core_dump.size_limit في configuration قابلًا لإعادة التحميل الفوري، لتجنب الحاجة إلى إعادة تشغيل server حتى تدخل تغييرات configuration حيّز التنفيذ. #96524 (Miсhael Stetsyuk).
  • تحسين قابلية التشغيل البيني بين Profiler المعالج وProfiler الزمن الحقيقي مع مهلات socket. #96601 (Sergei Trifonov).
  • منع عودة البيانات المحذوفة للظهور إذا جرى تشغيل ADD COLUMN بسرعة بعد تنفيذ mutation ‏DROP COLUMN. #96713 (Alexey Milovidov).
  • تغيير نوع function_id في system.instrumentation من LowCardinality(Int32) إلى Int32. #96726 (Copilot).
  • سيحترم الانتظار المتزامن لعمليات mutation إلغاء الاستعلام والمهل الزمنية. #96756 (Alexey Milovidov).
  • إضافة أمر النظام SYSTEM RELOAD DELTA KERNEL TRACING <level> لإتاحة تغيير مستوى logging الخاص بـ delta-kernel، وهو ما قد يكون مفيدًا في استكشاف الأخطاء وإصلاحها. #96763 (Kseniia Sumarokova).
  • تُطبَّق التصفية حسب عائلة عناوين IP، أي إعدادات dns_allow_resolve_names_to_ipv4/ipv6، حتى إذا كانت DNS cache معطلة. #96810 (c-end).
  • تحسين إمكانيات introspection في jemalloc. #96840 (Azat Khuzhin).
  • إصلاح تسبُّب واجهة الويب /play في ظهور الخطأ QUERY_CACHE_USED_WITH_SYSTEM_TABLE عند الاستعلام عن جداول النظام. #96869 (Alexey Milovidov).
  • تحسين واجهة الويب: تغيير favicon للإشارة إلى حالة الاستعلام قيد التنفيذ؛ وعرض الأخطاء من الاستعلامات المساعدة (تحميل قواعد البيانات والجداول) بدلًا من تجاهلها بصمت. يُغلق #85055. #96883 (Alexey Milovidov).
  • جعل اللوحة اليسرى في واجهة /play قابلة للنقر لإظهار قائمة قواعد البيانات أو إخفائها. #96884 (Alexey Milovidov).
  • أصبح DROP DATABASE الآن يحذف الجداول بترتيب عكسي للتبعيات، مما يحسّن السلامة عند التعطل عندما تحتوي قاعدة البيانات على جداول لها تبعيات تحميل (مثل جداول Distributed التي تستخدم joinGet). #97057 (Alexey Milovidov).
  • ترقية yaml-cpp لمنع تجاوز YAML غير الصالح. #97333 (Azat Khuzhin).
  • إظهار مؤشر تحميل في الشريط الجانبي لـ play.html أثناء جلب الجداول. #97531 (Alexey Milovidov).
  • إضافة زر للنسخ إلى الحافظة لنتائج الاستعلام الخام في واجهة الويب المضمنة (play.html). #97532 (Alexey Milovidov).
  • إصلاح مُموِّه الاستعلامات (clickhouse-format --obfuscate) لإنتاج SQL قابلة للتحليل في مزيد من الحالات. #97584 (Alexey Milovidov).

إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)

  • بعد عمليات ALTER الخاصة بالبيانات الوصفية فقط، مثل توسيع عناصر Enums، قد يؤدي تحسين التجميع باستخدام projection إلى حدوث استثناء. #84143 (Alexey Milovidov).
  • تستخدم materialized views الآن قاعدة البيانات التي أُنشئت فيها كسياق تنفيذ، ما يعني الآتي: - يمكن الاستغناء عن تحديد قاعدة البيانات صراحةً في الأسماء المشار إليها في استعلام select الخاص بالعرض - إذا لم يُحدَّد اسم قاعدة البيانات صراحةً، فسيُفترض استخدام قاعدة البيانات نفسها التي أُنشئ فيها materialized view. #88193 (Dmitry Kovalev).
  • إصلاح استبدال query parameter في authentication methods الخاصة بـ CREATE USER عند استخدام ON CLUSTER. إذ لم تكن query parameters في authentication methods (مثل password) تُستبدل، مما كان يتسبب في ظهور أخطاء UNKNOWN_QUERY_PARAMETER على العقد البعيدة. #92777 (xiaohuanlin).
  • إصلاح حالات عدم الاتساق في index analysis الخاص بـ text index للدوال has وmapContainsKey وmapContainsValue. في السابق، كان يمكن أن تُرجع queries التي تستخدم هذه الدوال نتائج مختلفة بحسب ما إذا كان expression قد قُيِّم باستخدام text index أو بدونه. #93578 (Anton Popov).
  • إصلاح crash عند Attach table إلى قاعدة بيانات MaterializedPostgreSQL إذا كانت dropReplicationSlot throws أثناء فك تكدس الاستدعاءات. #96871 (Alexey Milovidov).
  • كان من الممكن أن تتسبب backups في crash للخادم عند إجراء عدد كبير من backups concurrent تتعارض على الملفات نفسها. #93659 (Alexey Milovidov).
  • إصلاح queries التي تستخدم parallel replicas وJOIN مع table غير MT. يغلق #92056. #93902 (Igor Nikonov).
  • إصلاح مشكلة كانت تؤدي إلى أن columns في Iceberg التي تحتوي أسماؤها على نقطة تُرجع NULL باعتبارها values. #94335 (Mikhail Koviazin).
  • إصلاح التعامل مع strings بترميز UTF8 في stringJaccardIndexUTF8 وتحسين الأداء. #94613 (Joanna Hulboj).
  • إصلاح حالات overflow المحتملة في WITH FILL STALENESS (التي قد تؤدي إلى UB و/أو حلقات لا نهائية). وإصلاح احتمال حدوث حلقة لا نهائية بسبب القفزات الكبيرة. وإضافة دعم analyzer القديم (غالبًا لاختبارات stress). #94663 (Azat Khuzhin).
  • إصلاح احتمال تعليق distributed queries عندما تُحل hostnames إلى عدة عناوين ويتجمد replica بعيد. #94726 (c-end).
  • إصلاح نتيجة غير صحيحة عند joining عدة table expressions، عندما يكون leftmost table expression عبارة عن table function من نوع -Cluster. يحل #89996. #94748 (Konstantin Bogdanov).
  • إصلاح pruning غير الصحيح لكل من primary key وskip index بالنسبة إلى predicates التي تتضمن toWeek وtoYearWeek وtoStartOfWeek وtoLastDayOfWeek وtoDayOfWeek، مع إصلاح الاستثناءات في بعض هذه الدوال للاستعلامات الصحيحة التي تستخدم LowCardinality(String). #94816 (Nihal Z. Miaji).
  • إزالة تجاوز التحقق من الأذونات دون داعٍ في استعلامات ATTACH الخاصة بعرض يستخدم SQL Security. يمنع هذا احتمال تصعيد الامتيازات عندما يقوم مستخدم بإرفاق عرض مع definer من دون التحقق من صلاحيات الوصول المطلوبة. #94865 (pufit).
  • إصلاح تعطل أثناء بدء تشغيل ReplicatedMergeTree ناتج عن إزالة متزامنة لأدلة delete_tmp_*. #94892 (myeongjun).
  • إصلاح فقدان معلومات deduplication عند تنفيذ INSERT في جداول Iceberg مع materialized views، مما كان يتسبب في حدوث استثناء. #94938 (Daniil Ivanik).
  • إصلاح خلل كان يؤدي إلى أن SYSTEM DROP QUERY CACHE TAG 'TAGNAME' ON CLUSTER <CLUSTERNAME> يحذف cache بالكامل على مستوى cluster. #94978 (Rory Crispin).
  • الحفاظ على index granularity الثابتة (use_const_adaptive_granularity) بعد عمليات Vertical merge (الإصدار v2 مع إصلاح لـ Nested، وبشكل عام). #95013 (Azat Khuzhin).
  • إصلاح race في filesystem cache في الإصدار 26.1 بعد [ClickHouse/ClickHouse#82764](https://github.com/ClickHouse/ClickHouse/pull/82764). #95042 (Kseniia Sumarokova).
  • إصلاح إلغاء table function ‏postgresql() عبر KILL QUERY واستعلام الإلغاء (Ctrl+C) في clickhouse-client. #95136 (Roman Vasin).
  • إصلاح استنتاج الأنواع للأعمدة المؤهلة من source tables عند استخدام عدة joins مع عبارة USING. سابقًا، كانت الـ joins اللاحقة تحدّث types الخاصة بأعمدة المصدر الأساسية بشكل غير صحيح إلى common supertype حتى عندما لا يكون column مشاركًا في ذلك join (على سبيل المثال، في SELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a)، فإن column ‏t2.a يُستخدم فقط في join الأول، لذلك يجب أن يكون نوعه هو supertype لـ t1.a وt2.a مع استبعاد t3.a). وقد يؤدي ذلك إلى أخطاء منطقية أو أعطال عندما تتوقع الدوال column types تختلف عما يظهر فعليًا في Execution Plan. #95157 (Vladimir Cherkasov).
  • تنفيذ تحويل الأعمدة مرة واحدة فقط أثناء جلب محتوى قائمة manifest ‏.avro والملفات. #95164 (Daniil Ivanik).
  • إصلاح الحساب غير الصحيح لأحجام JSON column، والذي قد يؤدي إلى استخدام مفرط للذاكرة أو column statistics غير صحيحة. #95207 (Azat Khuzhin).
  • إصلاح احتساب الذاكرة غير الدقيق عند تطبيق patch parts كبيرة بعد lightweight updates. سابقًا، كان تطبيق الرقع الكبيرة قد يتسبب في استخدام مفرط للذاكرة، وينتج عنه إنهاء server process بواسطة OOM killer. #95231 (Anton Popov).
  • إصلاح سلوك غير معرّف كان قد يتسبب في نتائج غير صحيحة أو استثناء عند رجوع distributed query مع max_parallel_replicas إلى replica محلية أثناء index analysis. #95263 (Azat Khuzhin).
  • إصلاح aggregation للأعمدة المتناثرة مع sum وtimeseries عندما يكون group_by_overflow_mode مضبوطًا على any. #95301 (Mikhail Koviazin).
  • إصلاح مشكلة موثوقية في سياسة القرص plain_rewritable، إذ كان من الممكن أن يؤدي خطأ في الشبكة أثناء فك ارتباط ملف بيانات وصفية إلى ترك وحدة التخزين في حالة غير متسقة. #95302 (Mikhail Artemenko).
  • استبدال Date بـ Date32 في Iceberg. #95322 (Konstantin Vedernikov).
  • سيُخفى الآن وسيط password في table function‏ redis ضمن السجلات وجداول النظام (مثل: query_log). #95325 (János Benjamin Antal).
  • إصلاح خطأ كان يسمح بحذف الجداول أو تعديلها بينما كان distributed query لا يزال قيد التنفيذ عليها، مما قد يؤدي إلى استثناءات أو نتائج غير صحيحة. #95356 (Azat Khuzhin).
  • إصلاح خطأ منطقي في بعض الحالات عند استخدام LIMIT/OFFSET بقيم سالبة في distributed queries. #95357 (Nihal Z. Miaji).
  • إصلاح خطأ كان يتسبب في أن يطلب clickhouse-client كلمة المرور مرتين عند الاتصال باستخدام ssh. #95372 (Isak Ellmer).
  • إصلاح حالة data race في وحدة التخزين S3(Azure)Queue. #95385 (Kseniia Sumarokova).
  • إصلاح خطأ في مرشح prewhere تسببت فيه تعبيرات lambda داخل prewhere. #95395 (Xiaozhe Yu).
  • إصلاح optimize_syntax_fuse_functions بحيث لا يعيد Rewrite‏ sum/count/avg إلى sumCount() عندما يكون وسيط aggregate من النوع Nullable. يغلق #95390. #95441 (Nihal Z. Miaji).
  • تجنب احتمال حدوث crash في distributed queries عند الإلغاء. #95466 (Aleksandr Musorin).
  • إصلاح deduplication للبث من محرك S3(Azure)Queue. #95467 (Kseniia Sumarokova).
  • إصلاح تحديث row policies المعيّنة للمستخدم الأولي في distributed queries. #95469 (Vitaly Baranov).
  • إصلاح التحقق من الأقراص المشفرة فوق plain_rewritable (يُصلح احتمال ظهور It is not possible to register multiple plain-rewritable disks with the same object storage prefix). #95470 (Azat Khuzhin).
  • كانت table function‏ mergeTreeProjection تفتقر إلى تحقق من الوصول، مما أتاح للمستخدمين الذين لا يملكون إذن SELECT على جدول (لكن لديهم أذونات table functions) قراءة البيانات من projections الخاصة به. يضيف هذا الإصلاح تحقق الوصول نفسه الموجود بالفعل في mergeTreeIndex وmergeTreeAnalyzeIndexes. #95480 (Alexey Milovidov).
  • إصلاح احتمال حدوث خطأ منطقي أثناء قراءة subcolumn الحجم من dynamic subcolumns لأنواع Dynamic/JSON. #95573 (Pavel Kruglov).
  • إصلاح تراجع في النسخ المتماثل بدون نسخ (التجريبي) أُدخل في #94262، حيث كان يمكن حذف الأجزاء المشتركة قبل أن تنتهي النسخ المتماثلة الأخرى من جلبها. #95597 (filimonov).
  • إصلاح تعطل أثناء تطبيق tupleElement على Arrays من JSON. يُغلق #95581. #95647 (Pavel Kruglov).
  • إصلاح استثناء خطأ منطقي عند استخدام مُطابِق (*) داخل دالة لامبدا ضمن عبارة VALUES في JOIN مع USING. يُغلق #93675. #95661 (Vladimir Cherkasov).
  • إصلاح الخطأ المنطقي There was an error: Cannot obtain error message عند انتظار distributed DDL وحذف قاعدة بيانات Replicated بالتزامن مع ذلك. يُصلح #95539. #95664 (Alexander Tokmakov).
  • إصلاح إرجاع الدالة IN نتائج غير صحيحة مع قيم NULL عندما يكون transform_null_in مُمكّنًا. يُغلق #65776. #95674 (Nihal Z. Miaji).
  • التعامل بشكل صحيح مع الأنواع LowCardinality Nullable في CAST عندما يكون الإعداد cast_keep_nullable مُمكّنًا. يُغلق #95670. #95747 (Alexey Milovidov).
  • إصلاح squashing لبيانات delta lake المُقسّمة إلى partitions. #95773 (Kseniia Sumarokova).
  • إصلاح حالة تسابق لعمود join من نوع Nullable في مرشحات وقت التشغيل. #95775 (Hechem Selmi).
  • إصلاح خطأ منطقي محتمل في استعلام يحتوي على مُطابِق (*, table.*) وanalyzer_compatibility_join_using_top_level_identifier عندما يكون لعمود USING أنواع مختلفة في الجداول وفي قائمة SELECT. يُغلق #90477. #95808 (Vladimir Cherkasov).
  • إصلاح مشكلات سلامة الذاكرة في عمليات thread pool المتوازية (backups وaggregation وdistributed queries) التي كان يمكن أن تتسبب في استثناءات عند حدوث خطأ أثناء scheduling المهام. #95818 (Raúl Marín).
  • إصلاح تعطل عند تنفيذ DROP WORKLOAD بالتزامن مع استعلامات تستخدم workload الجاري حذفه. #95856 (Alexey Milovidov).
  • إصلاح بطء الأداء عند الاستعلام عن جداول النظام باستخدام مستخدم لديه أذونات محدودة على عدد كبير من قواعد البيانات. يُغلق #89371. #95874 (pufit).
  • إصلاح تنفيذ tupleElement على JSON مع مسارات متداخلة، إذ كان يمكن أن يؤدي سابقًا إلى نتيجة استعلام خاطئة. #95907 (Pavel Kruglov).
  • إصلاح خطأ NOT_SUPPORTED كان يمكن أن يحدث عند استخدام خوارزمية join direct مع جدول MergeTree فارغ. #95935 (Vladimir Cherkasov).
  • إصلاح مشكلة عدم اقتراح العميل للأسماء المستعارة للإعدادات وعدم إكمالها تلقائيًا، يُغلق #92190. #95945 (phulv94).
  • إصلاح event_date في system.asynchronous_metric_log. #95947 (Raúl Marín).
  • إصلاح skipping paths في نوع البيانات JSON. سابقًا، مع JSON(SKIP path) كان يتم تخطي جميع مفاتيح JSON التي تبدأ بالبادئة path، بما في ذلك مفاتيح مثل "pathpath"، ما كان قد يؤدي إلى فقدان البيانات لهذه المسارات أثناء insert. الآن أُصلحت هذه المشكلة، ولم يعد يتم تخطي سوى المفتاح "path". #95948 (Pavel Kruglov).
  • يجب ألا يتم اعتبار part الذي يحتوي على projections غير معروفة مفقودًا إلى الأبد. #95952 (Mikhail Artemenko).
  • إصلاح تحوّل السلسلة الفارغة إلى NULL في جدول Join مع مفتاح Nullable(String). يُغلق #71414. #96002 (Alexey Milovidov).
  • أصبح بإمكان engine PostgreSQL الآن قراءة BOOLEAN[] بشكل صحيح. يُغلق #72754. #96006 (Alexey Milovidov).
  • إصلاح format ‏ProtobufList عند القراءة من ملف فارغ. يُغلق #70059. #96007 (Alexey Milovidov).
  • إصلاح مشكلة إنتاج format ‏ProtobufList سجلًا وهميًا للجداول الفارغة. يُغلق #72596. #96010 (Alexey Milovidov).
  • إصلاح عدم تطابق الأنواع في الدالة if بين UInt64 و Int32 في حالة غير معتادة من distributed queries و PREWHERE، مع type inference. يُغلق #70017. #96012 (Alexey Milovidov).
  • إصلاح queries المترجمة بواسطة JIT التي تتضمن أنواع Bool. #96013 (Alexey Milovidov).
  • إصلاح logical error عند قراءة UUID column من عمود TEXT في SQLite. يُغلق #71263. #96016 (Alexey Milovidov).
  • إصلاح تحويل الأنواع في engine SQLite لكل من DateTime و Date و UUID وأنواع أخرى. يُغلق #73481. #96017 (Alexey Milovidov).
  • كان يتم تهريب قيم FixedString بشكل غير صحيح في queries المرسلة إلى قواعد البيانات الخارجية، SQLite و PostgreSQL. يُغلق #73519. بمشاركة @jh0x في التأليف. #96019 (Alexey Milovidov).
  • إصلاح فشل assertion في WindowTransform عند استخدام إزاحة PRECEDING كبيرة. يغلق #75852. #96026 (Alexey Milovidov).
  • إصلاح خلل قد يؤدي إلى تلف البيانات عند استخدام async inserts متزامنة بأسماء المعلمات نفسها ولكن بقيم مختلفة. #96035 (Seva Potapov).
  • إصلاح الفترة الزمنية لأدوات التحليل العامة (ويتحكم فيها global_profiler_real_time_period_ns و global_profiler_cpu_time_period_ns). فبدلًا من القيمة المضبوطة، كانت تُستخدم قيمة مقصوصة، مما يؤدي إلى إيقاظ أداة التحليل أكثر من المقصود. #96048 (Antonio Andelic).
  • سابقًا، إذا كان ملف البيانات المرجعي داخل ملف manifest في Iceberg الخاص بـ position delete موجودًا في entry لكنه كان null، فلم نكن نحصل على الحدود الصحيحة لملفات البيانات المقابلة. يُصلح هذا الـ PR هذا الخلل. #96061 (Daniil Ivanik).
  • إصلاح سحب الأدوار الافتراضية. #96103 (Vitaly Baranov).
  • إصلاح use-after-free في تحليل الفهرس في حالة نادرة تجمع بين تعطيل use_primary_key ووجود عدد كبير جدًا من حالات الفصل بين الشروط التي تستخدم الفهرس. #96112 (Alexey Milovidov).
  • إصلاح تراجع في codec ‏Gorilla عندما لا يتطابق الحجم المحدد صراحةً مع حجم نوع البيانات، ويكون حجم buffer صغيرًا جدًا. في الإصدارات السابقة، كان هذا يؤدي إلى استثناء عند فك الضغط. يغلق #78253. #96118 (Alexey Milovidov).
  • تجنب حدوث deadlock في القواميس المحمّلة عندما يشير أحد القواميس إلى جدول Merge يشير إليه بشكل递عي. يغلق #78360. #96120 (Alexey Milovidov).
  • إصلاح use-of-uninitialized-value في formatDateTime مع Formatterات غير ثابتة العرض، مثل نمط MySQL ونمط JODA. #96133 (Alexey Milovidov).
  • أدى الجمع بين الإعدادين use_const_adaptive_granularity و index_granularity_bytes (والذي يعني “granularity غير تكيفية”) إلى سوء حساب عدد الصفوف المطلوب قراءتها وحدوث استثناء. #96143 (Alexey Milovidov).
  • قد يؤدي تنفيذ mutation غير صالحة من ALTER UPDATE على الجداول الشبيهة بالملفات في object storage، مثل S3 وAzure، إلى إلغاء مرجعية nullptr. يغلق #92994. #96162 (Alexey Milovidov).
  • إصلاح إرجاع AccessRights::contains نتائج غير صحيحة مع عمليات revoke الجزئية. #96170 (pufit).
  • إصلاح تصادم hash في query condition cache للثوابت المطوية في CTE، ما قد يؤدي إلى نتيجة query خاطئة. يغلق #96060. #96172 (Alexey Milovidov).
  • إصلاح احتمال حدوث توقّف تام في ProcessList. وقد يحدث ذلك بسبب احتمال انعكاس ترتيب الأقفال إذا جرى تفعيل متتبّع memory overcommit أثناء إضافة مهمة إلى مدقّق الإلغاء. #96182 (Antonio Andelic).
  • إصلاح خلل كان قد يؤدي إلى إرجاع نتائج غير صحيحة في الاستعلامات التي تتضمن عمليات ربط خارجية (LEFT أو RIGHT أو FULL) مع عدة عمليات INNER JOIN، وذلك بسبب إعادة ترتيب غير قانونية لعمليات الربط. فعندما كان شرط ON لعملية الربط الخارجية يشير إلى أعمدة من عدة جداول تم ربطها مسبقًا، كان المُحسِّن لا يراعي جميع تبعيات الجداول، ما قد يؤدي إلى إعادة ترتيب عمليات الربط بشكل غير صحيح والتسبب في فقدان بعض الصفوف. إغلاق #95972. #96193 (Vladimir Cherkasov).
  • عندما لا تكون هناك إحصاءات معرّفة لجدول ما، ينبغي ألّا يحاول ClickHouse تحميلها. وهذا يتجنّب بعض العبء الإضافي (أكثر من 100 مللي ثانية) الناتج عن التحقق من وجود ملفات الإحصاءات. (issue #96068). #96233 (Han Fei).
  • إصلاح optimize_syntax_fuse_functions بحيث لا يعيد كتابة sum/count/avg إلى sumCount() عندما تكون وسيطة التجميع من النوع LowCardinality(Nullable). إغلاق #95390. #96239 (Nihal Z. Miaji).
  • إصلاح تقليم الأقسام غير الصحيح للدالتين not IN وnot has في بعض الحالات. #96241 (Nihal Z. Miaji).
  • إصلاح stack-use-after-scope في فهرس تشابه المتجهات. #96259 (Alexey Milovidov).
  • إصلاح مشكلة عدم تعرّف مشغّل الاختبارات على تعليقات تلميحات الأخطاء عندما يسبق الاستعلامَ تعليقُ SQL. #96336 (Yakov Olkhovskiy).
  • إصلاح خطأ منطقي في KeyCondition عندما يكون للجدول مفتاح أساسي قابل للقيم الفارغة، ويستخدم الاستعلام الدالة coalesce بحيث تكون وسيطتها الأولى ثابتة. #96340 (Alexey Milovidov).
  • كان التفاعل بين GROUPING SETS وgroup_by_use_nulls ونوع البيانات Tuple مع وجود LowCardinality بداخله قد ينتج بنية block غير متوقعة في query pipeline، مما يؤدي إلى خطأ منطقي. وقد ظهر ذلك بعد إدخال Tuple من النوع Nullable. #96358 (Alexey Milovidov).
  • كان من الممكن إنشاء جدول باستخدام تعبير فارغ () بوصفه index، مما أدى إلى وصول غير صالح إلى الذاكرة. #96363 (Alexey Milovidov).
  • إصلاح تعطل في المحلّل القديم عند وجود JOIN وأسماء مستعارة مكررة. #96405 (Ilya Golshtein).
  • إصلاح الخطأ Nested columns sizes are inconsistent with local_discriminators الناتج عن تحسين خاطئ للتصفية الموضعية لأعمدة Variant. #96410 (Alexey Milovidov).
  • إصلاح مشكلة تجاهل CREATE TABLE ... CLONE AS ... للمؤهِّل الكامل للجدول المصدر. #96415 (Hasyimi Bahrudin).
  • إصلاح إلغاء table function ‏mysql باستخدام KILL QUERY وإلغاء الاستعلام (Ctrl+C) في clickhouse-client. #96437 (Roman Vasin).
  • إصلاح حالة livelock في خيط التحقق من الإلغاء للاستعلامات ذات القيم المرتفعة لـ max_execution_time. #96450 (Sergei Trifonov).
  • إصلاح خطأ منطقي في بعض الحالات عند استخدام LIMIT/OFFSET بقيم كسرية في الاستعلامات الموزعة. #96475 (Nihal Z. Miaji).
  • إصلاح إلغاء مرجعية مؤشر فارغ في بعض التعبيرات التي تتضمن lambda functions. #96479 (Alexey Milovidov).
  • إصلاح نتائج غير صحيحة عند تحويل الأعمدة LowCardinality إلى Nullable. #96483 (Nihal Z. Miaji).
  • إصلاح تعطل عند إنشاء Iceberg table مع عبارة ORDER BY تشير إلى عمود غير موجود أو تستخدم argument موضعيًا. يغلق #93280. #96484 (Konstantin Vedernikov).
  • إصلاح استثناء runtime filter لأعمدة Tuple ذات الحقول الفرعية Nullable. #96509 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR في القارئ native لـ Parquet V3 عندما يحتوي عمود عامل التصفية PREWHERE على قيم UInt8 غير Boolean. #96594 (Alexey Milovidov).
  • إصلاح إعادة توليد الفهرس الضمنية في replicated tables أثناء تغييرات metadata. #96600 (Raúl Marín).
  • إصلاح حالة datarace عند DROP WORKLOAD. #96614 (Sergei Trifonov).
  • إصلاح خطأ في عمليات الكتابة إلى Iceberg table، حيث قد تؤدي عمليات insert المقسمة إلى partition إلى توزيع غير صحيح للبيانات عبر ملفات partition. #96620 (Konstantin Vedernikov).
  • إصلاح heap-use-after-free في CREATE TABLE مع القيود. #96669 (Nikita Taranov).
  • التحقق من witness version في bech32 لتجنب تجاوز سعة buffer. #96671 (Raúl Marín).
  • إصلاح إرجاع system.tables لأخطاء عند إنشاء Data Lake REST catalog بإعداد auth_header غير صالح. #96680 (Han Fei).
  • إصلاح إرجاع min(timestamp) لبداية الحقبة (1970-01-01) عبر _minmax_count_projection بعد دمج TTL عندما تُصفّى جميع الصفوف في block. #96703 (Raquel Barbadillo).
  • تحسين التحقق من إعداد iceberg_metadata_file_path لمنع path traversal وضمان وجود ملف metadata المحدد داخل directory الجدول. #96754 (Daniil Ivanik).
  • إصلاح تعطل في ifNull مع argument من نوع Variant مستخدم في GROUP BY. #96790 (Alexey Milovidov).
  • أُصلِحت تصادمات مفاتيح الذاكرة المؤقتة بين الجداول التي تستخدم الإعداد table_disk=1. #96818 (Raufs Dunamalijevs).
  • أُصلِح تعلّق خيط التنظيف الخاص بـ MemoryWorker بسبب حالة تسابق. #96819 (Antonio Andelic).
  • لم يَعُد يجري تسجيل البيانات التي تحتوي على بيانات اعتماد في كتالوجات Iceberg. #96831 (Konstantin Vedernikov).
  • أُصلِحت حالة الخروج الخاصة بـ clickhouse-client بعد حدوث خطأ في الخادم. #96841 (Vitaly Baranov).
  • قد تُرجِع الاستعلامات التي تتضمن CROSS JOIN مع تفعيل النسخ المتماثلة المتوازية نتائج غير صحيحة. يُصلح هذا #74337. #96848 (Igor Nikonov).
  • أُصلِحت مشكلة فشل استعلامات ALTER TABLE DROP COLUMN بعد تنفيذ تحديث خفيف سابقًا على العمود نفسه. #96861 (Anton Popov).
  • أُصلِح تجاوز المكدس (انهيار) عند إنشاء نسخ احتياطية أرشيفية (.zip, .tzst) على قرص تخزين كائنات plain_rewritable. #96872 (Alexey Milovidov).
  • أُصلِح انهيار الخادم عند فشل النسخ الاحتياطي بسبب امتلاء القرص أو أخطاء إدخال/إخراج أخرى في نظام ملفات الوجهة. #96873 (Alexey Milovidov).
  • أُصلِح تجاهل EXCEPT ALL وINTERSECT ALL لتكرارات الصفوف وتعاملُهما كما لو كانا النظيرين DISTINCT. #96876 (Alexey Milovidov).
  • أُصلِح استثناء std::terminate في indexOfAssumeSorted عند استدعائه بأنواع غير متوافقة (مثل مصفوفة IPv4 مع قيمة بحث صحيحة). #96877 (Alexey Milovidov).
  • أُصلِح الاستثناء Bad cast from type DB::ColumnNullable to DB::ColumnString عند استخدام window functions مع group_by_use_nulls = 1 وCUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov).
  • أُصلِحت النتائج غير الصحيحة عندما تحوّل compiled expressions المترجمة بـ JIT DateTime إلى DateTime64 (مثلًا في CASE/if/multiIf مع أنواع DateTime مختلطة). فقد أُعيد تفسير القيمة بدلًا من تحجيمها بشكل صحيح، مما أدى إلى timestamps خاطئة بعد تفعيل ترجمة التعبير. #96879 (Alexey Milovidov).
  • أُصلِح استثناء الخطأ المنطقي في CoalescingMergeTree عندما يُنتج تعبير skip index عمودًا ثابتًا (مثل bloom_filter على ifNotFinite(1, c0) لعمود صحيح). #96880 (Alexey Milovidov).
  • أُصلِح رقم المنفذ الخاطئ في رسالة الخطأ عند الاتصال عبر HTTP بالخطأ بمنفذ native protocol المفعَّل بـ TLS. #96881 (Alexey Milovidov).
  • أُصلِح عدم تطبيق SETTINGS الخاصة بكل subquery على Table functions مثل file في CTEs والاستعلامات الفرعية. #96882 (Alexey Milovidov).
  • إصلاح تسرّب الذاكرة في كائنات BIO عند قراءة شهادات X509. #96885 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR في محلّل الاستعلامات عند تمرير تعبير lambda في موضع يُتوقَّع فيه وجود قيمة فعلية (على سبيل المثال، كوسيط للمُراكِم في arrayFold). #96892 (Alexey Milovidov).
  • إصلاح استثناء ColumnNullable is not compatible with original عند إجراء CAST للأنواع المتداخلة المعقّدة (Array من Nullable Tuple يحتوي على Map بقيم Nullable Enum). #96924 (Alexey Milovidov).
  • إصلاح حالة race condition في التحميل المتوازي لـ Dictionary المجزّأ HASHED، والتي كان يمكن أن تتسبب أحيانًا في عدم تحميل بعض الصفوف. #96953 (Alexey Milovidov).
  • إصلاح حالة race condition بين REPLACE PARTITION وmutations الخلفية، والتي كان يمكن أن تؤدي إلى ظهور كلٍّ من البيانات القديمة والجديدة بعد الاستبدال. #96955 (Alexey Milovidov).
  • إصلاح دالة arrayJoin التي كانت تُنتج صفوفًا مكررة عند استخدامها مع INNER JOIN وWHERE clause، وكان السبب في ذلك أن تحسين الدفع الجزئي للمسندات كان يدفع عوامل التصفية التي تحتوي على arrayJoin بشكل غير صحيح إلى ما دون JOIN. #96989 (Alexey Milovidov).
  • إصلاح الانهيار (SEGFAULT) في clearCaches الناتج عن أن BlockIO::operator= لم يكن ينقل query_metadata_cache، مما أدى إلى التدمير المبكر لـ snapshotات التخزين المخزنة مؤقتًا وحدوث use-after-free لتخزين MergeTreeData. #96995 (Alexey Milovidov).
  • إصلاح فشل assertion في IfTransformStringsToEnumPass عندما تُرجع الدالة if أو transform القيمة Nullable(String) (على سبيل المثال مع GROUP BY ... WITH CUBE وgroup_by_use_nulls = true). #97002 (Alexey Milovidov).
  • إصلاح كتابة بيانات غير صحيحة أثناء INSERT ... SELECT مع UNION ALL وJOIN، حيث كان يمكن أن تتلقى أعمدة السلاسل النصية الثابتة قيمًا خاطئة بعد squashing الكتل. #97019 (Hasyimi Bahrudin).
  • إصلاح استثناء assert_cast (أو تلف البيانات الصامت في إصدارات release) عند إنشاء column statistics بعد أن يغيّر ALTER TABLE MODIFY COLUMN نوع العمود. #97027 (Alexey Milovidov).
  • إصلاح قراءات من ذاكرة غير مهيّأة في Azure Blob Storage، وSSH protocol، وواجهات Arrow Flight. #97053 (Alexey Milovidov).
  • إصلاح الحالات التي كانت فيها indexes تؤثر في نتائج queries التي تستخدم row policy/PREWHERE وFINAL. #97076 (Yarik Briukhovetskyi).
  • إصلاح ما تبقى من حالة race condition بين REPLACE PARTITION وmutations الخلفية في جداول MergeTree، والتي كان يمكن أن تتسبب في ظهور البيانات القديمة من جديد. #97105 (Alexey Milovidov).
  • إصلاح الفهارس الضمنية مع الأعمدة المستعارة، وإجراء تحقق كامل قبل إنشائها. #97115 (Raúl Marín).
  • إصلاح خطأ منطقي في FunctionVariantAdaptor مع الدوال التي تتطلب arguments ثابتة مثل arrayROCAUC. #97116 (Bharat Nallan).
  • إصلاح تعثر mutations عند قيام PartCheckThread بإعادة إدراج GET_PART لجزء طُبِّق عليه mutation بالفعل، مما يترك entries وهمية في parts_to_do. #97162 (Alexey Milovidov).
  • إصلاح تقدير عدد rows في query plan للاستعلامات الفرعية التي تحتوي على ORDER BY ... LIMIT، وهو ما كان قد يدفع المُحسِّن إلى اختيار join order غير مثالي. #97193 (Alexander Gololobov).
  • إصلاح استثناء LOGICAL_ERROR في FunctionVariantAdaptor عندما تُرجِع دالة تعمل على Variant columns النوع Nothing، وهو ما قد يحدث مع Arrays الفارغة في queries UNION ALL. #97213 (Alexey Milovidov).
  • إصلاح data race أثناء عمليات النسخ متعدد الأجزاء في S3 (مثل أثناء BACKUP/RESTORE إلى S3)، والتي كان يمكن أن تتسبب في استثناءات عند الوصول المتزامن. #97227 (Azat Khuzhin).
  • إصلاح استثناء LOGICAL_ERROR عندما يُشير arrayJoin في clause WHERE إلى columns من جانبي JOIN. #97239 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR عند قراءة subcolumn .size لـ Nullable(String) sparse داخل Tuple مع PREWHERE. #97264 (Alexey Milovidov).
  • إصلاح الاستثناء “Number of rows in lazy chunk does not match number of offsets” في LazyMaterializingTransform عند القراءة من tables ذات index granularity غير تكيفية (index_granularity_bytes = 0) باستخدام ORDER BY ... LIMIT. #97270 (Alexey Milovidov).
  • إصلاح فقدان SYSTEM RESTART REPLICA للجدول من database عند فشل إعادة إنشاء الجدول بسبب استثناء غير متعلق بـ ZooKeeper (مثل memory limit)، مما يؤدي إلى عدم تطابق في ملخصات metadata في DatabaseReplicated. #97276 (Alexey Milovidov).
  • أصبح الحقل readonly في system.merge_tree_settings يعكس الآن بشكل صحيح أن بعض إعدادات merge tree (مثل index_granularity) تكون readonly دون قيد. #97277 (Robert Schulze).
  • إصلاح crash أثناء تحسين count() على جداول MergeTree عندما كان snapshot التخزين قد أُنشئ من دون data. #97281 (Pablo Marcos).
  • إصلاح crash محتمل عند تحليل أسماء الدوال من معلومات التصحيح لأجل stack traces. #97294 (Azat Khuzhin).
  • إصلاح خطأ منطقي في analyzer_compatibility_join_using_top_level_identifier ومع أعمدة ALIAS. إغلاق #96228. #97297 (Vladimir Cherkasov).
  • إصلاح استثناء LOGICAL_ERROR في applyOrder عند استخدام columns مفهرسة نصيًا مع clause QUALIFY. #97313 (Alexey Milovidov).
  • يعرض جدول النظام system.functions الآن للدوال الداخلية القيمة categories = 'Internal' بدلًا من categories = ''. #97315 (Robert Schulze).
  • قد يُنتج الاستعلام الذي يتضمن سلسلة RIGHT JOIN مع تمكين parallel replicas نتيجة غير صحيحة. يُصلح #74341. #97316 (Igor Nikonov).
  • إصلاح أخطاء TABLE_UUID_MISMATCH الزائفة التي قد تحدث مع العروض المادية القابلة للتحديث وفي سيناريوهات أخرى يُعاد فيها تسمية الجداول. #97323 (Azat Khuzhin).
  • إصلاح segfault في النسخ الاحتياطي لـ StorageKeeperMap بسبب استخدام مؤشر تخزين متدلٍّ بعد تحريره في دفعة النسخ الاحتياطي lazy. #97336 (Alexey Milovidov).
  • إصلاح الدالة exists مع scalar subquery داخل ALTER UPDATE/DELETE عند تمكين mutations_execute_subqueries_on_initiator. جرى تقييم scalar subquery بشكل غير صحيح، ما قد يؤدي إلى خطأ أو إلى أمر mutation تالف يجعل الجدول غير قابل للتحميل عند إعادة تشغيل الخادم التالية. #97347 (Kirill Kopnev).
  • إصلاح الاستثناء المنطقي Unexpected return type from equals. Expected Nullable(UInt8). Got Const(LowCardinality(Nullable(UInt8))) عند مقارنة NULL بعمود Variant يحتوي على أنواع LowCardinality. #97379 (Alexey Milovidov).
  • إصلاح race condition محتملة عند تنفيذ EXCHANGE TABLES بالتوازي مع تمكين query cache المُجزّأ. #97411 (Konstantin Vedernikov).
  • إصلاح الاستثناء LOGICAL_ERROR في التحويل من Array إلى QBit عندما يستبدل nullable_source من غلاف Tuple خارجي عمود Array المُحوَّل بنوع عمود غير متطابق. يُغلق #97389. #97413 (Alexey Milovidov).
  • إصلاح عدم اتساق التنسيق ذهابًا وإيابًا لـ AST في القيم الحرفية tuple ذات alias داخل الأقواس، فمثلًا أُعيدت تهيئة (('a', 'b') AS x) بشكل غير صحيح إلى tuple(('a', 'b') AS x). #97418 (Alexey Milovidov).
  • إصلاح استثناء أثناء asynchronous inserts مع deduplication عندما أدى فشل parsing إلى إنشاء block فارغ بلا rows. #97460 (Sema Checherinda).
  • إصلاح الاستثناء “Number of rows in lazy chunk does not match number of offsets” في LazyMaterializingTransform عند القراءة من الجداول ذات index granularity غير التكيفية (index_granularity_bytes = 0) باستخدام ORDER BY ... LIMIT. #97482 (Alexey Milovidov).
  • إصلاح إعدادات insert في Iceberg. إضافة alias للإعداد allow_experimental_insert_into_iceberg. #97483 (Konstantin Vedernikov).
  • إصلاح ACCESS_DENIED للمستخدمين الذين لا يملكون permission ‏CREATE TEMPORARY TABLE عندما تعيد optimization ‏optimize_inverse_dictionary_lookup كتابة predicates الخاصة بـ dictGet(...). يتخطّى ClickHouse الآن إعادة الكتابة وينفّذ expression الأصلي. يُغلق #97269. #97484 (Nihal Z. Miaji).
  • إصلاح فشل assertion (استثناء في إصدارات debug/sanitizer) في Set وMergeTreeIndexSet عند معالجة الأعمدة التي تحتوي على أعمدة فرعية داخلية sparse (مثل أعمدة Tuple من أجزاء MergeTree ذات ملفات تعريف serialization sparse مختلفة). #97493 (Alexey Milovidov).
  • إصلاح احتمال استخدام الذاكرة بعد تحريرها في StorageKafka2. #97520 (Bharat Nallan).
  • إصلاح INTO OUTFILE مع TRUNCATE والإعداد into_outfile_create_parent_directories عندما يحتوي مسار الإخراج على مجلدات. #97549 (Alexey Milovidov).
  • إصلاح الخطأ BAD_ARGUMENTS عند الاستعلام عن الجداول التي تحتوي على تعبيرات lambda داخل أعمدة ALIAS عبر table function ‏merge() مع تمكين analyzer. #97551 (Alexey Milovidov).
  • إصلاح استثناء system.zookeeper_info عندما تكون قيمة zxid في Keeper مساوية لـ 0. #97553 (Alexey Milovidov).
  • إصلاح احتمال حدوث logical error في Dictionary ‏ip_trie عندما لا يكون نوع المفتاح String. #97555 (Bharat Nallan).
  • إصلاح عدم عمل OAuth authentication في REST catalog الأساسي RestCatalog (إذ كانت تعمل فقط مع catalogs المشتقة مثل OneLakeCatalog). وقد أدى ذلك إلى تعطيل REST catalog الافتراضي بعد تقديم BigLake catalog. #97561 (Konstantin Vedernikov).
  • تقبل دوال Geometry (perimeterSpherical, areaSpherical، إلخ) الآن الأنواع الفرعية الهندسية الفردية (Polygon وRing وPoint وغيرها) بالإضافة إلى النوع Geometry من نوع Variant. #97571 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR عند استخدام isNull/isNotNull على subcolumns للأنواع Nullable(Tuple(... Nullable(T) ...)). يغلق #97224. #97582 (Alexey Milovidov).
  • إصلاح إلغاء مرجعية مؤشر فارغ عند تطبيق patch parts أثناء lightweight updates. #97583 (Alexey Milovidov).
  • يمرر BaseSettings::readBinary الفهرس من accessor.find إلى field_infos[] من دون التحقق من قيمة عدم العثور الخاصة (أي -1)، ما قد يؤدي إلى وصول خارج حدود std::vector. وقد اكتُشفت المشكلة بفضل تقوية libcxx. وعلى الأرجح كان هذا يحدث أثناء deserialization لخطة query عندما يرسل server أحدث إعدادًا غير معروف إلى server أقدم. تتعامل طريقة القراءة المعتمدة على السلاسل النصية مع هذا بشكل صحيح بالفعل، لكن readBinary كان يفتقد إلى التحقق نفسه. #97585 (Miсhael Stetsyuk).
  • إصلاح نتائج query غير صحيحة لاستعلامات UNION ALL عندما كان أحد الفروع يحتوي على predicate ثابتة القيمة false، إذ كان الفرع يقرأ data بشكل غير صحيح بدلًا من ألا يعيد شيئًا. #97620 (Bharat Nallan).
  • إصلاح فشل IN (col) عند استخدام مرجع column واحد مع الخطأ UNSUPPORTED_METHOD. #97646 (Alexey Milovidov).
  • إصلاح استثناء الخطأ المنطقي عند استخدام GROUP BY ... WITH ROLLUP/CUBE عندما تتضمن المفاتيح LowCardinality(Nullable(...)) داخل Nullable(Tuple(...)). #97647 (Alexey Milovidov).
  • إصلاح عدم اتساق تنسيق AST في NOT (1, 1, 1)، والذي كان قد يتسبب في LOGICAL_ERROR في بُنى التصحيح. #97653 (Alexey Milovidov).
  • إصلاح استثناء keeper-converter عند مصادفة ملفات سجل معاملات ZooKeeper فارغة. #97673 (Alexey Milovidov).

تحسينات في البناء/الاختبار/التغليف

  • يمكن بناء ClickHouse باستخدام clang-23 ‏(master). #95578 (Alexey Milovidov).
  • إصلاح فرض القيمة false على is_local عند تهيئة bind_host، مع استبداله باختبار تكامل. متابعة لـ #74741. #93109 #96018 (Zhigao Hong).
  • اختبارات الإجهاد: إصلاح اختبارات الإجهاد والترقية في CI، وتجاهل الوسوم no-{build}، وإضافة عشوائية للتوافق. #94693 (Nikita Fomichev).
  • نشر الملف التنفيذي parser_memory_profiler من نواتج build. ويمكن استخدام الأداة لتحليل استهلاك ذاكرة AST. #95826 (Ilya Yatsishin).
  • إضافة الراية --symbolize إلى أداة parser_memory_profiler، بحيث تُنتج ملفات .heap.sym تحتوي على رموز محلولة في النتائج. #96477 (Ilya Yatsishin).
  • تثبيت Docker images التابعة لجهات خارجية في اختبارات التكامل على إصدارات محددة. #96500 (Alexey Milovidov).
  • استعادة إمكانية الربط الديناميكي مع OpenSSL. لا يُنصح بهذا، ولا يُستخدم في أي builds خاصة ببيئات production، لكن الخيار لا يزال متاحًا للهواة على الإنترنت. #96506 (Govind R Nair).
  • تقليل نطاق magic_enum من [-100, 1000] إلى النطاق default ‏[-128, 127] باستخدام تخصيص لكل نوع لـ Coordination::OpNum، مما يحسن زمن build. #96632 (Alexey Milovidov).
  • إزالة قوالب C++ غير الضرورية من فئات Function لتقليل أزمنة build. #96646 (Alexey Milovidov).
  • نقل generation الخاصة بـ StorageSystemLicenses إلى وقت التهيئة لتحسين التوازي في build. #96697 (Alexey Milovidov).
  • جعل فحص التراخيص متوازيًا. #96727 (Raúl Marín).
  • إضافة اختبار functional عديم الحالة لدعم بروتوكول SSH. #96996 (Alexey Milovidov).
  • إضافة Kafka 3.9.0 إلى البنية التحتية لاختبارات functional العديمة الحالة، مما يتيح اختبارًا مباشرًا لمحركي الجدول Kafka وKafka2 باستخدام ClickHouse Keeper بوصفه ZooKeeper. وتغطي ستة اختبارات عديمة الحالة جديدة أساسيات الإنتاج/الاستهلاك، والأعمدة الافتراضية، وINSERT، وتنسيقات متعددة، والتعامل مع الرسائل التالفة، وتخزين الإزاحات المستند إلى Keeper. #96997 (Alexey Milovidov).
  • إضافة سير عمل في CI لبناء سلسلة أدوات clang محسّنة باستخدام PGO+BOLT. #96991 (Alexey Milovidov).
  • استخدام build محسّنة من LLVM/Clang باستخدام PGO في CI، ما يفترض أن يحقق تحسنًا في سرعة build بنسبة 20..30%. #97031 (Alexey Milovidov).
  • استبدال الدوال الرياضية من glibc بتنفيذات llvm-libc. #90151 (Konstantin Bogdanov).
  • تحديث Boost من 1.83 إلى 1.90، مما يُصلح فشل تأكيد devector في إصدارات Debug. #97037 (Alexey Milovidov).
  • تحديث postgres إلى REL_18_1. #95189 (Konstantin Bogdanov).
  • استخدام libexpat 2.7.3. #95218 (Konstantin Bogdanov).
  • استخدام OpenSSL 3.5.5. #95345 (Konstantin Bogdanov).
  • استخدام simdjson v4.2.4. #97129 (Konstantin Bogdanov).
  • استخدام libarchive 3.8.5. #97131 (Konstantin Bogdanov).
  • استخدام fast_float v8.2.3. #97133 (Konstantin Bogdanov).
  • استخدام abseil-cpp 20260107.1، وترقية s2geometry إلى v0.13.1. #97134 (Konstantin Bogdanov).
  • رفع libxml2 إلى 2.15.1. #95574 (Robert Schulze).
  • ترقية 7 صور Docker لاختبارات التكامل من Tier-3 من صور أساسية منتهية الدعم أو مُزالة إلى إصدارات مدعومة حاليًا. #97314 (Rahul).
  • إضافة استعلامات benchmark لـ TPC-DS. #97349 (Raufs Dunamalijevs).
  • استبدال خيارات cmake الفردية لمجموعات تعليمات x86 (ENABLE_SSSE3, ENABLE_AVX2, NO_SSE3_OR_HIGHER, ARCH_NATIVE، إلخ) بخيار رقمي واحد هو X86_ARCH_LEVEL (1/2/3/4)، بما يتوافق مع مستويات البنية الدقيقة القياسية لـ x86-64 المستخدمة بالفعل في نظام التوجيه وقت التشغيل. #97354 (Raúl Marín).
  • تجنب إنشاء متغيرات القوالب لـ division_by_nullable=true لعمليات غير القسمة في FunctionBinaryArithmetic، مما يقلل وقت الترجمة وحجم الملف الثنائي. #97496 (Raúl Marín).
  • تقليل أثر التضمين لـ Exception.h عبر إزالته من ملفات الترويسة واسعة الاستخدام مثل typeid_cast.h وassert_cast.h وContext_fwd.h وIDataType.h ومختلف ملفات ترويسة Column. #97497 (Raúl Marín).
  • استخدام ترويسات compiler-rt المضمّنة دائمًا (واجهات sanitizer وXRay) بدلًا من ترويسات مترجم المضيف، وبناء مكتبات compiler-rt من المصدر افتراضيًا. #97499 (Raúl Marín).
  • تجنّب تضمين ترويسات boost/multiprecision في wide_integer_impl.h على المنصات التي يتوفر فيها long double بالمستوى الكافي، مما يحسّن وقت البناء. #96633 (Alexey Milovidov).
  • تنفيذ مهمة LLVM Code Coverage وتفعيلها مبدئيًا لفرع master. #90952 (Alexey Bakharew).
  • تفعيل التحصين السريع لـ libcxx في بنيات الإصدار. وهذا مطلوب في الغالب لعمليات التحقق من تجاوز الحدود. واستنادًا إلى نتائج اختبارات الأداء، لا يُتوقع أي تأثير ملحوظ على الأداء. #94757 (Miсhael Stetsyuk).

إصدار ClickHouse 26.1، 2026-01-29. العرض التقديمي، الفيديو

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

  • أصلِح التنسيق غير المتسق الناتج عن الاستبدال غير الصحيح للأسماء المستعارة في المُنسِّق. يُغلق هذا #82833. يُغلق هذا #82832. يُغلق هذا #68296. قد يكون هذا التغيير غير متوافق مع الإصدارات السابقة: عند تعطيل المحلّل، يتعذر معالجة بعض استعلامات CREATE VIEW التي تستخدم IN وتشير إلى اسم مستعار. ولتجنب عدم التوافق، فعِّل المحلّل (وهو مفعّل افتراضيًا منذ الإصدار 24.3). #82838 (Alexey Milovidov).
  • أُزيل المرمِّزان DEFLATE_QPL وZSTD_QAT. ويُنصح المستخدمون بتحويل البيانات الحالية المضغوطة باستخدام DEFLATE_QPL أو ZSTD_QAT إلى codec آخر قبل الترقية. لاحظ أنه لاستخدام هذين الـ codecs كان يجب تفعيل الإعدادين enable_deflate_qpl_codec وenable_zstd_qat_codec. #92150 (Robert Schulze).
  • تحسين تصحيح أخطاء UDF عبر تمكين التقاط stderr في system.query_log.exception. في السابق، كان stderr الخاص بـ UDF يُسجَّل في الملفات فقط ولا يظهر في سجلات الاستعلامات، مما جعل تصحيح الأخطاء مستحيلًا. الآن، يؤدي stderr افتراضيًا إلى إطلاق استثناءات، كما يُجمَّع بالكامل (حتى 1MB) قبل الإطلاق، بحيث تظهر آثار التتبّع الكاملة لبايثون ورسائل الخطأ في system.query_log.exception بما يسهّل استكشاف الأخطاء وإصلاحها بفعالية. #92209 (Xu Jia).
  • تُعدّ قائمة الأعمدة الفارغة في clause JOIN USING () الآن خطأً نحويًا. في السابق، كان من المفترض أن تكون INVALID_JOIN_ON_EXPRESSION أثناء تنفيذ الاستعلام. وفي بعض الحالات، مثل الربط مع تخزين Join، كان ذلك يؤدي إلى LOGICAL_ERROR، ويغلق #82502. #92371 (Vladimir Cherkasov).
  • استخدام المطابقة الجزئية لـ SKIP REGEXP في JSON type افتراضيًا. يُغلق #79250. #92847 (Pavel Kruglov).
  • التراجع عن “السماح بـ INSERT إلى أعمدة ALIAS البسيطة” (تراجع عن ClickHouse/ClickHouse#84154). فهذا لا يعمل مع formats مخصصة، ولا يخضع لأي setting. #92849 (Azat Khuzhin).
  • إضافة إعداد لإطلاق خطأ إذا لم يكن لدى Data Lake Catalog إمكانية وصول إلى object storage. #93606 (Konstantin Vedernikov).
  • أُزيل database engine ‏Lazy ولم يعد متاحًا. يُغلق #91231. #93627 (Alexey Milovidov).
  • إزالة الوضع transposed_with_wide_view من metric_log لأنه غير قابل للاستخدام بسبب خلل برمجي. ولم يعد ممكنًا تعريف system.metric_log بهذا الوضع. ويتراجع هذا التغيير جزئيًا عن #78412. #93867 (Alexey Milovidov).
  • أصبحت جدولة CPU لأعباء العمل استباقية افتراضيًا. راجع server setting ‏cpu_slot_preemption. #94060 (Sergei Trifonov).
  • استخدم محارف الهروب في أسماء ملفات الفهارس لمنع تلف الأجزاء. مع هذا التغيير، سيفشل ClickHouse في تحميل الفهارس التي تحتوي أسماؤها على محارف غير ASCII والمُنشأة في الإصدارات السابقة. للتعامل مع ذلك، يمكنك استخدام إعداد MergeTree ‏escape_index_filenames. #94079 (Raúl Marín).
  • تغيّرت الإعدادات exact_rows_before_limit وrows_before_aggregation وcross_to_inner_join_rewrite وregexp_dict_allow_hyperscan وregexp_dict_flag_case_insensitive وregexp_dict_flag_dotall وdictionary_use_async_executor لتصبح الآن إعدادات عادية (وليست إعدادات format). هذا تغيير داخلي بحت من دون آثار جانبية مرئية للمستخدم، إلا في الحالة (غير المرجحة) التي تكون فيها قد حدّدت أيًا من هذه الإعدادات في تعريفات محرك الجدول Iceberg أو DeltaLake أو Kafka أو S3 أو S3Queue أو Azure أو Hive أو RabbitMQ أو Set أو FileLog أو NATS. في هذه الحالات، كانت هذه الإعدادات تُتجاهل سابقًا، أما الآن فستؤدي هذه التعريفات إلى ظهور خطأ. #94106 (Robert Schulze).
  • تفرض الدالتان joinGet/joinGetOrNull الآن امتيازات SELECT على جدول Join الأساسي. بعد هذا التغيير، يتطلب تنفيذ joinGet('db.table', 'column', key) أن يمتلك المستخدم امتياز SELECT لكلٍّ من أعمدة المفتاح المعرّفة في جدول Join وعمود السمة الجاري استرجاعه. ستفشل الاستعلامات التي تفتقر إلى هذه الامتيازات مع ACCESS_DENIED. للترحيل، امنح الأذونات اللازمة باستخدام GRANT SELECT ON db.join_table TO user للوصول الكامل إلى الجدول، أو GRANT SELECT(key_col, attr_col) ON db.join_table TO user للوصول على مستوى العمود. يؤثر هذا التغيير في جميع المستخدمين والتطبيقات التي تعتمد على joinGet/joinGetOrNull حيث لم تكن امتيازات SELECT الصريحة مُعدّة مسبقًا. #94307 (Vladimir Cherkasov).
  • تحقّق من SHOW COLUMNS في استعلامات CREATE TABLE ... AS .... سابقًا، كان التحقق يتم عبر SHOW TABLES، وهو grant غير صحيح لهذا النوع من فحوصات الأذونات. #94556 (pufit).
  • اجعل output format ‏Hash مستقلًا عن أحجام block. #94503 (Alexey Milovidov). لاحظ أن هذا يغيّر قيم hash الناتجة مقارنة بالإصدارات السابقة.

ميزة جديدة

  • واجهة برمجة تطبيقات HTTP وواجهة ويب مدمجة لـ ClickHouse Keeper. #78181 (pufit وspeeedmaster).
  • تعمل الآن آلية إزالة التكرار في async insert مع العروض المادية التابعة. عند حدوث تعارض بسبب block_id، تُرشَّح الكتلة الأصلية لإزالة الصفوف المرتبطة بـ block_id، ثم تُحوَّل الصفوف المتبقية باستخدام جميع استعلامات select ذات الصلة في العروض المادية، ما يعيد بناء الكتلة الأصلية من دون الصفوف المتعارضة. #89140 (Sema Checherinda). كما أصبح استخدام إزالة التكرار مع async inserts مسموحًا عند وجود عروض مادية. #93957 (Sema Checherinda).
  • تقديم صياغة جديدة وإطار عمل جديد لتبسيط ميزة فهرس projection وتوسيعها. ويأتي هذا استكمالًا لـ https://github.com/ClickHouse/ClickHouse/pull/81021. #91844 (Amos Bird).
  • إضافة دعم الفهرس النصي لأعمدة Array. #89895 (Jimmy Aguilar Mena).
  • تفعيل use_variant_as_common_type افتراضيًا، ما يتيح استخدام أنواع غير متوافقة داخل Array، وفي استعلامات UNION، وفي فروع if/multiIf/case. #90677 (Alexey Milovidov).
  • جدول نظام جديد zookeeper_info. ينفّذ #88014. #90809 (Smita Kulkarni).
  • دعم النوع Variant في جميع الدوال. #90900 (Bharat Nallan).
  • إضافة مقياس ClickHouse_Info إلى نقطة النهاية /metrics في Prometheus، ويحتوي أساسًا على معلومات الإصدار، ما يتيح إنشاء مخططات تتتبّع معلومات الإصدار التفصيلية بمرور الوقت. #91125 (Christoph Wurm).
  • تقديم أمر جديد مكوّن من أربعة أحرف هو rcfg لـ Keeper، يتيح تغيير تهيئة العنقود. ويوفّر هذا الأمر إمكانات أوسع لتغييرات التهيئة مقارنة بطلب reconfigure القياسي. ويأخذ الأمر سلسلة json بوصفها وسيطة. يجب أن تبدو المجموعة الكاملة من البايتات المُرسلة إلى واجهة TCP كما يلي: rcfg{json_string_length_big_endian}{json_string}. وقد تبدو بعض أمثلة الأمر كما يلي: {"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}. #91354 (alesapin).
  • إضافة الدالة reverseBySeparator التي تعكس ترتيب substrings في سلسلة نصية مفصولة بفاصل محدد. ويغلق هذا #91463. #91780 (Xuewei Wang).
  • إضافة الإعداد الجديد max_insert_block_size_bytes الذي يتيح تحكمًا أدق في تكوين الكتل المُدخلة. #92833 (Kirill Kopnev).
  • يمكن تنفيذ استعلامات DDL مع العبارة ON CLUSTER لقاعدة بيانات Replicated إذا كان الإعداد ignore_on_cluster_for_replicated_database مفعّلًا. في هذه الحالة، سيتم تجاهل اسم العنقود. #92872 (Kirill).
  • تنفيذ الدالة mergeTreeAnalyzeIndexes. #92954 (Azat Khuzhin).
  • إضافة الإعداد الجديد use_primary_key. اضبطه على false لتعطيل استبعاد الحبيبات استنادًا إلى المفتاح الأساسي. #93319 (Nihal Z. Miaji).
  • إضافة دالة الجدول icebergLocalCluster. #93323 (Anton Ivashkin).
  • إضافة الدالة cosineDistanceTransposed التي تُقدّر مسافة جيب التمام بين نقطتين. #93621 (Raufs Dunamalijevs).
  • إضافة العمود files إلى جدول system.parts، لعرض عدد الملفات في كل جزء بيانات. #94337 (Match).
  • إضافة مُجدول عدالة من نوع max-min للتحكم في التزامن. يوفّر عدالة أفضل في حالات فرط الاشتراك الشديد، حيث تتنافس استعلامات كثيرة على خانات CPU محدودة. ولا تتضرر الاستعلامات قصيرة المدة بسبب الاستعلامات طويلة المدة التي راكمت خانات أكثر بمرور الوقت. ويُفعَّل ذلك عبر القيمة max_min_fair في إعداد الخادم concurrent_threads_scheduler. #94732 (Sergei Trifonov).
  • إضافة إمكانية لعميل ClickHouse لتجاوز قيمة TLS SNI عند الاتصال بالخادم. #89761 (Matt Klein).
  • دعم الجداول المؤقتة في استدعاءات الدالة joinGet. #92973 (Eduard Karacharov).
  • دعم متجهات الحذف في محرك الجدول DeltaLake. #93852 (Kseniia Sumarokova).
  • دعم متجهات الحذف في deltaLakeCluster. #94365 (Kseniia Sumarokova).
  • دعم Google Cloud Storage لبحيرات البيانات. #93866 (Konstantin Vedernikov).

ميزة تجريبية

تحسين الأداء

  • أصبح الإعداد use_skip_indexes_on_data_read مفعّلاً افتراضياً. يتيح هذا الإعداد إجراء التصفية بأسلوب streaming بالتزامن مع القراءة، مما يحسّن أداء الاستعلام ووقت بدء التشغيل. #93407 (Shankar Iyer).
  • تحسين أداء DISTINCT على الأعمدة LowCardinality. يُغلق #5917. #91639 (Nihal Z. Miaji).
  • تحسين aggregate function ‏distinctJSONPaths بحيث يقرأ مسارات JSON فقط من أجزاء البيانات، لا عمود JSON بالكامل. #92196 (Pavel Kruglov).
  • دفع المزيد من عوامل التصفية إلى عمليات JOIN. #85556 (Nikita Taranov).
  • دعم المزيد من حالات push down انطلاقاً من شرط ON في join عندما يستخدم عامل التصفية مدخلات من جانب واحد فقط. ودعم joins من النوع ANY وSEMI وANTI. #92584 (Dmitry Novik).
  • السماح باستخدام sets مكافئة لدفع عوامل التصفية في SEMI JOIN. يُغلق #85239. #92837 (Dmitry Novik).
  • تخطي قراءة الجانب الأيسر من hash join عندما يكون الجانب الأيمن فارغاً. سابقاً، كانت قراءة الجانب الأيسر تستمر حتى أول block غير فارغ، ما قد يسبب قدراً كبيراً من العمل عند وجود تصفية مكثفة أو aggregation. #94062 (Alexander Gololobov).
  • استخدام طريقة “fastrange” ‏(Daniel Lemire) لتقسيم البيانات داخل query pipeline. قد يحسّن ذلك الفرز المتوازي وعمليات JOIN. #93080 (Alexey Milovidov).
  • تحسين أداء window functions عندما يطابق PARTITION BY مفتاح الفرز أو يكون prefix له. #87299 (Nikita Taranov).
  • يُدفع عامل التصفية الخارجي إلى views، مما يتيح تطبيق PREWHERE على العُقد المحلية والبعيدة. يعالج #88189. #88316 (Igor Nikonov).
  • تنفيذ ترجمات JIT البرمجية لمزيد من الدوال. يُغلق #73509. #88770 (Alexey Milovidov with Taiyang Li).
  • إذا كان skip index المستخدم في استعلام FINAL على عمود يُعد جزءاً من المفتاح الأساسي، فإن الخطوة الإضافية للتحقق من تقاطع المفتاح الأساسي في الأجزاء الأخرى تكون غير ضرورية، ولذلك لم تعد تُنفَّذ. يعالج #85897. #93899 (Shankar Iyer).
  • تحسين الأداء واستخدام الذاكرة لكل من LIMIT وOFFSET الكسريين. #91167 (Ahmed Gouda).
  • إصلاح استخدام منطق القراءة العشوائية الأسرع في أداة الجلب المسبق لـ Parquet Reader V3. يُغلق #90890. #91435 (Arsen Muk).
  • تحسين أداء icebergCluster. يُغلق #91462. #91537 (Yang Jiang).
  • عدم التصفية حسب الأعمدة الافتراضية عند استخدام عوامل تصفية ثابتة. #91588 (c-end).
  • تقليل استخدام الذاكرة في INSERT/merges مع wide parts للجداول شديدة الاتساع من خلال تمكين مخازن الكتابة المؤقتة التكيفية. وإضافة دعم لمخازن الكتابة المؤقتة التكيفية للأقراص المشفرة. #92250 (Azat Khuzhin).
  • تحسين أداء full text search باستخدام text index وtokenizer ‏sparseGrams عبر تقليل عدد الرموز المميزة التي يُبحث عنها في الفهرس. #93078 (Anton Popov).
  • جرى تحسين الدالة isValidASCII للحالات الإيجابية، أي عندما تكون جميع قيم الإدخال من ASCII. #93347 (Robert Schulze).
  • أصبح تحسين القراءة حسب الترتيب يتعرف على الحالات التي تكون فيها أعمدة ORDER BY ثابتة بسبب شروط WHERE، مما يتيح قراءات فعّالة بالترتيب العكسي. ويفيد ذلك الاستعلامات متعددة المستأجرين مثل WHERE tenant='42' ORDER BY tenant, event_time DESC، إذ يمكنها الآن استخدام InReverseOrder بدلًا من الحاجة إلى sort كامل. #94103 (matanper).
  • استحداث صنف Enum AST متخصص لتخزين معاملات القيم في أزواج (string, integer) بدلًا من العناصر الفرعية ASTLiteral، بهدف تحسين استهلاك الذاكرة. #94178 (Ilya Yatsishin).
  • تحليل الفهرس الموزع عبر replicas متعددة. وهو مفيد للتخزين المشترك وللكميات الضخمة من البيانات في cluster. وينطبق ذلك على SharedMergeTree ‏(ClickHouse Cloud)، وقد ينطبق أيضًا على أنواع أخرى من جداول MergeTree على تخزين مشترك. #86786 (Azat Khuzhin).
  • تقليل overhead الخاص بمرشحات runtime في join عبر تعطيلها في الحالات التالية: - عند تعيين عدد كبير جدًا من البتات في bloom filter - عند تصفية عدد قليل جدًا من الصفوف أثناء runtime. #91578 (Alexander Gololobov).
  • استخدام مخزن مؤقت داخل الذاكرة لمدخلات الاستعلامات الفرعية المترابطة لتجنب تقييمها عدة مرات. جزء من #79890. #91205 (Dmitry Novik).
  • السماح لجميع replicas بسرقة النطاقات اليتيمة في القراءة باستخدام parallel replicas. وهذا يحسّن موازنة الحمل ويقلل tail latency. #91374 (zoomxi).
  • أصبح external aggregation/sorting/join يراعي الآن إعداد الاستعلام temporary_files_codec في جميع السياقات. كما أُصلحت profile events المفقودة لخوارزمية grace hash join. #92388 (Vladimir Cherkasov).
  • جعل اكتشاف استخدام ذاكرة الاستعلام عند spilling to disk أثناء aggregation/sorting أكثر متانة. #92500 (Azat Khuzhin).
  • تقدير العدد الإجمالي للصفوف وإحصاءات NDV ‏(عدد القيم المميزة) لأعمدة مفاتيح aggregation. #92812 (Alexander Gololobov).
  • تحسين Compression لقائمة postings باستخدام simdcomp. #92871 (Peng Jian).
  • إعادة هيكلة معالجة الوضع ordered في S3Queue باستخدام buckets. من شأن ذلك أيضًا تحسين الأداء وتقليل عدد طلبات Keeper. #92889 (Kseniia Sumarokova).
  • يمكن الآن للدالتين mapContainsKeyLike وmapContainsValueLike الاستفادة من text index على mapKeys() أو mapValues() على الترتيب. #93049 (Michael Jarrett).
  • تقليل استهلاك الذاكرة على الأنظمة غير التابعة لـ Linux (تمكين purge الفوري لـ dirty pages الخاصة بـ jemalloc). #93360 (Eduard Karacharov).
  • فرض purge لـ arenas الخاصة بـ jemalloc إذا تجاوزت نسبة حجم dirty pages إلى max_server_memory_usage القيمة memory_worker_purge_dirty_pages_threshold_ratio. #93500 (Eduard Karacharov).
  • تقليل استهلاك الذاكرة في AST. #93601 (Nikolai Kochetov).
  • في بعض الحالات، لاحظنا أن ClickHouse لا يلتزم بـ memory limit عند القراءة من table. تم إصلاح هذا السلوك. #93715 (Nikita Mikhaylov).
  • تفعيل extension الخاص بـ Keeper لكل من CHECK_STAT وTRY_REMOVE افتراضيًا. #93886 (Mikhail Artemenko).
  • تحليل الحدين الأدنى والأعلى لأسماء الملفات المقابلة لعمليات حذف المواضع من entries في manifest file الخاص بـ Iceberg، لتحسين اختيار data files المقابلة. #93980 (Daniil Ivanik).
  • إضافة إعدادين آخرين للتحكم في الحد الأقصى لعدد subcolumns الديناميكية في JSON column. الأول هو MergeTree setting merge_max_dynamic_subcolumns_in_compact_part (مماثل للإعداد المضاف سابقًا merge_max_dynamic_subcolumns_in_wide_part) ويحدّ من عدد subcolumns الديناميكية التي تُنشأ أثناء merge إلى compact part. والثاني هو إعداد على مستوى query باسم max_dynamic_subcolumns_in_json_type_parsing يحدّ من عدد subcolumns الديناميكية التي تُنشأ أثناء parsing لبيانات JSON، ما يتيح تحديد الحد عند insert. #94184 (Pavel Kruglov).
  • تحسين طفيف لعملية squashing الخاصة بـ JSON columns في بعض الحالات. #94247 (Pavel Kruglov).
  • خفض أحجام queue الخاصة بـ thread pool استنادًا إلى الخبرة في بيئات production. وإضافة فحص صريح لاستهلاك الذاكرة قبل قراءة أي بيانات من MergeTree. #94692 (Nikita Mikhaylov).
  • التأكد من أن scheduler يفضّل thread الخاص بـ MemoryWorker عند شحّ موارد CPU، لأنه يحمي عملية ClickHouse من تهديد وجودي. #94864 (Nikita Mikhaylov).
  • تشغيل purge لـ dirty pages الخاصة بـ jemalloc في thread مختلف عن thread الرئيسي لـ MemoryWorker. وإذا كانت عملية purge بطيئة، فقد تؤخر تحديثات استخدام RSS، ما قد يؤدي إلى إنهاء العملية بسبب نفاد الذاكرة. وإضافة config جديد باسم memory_worker_purge_total_memory_threshold_ratio لبدء purge لـ dirty pages استنادًا إلى نسبة إجمالي استخدام الذاكرة. #94902 (Antonio Andelic).

تحسينات

  • أصبح system.blob_storage_log متاحًا الآن لـ Azure Blob Storage. #93105 (Alexey Milovidov).
  • تمت إضافة blob_storage_log لكلٍّ من Local وHDFS. كما أُصلح خطأ كان يحدث عندما يستخدم S3Queue قيمة غير اسم القرص للتسجيل في blob_storage_log. وأُضيف العمود error_code إلى blob_storage_log. كذلك جرى تقسيم ملف التهيئة الخاص بالاختبارات لتبسيط الاختبار المحلي. #93106 (Alexey Milovidov).
  • سيقوم clickhouse-client وclickhouse-local الآن بإبراز مجموعات الأرقام (الآلاف والملايين وما إلى ذلك) داخل القيم الرقمية الحرفية أثناء الكتابة. هذا يُغلق #93100. #93108 (Alexey Milovidov).
  • أُضيف دعم في clickhouse-client لوسائط سطر الأوامر التي تحتوي على مسافات حول علامة التساوي. يُغلق هذا #93077. #93174 (Cole Smith).
  • مع <interactive_history_legacy_keymap>true</interactive_history_legacy_keymap>، يمكن لعميل CLI الآن الرجوع تلقائيًا إلى Ctrl-R للبحث العادي كما كان سابقًا، بينما يُستخدم Ctrl-T للبحث الضبابي. #87785 (Larry Snizek).
  • كانت العبارة المستخدمة لمسح الذاكرات المؤقتة SYSTEM DROP [...] CACHE تعطي انطباعًا خاطئًا بأنها تعطل الذاكرة المؤقتة. يدعم ClickHouse الآن العبارة SYSTEM CLEAR [...] CACHE لأنها أوضح. وتظل الصياغة القديمة متاحة. #93727 (Pranav Tiwari).
  • دعم استخدام عدة أعمدة كمفتاح أساسي في EmbeddedRocksDB. يُغلق هذا #32819. #33917 (usurai).
  • أصبح من الممكن الآن استخدام IN غير ثابتة مع القيم scalar (استعلامات مثل val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi).
  • منع تمرير الترويسات x-amz-server-side-encryption إلى طلبات S3 من نوع HeadObject وUploadPart وCompleteMultipartUpload لأنها غير مدعومة. #64577 (Francisco J. Jurado Moreno).
  • تتبّع partitioning الخاص بـ hive في الوضع ordered ضمن S3Queue. يحل هذا #71161. #81040 (Anton Ivashkin).
  • تحسين حجز المساحة في filesystem cache. سيُنفَّذ FileCache::collectCandidatesForEviction من دون قفل حصري. #82764 (Kseniia Sumarokova).
  • دعم استراتيجية rotation مركبة (الحجم + الوقت) لـ server log. #87620 (Jianmei Zhang).
  • يمكن لعميل CLI الآن تحديد <warnings>false</warnings> بدلًا من وسيطة سطر الأوامر --no-warnings. #87783 (Larry Snizek).
  • إضافة دعم للدالة التجميعية avg مع قيم Date وDateTime وTime كوسائط. يُغلق #82267. #87845 (Yarik Briukhovetskyi).
  • أصبح التحسين use_join_disjunctions_push_down مفعّلًا افتراضيًا. #89313 (Alexey Milovidov).
  • دعم المزيد من محركات الجداول وأنواع مصادر البيانات في الاستعلامات الفرعية المترابطة. يُغلق #80775. #90175 (Dmitry Novik).
  • إذا تم تحديد مخطط العرض ذي المعلمات صراحةً، فسيُعرض. يُغلق #88875، #81385. #90220 (Grigorii Sokolik).
  • التعامل بشكل صحيح مع الفجوة في إدخالات سجل Keeper إذا كانت السجلات تسبق آخر فهرس مُعتمد. #90403 (Antonio Andelic).
  • تحسين الإعداد min_free_disk_bytes_to_perform_insert ليعمل بشكل صحيح مع وحدات JBOD. #90878 (Aleksandr Musorin).
  • إتاحة تحديد الإعداد storage_class_name في المجموعات المسماة لمحرك الجدول S3 ودالة الجدول s3. #91926 (János Benjamin Antal).
  • دعم الإدراج في ZooKeeper إضافي عبر system.zookeeper. #92092 (RinChanNOW).
  • إضافة مقاييس جديدة إلى Keeper: أحداث profile ‏KeeperChangelogWrittenBytes وKeeperChangelogFileSyncMicroseconds وKeeperSnapshotWrittenBytes وKeeperSnapshotFileSyncMicroseconds، بالإضافة إلى مقاييس المدرج التكراري KeeperBatchSizeElements وKeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk).
  • إضافة إعداد جديد، trace_profile_events_list، يقيّد التتبّع باستخدام trace_profile_event بقائمة أسماء الأحداث المحددة. يتيح ذلك جمع بيانات أدق في أحمال العمل الكبيرة. #92298 (Alexey Milovidov).
  • دعم SYSTEM NOTIFY FAILPOINT لنقاط الفشل القابلة للإيقاف المؤقت. - دعم SYSTEM WAIT FAILPOINT fp PAUSE/RESUME. #92368 (Shaohua Wang).
  • إضافة العمود creation ‏(implicit/explicit) إلى system.data_skipping_indices. #92378 (Raúl Marín).
  • السماح بتمرير وصف الأعمدة لجداول YTsaurus الديناميكية إلى مصدر القاموس. #92391 (MikhailBurdukov).
  • في #63985، أصبح بالإمكان تحديد جميع المعلمات اللازمة لإعداد TLS لكل منفذ على حدة (راجع البروتوكولات القابلة للتركيب)، بحيث لا نعود بحاجة إلى الاعتماد على إعداد TLS عام. ومع ذلك، لا يزال التنفيذ يتطلب ضمنيًا وجود قسم إعداد عام openSSL.server، وهو ما يتعارض مع البيئات التي تحتاج إلى إعدادات TLS مختلفة لمنافذ مختلفة. على سبيل المثال، في عمليات نشر keeper-in-server، نحتاج إلى إعدادات TLS منفصلة للاتصال بين Keeper واتصالات عميل ClickHouse. #92457 (Miсhael Stetsyuk).
  • تقديم إعداد جديد input_format_binary_max_type_complexity يقيّد العدد الإجمالي لعُقد الأنواع التي يمكن فك ترميزها بالتنسيق الثنائي، وذلك لمنع حمولات البيانات الضارة. #92519 (Raufs Dunamalijevs).
  • إظهار المهام قيد التشغيل في system.background_schedule_pool{,_log}. وإضافة التوثيق. #92587 (Azat Khuzhin).
  • تنفيذ الاستعلام الحالي في بحث Ctrl+R داخل العميل إذا لم يتم العثور على أي تطابق في السجل. #92749 (Azat Khuzhin).
  • دعم EXPLAIN indices = 1 كاسم بديل لـ EXPLAIN indexes = 1. يغلق #92483. #92774 (Pranav Tiwari).
  • يتيح قارئ Parquet الآن قراءة أعمدة Tuple أو Map بصيغة JSON: يعمل select x from file(f.parquet, auto, 'x JSON') حتى إذا كان نوع العمود x في f.parquet هو tuple أو map. #92864 (Michael Kolupaev).
  • دعم tuple الفارغة في قارئ Parquet. #92868 (Michael Kolupaev).
  • التراجع إلى النسخ بأسلوب القراءة والكتابة في Azure Blob Storage عندما تفشل عملية النسخ الأصلية مع BadRequest (على سبيل المثال، عند وجود قائمة block غير صالحة). سابقًا، كان هذا يُنفَّذ فقط عند حدوث الخطأ Unauthorized، والذي كان يظهر عند نسخ blob إلى storage accounts مختلفة. لكننا نرى أيضًا أحيانًا الخطأ “The specified block list is invalid”. لذلك تم الآن تحديث الشرط للتراجع إلى القراءة والكتابة عند فشل أي عملية نسخ أصلية. #92888 (Smita Kulkarni).
  • إصلاح تقييد EC2 metadata endpoint عند تشغيل عدد كبير من استعلامات S3 المتزامنة باستخدام بيانات اعتماد ملف تعريف مثيل EC2. سابقًا، كان كل استعلام ينشئ AWSInstanceProfileCredentialsProvider خاصًا به، مما كان يؤدي إلى طلبات متزامنة إلى خدمة بيانات EC2 الوصفية، وقد يتسبب في حالات timeout وأخطاء HTTP response code: 403. الآن أصبح موفر بيانات الاعتماد يُخزَّن مؤقتًا ويُشارَك بين جميع الاستعلامات. #92891 (Sav).
  • إعادة العمل على الإعداد insert_select_deduplicate لإتاحة الحفاظ على التوافق مع الإصدارات السابقة. #92951 (Sema Checherinda).
  • تسجيل المهام الخلفية الأبطأ من المتوسط (background_schedule_pool_log.duration_threshold_milliseconds=30) لتجنّب الإفراط في تسجيل المهام. #92965 (Azat Khuzhin).
  • في الإصدارات السابقة، كانت بعض أسماء دوال C++ تُعرض بشكل غير صحيح (“mangled”) في system.trace_log وsystem.symbols، ولم تكن الدالة demangle تتعامل معها جيدًا. يُغلق #93074. #93075 (Alexey Milovidov).
  • أُضيف إعداد النسخ الاحتياطي backup_data_from_refreshable_materialized_view_targets لتخطي النسخ الاحتياطي لأهداف الـ refreshable materialized views. أما RMVs التي تستخدم استراتيجية التحديث APPEND، فيتم دائمًا نسخها احتياطيًا. #93076 (Julia Kartseva). #93658 (Julia Kartseva)
  • استخدام الحد الأدنى من معلومات Debug بدلًا من عدم تضمين أي معلومات Debug لوحدات الترجمة الثقيلة، مثل الدوال. #93079 (Alexey Milovidov).
  • أُضيف دعم التوافق مع MinIO إلى AWS S3 C++ SDK من خلال تنفيذ ربط لرموز الأخطاء الخاصة بـ MinIO. يتيح هذا التغيير لـ ClickHouse التعامل بشكل صحيح مع أخطاء خادم MinIO وإعادة المحاولة عند استخدام عمليات نشر MinIO بدلًا من AWS S3، مما يحسّن الاعتمادية للمستخدمين الذين يشغّلون object storage على clusters MinIO self-hosted. #93082 (XiaoBinMu).
  • كتابة ملفات jemalloc profile symbolized، مما يلغي الحاجة إلى binary أثناء generation الخاصة بـ heap profile. #93099 (Azat Khuzhin).
  • أُعيد إحياء أداة clickhouse git-import بعد أن كانت معطلة مع commits الكبيرة وغير الصالحة. راجع https://presentations.clickhouse.com/2020-matemarketing/. #93202 (Alexey Milovidov).
  • لا تعرض كلمات المرور من URL storage في query log. #93245 (Konstantin Vedernikov).
  • دعم النوع Geometry في flipCoordinates. #93303 (Bharat Nallan).
  • تحسين تجربة المستخدم في SYSTEM INSTRUMENT ADD/REMOVE: استخدام قيم String النصية لأسماء الدوال، وتطبيق التصحيح على جميع الدوال المطابقة، والسماح باستخدام function_name في REMOVE. #93345 (Pablo Marcos).
  • إضافة إعداد جديد materialize_statistics_on_merge يفعّل/يعطّل materializing للإحصاءات أثناء merge. القيمة الافتراضية هي 1. #93379 (Han Fei).
  • أصبح ClickHouse الآن قادرًا على parse SELECT دون أقواس في استعلامات DESCRIBE SELECT. يُغلق #58382. #93429 (Yarik Briukhovetskyi).
  • إضافة إضفاء الطابع العشوائي على checks الخاصة بصحة cache وفق احتمال محدد. #93439 (Kseniia Sumarokova).
  • أُضيف الإعداد type_json_allow_duplicated_key_with_literal_and_nested_object للسماح بالمسارات المكررة في JSON عندما تكون إحداها قيمة حرفية والأخرى كائنًا متداخلًا، مثل {"a" : 42, "a" : {"b" : 42}}. ربما تكون بعض البيانات قد أُنشئت قبل إضافة هذا القيد على المسارات المكررة في https://github.com/ClickHouse/ClickHouse/pull/79317، وقد يؤدي التعامل معها الآن إلى حدوث أخطاء. وباستخدام هذا الإعداد، يمكن الاستمرار في استخدام هذه البيانات القديمة من دون أخطاء. #93604 (Pavel Kruglov).
  • لا تطبع قيم الأنواع البسيطة في Pretty JSON على أسطر منفصلة. #93836 (Pavel Kruglov).
  • عند وجود عدد كبير من عبارات alter table ... modify setting ...، قد يتعذر الحصول على القفل خلال 5 ثوانٍ. من الأفضل إرجاع timeout بدلًا من logical error. #93856 (Han Fei).
  • منع الإخراج المفرط عند حدوث خطأ في الصياغة. قبل هذا التغيير، كان النظام يطبع سكربت SQL بالكامل، وقد يحتوي على عدد كبير من الاستعلامات. #93876 (Alexey Milovidov).
  • أُصلح حساب حجم البايت لطلب check مع الإحصاءات في Keeper بشكل صحيح. #93907 (Mikhail Artemenko).
  • أُضيف الإعداد use_hash_table_stats_for_join_reordering للتحكم في ما إذا كانت إحصاءات حجم hash table وقت التشغيل تُستخدم لإعادة ترتيب join. هذا الإعداد مفعّل افتراضيًا، بما يحافظ على السلوك الحالي لـ collect_hash_table_stats_during_joins. #93912 (Vladimir Cherkasov).
  • يمكن للمستخدمين الآن عرض جزء من إعدادات الخادم العامة المتداخلة في الجدول system.server_settings (مثل logger.level). ويقتصر ذلك على الإعدادات ذات البنية الثابتة فقط (من دون قوائم أو تعدادات أو تكرارات وما إلى ذلك). #94001 (Hechem Selmi).
  • يمكن الآن مقارنة QBit للتحقق من التساوي. #94078 (Raufs Dunamalijevs).
  • عندما يكتشف Keeper وجود snapshot تالفة أو سجلات تغييرات غير متسقة، يُطرح استثناء بدلًا من الإنهاء اليدوي أو تنظيف الملفات تلقائيًا. ومن المفترض أن يؤدي ذلك إلى سلوك أكثر أمانًا في Keeper يعتمد على التدخل اليدوي. #94168 (Antonio Andelic).
  • إصلاح مشكلة ترك بقايا محتملة في حال فشل CREATE TABLE. #94174 (Azat Khuzhin).
  • إصلاح الوصول إلى ذاكرة غير مهيأة (وهو خلل في OpenSSL) عند استخدام مفتاح TLS محمي بكلمة مرور. #94182 (Konstantin Bogdanov).
  • ترقية chdig إلى v26.1.1. #94290 (Azat Khuzhin).
  • دعم partitioning أكثر عمومية لوضع S3Queue المرتب. #94321 (Bharat Nallan).
  • أُضيف alias باسم use_statistics للإعداد allow_statistics_optimize. وهذا أكثر اتساقًا مع الإعدادات الحالية use_primary_key و use_skip_indexes. #94366 (Robert Schulze).
  • تم تفعيل الإعداد input_format_numbers_enum_on_conversion_error للتحويل من Numbers إلى Enums للتحقق من وجود العنصر. #94384 (Elmi Ahmadov).
  • في وضع ordered لـ S3(Azure)Queue، أصبح تنظيف العُقد الفاشلة يتم عبر تتبّع الحدود (وكان هذا قبل ذلك يُنفَّذ فقط في وضع Unordered لكلٍّ من العُقد الفاشلة والمُعالجة، لذا سيُنفَّذ الآن أيضًا في Ordered ولكن للعُقد الفاشلة فقط). #94412 (Kseniia Sumarokova).
  • تم تمكين إدارة الوصول للمستخدم default في clickhouse-local. كان المستخدم default في clickhouse-local يفتقد امتياز access_management، مما كان يتسبب في فشل عمليات مثل DROP ROW POLICY IF EXISTS مع الخطأ ACCESS_DENIED، رغم أنه يُفترض ألا يكون هذا المستخدم مقيّدًا. #94501 (Alexey Milovidov).
  • تم تمكين named collection لقواميس YTsaurus وجداوله. #94582 (MikhailBurdukov).
  • تمت إضافة دعم named collections المعرّفة عبر SQL في BACKUP/RESTORE لكل من S3 وAzure Blob Storage. يُغلق #94604. #94605 (Pablo Marcos).
  • دعم التقسيم إلى buckets استنادًا إلى partition key في S3Queue في وضع ordered. #94698 (Bharat Nallan).
  • تمت إضافة metric غير متزامن يتضمن الزمن المنقضي لأطول عملية merge قيد التشغيل. #94825 (Raúl Marín).
  • تمت إضافة فحص للملف المرتبط قبل تطبيق position delete باستخدام IcebergBitmapPositionDeleteTransform. #94897 (Yang Jiang).
  • الآن يعرض view_duration_ms المدة التي كانت خلالها المجموعة نشطة، لا مجموع مدة الخيوط داخلها. #94966 (Sema Checherinda).
  • أُزيل الحد الأقصى لعدد tokens البحث في الدالتين hasAnyTokens وhasAllTokens، والذي كان محددًا بـ 64. مثال: SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]); كان هذا الـ query سيؤدي إلى الخطأ BAD_ARGUMENTS لوجود 65 token بحث. مع طلب السحب هذا، أُزيل الحد بالكامل، وأصبح الـ query نفسه يعمل دون خطأ. #95152 (Elmi Ahmadov).
  • تمت إضافة الإعداد input_format_numbers_enum_on_conversion_error للتحويل من Numbers إلى Enums للتحقق من وجود العنصر. يُغلق: #56144. #56240 (Nikolay Degterinsky).
  • تمت مشاركة موارد محلل format بين قراءة ملف البيانات وملف position delete في جداول Iceberg لتقليل عمليات تخصيص الذاكرة. #94701 (Yang Jiang).

إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)

  • يُصلح خطأً كانت فيه معالجات الاستعلامات المعرّفة مسبقًا تفسّر المسافات البيضاء اللاحقة على أنها بيانات أثناء عمليات insert. #83604 (Fabian Ponce).
  • يُصلح الخطأ INCOMPATIBLE_TYPE_OF_JOIN في Join storage عند تطبيق تحسين تحويل outer join إلى inner join. يحلّ #80794. #84292 (Vladimir Cherkasov).
  • يُصلح الاستثناء “Invalid number of rows in Chunk” عند استخدام hash join مع تفعيل allow_experimental_join_right_table_sorting. #86440 (yanglongwei).
  • يستبدل أسماء الملفات دائمًا بقيم hash في MergeTree إذا كان filesystem غير حساس لحالة الأحرف. سابقًا، كان هذا قد يؤدي في الأنظمة ذات filesystem غير الحساس لحالة الأحرف (مثل MacOS) إلى تلف البيانات عندما تختلف عدة أسماء column/subcolumn فقط في حالة الأحرف. #86559 (Pavel Kruglov).
  • يضيف تحققًا كاملًا من permissions في مرحلة CREATE للاستعلام الأساسي داخل materialized view. #89180 (pufit).
  • يُصلح crash في الدالة icebergHash عند استخدام argument ثابت. #90335 (Michael Kolupaev).
  • يُصلح logical error يحدث عندما تُعدّل mutation من دون transaction أجزاء parts ضمن transaction نشطة ثم يجري التراجع عنها في النهاية. #90469 (Shaohua Wang).
  • يحدّث system.warnings بشكل صحيح بعد تحويل database عادية إلى database من نوع atomic. #90473 (sdk2).
  • يُصلح assertion عند القراءة من Parquet file، عندما يُستخدم جزء من تعبير prewhere أيضًا في موضع آخر من الاستعلام. #90635 (Max Kainov).
  • يُصلح crash في cluster أحادي العقدة عند القراءة من Iceberg في وضع split-by-buckets. يُغلق هذا #90913. #91553 (Konstantin Vedernikov).
  • يُصلح logical error محتملًا في Log engine أثناء قراءة subcolumns. يُغلق #91710. #91711 (Pavel Kruglov).
  • يُصلح الخطأ Logical error: ‘Storage does not support transaction’ أثناء ATTACH AS REPLICATED. #91772 (Shaohua Wang).
  • إصلاح لعمل Runtime Filters بشكل غير صحيح عندما يحتوي LEFT ANTI JOIN على post-condition إضافي. #91824 (Alexander Gololobov).
  • يُصلح خطأً يحدث عند وجود مقارنة null-safe تتضمن النوع Nothing. يُغلق #91834. يُغلق #84870. يُغلق #91821. #91884 (Yarik Briukhovetskyi).
  • يُصلح أخطاء في فك ترميز DELTA_BYTE_ARRAY في native Parquet reader تؤثر في بيانات String كثيرة التكرار. #91929 (Daniel Muino).
  • خزّن الـ schema فقط للملف الذي استُنتجت منه ضمن globs بدلًا من جميع الملفات أثناء schema inference. يُغلق #91745. #92006 (Pavel Kruglov).
  • أصلِح الخطأ Couldn't pack tar archive: Failed to write all bytes الناتج عن حجم header غير الصحيح لمدخل الأرشيف. يُصلح #89075. #92122 (Julia Kartseva).
  • حرّر stream الطلب في insert select لمنع إغلاق HTTP connection. #92175 (Sema Checherinda).
  • أصلِح logical error في queries التي تتضمن عدة JOINs مع clause ‏USING وjoin_use_nulls. #92251 (Vladimir Cherkasov).
  • أصلِح logical error أثناء إعادة ترتيب join مع join_use_nulls، ويُغلق https://github.com/clickhouse/clickhouse/issues/90795. #92289 (Vladimir Cherkasov).
  • أصلِح عدم اتساق تنسيق AST لـ arrayElement مع negate literal. يُغلق #92288 يُغلق #92212 يُغلق #91832 يُغلق #91789 يُغلق #91735 يُغلق #88495 يُغلق #92386. #92293 (Pavel Kruglov).
  • أصلِح احتمال حدوث crash مع الإعداد join_on_disk_max_files_to_merge. #92335 (Bharat Nallan).
  • issue ذات صلة: #https://github.com/ClickHouse/support-escalation/issues/6365. #92339 (Tuan Pham Anh).
  • أصلِح missing access check في SYSTEM SYNC FILE CACHE. يُغلق #92101. #92372 (Kseniia Sumarokova).
  • أصلِح تمرير count_distinct_optimization عبر window functions وعبر عدة arguments. #92376 (Raúl Marín).
  • أصلِح الخطأ “Cannot write to finalized buffer” عند استخدام aggregate functions معينة مع window functions. يُغلق #91415. #92395 (Jimmy Aguilar Mena).
  • أصلِح logical error مع CREATE TABLE ... AS urlCluster() وdatabase engine ‏Replicated. يُغلق #92216. #92418 (Kseniia Sumarokova).
  • ورّث إعدادات معلومات serialization الخاصة بالـ part المصدر أثناء mutation في MergeTree. وهذا يُصلح احتمال ظهور نتيجة query غير صحيحة على part mutated بعد تغييرات في serialization الخاصة بـ data types. #92419 (Pavel Kruglov).
  • إصلاح تعارض محتمل بين عمود وعمود فرعي يحملان الاسم نفسه، ما قد يؤدي إلى استخدام serialization غير صحيح وفشل الاستعلامات. يُغلق #90219. يُغلق #85161. #92453 (Pavel Kruglov).
  • إصلاح LOGICAL_ERROR كان يحدث بسبب تعديل غير مقصود في query plan عند تحويل OUTER JOIN إلى INNER JOIN. كما جرى تخفيف متطلبات هذا التحسين ليصبح قابلاً للتطبيق أيضاً في الحالات التي تُطبَّق فيها الدوال الحقنية على مفاتيح التجميع أثناء joins. #92503 (János Benjamin Antal).
  • إصلاح الخطأ المحتمل SIZES_OF_COLUMNS_DOESNT_MATCH أثناء فرز عمود Tuple فارغ. يُغلق #92422. #92520 (Pavel Kruglov).
  • التحقق من وجود paths غير متوافقة من حيث النوع في JSON type. يُغلق #91577. #92539 (Pavel Kruglov).
  • إصلاح حالة deadlock في SHOW CREATE DATABASE لقاعدة بيانات Backup. #92541 (Azat Khuzhin).
  • استخدام رمز الخطأ الصحيح عند التحقق من hypothesis index. #92559 (Raúl Marín).
  • إصلاح resolution للأعمدة الفرعية الديناميكية في aliases الأعمدة داخل analyzer. في السابق، كان العمود الفرعي الديناميكي في alias العمود يُغلَّف داخل getSubcolumn، وفي بعض الحالات لم يكن يمكن resolve له إطلاقاً. يُغلق #91434. #92583 (Pavel Kruglov).
  • منع حدوث crash في tokens() عندما تكون الوسيطة الثانية بقيمة NULL. #92586 (Raúl Marín).
  • إصلاح crash محتمل ناتج عن mutation موضعي للأعمدة الثابتة الأساسية في PREWHERE. كان يمكن أن يحدث ذلك عند تقليص العمود (IColumn::shrinkToFit) أو تطبيق filter عليه (IColumn::filter)، وهو ما كان يمكن أن يُحفَّز بالتزامن من عدة threads. #92588 (Arsen Muk).
  • جرى تعطيل إنشاء text indexes وmaterializing لها مؤقتاً على الجداول التي تحتوي على parts كبيرة (أكثر من 4,294,967,295 صفاً). يمنع هذا القيد ظهور نتائج استعلامات غير صحيحة، لأن التطبيق الحالي للفهرس لا يدعم بعد مثل هذه الأجزاء الكبيرة. #92644 (Anton Popov).
  • إصلاح logical error من نوع Too large size (A) passed to allocator أثناء تنفيذ عمليات JOIN. يُغلق #92043. #92667 (Yarik Briukhovetskyi).
  • إزالة خلل كان يؤدي إلى أن indexes من نوع ngrambf_v1 ذات طول ngram (المعامل الأول) > 8 كانت تطرح استثناءً. #92672 (Robert Schulze).
  • إصلاح استثناء غير ملتقط أثناء إعادة تحميل named collections في الخلفية عند استخدام تخزين ZooKeeper. يُغلق https://github.com/ClickHouse/clickhouse-private/issues/44180. #92717 (Kseniia Sumarokova).
  • يُعيد العمل على المنطق غير الصحيح في التحقق من grants الوصول الخاصة بمنح wildcard. كانت المحاولة السابقة https://github.com/ClickHouse/ClickHouse/pull/90928 تعالج ثغرة حرجة، لكنها كانت مقيِّدة أكثر من اللازم، ما أدى إلى فشل بعض عبارات GRANT الخاصة بـ wildcard بسبب عمليات REVOKE غير مرتبطة. #92725 (pufit).
  • إصلاح خطأ في منطق تخطي البيانات عند استخدام not match(...) في WHERE، ما كان يؤدي إلى نتائج غير صحيحة. يغلق #92492. #92726 (Nihal Z. Miaji).
  • عدم محاولة حذف الأدلة المؤقتة عند بدء التشغيل إذا أُنشئ جدول MergeTree على قرص للقراءة فقط. #92748 (Alexey Milovidov).
  • إصلاح الخطأ “Cannot add action to empty ExpressionActionsChain” في ALTER TABLE REWRITE PARTS ‏(v2). #92754 (Azat Khuzhin).
  • تجنّب التعطل بسبب القراءة من Connection منقطعة. #92807 (Raufs Dunamalijevs).
  • إصلاح الخطأ المنطقي Failed to set file processing within 100 retries في S3Queue ضمن وضع Ordered. وقد استُبدل الآن بتحذير. كان يمكن أن يحدث هذا الخطأ قبل الإصدار 25.10 إذا انتهت صلاحية جلسة Keeper، لكنه سيظل مجرد تحذير في إصدارات 25.10+ أيضًا، إذ لا يزال من الممكن نظريًا ظهور هذا الخطأ عند ارتفاع تزامن المعالجة في وضع Ordered. #92814 (Kseniia Sumarokova).
  • في السابق، كانت بعض queries التي تستخدم sharding بالمفتاح الأساسي PK مع شرط غير صحيح تفشل. الآن لم تعد كذلك. هذا مطلوب من أجل https://github.com/ClickHouse/ClickHouse/pull/89313. #92815 (Yarik Briukhovetskyi).
  • إصلاح حساب الأحجام غير المضغوطة للفهارس النصية في جدول system.parts. #92832 (Anton Popov).
  • إصلاح استخدام الفهرس الأساسي في lightweight updates التي تحتوي على عبارة IN مع استعلامات فرعية ضمن predicate لعبارة WHERE. #92838 (Anton Popov).
  • إصلاح إنشاء type hint للمسار ‘skip’ في JSON. يغلق #92731. #92842 (Pavel Kruglov).
  • في محرك الجدول S3، يجب تجنّب التخزين المؤقت لمفتاح partition إذا كانت هناك دوال غير حتمية. #92844 (Miсhael Stetsyuk).
  • إصلاح خطأ محتمل FILE_DOESNT_EXIST بعد mutation لعمود sparse مع ratio_of_defaults_for_sparse_serialization=0.0. يغلق #92633. #92860 (Pavel Kruglov).
  • إصلاح schema inference في Parquet في قارئ Parquet القديم (غير المستخدم افتراضيًا) عندما يأتي عمود JSON بعد عمود Tuple. وإصلاح فشل قارئ Parquet القديم (غير المستخدم افتراضيًا) مع tuples الفارغة. #92867 (Michael Kolupaev).
  • إصلاح خطأ منطقي عند وجود عدة عمليات join على شرط ثابت ومع join_use_nulls. إغلاق #92640. #92892 (Vladimir Cherkasov).
  • إصلاح الخطأ المحتمل NOT_FOUND_COLUMN_IN_BLOCK أثناء insert إلى جدول يحتوي على عمود فرعي ضمن partition expression. إغلاق #93210. إغلاق #83406. #92905 (Pavel Kruglov).
  • إصلاح الخطأ NO_SUCH_COLUMN_IN_TABLE في محرك Merge فوق الجداول التي تحتوي على aliases. إغلاق #88665. #92910 (Pavel Kruglov).
  • إصلاح حالة NULL != NULL في full_sorting_join على عمود LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
  • إصلاح عدة حالات crash أثناء merges لفهارس نصية في جداول MergeTree. #92925 (Anton Popov).
  • استعادة wrappers الخاصة بـ LowCardinality في نتائج تعبيرات SET عند الحاجة أثناء aggregation الخاصة بـ TTL، لمنع الاستثناءات أثناء تحسين الجدول. #92971 (Seva Potapov).
  • إصلاح خطأ منطقي أثناء index analysis عند استخدام Array فارغة في الدالة has. إغلاق #92906. #92995 (Nihal Z. Miaji).
  • إصلاح احتمال حدوث تعليق عند إنهاء background schedule pool (وقد يؤدي ذلك إلى تعليق server عند الإغلاق). #93008 (Azat Khuzhin).
  • إصلاح الخطأ المحتمل FILE_DOESNT_EXIST بعد mutation على عمود sparse عندما جرى تغيير الإعداد ratio_of_defaults_for_sparse_serialization إلى 1.0 عبر alter. #93016 (Pavel Kruglov).
  • إصلاح خلل في منطق data skipping عند استخدام not materialize(...) أو not CAST(...) في WHERE، ما يؤدي إلى نتائج غير صحيحة. إغلاق #88536. #93017 (Nihal Z. Miaji).
  • إصلاح احتمال استخدام outdated parts بسبب سباق TOCTOU للأجزاء المشتركة. #93022 (Azat Khuzhin).
  • إصلاح crash عند إلغاء تسلسل aggregate state الخاصة بـ groupConcat إذا كانت معطوبة وتحتوي على offsets خارج الحدود. #93028 (Raufs Dunamalijevs).
  • إصلاح ترك connection في حالة معطوبة بعد الإلغاء المبدئي للاستعلامات الموزعة. #93029 (Azat Khuzhin).
  • إصلاح نتائج join عندما يكون join key في الطرف الأيمن عمودًا sparse. هذا يُغلق #92920. لم أتمكن من إعادة إنتاج الخلل إلا مع set compatibility='23.3'. لست متأكدًا مما إذا كان ينبغي backport له. #93038 (Amos Bird).
  • إصلاح مشكلة محتملة تتمثل في Cannot finalize buffer after cancellation في estimateCompressionRatio(). إصلاح: #87380. #93068 (Azat Khuzhin).
  • إصلاح عمليات دمج الفهارس النصية المبنية فوق تعبيرات معقدة (مثل concat(col1, col2)). #93073 (Anton Popov).
  • إصلاح تطبيق projection عندما يحتوي filter على subcolumns. إغلاق #92882. #93141 (Pavel Kruglov).
  • إصلاح logical error في بعض الحالات التي تحدث عند إضافة join runtime filters إلى query plan. وكان السبب هو إرجاع أعمدة const مكررة بشكل غير صحيح من أحد طرفي join. #93144 (Alexander Gololobov).
  • كانت الدالة الخاصة __applyFilter المستخدمة من قِبل join runtime filters تُرجع ILLEGAL_TYPE_OF_ARGUMENT في بعض الحالات الصحيحة. #93187 (Alexander Gololobov).
  • منع انهيار أعمدة interpolated المختلفة إلى العمود نفسه داخل block عندما تكون أعمدة interpolated في الواقع aliases للعمود نفسه. #93197 (Yakov Olkhovskiy).
  • عدم إضافة runtime filter عند إجراء join مع right table ممتلئ مسبقًا. #93211 (Alexander Gololobov).
  • إصلاح تنظيف watches الدائمة في Keeper بعد انتهاء session. هذا يغلق #92480. #93213 (Konstantin Vedernikov).
  • إصلاح ORDER BY بحسب Tuple في Iceberg. هذا يغلق #92977. #93225 (Konstantin Vedernikov).
  • إصلاح خلل في إعداد S3Queue s3queue_migrate_old_metadata_to_buckets. إغلاق #93392، #93196، #81739. #93232 (Kseniia Sumarokova).
  • إزالة الأعمدة غير المستخدمة عند إعادة بناء projection أثناء merge. وهذا يقلل memory usage وينشئ parts مؤقتة أقل. #93233 (Nikolai Kochetov).
  • إصلاح إزالة الأعمدة غير المستخدمة من subqueries في وجود subquery scalar مترابط. قبل هذا الإصلاح، كان يمكن إزالة العمود إذا كان مستخدمًا فقط داخل subquery المترابط، وكان query سيفشل بالخطأ NOT_FOUND_COLUMN_IN_BLOCK. #93273 (Dmitry Novik).
  • إصلاح احتمال فقدان subcolumn في MV أثناء alter لـ source table. إغلاق #93231. #93276 (Pavel Kruglov).
  • إصلاح تخطيط الاستعلام لمحرك الجداول Merge مع analyzer، والذي كان قد يُطلق الخطأ ILLEGAL_COLUMN مع hostName() عند دمج الجداول المحلية والجداول البعيدة/Distributed. يُغلق #92059. #93286 (Jinlin).
  • إصلاح حالة كانت فيها NOT IN مع وسائط Array غير الثابتة تُرجع قيمة غير صحيحة، مع إضافة دعم دوال Array غير الثابتة. يُغلق #14980. #93314 (Yarik Briukhovetskyi).
  • إصلاح الخطأ Not found column في التحسين use_top_k_dynamic_filtering. يُصلح #93186. #93316 (Nikolai Kochetov).
  • إصلاح إعادة بناء text indexes المُنشأة فوق subcolumns. #93326 (Anton Popov).
  • إصلاح التعامل مع Array فارغة كوسيطة ثانية في الدالتين hasAllTokens وhasAnyTokens. #93328 (Anton Popov).
  • إصلاح خطأ منطقي عند استخدام runtime filters في query تحتوي على totals لجدول الجانب الأيمن. #93330 (Alexander Gololobov).
  • لم يعد الخادم يتعطل إذا استُدعيت الدالة tokens باستخدام معاملات tokenizer غير ثابتة (المعاملات الثاني والثالث والرابع)، مثل SELECT tokens(NULL, 1, materialize(1)). #93383 (Robert Schulze).
  • إصلاح ثغرة تجاوز صحيح في إلغاء تسلسل state الخاصة بـ groupConcat، والتي كان يمكن أن تتسبب في مشكلات سلامة الذاكرة باستخدام aggregate states مُعدّة خصيصًا. #93426 (Raufs Dunamalijevs).
  • إصلاح تحليل text index على array columns عندما لا يحتوي الفهرس على أي tokens (إذا كانت جميع المصفوفات فارغة أو كانت جميع tokens يتخطاها tokenizer). #93457 (Anton Popov).
  • تجنّب تسجيل الدخول عبر oauth في ClickHouse Client عندما تكون username/password موجودتَين ضمن connection string. #93459 (Krishna Mannem).
  • إصلاح دعم credentials المورَّدة لـ Azure ADLS Gen2 في DataLakeCatalog - تحليل مفاتيح adls.sas-token.* من REST catalogs الخاصة بـ Iceberg وإصلاح parsing لعناوين URL من نوع ABFSS. #93477 (Karun Anantharaman).
  • إصلاح دعم GLOBAL IN مع analyzer (إذ كانت المجموعة في السابق تُنشأ مرة أخرى على العقدة البعيدة). #93507 (Azat Khuzhin).
  • إصلاح استخراج subcolumn أثناء إلغاء التسلسل مباشرةً إلى أعمدة Sparse. #93512 (Pavel Kruglov).
  • إصلاح direct read من text index مع استعلامات البحث المكررة. #93516 (Anton Popov).
  • إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند تمكين runtime filter وكانت الجداول المربوطة تُرجع العمود نفسه عدة مرات (مثل SELECT a, a, a FROM t). #93526 (Alexander Gololobov).
  • إصلاح خلل كان يجعل clickhouse-client يطلب كلمة المرور مرتين عند الاتصال باستخدام ssh. #93547 (Isak Ellmer).
  • التأكد من إنهاء zookeeper بشكل صحيح عند إيقاف التشغيل (مع إصلاح احتمال التعليق أثناء الإيقاف في حالات نادرة جدًا). #93602 (Azat Khuzhin).
  • إصلاح LOGICAL_ERROR عند استعادة ReplicatedMergeTree في حال حدوث حالة تسابق في إزالة التكرار. #93612 (Pablo Marcos).
  • إصلاح استخدام عمود Sparse لتحديث TTL أثناء فك التسلسل المباشر إلى أعمدة Sparse في بعض تنسيقات الإدخال. ويعالج ذلك احتمال حدوث خطأ منطقي Unexpected type of result TTL column. #93619 (Pavel Kruglov).
  • إصلاح تعطل دوال H3 index أحيانًا أو توقفها عند استدعائها بمدخلات غير صالحة. #93657 (Michael Kolupaev).
  • أدى استخدام الفهرس ngram_bf على بيانات غير UTF-8 إلى قراءة ذاكرة غير مهيأة، مع قيم قد تنتهي إلى بنية الفهرس الناتجة. يغلق #92576. #93663 (Alexey Milovidov).
  • التحقق من أن حجم المخزن المؤقت بعد فك الضغط مطابق لما هو متوقع. #93690 (Raúl Marín).
  • منع المستخدمين من الحصول على قائمة الأعمدة من جدول من دون التحقق من إذن SHOW COLUMNS باستخدام محرك الجدول merge. #93695 (János Benjamin Antal).
  • إصلاح materialization لفهارس skip المُنشأة فوق subcolumns. #93708 (Anton Popov).
  • نخزن المؤشرات المشتركة الخاصة بوحدات التخزين في QueryPipeline::resources::storage_holders للتأكد من أن كائنات IStorage لا تُدمَّر ما دام PipelineExecutor قيد التشغيل. #93746 (Miсhael Stetsyuk).
  • إصلاح إرفاق قواعد بيانات Replicated عند تغيّر مضيف interserver بعد إعادة التشغيل. #93779 (Tuan Pham Anh).
  • إصلاح assert !read_until_position في ReadBufferFromS3 الذي كان يحدث عند تفعيل الذاكرة المؤقتة. #93809 (Kseniia Sumarokova).
  • إصلاح خطأ منطقي في حالة نادرة عند استخدام Tuple فارغ مع عمود Map. يغلق #93784. #93814 (Nihal Z. Miaji).
  • إصلاح تلف _part_offset عند إعادة بناء projections أثناء merges، وتحسين معالجة projection عبر تجنب القراءات غير الضرورية للعمود _part_offset وتخطي الأعمدة غير المطلوبة في حسابات projection. ويواصل ذلك التحسينات التي قُدمت في #93233. #93827 (Amos Bird).
  • إزالة معالجة ‘Bad version’. #93843 (Anton Ivashkin).
  • إصلاح عدم عمل optimize_inverse_dictionary_lookup مع الاستعلام الموزع عندما يكون المفتاح من نوع عددي صحيح موقّع. يغلق #93259. #93848 (Nihal Z. Miaji).
  • إصلاح عدم عمل lag/lead مع استعلام remote() الموزع. يغلق #90014. #93858 (Nihal Z. Miaji).
  • إصلاح خلل في توزيع system instrument. #93937 (Pablo Marcos).
  • في https://github.com/ClickHouse/ClickHouse/pull/89173، أضفنا حقلاً إضافياً إلى البنية التي يرسلها TraceSender عبر قناة داخلية. لكن لم يتم تحديث حجم المخزن المؤقت (هنا)، ولذلك أصبحنا نكتب إلى المخزن المؤقت بيانات أكثر مما يسمح به buffer_size، ما يؤدي إلى عدة عمليات flush. وبما أن TraceSender::send يُستدعى من خيوط تنفيذ مختلفة، فقد تتداخل عمليات flush الخاصة بهذه الخيوط، مما يخلّ بالخاصية التي تعتمد عليها جهة الاستقبال (TraceCollector). #93966 (Miсhael Stetsyuk).
  • إصلاح تحويل النوع إلى النوع الأعلى أثناء عملية join في التخزين Join مع عبارة USING. يصلح #91672. يصلح #78572. #94000 (Dmitry Novik).
  • إصلاح عدم إضافة FilterStep بالشكل الصحيح عند تطبيق join runtime filter على Merge table. #94021 (Alexander Gololobov).
  • كان من الممكن أن يُرجع استعلام SELECT يحتوي على predicate على عدة أعمدة مع bloom filter skip indexes، ومع وجود الشرطين OR وNOT، نتائج غير متسقة. تم إصلاح ذلك الآن. #94026 (Shankar Iyer).
  • إصلاح CLEAR للعمود مع الفهارس التابعة. #94057 (Raúl Marín).
  • إصلاح استخدام قيمة غير مهيأة في ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov).
  • إصلاح تحقق غير صحيح من المسارات ذات الأنواع المحددة في JSON. أُضيف هذا التحقق في https://github.com/ClickHouse/ClickHouse/pull/92842 وقد يؤدي إلى حدوث خطأ أثناء بدء تشغيل الجداول الحالية. #94070 (Pavel Kruglov).
  • إصلاح الانهيار أثناء تحليل المرشح في وجود OUTER JOIN. يصلح #90979. #94080 (Dmitry Novik).
  • إصلاح دقة uniqTheta عند استخدام مفاتيح aggregation من نوع UInt8 بالتوازي (max_threads > 1 - الافتراضي). #94095 (Azat Khuzhin).
  • إصلاح الانهيار الناتج عن استثناء تم طرحه من استدعاء socket.setBlocking(true) داخل SCOPE_EXIT. #94100 (Miсhael Stetsyuk).
  • إصلاح فقدان البيانات عندما يزيل DROP PARTITION الأجزاء التي أنشأتها إدخالات log لاحقة في ReplicatedMergeTree. #94123 (Tuan Pham Anh).
  • إصلاح المعالجة غير الصحيحة في parquet reader v3 للمصفوفات التي تتجاوز حدود الصفحة. يحدث ذلك مثلًا في الملفات التي يكتبها Arrow من دون تمكين page statistics أو page index. يؤثر هذا فقط في الأعمدة من نوع البيانات Array. ومن الأعراض المحتملة أن تُقتطع مصفوفة واحدة تقريبًا كل ~1 MB من البيانات. إلى حين تطبيق هذا الإصلاح، استخدم هذا الإعداد كحل بديل: input_format_parquet_use_native_reader_v3 = 0. #94125 (Michael Kolupaev).
  • إصلاح العدد الزائد من watches في ReplicatedMergeTree أثناء انتظار log entry. #94133 (Azat Khuzhin).
  • جعل الدوال arrayShuffle وarrayPartialShuffle وarrayRandomSample تُجسِّد الأعمدة الثابتة بحيث تحصل الصفوف المختلفة على نتائج مختلفة. #94134 (Joanna Hulboj).
  • إصلاح data race عند تقييم table functions داخل materialized views. #94171 (Alexey Milovidov).
  • إصلاح إلغاء مرجع nullptr في محركات قاعدة البيانات PostgreSQL (عندما يكون الاستعلام غير صحيح). يُغلق #92887. #94180 (Alexey Milovidov).
  • إصلاح تسرّب للذاكرة في refreshable materialized views التي تستخدم استعلامات SELECT مع عدة subqueries. #94200 (Antonio Andelic).
  • إصلاح data race بين DataPartStorageOnDiskBase::remove وsystem.parts. يُغلق #49076. #94262 (Alexey Milovidov).
  • إزالة محدد noexcept الخاطئ في عملية إسناد النسخ لـ HashTable، والذي قد يؤدي إلى crash (std::terminate) عند حدوث استثناءات في الذاكرة. #94275 (Nikita Taranov).
  • سابقًا، كان إنشاء projection بأعمدة مكررة في GROUP BY (مثل GROUP BY c0, c0) ثم إدراج البيانات يتسبب في std::length_error إذا كان optimize_row_order مفعّلًا. يُغلق #94065. #94277 (Alexey Milovidov).
  • إصلاح خلل غامض في عميل ZooKeeper عند الاتصال، كان يؤدي إلى حالات تعليق وتعطّل. #94320 (Azat Khuzhin).
  • إصلاح عدم تطبيق تحسين function to subcolumns على subcolumns. #94323 (Pavel Kruglov).
  • إصلاح نتيجة قد تكون غير صحيحة في عمليات RIGHT JOIN المتداخلة عند تمكين enable_lazy_columns_replication. كان الخلل يتسبب في أن تُرجِع جميع الصفوف في الأعمدة replicated القيمة نفسها بشكل غير صحيح بدلًا من قيمها المميزة. يُغلق #93891. #94339 (Vladimir Cherkasov).
  • إصلاح دفع التصفية إلى المصدر في SEMI JOIN باستخدام مجموعات التكافؤ. لا تُدفَع التصفية إذا كانت أنواع argument قد تغيّرت. يُصلح #93264. #94340 (Dmitry Novik).
  • إصلاح استخدام DeltaLake CDF مع محرك قاعدة البيانات DataLake (تكامل كتالوجات delta lake). يُغلق #94122. #94342 (Kseniia Sumarokova).
  • إصلاح القيمة غير الصحيحة للمقياس الحالي FilesystemCacheSizeLimit عند استخدام سياسة التخزين المؤقت SLRU. #94363 (Kseniia Sumarokova).
  • أصبح إنشاء محرك قاعدة البيانات Backup بأقل من وسيطين يعيد رسالة خطأ أكثر وضوحًا (Wrong number of arguments بدلًا من std::out_of_range: InlinedVector::at(size_type) const failed bounds check.). #94374 (Robert Schulze).
  • يتجاهل عمليات revoke غير الممكنة للامتيازات العامة على مستوى قاعدة البيانات بالنسبة إلى امتيازات grant التي تتضمن خيار grant. #94386 (pufit).
  • إصلاح قراءة offsets المتفرقة من الأجزاء المدمجة. يُغلق #94385. #94399 (Pavel Kruglov).
  • لا تمنع ALTER للأعمدة التي تستخدم فهارس ضمنية، حتى عند استخدام وضع throw الخاص بـ alter_column_secondary_index_mode. #94425 (Raúl Marín).
  • إصلاح تعطل في TCPHandler عندما تقرأ استدعاءات متعددة لـ receivePacketsExpectQuery القيمة Protocol::Client::IgnoredPartUUIDs. #94434 (Miсhael Stetsyuk).
  • إصلاح إخفاء البيانات الحساسة في system.functions. #94436 (Vitaly Baranov).
  • إصلاح إلغاء مرجع nullptr عند تعطيل send_profile_events. أُضيفت هذه الميزة مؤخرًا إلى برنامج تشغيل ClickHouse لـ بايثون. يُغلق #92488. #94466 (Alexey Milovidov).
  • إصلاح عدم توافق .mrk في الفهرس النصي أثناء عمليات الدمج. #94494 (Peng Jian).
  • عند تمكين read_in_order_use_virtual_row، كان الكود يصل إلى أعمدة الفهرس استنادًا إلى الحجم الكامل للمفتاح الأساسي من دون التحقق مما إذا كان الفهرس قد اقتُطع، مما أدى إلى use-after-free / استخدام ذاكرة غير مهيأة. يُغلق #85596. #94500 (Alexey Milovidov).
  • إصلاح خطأ ناتج عن عدم تطابق الأنواع عند إرسال الجداول الخارجية للاستعلامات الفرعية التي تستخدم GLOBAL IN إذا كانت الأنواع Nullable. يُغلق #94097. #94511 (Alexey Milovidov).
  • في الإصدارات السابقة، كانت الاستعلامات التي تتضمن عدة شروط فهرس على التعبير نفسه قد تطرح بالخطأ الاستثناء Not found column. يُغلق #60660. #94515 (Alexey Milovidov).
  • إصلاح المعالجة غير الصحيحة لعمود join من النوع Nullable في Runtime Filters. #94555 (Alexander Gololobov).
  • لم يعد إنشاء workload داخل workload أخرى قيد الاستخدام يتسبب في حدوث crash. #94599 (Sergei Trifonov).
  • إصلاح crash أثناء تحسين ANY LEFT JOIN عند تقييم isNotNull على عمود غير موجود. #94600 (Molly).
  • إصلاح تقييم التعبير default عند الإشارة إلى أعمدة أخرى ذات قيم default محسوبة. #94615 (Alexey Milovidov).
  • إصلاح مشكلات permission في عمليات BACKUP/RESTORE. #94617 (Pablo Marcos).
  • إصلاح crash ناتج عن تحويل نوع غير صحيح عندما يكون نوع البيانات Nullable(DateTime64). #94627 (Miсhael Stetsyuk).
  • إصلاح خلل كان يؤدي إلى أن بعض distributed queries مع ORDER BY قد تُرجع أعمدة ALIAS بقيم متبدلة (أي إن العمود a يعرض بيانات العمود b والعكس صحيح). #94644 (filimonov).
  • إصلاح تخزين نتائج keeper-bench في ملف. #94654 (Antonio Andelic).
  • إصلاح التقديرات غير الدقيقة مع إحصاءات من نوع MinMax عندما يحتوي العمود على قيم floating-point سالبة. #94665 (zoomxi).
  • إصلاح قراءة ملفات Parquet عندما يكون مفتاح الـ map من نوع struct. #94670 (Konstantin Vedernikov).
  • إصلاح احتمال ظهور JOIN result غير صحيحة في RIGHT join عند استخدام شروط ON معقدة. Close #92913. #94680 (Vladimir Cherkasov).
  • الحفاظ على index granularity الثابتة (use_const_adaptive_granularity) بعد Vertical merges. #94725 (Azat Khuzhin).
  • إصلاح خلل في mutation متعلق بـ scalar subqueries واعتماديات الجدول. إذا كانت لدى الجدول اعتماديات (index أو projections) على عمود ما، فقد تُقيَّم scalar subqueries وتُخزَّن مؤقتًا بلا بيانات، مما يؤدي إلى تغييرات غير صحيحة. #94731 (Raúl Marín).
  • إصلاح fallback الخاص بـ AsynchronousMetrics cpu_pressure عند حدوث error. #94827 (Raúl Marín).
  • كانت الدالة getURLHostRFC تفتقد إلى فحوصات حدود قبل إلغاء الإشارة إلى المؤشرات. وعند تمرير سلسلة فارغة إلى domainRFC``، كانت تقرأ ذاكرة غير مهيأة، مما يؤدي إلى أخطاء MSan. #94851 (Alexey Milovidov).
  • إصلاح وضع readonly للأقراص المشفرة. #94852 (Azat Khuzhin).
  • إصلاح logical error في LIMIT/OFFSET الكسري عند استخدام analyzer القديم مع Distributed tables. Closes #94712. #94999 (Ahmed Gouda).
  • إصلاح تعطل يحدث في بعض الحالات عندما تكون مرشحات runtime لعمليات join مفعّلة افتراضيًا. #95000 (Alexander Gololobov).
  • تحسين إخفاء كلمات المرور في عناوين url المستخدمة في محرك الجدول URL() ودالة الجدول url(). #95006 (Vitaly Baranov).
  • أصبحت الدالة toStartOfInterval تعمل الآن بالطريقة نفسها التي تعمل بها toStartOfX، حيث تكون X إحدى القيم Day, Week, Month, Quarter, Year عندما يكون enable_extended_results_for_datetime_functions مفعّلًا. #95011 (Kirill Kopnev).
  • إصلاح عدم التزام مقارنات السلاسل النصية الثابتة بالإعدادات cast_string_to_date_time_mode وbool_true_representation وbool_false_representation وinput_format_null_as_default. يُغلق #91681. #95040 (Nihal Z. Miaji).
  • إصلاح حالة data race في filesystem cache. #95064 (Alexey Milovidov).
  • إصلاح race condition نادرة في قارئ Parquet. #95068 (Alexey Milovidov).
  • إصلاح تعطل في تحسين top K عندما تكون LIMIT صفرًا. يُغلق #93893. #95072 (Alexey Milovidov).
  • عند التحويل من DateTime/الأعداد الصحيحة إلى Time64، يُستخرج مكوّن time-of-day باستخدام toTime، وهو غير رتيب. وقد أشار القالب ToDateTimeMonotonicity خطأً إلى أن هذا التحويل رتيب، مما تسبب في الاستثناء “Invalid binary search result in MergeTreeSetIndex” في إصدارات Debug. #95125 (Alexey Milovidov).
  • أُعيد إنشاء قائمة entries في manifest file فقط عند الضرورة (إذ كان ذلك يُجرى سابقًا في كل تكرار). #95162 (Daniil Ivanik).

تحسينات البناء/الاختبار/التغليف

  • إضافة مجموعة أدوات لتوصيف تخصيصات الذاكرة في محلل ClickHouse SQL باستخدام إمكانات توصيف الكومة في jemalloc. #94072 (Ilya Yatsishin).
  • أُضيفت أداة تُسهّل استكشاف تخصيصات الذاكرة وإصلاح مشكلاتها في المحلل. تستخدم هذه الأداة المقياس stats.allocated في jemalloc قبل تحليل الاستعلام إلى تمثيل AST وبعده، لعرض ما تم تخصيصه. كما تدعم وضع توصيف الذاكرة الذي يُخرج ملف توصيف قبل العملية وبعدها لبناء تقارير توضّح مواضع حدوث التخصيصات. #93523 (Ilya Yatsishin).
  • إزالة تضمينات libc++ العابرة. #92523 (Raúl Marín).
  • جعل بعض الاختبارات المتسلسلة تعمل بالتوازي: https://github.com/ClickHouse/ClickHouse/pull/93030/changes#diff-c3a73510dae653c9bbfa24300b32f5d6ec663fd4e72cc4a3d5daa6e4342915df. #93030 (Nikita Fomichev).
  • تنظيف بعض خيارات البناء. #93679 (Raúl Marín).
  • ترقية c-ares من v1.34.5 إلى v1.34.6. يعالج هذا الثغرة CVE-2025-62408 الخاصة بـ c-ares، لكنها غير ذات صلة بـ ClickHouse. #94129 (Govind R Nair).
  • استخدام curl 8.18.0. #94742 (Konstantin Bogdanov).
آخر تعديل في ٢ يوليو ٢٠٢٦