Skip to main content

إصدار ClickHouse 26.8 LTS، 2026-08-27، FIXME (قيد الإعداد)

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

  • تُفسَّر أرقام JSON غير المقتبسة لأعمدة DateTime وDateTime64 في JSONEachRow والتنسيقات المشابهة الآن كطوابع زمنية بتنسيق Unix، مع دقة اختيارية لأجزاء الثانية، بما يتوافق مع Values وCAST وtoDateTime64. سابقًا، كان يُرفض العدد الكسري مثل 1703363853.035، بينما كان العدد الصحيح غير المقتبس مثل 1703363853 يُقرأ باعتباره القيمة الأولية المُحجَّمة لـ DateTime64، ما ينتج عنه طابع زمني 1970-.... لا تتأثر السلاسل النصية المقتبسة ومخرجات JSON الخاصة بـ ClickHouse. #108091 (Alexey Milovidov).
  • تغيّرت القيمة الافتراضية لـ max_insert_threads من 1 إلى auto، التي تُحوَّل إلى عدد أنوية CPU المتاحة للخادم. يؤدي ذلك إلى تنفيذ INSERT SELECT بالتوازي افتراضيًا، ويمكن لـ max_insert_threads الآن أيضًا تنفيذ جانب الكتابة في عملية INSERT عادية بالتوازي عندما يمكن لمسار الكتابة إلى الوجهة أن يتفرع بأمان. قد يغيّر ذلك عدد الأجزاء التي تنشئها هذه الاستعلامات وترتيب الصفوف المُدرجة. لاستعادة السلوك السابق، اضبط max_insert_threads على 1، أو اضبط compatibility على إصدار أقدم من 26.8. #109000 (Alexey Milovidov). #109006 (Alexey Milovidov).
  • تحترم محركات قواعد البيانات PostgreSQL وMaterializedPostgreSQL الآن remote_url_allow_hosts، شأنها شأن محرك الجداول PostgreSQL ودالة الجدول postgresql والقواميس المنشأة عبر DDL. عند تهيئة remote_url_allow_hosts، يرفض CREATE DATABASE وATTACH DATABASE الذي ينفذه المستخدم الآن قواعد بيانات PostgreSQL وMaterializedPostgreSQL التي تشير إلى مضيفين غير مسموح بهم، مع الخطأ UNACCEPTABLE_URL. ولا تزال قواعد البيانات الحالية تُحمَّل عند بدء تشغيل الخادم. #111135 (Alexey Milovidov).
  • يُجري برنامج الترميز التجريبي ALP(STD) الآن العمليات الحسابية لتحجيم Float32 باستخدام Float64. يؤدي ذلك إلى تحسين نسب الضغط وإزالة الضغط الذي يكثر فيه توليد الاستثناءات للبيانات العشرية، لكن قد تُفك ترميز قيم Float32 التي كتبتها الإصدارات السابقة بفارق 1 ULP. #111627 (Raufs Dunamalijevs).
  • أُزيل مصدر القاموس library. يفشل SOURCE(LIBRARY(...)) الآن بالخطأ UNKNOWN_ELEMENT_IN_CONFIG، وأصبح إعداد الخادم dictionaries_lib_path متقادمًا وليس له أي تأثير. #111980 (Alexey Milovidov).
  • TODO: @Mikhail Artemenko كيف يُعد هذا تغييرًا غير متوافق مع الإصدارات السابقة؟ لا يوضح إدخال سجل التغييرات ذلك: تستخدم معاملات قرص تخزين الكائنات الآن معاملات تخزين البيانات الوصفية الأصلية افتراضيًا بدلًا من المعاملات الوهمية السابقة. #89658 (Mikhail Artemenko).
  • أُزيل القارئ والكاتب المستندان إلى مكتبة Apache Arrow لتنسيقات Arrow وArrowStream. وأصبح تنفيذ ClickHouse الأصلي، الذي كان التنفيذ الافتراضي منذ 26.7، هو التنفيذ الوحيد الآن. أصبحت الإعدادات input_format_arrow_use_native_reader وoutput_format_arrow_use_native_writer متقادمة: لا تزال مقبولة، لكنها بلا تأثير؛ لذا فإن الاستعلام الذي كان يضبطها على 0 لفرض تنفيذ Apache Arrow يستخدم الآن التنفيذ الأصلي. #111996 (Alexey Milovidov).
  • TODO: اشرح عدم التوافق مع الإصدارات السابقة: ارفض قيم إعدادات المدة الزمنية (مللي ثانية/ثوانٍ) التي تتجاوز سعة Int64 بالميكروثواني. #112757 (Azat Khuzhin).
  • لم يعد بالإمكان تحديد بيانات اعتماد TLS لمصدر MySQL (ssl_ca، ssl_cert، ssl_key) كمسارات ملفات من خلال SQL، مثل CREATE NAMED COLLECTION أو وسائط الاستعلام أو CREATE DICTIONARY، لأن الخادم يفتح تلك الملفات باستخدام امتيازاته الخاصة. تظل المسارات مدعومة في ملف تكوين الخادم. في الحالات الأخرى، مرّر محتوى الشهادة أو المفتاح ضمن المعلمات الجديدة ssl_ca_pem وssl_cert_pem وssl_key_pem، والتي تُحجب في السجلات واستعلامات SHOW كما تُحجب كلمات المرور. #112070 (Alexey Milovidov).
  • تستخدم عمليات التحقق من الامتيازات لأوامر SYSTEM ... CACHE ON CLUSTER الآن الامتياز الخاص بكل أمر بدلًا من مجموعة امتيازات SYSTEM DROP CACHE. يتيح ذلك لحاملي امتياز محدد لذاكرة تخزين مؤقت تشغيل الأمر المطابق له، ويمنع حامل المجموعة من تشغيل SYSTEM SYNC FILESYSTEM CACHE ON CLUSTER دون امتياز SYSTEM SYNC FILESYSTEM CACHE. #114042 (Groene AI).
  • بالنسبة إلى العروض التي يكون جسمها عبارة عن SELECT بسيط على جدول Distributed واحد، يُدفع الآن الاستعلام الخارجي بالكامل إلى الشظايا (الإعداد الجديد optimize_trivial_view_pushdown_to_distributed مفعّل افتراضيًا). يغيّر ذلك السلوك المرئي لهذه العروض: إذ يُمرَّر الآن FINAL وSAMPLE المكتوبان في مرجع العرض إلى الجدول المحلي للشظية بدلًا من تجاهلهما، ولا يتم الإبلاغ عن extremes في العناقيد ذات الشظية الواحدة. اضبط optimize_trivial_view_pushdown_to_distributed = 0 لاستعادة السلوك السابق. #101791 (simonmichal).
  • TODO: انتظر التراجع عن التراجع. تستخدم أجزاء تصحيح UPDATE خفيفة الوزن الآن تنسيق v2 جديدًا على القرص، مرتبًا وفقًا لـ (sorting_key..., _block_number, _block_offset) ويُطبّق باستخدام خوارزمية دمج جديدة. تقتصر ذروة الذاكرة على أكبر سلسلة ذات مفتاح فرز متساوٍ بدلًا من التصحيح بالكامل، ولم تعد التحديثات التي تتجاوز حدود الدمج تعود إلى تطبيق Join داخل الذاكرة. تظل أجزاء التصحيح بالتنسيق القديم قابلة للقراءة. أثناء ترقية متدرجة من إصدار سابق لـ 26.8، أبقِ patch_parts_version = 'v1' أو استخدم إعداد compatibility إلى أن تتم ترقية جميع النسخ المتماثلة. #103182 (Anton Popov).
  • أُضيفت عبارة VALID FOR <interval> إلى CREATE USER وALTER USER كاختصار لعبارة VALID UNTIL. يُحتسب الموعد النهائي لانتهاء الصلاحية عند تنفيذ الاستعلام، وذلك بإضافة الفاصل الزمني المحدد إلى الوقت الحالي، ويُخزَّن بصيغة VALID UNTIL. أصبح العمود valid_until في جدول system.users من النوع Array(DateTime64(0)) بدلًا من Array(DateTime)، لكي تُمثَّل المواعيد النهائية بعد عام 2106 بدقة؛ وينبغي للأدوات التي تقرأ هذا العمود التعامل مع النوع الجديد. #110171 (Alexey Milovidov).
  • يعيد EXPLAIN SYNTAX الآن الاستعلام المُعاد تنسيقه كسجل String واحد (يتضمن أسطرًا جديدة مضمنة) بدلًا من سجل لكل سطر، لذا يصبح خرجه صفًا واحدًا قابلًا للاسترجاع ويمكن استخدامه مباشرةً (مثلًا، يعيد SELECT count() FROM (EXPLAIN SYNTAX ...) القيمة 1). يتحكم الخيار الجديد single_record في ذلك، وقيمته الافتراضية 1؛ اضبط single_record = 0 لاستعادة الخرج السابق بسجل واحد لكل سطر. تحتفظ أنواع EXPLAIN الأخرى (PLAN/PIPELINE/AST) بخرجها الشجري سطرًا بسطر. #110479 (Alexey Milovidov).
  • وُسِّع النطاق المدعوم لـ Date32 من [1900-01-01, 2299-12-31] إلى [0000-01-01, 9999-12-31] ليتطابق مع DateTime64. يقبل التحليل والتحويلات الآن النطاق الموسّع بدلًا من حصره بصمت ضمن الحدود القديمة. ملاحظات التوافق مع الإصدارات السابقة: في التحويل الرقمي toDate32(N)، تُفسَّر القيم ضمن [120530, 2932896] الآن كأرقام أيام (تواريخ من 2300-01-01 إلى 9999-12-31) بدلًا من طوابع Unix الزمنية في أوائل عام 1970، بما يتوافق مع القاعدة القائلة إن الرقم الذي يقع ضمن نطاق أرقام الأيام يُعد رقم يوم؛ وتُشبَع الأرقام الأقل من رقم يوم 0000-01-01 والطوابع الزمنية التي تلي 9999-12-31 عند الحدود الجديدة. #111534 (Alexey Milovidov).
  • لم تعد arrayIntersect وarraySymmetricDifference تعاملان القيمة المكررة ضمن وسيطة واحدة كما لو أنها ظهرت في عدة وسيطات. قد تُرجع الاستعلامات التي تعتمد على السلوك السابق نتائج مختلفة الآن: تُرجع arrayIntersect([1], [2], [1, 1]) القيمة [] بدلًا من [1]، وتُرجع arrayIntersect([1, 2], [2], [1, 1, 2]) القيمة [2] بدلًا من [1, 2]، وتُرجع arraySymmetricDifference([1], [2], [1, 1]) القيمة [2, 1] بدلًا من [2]. تكفي وسيطتان بالفعل لـ arraySymmetricDifference: تُرجع arraySymmetricDifference([1], [2, 2]) القيمة [2, 1] بدلًا من [1]. لا تُحتسب القيمة ضمن وسيطة الآن إلا إذا كانت موجودة في كل الوسيطات السابقة، لذا تحتوي النتيجة على القيم الموجودة في جميع الوسيطات فقط. وكجزء من التغيير نفسه، تنشئ arrayIntersect جدول التجزئة الخاص بها من أصغر وسيطة بدلًا من جميع الوسيطات، ما يجعلها أسرع بما يصل إلى 1.85 مرة وتستهلك ذاكرة أقل بمقدار الثلث عندما تختلف أحجام الوسيطات بدرجة كبيرة. لا تتأثر arrayUnion. #113021 (Alexey Milovidov).
  • تمنع disable_insertion_and_mutation الآن الاستهلاك في الخلفية من جداول Kafka وRabbitMQ وNATS، مع الاستمرار في السماح بالكتابة المباشرة إلى التخزين الخارجي. لا تهيئ جداول Kafka2 وNATS وRabbitMQ المحكومة مستهلكين لعمليات SELECT المباشرة. يتطلب إعداد message_queue_disable_insertion المُضاف مؤخرًا الآن إعادة تشغيل الخادم. #113660 (Christoph Wurm).
  • يُرفض الآن استخدام PARTITION BY أو ORDER BY في دالة نافذة على عمود AggregateFunction مع الخطأ ILLEGAL_COLUMN، كما كان الحال بالفعل مع ORDER BY ذي المستوى الأعلى على مثل هذا العمود. سابقًا، كان هذا الاستعلام يُقبل لدى محلل واحد على الأقل، وكان PARTITION BY في دالة النافذة يقسم البيانات بصورة مختلفة وفقًا لـ max_threads. يشمل الرفض أيضًا حالة متداخلة في Array أو Tuple أو Map أو Variant أو SimpleAggregateFunction. لا تتأثر SimpleAggregateFunction على نوع عادي، ولا QBit، ولا GROUP BY وDISTINCT على حالة. #113878 (Groene AI).
  • لم يعد الإعداد include_from يستخدم /etc/metrika.xml افتراضيًا. سابقًا، كان هذا الملف يُستخدم لإجراء استبدالات التكوين كلما كان موجودًا، رغم عدم وجود أي إشارة إليه في تكوين ClickHouse. إذا كنت تعتمد على ملف الاستبدالات الضمني هذا، فأضف <include_from>/etc/metrika.xml</include_from> صراحةً إلى كل ملف تكوين متأثر؛ وتحتاج ملفات users.xml المحمّلة بصورة منفصلة وتكوينات قواميس XML إلى عنصر include_from خاص بها. #114161 (Alexey Milovidov).
  • يقبل محرك الجدول NATS الآن بيانات اعتماد مضمنة في الإعداد الجديد nats_credentials (بالحمولة نفسها لملف .creds)، ولم يعد يقبل nats_credential_file عبر SQL: إذ يشير المسار إلى ملف على نظام ملفات الخادم، يفتحه الخادم بصلاحياته الخاصة؛ لذلك لا يمكن تحديده إلا ضمن مجموعة مسماة معرّفة في ملف تهيئة الخادم، أو باسم nats.credential_file في تهيئة الخادم نفسها. يمكن للاستعلام استبدال هذا المسار المُهيأ بـ nats_credentials المضمنة، ما لم يثبّته المشغّل باستخدام <nats_credential_file overridable="false">. تظل الجداول التي أُنشئت قبل هذا التقييد تعمل بعد الترقية. #114644 (Alexey Milovidov).
  • يمكن أن تستخدم المقاييس غير المتزامنة الآن نوع البيانات Map، كما حُوِّلت المقاييس لكل نواة CPU ولكل جهاز إلى مقاييس مفتاح-قيمة مفردة: أصبحت OSUserTimeCPU0 وOSUserTimeCPU1 و… مقياسًا واحدًا باسم OSUserTimeCPU، يتضمن خريطة تربط رقم نواة CPU بالقيمة (وينطبق الأمر نفسه على مقاييس OS*TimeCPU* الأخرى، وCPUFrequencyMHz_*، وTemperature*، وEDAC*، وBlock*_*، وNetwork(Receive|Send)*_*، وDisk*_*، و*BlobsQueueEstimate، وAsyncLogging*QueueSize). يحتوي system.asynchronous_metrics على عمود جديد هو key_values Map(LowCardinality(String), Float64) (وتكون قيمة العمود value هي NaN لهذه المقاييس)، ويسجلها system.asynchronous_metric_log في صف واحد لكل مفتاح باستخدام عمود key جديد، وتصدّرها نقطة نهاية Prometheus مع تسمية، مثل ClickHouseAsyncMetrics_BlockReadBytes{device="sda"}، بينما يرسلها MetricsTransmitter في Graphite بالصيغة <prefix>.<Metric>.<key>. #115333 (Alexey Milovidov).

ميزة جديدة

  • أُضيفت تعليمات CREATE HANDLER وALTER HANDLER وDROP HANDLER لتعريف معالجات HTTP مخصصة من SQL، تُخزَّن محليًا أو في Keeper. وأُضيفت الدالتان currentHandler وcurrentRequestURL، والجدول system.handlers، والعمودان http_handler_name / http_request_url في system.query_log. #106231 (Alexey Milovidov).
  • أُضيفت طريقة للوصول إلى الجداول وقواعد البيانات عبر مسارات URL في واجهة HTTP (مثلًا `/database/table.format.gz?filter=a>0`)، بالإضافة إلى إعدادات جديدة (`http_allow_database_as_path`، `http_allow_table_as_file`، `http_allow_filters_as_path`، `http_allow_filters_as_unrecognized_url_parameters`، `select`، `order`، `sort`، `filter`، `page`، `compression`، `format`، `input_format`، `output_format`، `default_format`، `database`) يمكن تركيبها معًا ومع معامل URL الحالي `query`. #105249 (Alexey Milovidov).
  • أُضيفت تنسيقات التأطير التي يحددها الإعداد الجديد framing_output_format: إذ تجمع أجزاء الاستجابة المختلفة للاستعلام ضمن تدفق استجابة HTTP واحد — مقاطع البيانات، والإجماليات والقيم القصوى، وحزم التقدم، وأحداث التوصيف، وسجلات الخادم، والاستثناءات. تشمل تنسيقات التأطير المنفذة: None (الافتراضي، حيث يعمل كل شيء كما كان سابقًا)، وEventStream (أحداث HTTP التي يرسلها الخادم)، وJSONEachPacketBase64، وJSONEachPacketString (كائن JSON لكل حزمة، ببيانات مرمَّزة بـBase64 أو كسلسلة نصية). #110127 (Alexey Milovidov).
  • أُضيف إعداد الخادم default_session_user: وهو المستخدم الذي تتم المصادقة باسمه عند اتصال عميل دون تحديد اسم مستخدم (كان محددًا برمجيًا سابقًا بالقيمة default؛ وتقبل الآن البروتوكولات الأصلية وMySQL وPostgreSQL اسم مستخدم فارغًا بدلًا من رفضه، بينما يراعي Arrow Flight هذا الإعداد بدلًا من استخدام القيمة default المحددة برمجيًا لديه). يمكن لنقاط نهاية البروتوكولات القابلة للتركيب في قسم protocols تجاوز هذا الإعداد لكل نقطة نهاية باستخدام المفتاح default_session_user، بحيث يمكن لمنافذ الاستماع المختلفة خدمة مستخدمين مجهولين مختلفين. يؤدي تعيينه إلى سلسلة فارغة إلى منع الاتصالات التي لا تحدد اسم مستخدم. لا تستخدم الاتصالات بين الخوادم مستخدم الجلسة الافتراضي مطلقًا. #110179 (Alexey Milovidov).
  • أُضيف دعم عوامل الأنبوب في استعلامات SQL: FROM t |> WHERE x > 1 |> AGGREGATE count() AS c GROUP BY y |> ORDER BY c DESC |> LIMIT 10، على غرار صياغة الأنبوب في GoogleSQL. يمكن أن يتبع أي استعلام SELECT سلسلة من عوامل |>، ويلف كل عامل الاستعلام السابق في استعلام فرعي، لذا تكون شجرة AST الناتجة مماثلة لتلك الخاصة بالاستعلام المكافئ ذي الاستعلامات الفرعية المتداخلة. في الاستعلام الذي يبدأ بعبارة FROM، أصبحت عبارة SELECT اختيارية وتكون افتراضيًا SELECT *. #111151 (Alexey Milovidov).
  • أُضيفت الدالتان parseQueryToJSON وformatQueryFromJSON لتسلسل AST وإلغاء تسلسلها بصيغة JSON، ولهجة clickhouse_json تجريبية تُفعَّل بواسطة enable_json_ast_dialect. #100412 (Alexey Milovidov). #113480 (Nikita Fomichev).
  • إعداد جديد run_query_in_background. يقبل الخادم الاستعلام ويعيد نتيجة فارغة فورًا، ثم ينفّذه حتى اكتماله بغض النظر عمّا يحدث للاتصال. تُهمَل النتيجة. تتبّع الاستعلام باستخدام query_id الخاص به في system.processes وsystem.query_log. مخصص للاستعلامات الطويلة، مثل INSERT ... SELECT أو CREATE TABLE … AS SELECT أو CREATE MATERIALIZED VIEW … POPULATE، التي يجب ألا تتوقف عند انقطاع الاتصال. #112816 (Miсhael Stetsyuk).
  • أُضيف جدول نظام جديد، system.user_query_log، يتيح لكل مستخدم عرض سجلات استعلاماته الخاصة دون الحاجة إلى صلاحية الوصول إلى جدول سجل الاستعلامات. يعود التنفيذ الأصلي والفكرة إلى Yue Ni (@niyue)، #104462. #110156 (Alexey Milovidov).
  • اكتمل تنفيذ العناصر المتبقية من توحيد عناوين URL (المشكلة #59617). يحل الإعداد الجديد s3_base عناوين URL النسبية في دالة الجدول s3 ومحرك الجدول S3 (والدوال التي تشترك في إعداداتهما: s3Cluster وgcs وoss) على نحو مماثل لـurl_base. يعامل محرك قاعدة البيانات الجديد URL أسماء الجداول على أنها عناوين URL، ويحلّها بالاستناد إلى عنوان URL أساسي اختياري، ويوجّهها وفق مخطط URL، بحيث تُعالَج الملفات والويب والتخزين الكائني بصورة موحّدة. ويستبدل Filesystem في قاعدة البيانات الافتراضية (Overlay) لـclickhouse-local بعنوان URL أساسي file://، بحيث تستمر أسماء الملفات البسيطة في العمل، ويمكنك أيضًا كتابة SELECT * FROM 'https://example.com/data.csv'. #111512 (Alexey Milovidov).
  • أُضيفت دالة الجدول bigquery ومحرك الجدول BigQuery للقراءة من جداول Google BigQuery والكتابة إليها، بما في ذلك مجموعات البيانات العامة. يُستنتج مخطط الجدول من مخطط جدول BigQuery. يدعم الاستيثاق رمز وصول OAuth، ومفتاح حساب خدمة بتنسيق JSON، وعميل OAuth مزودًا برمز تحديث. #110166 (Alexey Milovidov).
  • أصبح CREATE MATERIALIZED VIEW ... POPULATE العادي ذريًا محليًا: يُشترَك العرض في عمليات الإدراج الجديدة في الجدول المصدر، وتُلتقط لقطة للبيانات الموجودة معًا ضمن قفل حصري قصير على المصدر، لذا لم تعد الصفوف المُدرجة عبر الخادم نفسه بالتزامن مع التعبئة تُفقَد أو تتكرر (الإعداد الجديد materialized_views_populate_atomically، مفعّل افتراضيًا). يغطي الضمان مسار الإدراج المحلي فقط؛ أما عمليات الإدراج الواصلة إلى نسخة متماثلة أخرى أو عبر مسار كتابة موزّع، فهي خارج هذا النطاق، ويتطلب ذلك مصدرًا قادرًا على توفير لقطة مثبّتة (عائلة MergeTree وMemory). أما المصادر الأخرى، وكذلك CREATE OR REPLACE / REPLACE والعروض المنشأة في قواعد بيانات Replicated، فتحتفظ بالتعبئة القديمة غير الذرية. يمكن الآن أيضًا استخدام POPULATE مع TO لتعبئة الجدول الهدف بالبيانات السابقة. #108715 (Alexey Milovidov).
  • يمكن لـKeeper الآن تخزين البيانات على القرص ضمن شجرة LSM مخصصة. ويقدم أداءً مماثلًا للتخزين السابق. استخدم إعداد التنسيق use_lsmt_storage = true للتمكين، وstorage_memory_only = false لتخزين الملفات على القرص، وأضف data_storage_path أو data_storage_disk إلى التهيئة لتحديد مكان تخزين الملفات. للكتابة إلى S3، وجّه data_storage_disk إلى قرص من النوع s3_plain. #113903 (Michael Kolupaev).
  • فهرس محرك “جداول S3” لبحيرات البيانات، كما في #103220، ولكن مع INSERT يعمل. #113505 (Konstantin Vedernikov).
  • أُضيف دعم Snowflake Horizon. يمكنك الآن الاستعلام عن جداول Iceberg الموجودة خلف كتالوج Horizon، كما يمكنك الكتابة إلى جداول Iceberg عبر الكتالوج. #114547 (Melvyn Peignon).
  • أُضيف دعم تنسيق الملفات Puffin. يمكن استخدامه مع دوال الجداول file وurl وs3 وغيرها من الدوال المشابهة. #103936 (Konstantin Vedernikov).
  • أُضيف دعم وضع الإطار GROUPS للدوال الإطارية (SQL:2011)، مثل any(price) OVER (PARTITION BY symbol ORDER BY ts GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING). في إطار GROUPS، تُحتسب الحدود حسب مجموعات النظراء بأكملها، وهي مجموعات من الصفوف التي تتساوى في مفتاح ORDER BY؛ لذا تعني N PRECEDING/N FOLLOWING عدد N من مجموعات النظراء قبل/بعد مجموعة نظراء الصف الحالي، بدلًا من الصفوف الفعلية (ROWS) أو فروق قيم ORDER BY (RANGE). #108653 (Nihal Z. Miaji).
  • أُضيفت دالة الجدول mergeTreeCodecBlockCounts، التي تعرض، لكل جزء وعمود وتيار فرعي في جدول MergeTree، عدد الكتل المضغوطة التي تستخدم كل codec. #109623 (Raufs Dunamalijevs).
  • أُضيف نوع البيانات الجغرافية MultiPoint، ويُخزّن كـ Array(Point)، وأُدرج ضمن النوع Geometry. #109951 (David Meng).
  • أُضيف العمود الافتراضي _etag لتخزين HDFS. #108255 (Zhang Yifan).
  • يدعم قارئ ORC الأصلي وتنسيق الإخراج الآن uniontype، إذ يُعيَّن إلى النوع Variant في ClickHouse. سابقًا، كانت قراءة هذه الأعمدة تفشل بالرسالة Unsupported ORC type، وكانت كتابتها تفشل بالرسالة ILLEGAL_COLUMN. #110078 (Alexey Milovidov). #110085 (Alexey Milovidov).
  • أُضيف محلل رموز japanese للفهارس النصية والدوال tokens وhasAnyTokens وhasAllTokens، ويستخدم المحلل الصرفي MeCab. يُحمَّل القاموس وقت التشغيل من موقع محدد في تهيئة الخادم، ويُتحقق من مطابقته لقيمة تحقق SHA-256 قبل استخدامه. #111420 (Jimmy Aguilar Mena).
  • أُضيف محلل رموز chinese للدالة tokens والفهارس النصية في MergeTree. يقسم النص الصيني إلى كلمات باستخدام قاموس ونموذج ماركوف المخفي (تتبع الخوارزمية jieba)، وبمستويي دقة coarse_grained (الافتراضي) وfine_grained. امتدادًا لـ #80174. #89945 (Amos Bird).
  • أُضيف محلل رموز جديد icu للفهارس النصية والدوال tokens وhasAnyTokens وhasAllTokens، ويوفر تقسيم كلمات Unicode المراعي للإعدادات المحلية، بما في ذلك التقسيم المستند إلى القاموس للغات مثل الصينية واليابانية والتايلاندية. #109940 (Jimmy Aguilar Mena).
  • أُضيف مُقسِّم الرموز splitByRegexp لفهارس النصوص ودالة tokens. يقسم الإدخال إلى رموز باستخدام تعبير منتظم كفاصل، مثل tokenizer = splitByRegexp('[^\p{L}\p{N}#+]+')، ما يتيح الحفاظ على الرموز التي تحتوي على أحرف خاصة، مثل C++ أو C#، والتي كانت مُقسِّمات الرموز الأخرى ستجزئها. #110002 (Jimmy Aguilar Mena).
  • تتضمن لوحة معلومات Keeper عبر HTTP الآن علامة تبويب Cluster تعرض أعضاء Raft في رسم بياني للطوبولوجيا بألوان تشير إلى الحالة الصحية والتأخر والأولوية، ما يتيح لك معرفة العُقد السليمة أو المتأخرة أو التي يتعذر الوصول إليها، وفتح لوحة معلومات القائد مباشرةً. #111655 (yanglongwei).
  • يطلب قسم جديد في تهيئة الخادم، create_union_system_log_tables، إنشاء جداول all_... وصيانتها تلقائيًا (مثل system.all_query_log) لإجراء استعلامات اتحاد على جدول سجل النظام وإصداراته المُدوّرة و/أو الجداول نفسها عبر جميع النسخ المتماثلة في مجموعة. تقبل دوال الجداول remote وremoteSecure وcluster وclusterAllReplicas الآن عبارة SETTINGS لاحقة تتضمن إعدادات تخزين Distributed الذي تنشئه، مثل clusterAllReplicas('default', system.query_log, SETTINGS skip_unavailable_shards = 1). #112670 (Alexey Milovidov).
  • أُضيف الإعداد nats_credentials إلى محرك جداول NATS، مما يتيح للمستخدمين تحديد بيانات اعتماد NATS مباشرةً كسلسلة نصية (مطابقة لمحتوى ملف .creds). #110733 (addshore).
  • أُضيفت خوارزمية IEJoin المعتمدة على الفرز لعمليات الربط التي تحتوي عبارة ON فيها على مقارنتَي عدم مساواة (< أو <= أو > أو >=) بين الجدولين المربوطين، وتُفعَّل بإضافة ie_join إلى الإعداد join_algorithm. الأنواع المدعومة هي ALL INNER/LEFT/RIGHT/FULL JOIN وSEMI/ANTI LEFT/RIGHT JOIN. سابقًا، كانت هذه الاستعلامات تُنفَّذ باعتبارها CROSS JOIN مع عامل تصفية (INNER فقط)، وهو أبطأ بكثير مع الجداول الكبيرة. #109920 (Vladimir Cherkasov).
  • أُضيفت الدالة التجميعية gini، التي تحسب معامل Gini للقيم العددية المنتهية وغير السالبة، بما في ذلك التجميعات المجمعة والموزعة. #112280 (Amirreza Akhondi). #114643 (Groene AI).
  • أُضيف تنسيق الإخراج HiveText، الذي يكتب نصوص Apache Hive بتنسيق LazySimpleSerDe. تُفصل الحقول بواسطة \x01، والصفوف بواسطة الإعداد format_hive_text_rows_delimiter (القيمة الافتراضية \n)، وتستخدم قيم Array وMap وTuple المتداخلة قائمة الفواصل الخاصة بـ Hive. يستهدف الإخراج LazySimpleSerDe الافتراضي في Hive، ولا يتطابق تماثليًا مع إدخال HiveText في ClickHouse للقيم المتداخلة أو فواصل الصفوف المخصصة. #107582 (Alexey Milovidov).
  • أُضيف دعم للتسميات الثابتة في نقطة نهاية مقاييس Prometheus: يضيف قسم <labels> جديد داخل <prometheus> التسميات المهيأة إلى كل مقياس مكشوف، مما يساعد على التمييز بين مجموعات متعددة يجمع Prometheus مقاييسها. تدعم قيم التسميات استبدالات التهيئة القياسية مثل from_env. يُغلق #85969. #111672 (Valery Petrov).
  • أُضيف الإعداد always_fetch_mutated_part. عند تفعيله، يمكن لنسخة متماثلة تنزيل الأجزاء المُعدَّلة من نسخة متماثلة أخرى بدلاً من تنفيذ عمليات التعديل محلياً. #113020 (Rory Shanks).
  • أُضيفت الدالة التجميعية mergedJSONPatch لتجميع تصحيحات الدمج بأسلوب RFC 7396 عبر قيم JSON، بما في ذلك دعم دمج الحالة واستخدام AggregatingMergeTree. يمكن للمستخدمين تجميع عمود JSON باستخدام طابع زمني أو عمود ترتيب آخر كمفتاح فرز لحساب أحدث حالة. #108349 (larryluogit).
  • أُضيفت الدالة aiSimilarity التي تحسب التشابه الدلالي بين نصين باستخدام نموذج تضمين. وتُرجع Nullable(Float32) ضمن [-1, 1]، حيث تعني 1 أن النصين متطابقان، أو NULL إذا كان أحد المعاملات NULL أو فارغاً، أو إذا فشل إنشاء تضمينه. #110777 (David Meng).
  • أُضيفت إعدادات الاستعادة restore_table_data وrestore_access_entities وrestore_functions للتحكم الدقيق في العناصر التي تُستعاد. يمكن لهذه الإعدادات تجاوز structure_only لفئات محددة — على سبيل المثال، يستعيد structure_only=true, restore_access_entities=true تعريفات الجداول وكيانات الوصول دون بيانات الجداول. #102402 (Nikita Fomichev).
  • يدعم عامل الفهرسة للمصفوفات مصفوفةً من الأعداد الصحيحة كفهرس: تُرجع arr[indexes] العناصر الموجودة في جميع المواضع المحددة، بما يعادل arrayMap(i -> arr[i], indexes). #108371 (folly).
  • أُضيفت الدالة notHas، وهي نفي has للمصفوفات والخرائط وJSON. عندما تكون مصفوفة البحث مصفوفة ثابتة، يُعاد تحويل notHas(constant_array, x) إلى x NOT IN constant_array بواسطة optimize_rewrite_has_to_in (المفعّل افتراضياً)، لذا تُنفَّذ عبر بحث في مجموعة ويمكنها استبعاد البيانات باستخدام فهرس المفتاح الأساسي، مثل NOT IN. #109926 (Nihal Z. Miaji).
  • تعمل الدالتان arrayElement (عامل التشغيل vec[n]) وarraySlice الآن مع نوع البيانات QBit: تُرجع qbit[n] العنصر رقم n من المتجه بالدقة الكاملة، وتُرجع arraySlice(qbit, offset, length) إسقاطاً على مجموعة فرعية من الأبعاد. تقرأ كلتاهما مستويات البت لمجموعات stride التي تحتاجان إليها فقط، وتعيد الشرائح المحاذية لحدود مجموعة stride استخدام التدفقات المخزنة دون نسخ. يحل هذا المشكلة #109942. #109953 (Utkal Singh).
  • دعم PNG المتحرك في تنسيق الإخراج PNG. يحوّل عمود t نتيجة استعلام إلى رسم متحرك، ويُضبط المقياس الزمني لـ t بواسطة output_format_image_time_multiplier_seconds وoutput_format_image_time_divisor_seconds، بينما يتيح output_format_image_streaming_animation كتابة الإطارات أثناء إنتاج الاستعلام لها بدلاً من تخزينها مؤقتاً في الذاكرة. #112846 (Alexey Milovidov).
  • دالة جديدة aiRedact تكتشف معلومات تحديد الهوية الشخصية (PII) في النص وتحجبها باستخدام موفر LLM. حدّد الفئات المطلوب حجبها (مثل ['email', 'name']) أو مرر مصفوفة فارغة لاستخدام مجموعة افتراضية من فئات معلومات تحديد الهوية الشخصية. تُستبدل القيم المطابقة برمز مميز ([REDACTED] افتراضياً). #110464 (David Meng).
  • أُضيفت دالة aiFilter لتقييم شرط مكتوب بلغة طبيعية على نص باستخدام نموذج لغوي كبير (LLM)، وتُرجع UInt8 لاستخدامها في WHERE وPREWHERE وJOIN ... ON. #110594 (yanglongwei).
  • دعم اتصالات TLS/SSL بـ PostgreSQL لمحرك الجدول PostgreSQL، ودالة الجدول postgresql، ومحركَي قاعدة البيانات PostgreSQL وMaterializedPostgreSQL، وقواميس PostgreSQL: ‏sslmode إلى جانب الشهادات والمفتاح، سواءً كمحتويات حرفية (sslrootcert_pem وsslcert_pem وsslkey_pem؛ تُخفى مثل كلمات المرور) أو كمسارات (sslrootcert وsslcert وsslkey؛ لا تُقبل إلا من مجموعة مسماة محددة في ملف تهيئة الخادم). #110615 (Alexey Milovidov).
  • يتضمن ClickHouse server الآن منفذًا للاستبطان. وهو مستمع TCP للبروتوكول الأصلي يبدأ قبل أن يشرع الخادم في إرفاق الجداول، ولا يتوقف إلا بعد اكتمال فصلها. خلال هذه الفترة، يمكن للمشغّل الاتصال به باستخدام clickhouse client وتشغيل استعلامات مثل SHOW PROCESSLIST أو SELECT * FROM system.stack_trace أو SYSTEM INSTRUMENT ADD 'QueryMetricLog::startQuery' SLEEP ENTRY 0.5. بالإضافة إلى ذلك، زادت القيمة الافتراضية لإعداد الخادم shutdown_wait_unfinished من 5 إلى 120 ثانية. كانت القيمة الافتراضية السابقة أقل من فترة استطلاع الاتصالات، لذا كان بإمكان الخادم الخروج قسرًا أثناء الإيقاف بدلًا من انتظار اكتمال الاتصالات المعلّقة. #110838 (Miсhael Stetsyuk).
  • إضافة مقاييس ZooKeeper محاكية إلى أمر mntr في Keeper: zk_leader_uptime وzk_sum_election_time وzk_cnt_election_time وzk_sum_leader_unavailable_time وzk_cnt_leader_unavailable_time؛ وإضافة مقاييس مرتبطة بالقائد لـ Keeper فقط: KeeperLastLeaderElectionTime وKeeperLastLeaderUnavailableTime. #113334 (Maxim Orlovsky).
  • دعم ALTER TABLE … MODIFY PROJECTION لتغيير إعدادات مستوى الإسقاط، مثل index_granularity، لإسقاط موجود دون إعادة بنائه. تُطبَّق الإعدادات الجديدة تدريجيًا عبر عمليات الدمج. #113343 (Diego Gomes Tomé).
  • أُضيف عمود finish_time إلى system.mutations لتسجيل وقت اكتمال العملية التحويرية. وتعرض العمليات التحويرية غير المكتملة، وكذلك تلك التي لا يُعرف وقت اكتمالها، القيمة صفر. #113474 (Nikita Mikhaylov).
  • أُضيف مستوى ميزات جديد private preview بين experimental وbeta، فأصبح ترتيب مستويات الميزات: experimental < private preview < beta < production. أُضيف مستوى جديد إلى إعداد الخادم allow_feature_tier: تسمح القيمة 0 بجميع المستويات، وتستبعد القيمة 1 الميزات التجريبية، وتستبعد القيمة 2 أيضًا المعاينة الخاصة، بينما تسمح القيمة 3 بإعدادات الإنتاج فقط. يجب على التهيئات التي كانت تثبّت allow_feature_tier = 2 سابقًا للسماح بإعدادات الإنتاج فقط استخدام القيمة 3 الآن. يغلق #113481. #113581 (Groene AI).
  • تتيح واجهة Web SQL UI المضمّنة (/play) الآن فرز النتائج حسب أعمدتها، وتصفيتها بحسب قيمها، والتنقّل بين صفحاتها دون تحرير الاستعلام. تظهر أسهم الفرز وحقل إدخال للتصفية في رأس كل عمود، وتعرض الخلية المحددة المقارنات المناسبة لقيمتها، ويظهر مرقّم صفحات بحجم صفحة قابل للضبط أسفل النتائج التي لا تتسع في شاشة واحدة. ينفّذ الخادم كل ذلك باستخدام إعدادات إنشاء الاستعلام order وfilter وlimit وpage، بحيث تُشكَّل النتيجة كاملةً، لا الصفوف المعروضة حاليًا فقط؛ ويُضمَّن الفرز وعوامل التصفية والصفحة المختارة في URL الصفحة، لذا يعيد الرابط المشترك إنتاج النتيجة نفسها. #115540 (Alexey Milovidov).
  • chdig v26.8.1: ratatui، وأجزاء tmux، وجلسات tmuxinator، ومشاركة السجلات بالألوان، وجولة في الميزات. #115216 (Azat Khuzhin).

ميزة تجريبية

  • أُضيف مُحسِّن Cascades تجريبي قائم على التكلفة لخطط الاستعلامات الموزعة، ويُفعَّل عبر enable_cascades_optimizer = 1 مع make_distributed_plan = 1. ويختار بناءً على التكلفة المقدّرة بين استراتيجيات الربط shuffle وbroadcast وreplicated وlocal، واستراتيجيات التجميع ثنائي الطور وshuffle وlocal، وtop-N الموزع على مرحلتين، والقراءات المتوازية والمنسوخة، مع إدراج عوامل exchange عند الحاجة. #86353 (Alexander Gololobov).
  • أُضيف إعداد MergeTree تجريبي باسم enable_adaptive_codec_selection. عند تفعيله، تختار عمليات الدمج والتعديلات codec الذي ينتج أصغر حجم لكل block للأعمدة التي تستخدم codec الافتراضي. #111834 (Raufs Dunamalijevs). * أصبح اختيار codec التكيفي يضغط الآن بكل codec مرشح مرة واحدة على الأكثر لكل block، بدلًا من قياس جميع المرشحين ثم إعادة ضغط الفائز. #113511 (Raufs Dunamalijevs).
  • أصبح من الممكن بناء الملف التنفيذي clickhouse لـ WebAssembly (wasm64، عبر Emscripten)، ويشغّل clickhouse local الاستعلامات، بما فيها جداول MergeTree، ضمن Node.js ≥ 24 وفي المتصفح. وتثبّت مهمة CI جديدة باسم Build (wasm64) مسار البناء ومسار التنفيذ في Node.js (ولا يزال مسار المتصفح غير مغطّى بواسطة CI)، وتوفّر وحدة WebAssembly كـ artifact. #113404 (Alexey Milovidov).
  • يختار parallel_replicas_plan_based الآن الحد الفاصل بين التنفيذ المحلي والبعيد عبر تحسين خطة الاستعلام، ويمكنه موازاة الاستعلامات على views تحتوي على UNION دون parallel_replicas_allow_view_over_mergetree، ويعود إلى الخطة المحلية لاستعلامات IN (subquery) بدلًا من الفشل، كما يوزّع الآن عمليات JOIN المؤهلة (INNER وLEFT وRIGHT، بما فيها SEMI/ANTI). #111063 (Igor Nikonov). #112268 (Igor Nikonov). #112443 (Igor Nikonov).
  • تدعم خطط الاستعلامات الموزعة (make_distributed_plan) الآن أيضًا الاستعلامات التي يُعرف وقت التخطيط أن مصدرها لن ينتج أي صفوف، مثل القراءات من جدول MergeTree فارغ. #111941 (Groene AI).
  • أُضيف إعداد use_projection_index_in_read_pools، وهو معطّل افتراضيًا. عند تفعيله، تُستبعد النطاقات التي ترشّحها projection أو skip index بالكامل داخل مجموعات القراءة لـ MergeTree قبل إنشاء مهام قراءة لها، بدلًا من تخطيها granule تلو الآخر أثناء القراءة. ويجنب ذلك إنشاء مهام القراءة وإعداد القارئات للبيانات التي لن تُقرأ. #110291 (Nikolai Kochetov). #112296 (Anton Popov).
  • PromQL: أُصلحت العمليات على المتجهات الفورية من دون tags، مثل vector(1) + vector(2) وtopk(1, vector(1)) وlabel_replace(vector(1), ...) والعوامل الثنائية مع on()، التي كانت تفشل بسبب خطأ في النوع. #111872 (Valery Petrov).
  • PromQL: نُفِّذت الدالتان changes وresets. #112352 (Valery Petrov).
  • الإبلاغ عن الخطأ الذي أدى إلى إلغاء استعلام موزع (make_distributed_plan = 1) بدلًا من الاكتفاء بـ QUERY_WAS_CANCELLED. في السابق، لم يكن الخطأ الفعلي لمهمة العامل التي فشلت ظاهرًا إلا في سجل الخادم. #112590 (Alexander Gololobov).
  • عند استخدام make_distributed_plan = 1، يعطّل ClickHouse الآن الميزات التي لا تدعمها خطط الاستعلام الموزعة بعد، بدلًا من السماح بفشلها لاحقًا. يغلق #109476. #112463 (alesapin).
  • تستخدم خطط الاستعلام الموزعة (make_distributed_plan) الآن التحقيق الكسول لاستعلامات ORDER BY ... LIMIT k. #113111 (Shankar Iyer).
  • دعم دوال النافذة غير المقسمة (OVER (ORDER BY ...)) في خطط الاستعلام الموزعة (make_distributed_plan). في السابق، كان أي استعلام يتضمن دالة نافذة يفشل لأن WindowStep لم يكن قابلًا للتسلسل من أجل التنفيذ عن بُعد؛ ولا تزال النوافذ التي تتضمن PARTITION BY مرفوضة حاليًا. #109802 (Vighnesh Pathrikar).
  • أُضيف الإعداد use_query_condition_cache_for_top_k، الذي يفعّل ذاكرة التخزين المؤقت لشروط الاستعلام لاستعلامات ORDER BY ... LIMIT n (TopK). #111492 (Alexey Milovidov). أصبحت ذاكرة التخزين المؤقت لشروط الاستعلام مفعّلة افتراضيًا للاستعلامات التي تستخدم تحسين ORDER BY <column> LIMIT n (TopK). ويمكن تعطيلها مجددًا باستخدام الإعداد use_query_condition_cache_for_top_k. #114539 (Alexey Milovidov).
  • أُضيفت ألفة ثابتة بين الأقسام والشظايا لـ StorageKafka2 عبر الإعدادين kafka_partition_shard_num وkafka_shard_count، ما يتيح لعدة شظايا في ClickHouse استهلاك مجموعات فرعية منفصلة من أقسام Kafka بصورة حتمية. #108886 (johnjing).
  • تعزيز أمان دوال AI التجريبية: رفض نقاط النهاية غير الآمنة (http) للمضيفين البعيدين افتراضيًا (الإعداد الجديد ai_function_allow_insecure_endpoint)، وتقييد استدعاءات واجهة برمجة التطبيقات الصادرة لكل استعلام افتراضيًا (أصبحت القيمة الافتراضية لـ ai_function_max_api_calls_per_query هي 1000)، وتنقية استجابات أخطاء المزوّد المكتوبة في السجلات. #111286 (George Larionov).
  • PromQL: تُرجع quantile ذات مستوى كمي خارج [0, 1] الآن -Inf/+Inf/NaN، كما في Prometheus، بدلًا من إلقاء خطأ، وتتجاهل histogram_quantile الآن سلاسل الإدخال التي تكون تسمية le فيها مفقودة أو غير قابلة للتحليل، كما في Prometheus. #111871 (Valery Petrov).
  • السماح بالمعرّفات متعددة المكونات في جداول TimeSeries. #112799 (Vitaly Baranov).
  • أُضيف إعدادا TimeSeries، وهما samples_index_granularity وtags_inner_granularity، للتحكم في دقة الفهرس للجداول الداخلية. #113075 (Vitaly Baranov).
  • PromQL: أُضيفت الدالة deriv وأُصلح خطأ كانت فيه دالة التجميع الداعمة لها تُرجع قيمًا أصغر بمقدار 1000 مرة مع الطوابع الزمنية بدقة المللي ثانية. #112360 (Valery Petrov).
  • PromQL: رفض تسلسلات الهروب غير الصالحة عبر المحددات في السلاسل النصية ونقاط شيفرة Unicode البديلة غير الصالحة. #113587 (Minh Vu). #113203 (Minh Vu).
  • PromQL: الحفاظ على القيم المنتهية عند استخدام باقي القسمة مع قاسم لا نهائي. #113746 (Minh Vu).
  • PromQL: يمكن الآن استدعاء دوال التاريخ والوقت hour وminute وmonth وyear وday_of_week وday_of_month وday_of_year وdays_in_month دون وسيطات، بحيث تستخدم vector(time()) افتراضيًا كما في Prometheus. #111869 (Valery Petrov).
  • يدعم PromQL الآن المعلمة lookback_delta في واجهة برمجة تطبيقات HTTP لـ Prometheus للاستعلامات الفورية واستعلامات النطاق. #113971 (Minh Vu).
  • تدعم خطط الاستعلامات الموزعة (make_distributed_plan) الآن IN (subquery) دون إعادة كتابتها إلى JOIN: تُبنى المجموعة مرة واحدة على العقدة البادئة وتُرسل قيمها مع مهام العاملين. أُزيل التجاوز الإجباري rewrite_in_to_join، بينما تظل إعادة الكتابة متاحة كإعداد صريح. #113826 (Alexander Gololobov).
  • تدعم استعلامات البث العلامات المائية. #106169 (Mikhail Artemenko).
  • أُضيفت ذاكرة تخزين مؤقت لنظام الملفات للقراءة العابرة إلى مسار القراءة التجريبي ReaderExecutor (use_reader_executor، معطّل افتراضيًا). #110029 (Sema Checherinda).
  • PromQL: تنفيذ الدوال clamp وclamp_min وclamp_max وround. #111870 (Valery Petrov).
  • جمع إحصاءات عمليات الإدراج والاستعلامات بشكل صحيح عبر نقطة نهاية Prometheus remote-write. #112825 (James Cunningham).
  • تقبل عوامل التجميع في PromQL الآن استخدام الأحرف الكبيرة والصغيرة معًا، بما يتوافق مع Prometheus. #114076 (Minh Vu).
  • TimeSeries: تخزين جميع الوسوم في العمود tags. #114300 (Vitaly Baranov).
  • تطبيق تحسين القراءة بالترتيب على استعلامات ORDER BY عند تمكين parallel_replicas_plan_based: يُرسل الفرز الآن إلى النسخ المتماثلة ويُدمج على العقدة البادئة، بحيث تقرأ كل نسخة متماثلة وفق ترتيب مفتاح الفرز. كما يُصلح الخطأ Unknown function __topKFilter عند استخدام ORDER BY على عمود ليس ضمن المفتاح الأساسي مع تمكين هذا الإعداد. #114315 (Igor Nikonov).
  • رفض محارف تغذية السطر الحرفية في سلاسل PromQL العادية المقتبسة. #114381 (Minh Vu).
  • إصلاح مفاتيح GROUP BY المكررة في استراتيجية التجميع الجزئي لـ make_distributed_plan، والسماح بهذه الاستراتيجية للتجميعات عبر قراءة موزعة. #114523 (Alexander Gololobov).
  • طرح استثناء عند مخالفة قائمة السماح الخاصة بأنواع الفهارس الافتراضية في WHATIF. #114646 (Yarik Briukhovetskyi).
  • استعادة قراءة الأعمدة الفرعية المُكمَّمة للبحث المتجهي (أُضيفت في 26.7). #114763 (Shankar Iyer).
  • لم يعد محرك الجدول التجريبي TimeSeries يطبّق برنامج الترميز Gorilla على أعمدة value المُنشأة تلقائيًا في جدول العينات الداخلي؛ إذ تستخدم الآن CODEC(ZSTD(1)) افتراضيًا. تحتفظ الأعمدة المُعرَّفة صراحةً ببرامج الترميز التي حدّدها المستخدم. ولم يتغير الإعداد الافتراضي للعمود timestamp (CODEC(DoubleDelta, ZSTD(1))). #114790 (Nikita Mikhaylov).
  • أصبح استعلام الخطة الموزعة (make_distributed_plan) يوقف مراحله السابقة عند استيفاء LIMIT، بدلًا من حساب النتيجة كاملةً ثم تجاهلها. #114806 (Alexander Gololobov).
  • أُضيفت طبقة لذاكرة التخزين المؤقت للصفحات في مساحة المستخدم إلى مسار القراءة في ReaderExecutor التجريبي (use_reader_executor، معطلة افتراضيًا). وعند عدم العثور على البيانات، يملأ المنفذ الآن ذاكرة التخزين المؤقت للصفحات في مساحة المستخدم ويخدم القراءات اللاحقة منها دون نسخ. #114890 (Sema Checherinda).
  • دعم ROLLUP وCUBE وGROUPING SETS والدالة grouping في الاستعلامات المنفذة باستخدام make_distributed_plan = 1. #114950 (Alexander Gololobov).
  • إصلاح الخطأ Illegal type Decimal(18, 0) of argument of function toIntervalNanosecond عندما يستخدم استعلام PromQL‏ offset داخل محدد نطاق، مثل rate(m[2m] offset 5m). #114997 (Nikita Mikhaylov).
  • لم يعد ضبط distributed_plan_workers_num على قيمة كبيرة جدًا يتسبب في إنهاء الخادم بسبب std::length_error عند تمكين الميزتين التجريبيتين make_distributed_plan وenable_cascades_optimizer. ويُرفض الآن عدد العُقد هذا باستخدام INVALID_SETTING_VALUE. #115398 (Groene AI).
  • دعم تجميع GROUPING SETS في الخطط الموزعة التي ينشئها مُحسِّن Cascades (make_distributed_plan = 1, enable_cascades_optimizer = 1). #115426 (Alexander Gololobov).
  • يمكن لجداول TimeSeries الآن الاحتفاظ بجدول “عينات حديثة”: عندما يكون إعداد المحرك الجديد recent_samples_ttl_seconds غير صفري، ينشئ المحرك نسخة من جدول العينات مزودة بـ TTL (مقسمة حسب recent_samples_partition_by، وبحسب اليوم افتراضيًا) ويكتب إليها عند كل إدراج. وتقرأ استعلامات PromQL التي يقع نطاقها الزمني ضمن نافذة TTL منها تلقائيًا، مما يجعل قواعد التنبيه والتسجيل ولوحات المعلومات ذات النطاق الزمني القصير أسرع عدة مرات في الجداول الكبيرة. يمكن تعطيل هذا التفضيل باستخدام الإعداد الجديد على مستوى الاستعلام time_series_prefer_recent_samples_table. #115441 (Nikita Mikhaylov).
  • تنفيذ استعلام SELECT من TimeSeries. #115622 (Vitaly Baranov).
  • تنفيذ نقطة النهاية /api/v1/series من واجهة برمجة تطبيقات HTTP لـ Prometheus لجداول TimeSeries: محددات السلاسل match[] (تُعامل القيم المتكررة كاتحاد)، ونطاق زمني اختياري start/end، ومعلمة limit اختيارية. #115676 (Nikita Mikhaylov).
  • أصبحت خطط الاستعلامات الموزعة (make_distributed_plan) توقف المراحل السابقة الخاملة بسرعة بعد استيفاء LIMIT: إذ يقرأ مستقبِل التبادل الخامل NoMoreDataNeeded فور وصولها، بينما يلاحظ مصدر التبادل الخامل إغلاق مخرجه ويمرّر الإيقاف إلى المراحل السابقة. في السابق، كانت هذه المراحل تواصل قراءة البيانات ومعالجتها رغم عدم استهلاكها. #115690 (Alexander Gololobov).
  • يمكن الآن للنسخ المتماثلة المتوازية التلقائية جمع إحصاءات وقت التشغيل وتمكين النسخ المتماثلة المتوازية للاستعلامات المدعومة عند تمكين parallel_replicas_plan_based. #115788 (Igor Nikonov).
  • تسجيل جدول العينات الحديثة الخارجي لجدول TimeSeries باعتباره تبعية مرجعية. #115944 (Groene AI).

تحسين الأداء

  • خوارزمية تكيفية جديدة لـ GROUP BY المتوازي (يتحكم بها الإعداد enable_adaptive_aggregator، وهي مفعّلة افتراضيًا): يُجمّع كل خيط تنفيذ في جدول التجزئة الخاص به إلى أن يبلغ adaptive_aggregator_freeze_threshold مفتاحًا، ثم يجمّده. وبذلك تواصل المفاتيح المتكررة تحديث الجداول الصغيرة المقيمة في الذاكرة المؤقتة دون حاجة إلى تنسيق، بينما تُوجَّه المفاتيح النادرة وفق تجزئتها إلى قوائم انتظار متراكمة خاصة بكل حاوية، وتُجمّع مرة واحدة فقط ضمن الدمج المتوازي للحاويات. #111459 (Nihal Z. Miaji).
  • تقليل استخدام الذاكرة في جداول MergeTree التي تضم العديد من أجزاء البيانات، عبر مشاركة بيانات التعريف الخاصة بكل جزء والمشتقة من المخطط (قائمة الأعمدة، وأوصاف الأعمدة، والتسلسلات، والتدفقات الفرعية للأعمدة) بين أجزاء الجدول بدلًا من نسخها إلى كل جزء. ويكون التأثير أكبر في الجداول العريضة التي تضم العديد من الأجزاء الصغيرة. #109816 (Raúl Marín).
  • تحسين استعلامات GROUP BY ... ORDER BY ... LIMIT وGROUP BY ... LIMIT عبر الاحتفاظ بكومة محدودة أثناء التجميع لاستبعاد المجموعات التي لا يمكن أن تظهر في النتيجة، مما يقلل استخدام الذاكرة ووقت التنفيذ بدرجة كبيرة عند التجميع عالي الكاردينالية. يتحكم بذلك الإعداد enable_group_by_top_k_optimization. استنادًا إلى التنفيذ الأولي من Dmitriy Terenichev (#78553). #96630 (Konstantin Bogdanov).
  • تقليل حجم خلايا جدول التجزئة لمفاتيح التجميع المفردة من نوع String، مما يحسن أعباء عمل GROUP BY كثيفة السلاسل النصية. الإعداد الجديد enable_packed_string_keys_in_aggregation مفعّل افتراضيًا؛ ويؤدي تعطيله، أو ضبط compatibility على قيمة أقل من 26.8، إلى استعادة أسلوب StringHashTable القديم، الذي قد يظل أسرع للتجميع منخفض الكاردينالية جدًا عندما تزيد المفاتيح على 11 بايتًا. #110573 (Harikrishnan Prabakaran). #112089 (Harikrishnan Prabakaran).
  • موازاة الدمج النهائي لجداول تجزئة التجميع أحادية المستوى باستخدام الإعداد الجديد enable_parallel_single_level_merge، المفعّل افتراضيًا. يسرّع ذلك استعلامات GROUP BY التي تبقى فيها جداول التجزئة الخاصة بكل خيط تنفيذ دون عتبة المستوى الثنائي، لكن يهيمن دمجها على زمن التنفيذ. #110395 (Nihal Z. Miaji).
  • تحسين أداء DISTINCT عندما يكون تدفق الإدخال مرتبًا حسب بادئة من أعمدة التمييز، مثل SELECT DISTINCT a, b FROM table ORDER BY a. يمكن أن تعمل هذه الاستعلامات بسرعة أكبر تصل إلى 2.4 مرة. #110170 (Nihal Z. Miaji).
  • تسريع استعلامات DISTINCT وتقليل استخدامها للذاكرة في جداول MergeTree المقسّمة، عبر إبقاء صفوف كل قسم ضمن تدفق واحد، بحيث يعمل DISTINCT الأولي لكل تدفق على مجموعة مفاتيح منفصلة، بدلًا من ظهور مجموعة المفاتيح نفسها في عدة عمليات DISTINCT أولية. ينطبق ذلك عندما يكون تعبير التقسيم دالة حتمية لأعمدة DISTINCT، ويخضع لآلية استدلالية للتكلفة تستند إلى عدد الأقسام والانحراف (يمكن تفعيلها أو تعطيلها عبر الإعداد force_distinct_partitions_independently، وهو معطّل افتراضيًا). ويُمرَّر هذا الانفصال بين الأقسام عبر خطوات Expression وFilter وARRAY JOIN إلى مستهلكات DISTINCT وLIMIT BY وGROUP BY النهائية، بحيث يمكنها أيضًا تجاوز الدمج. يتحكم بذلك الإعدادان الجديدان allow_distinct_partitions_independently (مفعّل افتراضيًا) وmax_number_of_partitions_for_independent_distinct لضبط الآلية الاستدلالية. #108326 (Nihal Z. Miaji).
  • تم تحسين الدوال uniq وuniqExact وuniqHLL12 في عمليات التجميع دون مفتاح. #110150 (Anton Popov).
  • أصبح بإمكان قارئ Parquet V3 تجاوز مجموعات الصفوف بالكامل باستخدام صفحة القاموس، إلى جانب إحصاءات الحد الأدنى/الحد الأقصى ومرشحات Bloom، في شروط المساواة وIN عندما يكون جزء العمود مرمّزًا بالكامل بالقاموس. يتحكم في ذلك الإعداد الجديد input_format_parquet_dictionary_filter_push_down. #106952 (Alexey Milovidov). #110567 (Alexey Milovidov).
  • المَوضعة الكسولة عند قراءة ملفات Parquet من تخزين الكائنات، بما في ذلك جداول Iceberg: في استعلامات ORDER BY ... LIMIT n، لا تُقرأ الأعمدة غير اللازمة للفرز والتصفية إلا للصفوف n التي تبقى بعد تطبيق LIMIT. في ملف Parquet بحجم 200 MB على S3، يقرأ SELECT k, s ... ORDER BY k DESC LIMIT 10 مقدار 3.3 MB بدلًا من 171 MB (عمليات I/O أقل بـ51 مرة وأسرع بـ8 مرات). يتحكم في ذلك الإعداد الجديد query_plan_optimize_lazy_materialization_for_object_storage (مفعّل افتراضيًا، ويتطلب أيضًا query_plan_optimize_lazy_materialization). #110970 (Alexey Milovidov). * تنطبق المَوضعة الكسولة لاستعلامات ORDER BY ... LIMIT n (#110970) الآن أيضًا على ملفات Parquet المحلية المقروءة باستخدام دالة الجدول file ومحرك الجدول File: لا تُقرأ الأعمدة غير اللازمة للفرز والتصفية إلا للصفوف n التي تبقى بعد تطبيق LIMIT. تفشل القراءة الثانية لملف باقٍ بأمان مع الخطأ الجديد FILE_CHANGED_DURING_READ إذا عُدّل الملف بين المرحلتين. يتحكم في ذلك الإعداد الجديد query_plan_optimize_lazy_materialization_for_file (مفعّل افتراضيًا). كما يُصلح فشل المَوضعة الكسولة لتخزين الكائنات مع الخطأ Not found column or subcolumn ... in block عند تأجيل عمود فرعي مطلوب (مثل عمود فرعي من عمود JSON). #114262 (Alexey Milovidov).
  • تُجرى مَوضعة إحصاءات الأعمدة الآن عند INSERT افتراضيًا إذا كان مجموع الحجم النشط الحالي للجدول وحجم الكتلة المكتوبة لا يتجاوز الإعداد الجديد materialize_statistics_on_insert_max_table_size (القيمة الافتراضية 25 GiB)؛ ويُفحص ذلك لكل كتلة مكتوبة، لذا قد تستمر أول عملية تحميل مجمّع إلى جدول فارغ في مَوضعة الإحصاءات لكل كتلة مكتوبة. يتيح ذلك لمُحسّن الربط المستند إلى التكلفة تقديرات دقيقة لجداول الأبعاد المحمّلة حديثًا، ويتجنب ترتيبات الربط غير المثلى (فعلى سبيل المثال، لم يعد TPC-H Q5 وQ8 ينتهيان بمهلة عند عامل مقياس 40)، بينما تستمر جداول الحقائق الكبيرة القائمة في مَوضعة الإحصاءات أثناء عمليات الدمج. #109454 (Alexey Milovidov).
  • تسريع الدوال النافذة في جداول MergeTree المقسّمة بقراءة كل قسم عبر تدفقه الخاص وتقييم النوافذ لكل قسم، مع تجاوز إعادة التوزيع باستخدام التجزئة التي تعيد عادةً خلط كل صف بين الخيوط قبل فرز النافذة. ينطبق ذلك عندما يكون تعبير تقسيم الجدول دالة حتمية لأعمدة PARTITION BY الخاصة بالنافذة، ويخضع لنفس آلية استدلالية للتكلفة الخاصة بـ GROUP BY / DISTINCT لكل قسم (عدد كافٍ من الأقسام مقارنةً بـmax_threads، وعدم وجود قسم مهيمن). تتحكم في ذلك الإعدادات الجديدة allow_window_partitions_independently (مفعّل افتراضيًا) وforce_window_partitions_independently وmax_number_of_partitions_for_independent_window. #114783 (Nihal Z. Miaji).
  • تقليل استخدام الذاكرة عند كتابة الأجزاء المعبأة عبر بث الأرشيف النهائي مباشرةً إلى الملف الوجهة بدلًا من الاحتفاظ بنسخة كاملة ثانية في الذاكرة أثناء تثبيت الجزء. #111995 (Alexey Milovidov).
  • أُضيفت قيمة جديدة لـ join_algorithm هي parallel_full_sorting_merge: بالنسبة إلى عمليات الربط بالمساواة المتوافقة مع التجزئة، تُقسِّم عملية ربط دمج بفرز كامل حسب تجزئة مفاتيح الربط إلى عمليات ربط دمج مستقلة لكل جزء، تعمل على جميع الخيوط. وتحافظ على انخفاض استخدام الذاكرة بأسلوب البث في ربط الدمج مع إتاحتها بالتوازي (في اختبار معياري، أسرع بنحو 2.4x وتستهلك ذاكرة أقل بنحو 3.3x من parallel_hash). تعود عمليات ربط ASOF إلى full_sorting_merge واحد؛ أما أنواع المفاتيح غير المتوافقة مع التجزئة (ذات الفاصلة العائمة، JSON، Object، Dynamic) فتتخطى فقط إعادة كتابة التوزيع بالتجزئة، ويمكن مع ذلك تقسيمها عند المصدر حسب نطاقات المفتاح الأساسي عند تمكين query_plan_join_shard_by_pk_ranges. النتيجة غير مرتبة. #109005 (Alexey Milovidov).
  • إضافة تقليم مكاني لـ GeoParquet على مستويي مجموعات الصفوف والصفحات إلى قارئ Parquet. يتخطى تقليم مجموعات الصفوف مجموعات الصفوف كاملةً عندما لا يتداخل صندوقها المحيط مع هندسة الاستعلام. ويستخدم التقليم على مستوى الصفحة فهرس العمود covering.bbox لتخطي الصفحات غير ذات الصلة داخل مجموعات الصفوف، كما يُطبَّق الآن دفع المسندات المكانية أيضًا أثناء قراءة صفوف Parquet. #104435 (Vasily Chekalkin).
  • يدعم دفع المرشحات في Parquet (تقليم مجموعات الصفوف وفهرس الأعمدة) المزيد من تحويلات الأنواع: DateTime64(x) <-> DateTime64(y)، Decimal(x) <-> Decimal(y)، Float32 <-> Float64. #110457 (Michael Kolupaev).
  • تقليل طلبات القراءة المكررة على الأقراص البعيدة عندما تكون نطاقات العلامات مجزأة، مثلًا بسبب الفهارس الأساسية أو فهارس التخطي. #113584 (Anton Popov).
  • تسريع تنفيذ IN على الأعمدة المجمعة (مثلًا، المرتبة حسب المفتاح الأساسي) عبر إعادة استخدام نتيجة الصف السابق للصفوف المتتالية المتساوية. #114853 (Nikita Mikhaylov).
  • لم يعد التجميع دون مفاتيح GROUP BY يوزع مخرجه المكوَّن من صف واحد على تدفقات max_threads، لذا تحصل الاستعلامات التي تستمر خطتها بعد هذا التجميع على مسار تنفيذ أصغر بكثير (معالجات أقل للإنشاء والجدولة وقياس الأداء) من دون فقدان أي توازٍ. #115170 (Nikita Mikhaylov).
  • يقرأ Keeper الآن إدخالات سجل التغييرات مع تنازع أقل على القفل: تُخطَّط قراءات الاستدراك تحت قفل مشترك وتُنفَّذ عمليات إدخال/إخراج القرص دون قفل، كما يمكن لكل من استدراك المتابع ومسار الالتزام فك ترميز الإدخالات مسبقًا في تجمع خيوط خلفي، مما يقلل قراءات القرص الزائدة وفك الترميز على المعالج في القائد. #108473 (Antonio Andelic).
  • تسريع بدء تشغيل Keeper بقراءة عدة ملفات سجل التغييرات بالتوازي بدلًا من قراءتها تسلسليًا، ويتحكم في ذلك الإعدادان الجديدان log_startup_read_max_streams وlog_startup_read_buffer_size. #109881 (Antonio Andelic).
  • إضافة نوع مخطط جديد bucketed لـ system.metric_log، يخزن جميع المقاييس في عمود واحد من نوع Map(Enum16(...), Int64) باستخدام تسلسل Map المقسم إلى حاويات مع 128 حاوية، بالإضافة إلى عمود ALIAS لكل مقياس للتوافق: يتكون الجدول من بضعة أعمدة بدلًا من آلاف الأعمدة، ولا تُخزَّن القيم الصفرية، وعند قراءة مقياس واحد لا تُقرأ سوى حاوية واحدة من الحاويات الـ128. بالإضافة إلى ذلك، يمكن الآن فهرسة Map بمفاتيح Enum باستخدام الاسم النصي لقيمة التعداد، مثل map['name']. #115380 (Alexey Milovidov).
  • أُضيف تحسين لخطة الاستعلام يدفع الدوال التي تقلل حجم البيانات (length، lengthUTF8، empty، notEmpty) إلى ما قبل خطوتَي Sorting وFilter، باستبدال وسيطة String / FixedString كبيرة الحجم بنتيجتها ثابتة الحجم، بحيث لا تُخزَّن مؤقتًا أثناء الفرز ولا تُنسخ أثناء التصفية. يتحكم في ذلك الإعداد الجديد query_plan_push_down_volume_reducing_functions، وهو مفعّل افتراضيًا. #106199 (Peng).
  • أصبح read_in_order_use_virtual_row مفعّلًا افتراضيًا. عند القراءة وفق ترتيب المفتاح الأساسي (مثلًا ORDER BY primary_key LIMIT n) من جدول يحتوي على أجزاء كثيرة، لا تُقرأ إلا الأجزاء التي يمكن أن تسهم فعليًا في النتيجة، إلى جانب نافذة قراءة استباقية لا تتجاوز max_threads جزءًا للحفاظ على توازي القراءة، مما يقلل استهلاك الذاكرة الأقصى بدرجة كبيرة. #106215 (Alexey Milovidov).
  • تستخدم الآن استعلامات التجميع التي لا تتضمن دوال تجميع أساليب تستند إلى HashSet بدلًا من HashMap لأنواع المفاتيح المدعومة. ولوحظت تحسينات في السرعة تصل إلى 1.8x. #108862 (Nikita Taranov).
  • تجنّب الحمل الإضافي لمرشح وقت التشغيل في JOIN عندما يُقدَّر أن جانب الفحص صغير. يتحكم الإعداد الجديد join_runtime_filter_min_probe_rows في العتبة (القيمة الافتراضية 1000). #104860 (Vladimir Cherkasov).
  • يمكن الآن للاستعلامات ذات المسندات مثل nullIf(key, sentinel) = const الاستفادة من استبعاد البيانات استنادًا إلى المفتاح الأساسي والتقسيم وفهرس التخطي. #107308 (Aditya Kumar).
  • أُضيف إعداد الخادم jemalloc_merge_tree_arenas للتحكم في مناطق Arena المخصصة في jemalloc لبيانات تعريف الأجزاء والجداول في MergeTree. في الخوادم متعددة الأنوية، يمكن لمجمع لكل CPU تقليل تنازع أقفال المخصص بين عمليات الدمج المتزامنة، كما أن المنطقة المخصصة لا تحتفظ الآن إلا ببيانات التعريف طويلة العمر. #109490 (Raúl Marín).
  • سُرّع فك ضغط ZSTD على x86_64 للأعمدة ذات إزاحات المطابقة الصغيرة، مثل أعمدة الأعداد الصحيحة ثابتة العرض، عبر توجيه عمليات النسخ المتداخلة قصيرة الإزاحة باستخدام SSSE3 pshufb. على سبيل المثال، أصبح فك ضغط عمود UInt64 أسرع بما يصل إلى ~1.2x على AMD Zen 5. #110909 (Konstantin Bogdanov).
  • سُرّعت groupUniqArray للأنواع الرقمية بما يصل إلى 3x باستخدام تجزئة CRC32، كما في uniqExact، ومن خلال تضمين عملية الإدراج لكل صف. #110917 (Manuel).
  • أصبحت estimateCompressionRatio أسرع مع برنامج الترميز NONE. #111107 (Raufs Dunamalijevs).
  • خُفِّضت القيمة الافتراضية لـ max_snapshot_commit_thread_pool_size إلى 16، لتتوافق مع backup_threads، بهدف تقليل تقييد CFS عند تثبيت لقطات الجداول ذات الأجزاء الكثيرة. #111417 (Han Fei).
  • خُفِّض استخدام CPU عند تثبيت لقطات الجداول التي تحتوي على أعداد هائلة من الملفات. #112297 (Han Fei).
  • تخطَّ التسخين المسبق لتجزئات إزالة التكرار في async-insert عند تعطيل إزالة التكرار. #111549 (Sema Checherinda).
  • لم يعد JOIN الذي يكون شرط ON فيه خاطئًا دائمًا، مثل ON 1 = 2 أو ON NULL أو a.t = 'A' AND a.t = 'B'، يقرأ الطرف الذي لا يساهم في النتيجة. يتحكم في ذلك الإعداد query_plan_short_circuit_constant_false_join (مفعّل افتراضيًا). #110234 (Groene AI).
  • تسريع قراءة جداول Iceberg عبر الجلب المسبق لملف البيان التالي أثناء تحليل ملف البيان الحالي، بما يتيح تداخل عمليات الإدخال/الإخراج مع عمل وحدة المعالجة المركزية. #108543 (Asya Shneerson).
  • لم تعد الاستعلامات التي تستخدم FINAL وتقرأ بترتيب المفتاح الأساسي مع LIMIT صغير تستخدم split_intersecting_parts_ranges_into_layers_final. #110431 (Nikolai Kochetov).
  • تحسين أداء RIGHT وFULL JOIN باستخدام خوارزمية parallel_hash عندما يحتوي الطرف الأيمن على مفاتيح ربط بقيمة NULL أو صفوف تمت تصفيتها بواسطة تعبير ON، وذلك بتجنب إعادة بناء خريطة القيم الفارغة. #111258 (Hechem Selmi).
  • تسريع countSubstringsCaseInsensitiveUTF8 بإصلاح التعقيد التربيعي الذي كان قد يجعل الدالة تستغرق دقائق عند البحث في نص بحجم بضعة ميغابايتات مع عدد كبير من المطابقات. #112003 (Groene AI).
  • تُنفّذ الآن واجهة برمجة تطبيقات استعلامات Prometheus (/api/v1/query, /api/v1/query_range) لمحرك TimeSeries التجريبي الاستعلامات بالتوازي بدلًا من خيط واحد. #112108 (Nikita Mikhaylov).
  • تستخدم أعمدة timestamp وvalue التي تُنشأ تلقائيًا في الجدول الداخلي لعينات TimeSeries الآن، افتراضيًا، CODEC(DoubleDelta, ZSTD(1)) وCODEC(Gorilla, ZSTD(1)) على التوالي. #112110 (Nikita Mikhaylov).
  • إصلاح تراجع في أداء استيعاب system.query_log. كان بناء عمودي الخريطة Settings وasynchronous_read_counters أبطأ بنحو ست مرات من السابق، ما قد يؤدي إلى تجاوز SYSTEM FLUSH LOGS query_log مهلة 180 ثانية على الخوادم التي تسجل عددًا كبيرًا من الاستعلامات ذات الإعدادات المعدّلة. يغلق #112191. #112210 (Groene AI).
  • تحسين أداء عمليات RIGHT وFULL JOIN باستخدام خوارزمية التجزئة عند وجود عدة عبارات OR في قسم ON، وكذلك أداء عمليات RIGHT/FULL JOIN ذات الشروط المتبقية (عدم المساواة). #111590 (Hechem Selmi).
  • تقليل استخدام الذاكرة في UNLOCK SNAPSHOT عبر عدم تحميل البيانات الوصفية لكل جزء بيانات لا يستخدمها مسار إلغاء القفل، لتجنب نفاد الذاكرة في اللقطات التي تحتوي على عدد كبير جدًا من الأجزاء. #111849 (Julia Kartseva).
  • استعادة التخصيص المسبق للذاكرة للمسارات الديناميكية لعمود JSON أثناء تفريغ عمليات INSERT غير المتزامنة، لتجنب إعادة التخصيص المتكررة أثناء إلحاق الصفوف المجمّعة. #112222 (Groene AI).
  • إعادة تفعيل تحسين المفاتيح المتتالية لتجميع TTL ... GROUP BY أثناء عمليات الدمج. كان هذا التحسين قد عُطّل عن طريق الخطأ في ذلك المسار، لذا ظلت النتائج صحيحة، لكن عمليات الدمج كانت تنفذ عملًا أكثر من اللازم. #112314 (Groene AI).
  • تسريع قراءة الأعمدة Nested من الأنواع المرمّزة ثنائياً، مثل Native وRowBinary، عند تمكين input_format_binary_decode_types_in_binary_format، والإبلاغ عن أسماء الأنواع Tuple المتداخلة غير الصحيحة كأخطاء في البنية بدلاً من استغراق وقت أُسّي في تحليلها. #112560 (Alexey Milovidov).
  • تحسين أداء دمج الكتل الصغيرة ودمج الأعمدة Dynamic وObject التي تحتوي على عدد كبير من المتغيرات الديناميكية أو مسارات JSON. #110583 (Christoph Viebig).
  • تسريع min وmax للأنواع ذات 128 و256 بت (Int128 وUInt128 وInt256 وUInt256 وDecimal128 وDecimal256). أسرع بما يصل إلى 1.8 مرة للأعداد الصحيحة العريضة، وبما يصل إلى 3.4 مرة للأعداد العشرية العريضة. #111965 (Manuel).
  • تم تمكين ميزتين على القرص افتراضياً وترقيتهما إلى الإصدار بيتا: 1) packed_skip_index_max_bytes = '1M': تُكتب الآن التدفقات الفرعية لفهارس التخطي التي يصل حجمها إلى 1 MiB في أرشيف skp_idx.packed واحد لكل جزء، مما يقلل عدد الكائنات وطلبات الكتابة في تخزين الكائنات. التوافق: تتأثر الأجزاء المكتوبة حديثاً فقط، وتبقى قابلة للقراءة بالكامل في الإصدارات الأقدم؛ أما الإصدارات السابقة لـ 26.6، فلا تستخدم الفهارس المعبأة للتقليم فحسب، إذ تُعامل على أنها غير مُجسَّدة. اضبط packed_skip_index_max_bytes = 0 للإبقاء على التخطيط المستقل لكل ملف. 2) compute_exact_num_defaults_for_sparse_columns مع optimize_trivial_count_with_sparsity_filter: تُحفَظ عدادات num_defaults الدقيقة لكل عمود وتُستخدم للإجابة عن SELECT count() FROM t WHERE <pred> دون فحص البيانات عندما يقسم الشرط الصفوف إلى قيم افتراضية وغير افتراضية. التوافق: تتجاهل الإصدارات الأقدم العلامة exact_num_defaults في serialization.json، لذا تبقى الأجزاء قابلة للقراءة بالكامل بعد الرجوع إلى إصدار أقدم؛ ولا تنطبق إعادة كتابة العد إلا على الأجزاء التي تحتوي على عدادات دقيقة، لذلك تظل النتائج صحيحة في الجداول ذات الأجزاء المختلطة. #111816 (Raúl Marín).
  • إضافة تخزين مؤقت اختياري للرموز غير الموجودة في فهارس النص. #112742 (Rory Shanks).
  • إصلاح إعادة التخصيص التربيعية عند نسخ Array تحتوي عناصرها على قيم JSON في البيانات المشتركة، مثل Array(JSON) ثابتة تُمرر إلى دالة تجميعية. كانت هذه الاستعلامات تنسخ عدداً من البايتات ينمو تربيعياً مع عدد الصفوف. #112897 (Groene AI).
  • استخدام فهرس المفتاح الأساسي مع pointInPolygon عندما تكون وسيطة النقطة عمود مفتاح كاملاً من النوع Point (أو Tuple أخرى تضم عنصرين رقميين)، مثل pointInPolygon(coord, [...]) لجدول مرتب حسب coord. سابقاً، لم يكن يُحلَّل سوى النموذج pointInPolygon((x, y), [...]) الذي يتضمن عمودي مفتاح قياسيين. يغلق #54805. #112956 (Alexey Milovidov).
  • تخطي خطوة قراءة البيانات بالكامل لعمليات دمج TTLDrop لتقليل استخدام الذاكرة، خصوصاً لمخازن القراءة والجلب المسبق. يغلق #105639. #105859 (Pavel Kruglov).
  • تقليل تخصيصات الذاكرة عند قراءة البيانات الوصفية للنسخ الاحتياطية عبر نقل إدخالات الملفات إلى خرائط في الذاكرة بدلاً من نسخها. #111718 (Julia Kartseva).
  • استخدام الفهرس النصي عندما يتضمن تعبيره مقارنة بسلسلة فارغة، مثل arrayFilter(s -> s != '', ...)، حتى عند إعادة كتابة optimize_empty_string_comparisons = 1 لها إلى notEmpty. إغلاق #111788. #112115 (Jimmy Aguilar Mena).
  • استعادة تقليم ذاكرة التخزين المؤقت لشروط الاستعلام بعد lightweight DELETE: لم تعد الاستعلامات الانتقائية المتكررة على جدول سبق أن تأثر بـ lightweight DELETE تعود إلى قراءة كل علامة. #112947 (Nikita Fomichev).
  • لم تعد الدوال عالية الرتبة تنسخ الأعمدة الملتقطة ماديًا لكل عنصر في المصفوفة عند تمكين enable_lazy_columns_replication، ما يقلل استخدام الذاكرة ووقت النسخ لتعبيرات لامبدا التي تلتقط أعمدة كبيرة. #111581 (Diego Gomes Tomé).
  • إصلاح تراجع في الأداء بمقدار ~1.5x أُضيف في الإصدار 26.5 ضمن GROUP BY على مفاتيح Dynamic والأعمدة الفرعية لمسارات JSON. #112316 (Utkal Singh).
  • أصبحت القيمة الافتراضية لـ text_index_posting_list_apply_mode هي lazy، لذا تفك استعلامات الفهرس النصي ترميز قوائم النشر عند الطلب، على مستوى الكتل المعبأة وباستخدام مؤشر، بدلًا من تجسيدها مسبقًا في خرائط بتية للفهارس النصية التي ضُبط فيها posting_list_codec. #113521 (Anton Popov).
  • تسريع استعلامات PromQL على جداول TimeSeries: تعيد timeSeriesIdToGroup الآن استخدام مجموعة الصف السابق عندما تحمل الصفوف المتتالية معرّف السلسلة نفسه، متجاوزة تسلسل المعرّف والبحث بالتجزئة لكل صف. #113580 (Nikita Mikhaylov).
  • تستخدم عوامل التجميع في PromQL، وهي topk وbottomk وlimitk، الآن خطة تنفيذ متدفقة ومتوازية بذاكرة محدودة بدلًا من جمع جميع السلاسل في صف واحد. وأصبحت الاستعلامات على المقاييس عالية الكاردينالية التي كانت تفشل سابقًا بسبب MEMORY_LIMIT_EXCEEDED تعمل الآن بذاكرة محدودة. #113656 (Nikita Mikhaylov). #114409 (Alexey Milovidov).
  • تسريع قسمة الأعداد الصحيحة ذات 256 بت (Int256 وUInt256 وDecimal256)، ما يؤثر في intDiv وmodulo وحسابات Decimal256 وتحويل هذه الأنواع إلى نص. #112477 (Konstantin Bogdanov).
  • تحسين أداء قراءة MergeTree للأعمدة الفرعية في JSON بإعادة استخدام البيانات الوصفية المحلولة للأعمدة الفرعية أثناء التحويلات المطلوبة. #113008 (Rory Shanks).
  • تسريع بناء فهارس التخطي النصية والمعتمدة على مرشح بلوم باستخدام محلل النصوص sparseGrams. #110541 (UnamedRus).
  • يستخدم إنشاء اللقطات الآن تجمع خيوط مخصصًا، لذا لم تعد عملية BACKUP ثقيلة ومتزامنة تستنزف موارده. #113509 (Han Fei).
  • قيِّم التعبيرات الفرعية في PromQL المشتركة بين عدة خطوات في الخطة (مُعاملات topk/bottomk/limitk والطرف الأيسر من or) مرة واحدة بدلًا من مرتين: إذ يُجسِّد SQL المُولَّد من PromQL الآن الاستعلامات الفرعية المشتركة. يؤدي ذلك إلى إزالة فحص مكرر لجدول العينات؛ ويصبح topk على rate أسرع بنحو الضعف في الحالة الباردة، كما تتحسن استعلامات قواعد kubernetes-mixin بنسبة 10-29%. #113772 (Nikita Mikhaylov).
  • يمكنك الآن تمكين الطيّ المبكر قصير الدائرة للعمليتين المضمنَتين and وor أثناء التحليل باستخدام الإعداد enable_function_early_short_circuit. يمكن أن يؤدي ذلك إلى تخطي تنفيذ الاستعلامات الفرعية ذات القيمة المفردة count() غير المستخدمة، مع الحفاظ على استنتاج الأنواع المعتاد والتحقق الدلالي. يحل #83017. #83505 (fhw12345).
  • ادمج تكلفة الإدخال/الإخراج مع الانتقائية عند ترتيب شروط PREWHERE. يعالج ذلك تراجعًا في أداء تنفيذ PREWHERE في بعض الحالات ظهر بعد #101275. جزء من #110462. #110695 (Pavel Kruglov).
  • حُسِّن أداء levenshteinDistanceeditDistance) للسلاسل متوسطة الطول على ARM عبر تجنب تخصيصات الكومة لكل صف في مسار كود Myers المحظور. #108185 (Groene AI).
  • أُضيف إعداد merge_use_batch_sorting_queue الخاص بـ MergeTree لإتاحة استخدام قائمة انتظار فرز الدُفعات اختياريًا في عمليات دمج MergeTree العادية، مما يقلل وقت CPU ووقت الساعة الفعلي لأحمال عمل الدمج التي تشكل فيها عملية الدمج المرتب تكلفة كبيرة. #108468 (Rory Shanks).
  • أُضيف الإعداد merge_tree_min_bytes_per_read_stream لتقليل تدفقات القراءة المفرطة وأعباء خط الأنابيب لعمليات فحص MergeTree العادية المحلية غير المرتبة ذات الأعمدة الضيقة على الخوادم ذات العدد الكبير من الأنوية. #109035 (Jiebin Sun).
  • سرِّع الدالة toStartOfInterval (الأسماء المستعارة time_bucket وdate_bin) بما يصل إلى 5 أضعاف لفواصل SECOND وMINUTE وHOUR. #109729 (Manuel).
  • يرسل البروتوكول الأصلي الآن أعمدة String كتدفق منفصل من إزاحات البايتات التراكمية (بالتخطيط نفسه الذي يستخدمه Array لإزاحاته)، يتبعه البيانات المتصلة، بدلًا من بادئة طول varint لكل قيمة، عند استخدام كلا الطرفين مراجعة البروتوكول 54489 أو أحدث. يمكن للعميل حينها قراءة أعمدة String بتخصيص مسبق دقيق للمخزن المؤقت وعملية نسخ مجمع واحدة، بسرعة تزيد بنحو 4 مرات عن تخطيط كل قيمة. لا تتأثر العملاء والخوادم القديمة، إذ يُتفاوض على التخطيط عبر مراجعة البروتوكول. يتوفر التخطيط نفسه في تنسيقي Native وBuffers عبر الإعدادين الجديدين output_format_native_write_string_with_size_stream / input_format_native_read_string_with_size_stream (وهما متوقفان افتراضيًا، ليبقى التنسيقان قابلين للنقل). #110320 (vahid-sohrabloo).
  • تجنب التسلسل المبكر إلى JSON لإدخالات بيان Iceberg عندما يكون iceberg_metadata_log_level أقل من عتبة موضع الاستدعاء. #110437 (Andy Bradshaw).
  • حسِّن أداء full sorting merge join بما يصل إلى 1.5-3 أضعاف في السيناريوهات المتفرقة. #111200 (Vladimir Cherkasov).
  • تحسين كفاءة إحصاءات minmax وإحصاءات الأعمدة الأساسية للأعمدة ذات الفاصلة العائمة. #111221 (Christoph Viebig).
  • تمكين join_runtime_filter_from_fixed_hash_table عندما تختلف أنواع مفاتيح الربط في مرحلتي probe وbuild (مثلًا، مفتاح probe من نوع Nullable ومفتاح build ليس من نوع Nullable). #111244 (Hechem Selmi).
  • إرجاع نتائج استعلامات COUNT() مباشرةً من البيانات الوصفية لتعددية text index. #111494 (Elmi Ahmadov).
  • تسريع حساب التجزئة على مستوى الصفوف لقيم أعمدة JSON/Object المخزنة في البيانات المشتركة (المستخدمة مثلًا بواسطة uniq/uniqExact على عمود JSON، وبواسطة مفاتيح GROUP BY/DISTINCT المعتمدة على hash) من خلال تجنب إعادة إنشاء ColumnDynamic لكل قيمة. تظل قيم hash دون تغيير. #111501 (Valery Petrov).
  • تستهلك الدوال mapContainsKeyLike وmapContainsValueLike وmapExtractKeyLike وmapExtractValueLike ذات pattern غير الثابت ذاكرة ووقتًا أقل عند تمكين enable_lazy_columns_replication. لم يعد يُنسخ pattern مسبقًا لكل إدخال في map وقت الالتقاط؛ بل يُؤجَّل النسخ إلى تنفيذ lambda الداخلية ويُحرَّر في وقت أبكر، لذا تقل نسخة موسعة واحدة من pattern عند الذروة. #111749 (Diego Gomes Tomé).
  • تسريع الفرز والعمليات الأخرى المعتمدة على المقارنة في أعمدة JSON التي تُخزَّن مساراتها في البيانات المشتركة. سابقًا، كانت كل مقارنة بين قيمتين تُنشئ عمود Dynamic مؤقتًا وتنفذ إلغاء تسلسل ثنائي كاملًا لكلا الطرفين، مما جعل ORDER BY على هذه الأعمدة بطيئًا للغاية. #111894 (Groene AI).
  • لم يعد clickhouse-client يرسل Ping إلى server قبل كل query، مما يلغي رحلة ذهاب وإياب عبر الشبكة لكل query. ولم يعد يعيد إنشاء connection، فيبدأ session جديدة بصمت ويفقد بذلك temporary tables وcurrent database وsession settings، لمجرد أن server كان بطيئًا جدًا في الرد على Ping. #111990 (Alexey Milovidov).
  • استخدام تحسين الشروط المتعدية بصورة أكثر حكمة: لا يُستخدم filter الإضافي الناتج عن التعدية الآن إلا لتحليل index عندما يتعذر تطبيق filter بالكامل. راجع الإعداد optimize_and_compare_chain. #112076 (Yarik Briukhovetskyi).
  • تمت إضافة إعدادين، shrink_over_allocated_columns_min_waste_ratio وshrink_over_allocated_columns_min_waste_bytes، يجعلان عمليات INSERT تقلّص الأعمدة المخصصة بإفراط (التي تتجاوز ذاكرتها المحجوزة الذاكرة المستخدمة بسبب نمو الأعمدة متغيرة الطول وفق قوى العدد اثنين) لتلائم حجمها قبل materialization وكتابة part، مما يقلل ذروة استخدام الذاكرة. تكون هذه الإعدادات معطلة افتراضيًا. #112161 (Pavel Kruglov).
  • لم يعد تكرار الأعمدة الكسول لـ ARRAY JOIN يُفقد عند تسلسل خطة الاستعلام. عند استخدام serialize_query_plan = 1، كانت العقدة التي تنفذ جزءًا بعيدًا من الخطة تتجاهل enable_lazy_columns_replication وتُحوّل دائمًا كل نسخة مكررة إلى نسخة مادية، رغم أن هذا الإعداد مفعّل افتراضيًا. #112330 (Groene AI).
  • أصبح تنسيق قيم Decimal كنص أسرع بكثير — بما يصل إلى 190 مرة لـ Decimal256 ذي مقياس كبير، ونحو 1.6 مرة لـ Decimal64. وعلى المعالجات المزودة بـ AVX-512 IFMA، أصبح تحويل الأعداد الصحيحة ذات 64 بت إلى نص أسرع بنحو 1.4 مرة. أُصلح أيضًا تقريب toDecimalString، الذي كان يُسقط ترحيلاً من الجزء الكسري: كانت toDecimalString(toDecimal64('9.995', 3), 2) تُرجع 9.00 وأصبحت الآن تُرجع 10.00. #112457 (Konstantin Bogdanov).
  • أصبح شرط المساواة في WHERE يُدمج الآن في شرط JOIN عندما تكون معاملاته من أنواع مختلفة، لكن لها نوع فائق مشترك، مثل Int32 وNullable(Int32). يتيح ذلك تحويل CROSS JOIN إلى INNER JOIN. #112630 (Hechem Selmi).
  • أصبحت الاستعلامات على جداول Iceberg التي تضم عددًا كبيرًا من ملفات الحذف تبدأ بسرعة أكبر. يقرأ ClickHouse ملفات بيان الحذف ويفك ترميزها بالتزامن بدلًا من معالجتها واحدًا تلو الآخر، بحيث تتداخل عمليات القراءة من التخزين. يتحكم الإعداد الجديد iceberg_delete_manifest_decode_concurrency (القيمة الافتراضية 4) في عدد الملفات التي يُفك ترميزها في الوقت نفسه. #112679 (Asya Shneerson).
  • يستخدم التسجيل غير المتزامن الآن طابورًا محدودًا بلا أقفال: لا تُحجب الخيوط التي تكتب رسائل السجل على mutex، ولا توقظ خيوط التسجيل. #112803 (Alexey Milovidov).
  • أصبح randomHadamardTransform لمتجه ثابت يُقيَّم مرة واحدة بدلًا من مرة لكل صف. يسرّع ذلك استعلامات البحث المتجهي التي تدوّر متجه الاستعلام باستخدام randomHadamardTransform قبل مقارنته بعمود QBit. #112921 (Alexey Milovidov).
  • استُعيدت مشاركة المجموعات بين مهام الأجزاء الخاصة بطفرة واحدة تُجري تصفية باستخدام IN (subquery) على عمود مفتاح أساسي. يكون enable_sharing_sets_for_mutations مفعّلًا افتراضيًا، لكن المجموعة المُنشأة لتحليل المفتاح الأساسي توقفت عن المشاركة في ذاكرة التخزين المؤقت المشتركة، لذا كان جدول يحتوي على N أجزاء يُحوّل المجموعة نفسها إلى نسخة مادية N مرات. #112941 (Groene AI).
  • أُصلح التعقيد التكعيبي لتخطيط استعلام JOIN مع جدول Merge يعتمد على العديد من الجداول ذات البنى المختلفة. كان من الممكن سابقًا أن تقضي مثل هذه الاستعلامات دقائق في تخطيط الاستعلام دون الاستجابة لـ max_execution_time أو KILL QUERY. #113140 (Alexey Milovidov).
  • أصبحت ذاكرة التخزين المؤقت لمنطقة الحاوية في عميل S3 تعمل الآن أيضًا مع كتالوجات بحيرة البيانات؛ إذ كان كل طلب إليها يعيد تحديد المنطقة سابقًا. #113330 (Konstantin Vedernikov).
  • أُصلح تراجع في الأداء كان يحدث عندما يقوم تجميع بلا مفاتيح GROUP BY بتسلسل الشجرة الفرعية الكاملة لخطة الإدخال، بما في ذلك المحتويات الكاملة للثوابت المطوية، عند كل تنفيذ لحساب مفتاح لذاكرة تخزين مؤقت لحجم جدول تجزئة لا يمكنه استخدامه مطلقًا. كان استعلام مثل SELECT quantileMerge(arrayJoin(arrayMap(x -> state, range(5000000)))) يقضي نحو 63 مللي ثانية لكل تنفيذ في تحسين خطة الاستعلام، ويقضي الآن 0.15 مللي ثانية. #113333 (Groene AI).
  • أضف تسلسلاً اختياريًا لقيم UInt128/UInt256/Int128/Int256 بتنسيق Parquet كنوع DECIMAL لتمكين تشذيب مجموعات الصفوف والصفحات. #113347 (Ivan Babrou).
  • سرّع تخطيط الاستعلامات عند استخدام إحصاءات الأعمدة uniq_v2. إذ أصبح العدد التقديري للقيم المميزة يُخزَّن مؤقتًا بدلًا من إعادة حسابه لكل طلب، وهي عملية يُجريها تخطيط الاستعلامات مرات عديدة لكل استعلام. (مشكلة #113038). #113357 (Groene AI).
  • لا تجلب مسبقًا التدفقات الفرعية غير المطلوبة عند قراءة مسار JSON كامل من البيانات المشتركة المتقدمة. #113380 (Pavel Kruglov).
  • أصبح دفع المرشحات يعمل الآن مع الأعمدة الفرعية Tuple في ملفات Parquet وORC. إذ يؤدي مسند مثل WHERE tup.1 = 555555 عبر file() أو s3() أو url() الآن إلى تشذيب مجموعات الصفوف وخطوات فهرس الصفوف باستخدام إحصاءات عنصر الـ tuple نفسه، بدلًا من قراءة الملف كاملًا. #113383 (Groene AI).
  • استُبدلت خريطة التجزئة لكل حاوية داخل الدالات التجميعية timeSeries*ToGrid بمصفوفة مسطحة ومرتبة من العينات: يصبح استيعاب العينات عملية إلحاق O(1) للمدخلات المرتبة زمنيًا (وهي الحالة الأكثر شيوعًا بفارق كبير)، ولم تعد هناك حاجة إلى النسخ والفرز لكل حاوية عند الإنهاء. #113681 (Nikita Mikhaylov).
  • حسّن أداء استعلامات PromQL عبر محرك TimeSeries: إذ تقرأ SQL الداخلية للمحدد الآن أعمدة المفتاح الأساسي لجدول العينات مباشرةً، من دون تحويلات غير مؤثرة، وتتحقق من نطاق الطابع الزمني قبل مجموعة معرّفات السلاسل، مما يجعل الاستعلامات الباردة الكثيفة بالمحددات أسرع بنسبة 30-44%. #113768 (Nikita Mikhaylov).
  • استخدم خرائط معرّفات محددة النوع في جامع وسوم السلاسل الزمنية. #113839 (Vitaly Baranov).
  • تخطَّ فحص الترتيب الزائد عند كتابة أجزاء MergeTree التي تكون مفاتيح ترتيبها ثابتة كلها. #113899 (Perfloop Agent).
  • أصبحت محددات PromQL التي تطابق جميع سلاسل مقياس واحد ترشّح جدول العينات لجدول TimeSeries بنطاق متصل من المفتاح الأساسي على id أثناء تحليل الفهرس، بدلًا من شرط كبير من النوع id IN <set>، عندما يكون تخطيط المعرّف عبارة عن tuple من مكوّنين مع مولّد المعرّفات القياسي. يزيل ذلك التكلفة الرئيسية أحادية الخيط لتحليل الفهرس في استعلامات PromQL الكثيفة بالمحددات: انخفاض يصل إلى 45% في زمن الاستجابة البارد لأنماط استعلامات لوحات المعلومات والقواعد، وانخفاض قدره 11% في المتوسط الهندسي البارد عبر المجموعة الكاملة على جدول يضم 62 مليار عينة. #114131 (Nikita Mikhaylov).
  • سرّع تحويلات وسوم TimeSeries المتجهة باستبدال إعادة التعيين المعتمدة على التجزئة بالفهرسة المباشرة عندما تشغل معرّفات مجموعات الوسوم نطاقًا مضغوطًا. #114244 (Minh Vu).
  • تُقيّم نقاط نهاية واجهة برمجة تطبيقات HTTP لـ Prometheus، /api/v1/query و/api/v1/query_range، الآن استعلامًا فرعيًا من PromQL مشتركًا بين عدة خطوات في الخطة مرة واحدة، كما كانت تفعل بالفعل دالتا الجدول prometheusQuery وprometheusQueryRange. في السابق، كان الطلب المُرسل مع enable_analyzer = 0، أو من مستخدم يضبط ملفه الشخصي هذا الإعداد، يعيد فحص الاستعلام الفرعي المشترك مرة لكل خطوة تشير إليه. #114261 (Groene AI).
  • تم الحدّ من تكلفة تقدير انتقائية col IN (...) استنادًا إلى إحصاءات الأعمدة، والتي كان يمكن أن تضيف مئات المللي ثانية إلى تخطيط استعلام واحد. لم يعد المُقدِّر يشغّل الاستعلام الفرعي في col IN (subquery) لملء مجموعة لا يحتاج منها إلا إلى قيمة انتقائية واحدة، بل يتخطى المجموعة غير المُنشأة. بالنسبة إلى المجموعات التي يتجاوز حجمها الإعداد الجديد statistics_max_set_size_for_exact_selectivity_estimation (القيمة الافتراضية 10000)، تُستمد الانتقائية الآن من حجم المجموعة ونطاق حدودها. #114389 (Nikita Taranov).
  • لم يعد تحليل طلب HTTP يحتوي على عدد كبير من معلمات الاستعلام أو الرؤوس التي تحمل الاسم نفسه (مثل آلاف معلمات role= المكررة) يستغرق وقتًا تربيعيًا. #114410 (James).
  • تم إصلاح تراجع في الإصدار 26.7: في جدول MergeTree المرتب حسب toUnixTimestamp (أو تحويل صحيح آخر) لعمود DateTime64، لم يعد مرشح نطاق بسيط على ذلك العمود يستخدم المفتاح الأساسي ويقرأ جميع الحبيبات من الأجزاء المطابقة. بالإضافة إلى ذلك، يستخدم الآن مرشح مثل toInt64(ts) >= c في جدول مرتب حسب عمود DateTime64 الأصلي المفتاح الأساسي. #114413 (Alexey Milovidov).
  • يُجرى فحص الاتساق المكثف في ColumnArray الآن في إصدارات التصحيح فقط. #114469 (Anton Popov).
  • لا تُجرِ فرز دمج لتجميع موزع يكون وصف الفرز فيه ثابتًا بالكامل. #114626 (Groene AI).
  • تسريع بناء المجموعات لـ IN (subquery) في جداول MergeTree المقسمة إلى أقسام، عبر إبقاء صفوف كل قسم ضمن تدفق واحد وإزالة التكرارات من كل تدفق بشكل مستقل، بحيث لا يرى تحويل ملء المجموعة الوحيد — الذي كان يحسب سابقًا تجزئة كل صف تسلسليًا — سوى الصفوف الفريدة. ينطبق ذلك عندما يكون تعبير التقسيم دالة حتمية لأعمدة إخراج الاستعلام الفرعي. لا يُطبَّق هذا التحسين عندما يحتوي أكبر قسم على أكثر من ضعف عدد صفوف القسم المتوسط؛ ويتجاوز الإعداد الجديد force_creating_set_partitions_independently (المعطّل افتراضيًا) هذا الفحص. ويتحكم فيه الإعداد الجديد allow_creating_set_partitions_independently (المفعّل افتراضيًا). #114645 (Nihal Z. Miaji).
  • موازاة التحويل من مستوى واحد إلى مستويين لحالات التجميع لكل خيط قبل دمجها. يعالج ذلك تراجعًا بمقدار 2-3 مرات في استعلامات GROUP BY القصيرة ذات حالات التجميع الثقيلة (مثل COUNT(DISTINCT ...) وClickBench Q10/Q11) على الأجهزة ذات العدد الكبير جدًا من الأنوية، والذي ظهر في إصدارات تطوير 26.7 عند جعل احتساب ذاكرة التجميع دقيقًا. #114691 (Alexey Milovidov).
  • تسريع الدالات التجميعية timeSeries*ToGrid: تتجنب حسابات الحاويات لكل عينة الآن قسمة Int128، وتتخطى العينات المتتالية في الحاوية نفسها البحث في خريطة التجزئة. #114889 (Nikita Mikhaylov).
  • لم تعد الإضافة إلى قائمة انتظار سجل النظام تتطلب نسخ القائمة بأكملها نسخًا عميقًا عند نموها. #115030 (Groene AI).
  • معالجة عينات الدالات التجميعية timeSeries*ToGrid على دفعات من العينات المتتالية التي تقع ضمن حاوية شبكة واحدة، مما يسرّع مرحلة إدخال العينات في timeSeriesRateToGrid والدالات ذات الصلة بمقدار 1.2-2 مرة لبيانات السلاسل الزمنية المرتبة. #115041 (Nikita Mikhaylov).
  • استخدام أقنعة وجود مدمجة لعوامل المجموعات في PromQL. #115224 (Minh Vu).
  • تسريع تقييم استعلامات PromQL الفورية: تستخدم الدوال التجميعية timeSeries*ToGrid مسار تصنيف العينات المتجه للشبكات ذات النقطة الواحدة، بينما يملأ timeSeriesIdToGroup عمود النتيجة مباشرةً. #115267 (Nikita Mikhaylov).
  • لم يعد JOIN الذي يحتوي قسم ON فيه على عدة مقارنات مساواة مرتبطة بـ OR يُجسِّد أعمدة المفاتيح في الجانب الأيمن التي لا يحددها الاستعلام. #115465 (Nikita Taranov).
  • لم تعد تسمية نوع DateTime أو DateTime64 تنشئ جدول بحث لمنطقة UTC الزمنية لا يُستخدم، مما يسرّع إنشاء هذه الأنواع — وبالتالي بدء clickhouse local وclickhouse client. #115488 (Konstantin Bogdanov).
  • لم يعد إرفاق جداول النظام ينسخ البيانات الوصفية لكل جدول، بما في ذلك وصف العمود الكامل، مرتين لمجرد تعيين تعليق الجدول. #115490 (Konstantin Bogdanov).
  • يُحلّ اسم مضيف العميل الآن عند الإبلاغ عنه للمرة الأولى، بدلاً من حله عند كل استدعاء لـ clickhouse client وclickhouse local. #115491 (Konstantin Bogdanov).
  • تم إصلاح تعقيد زمني تربيعي عند إنشاء الدوال h3kRing وh3ToChildren وh3PolygonToCells وh3PolygonToCellsWithContainment نتائجها عبر عدد كبير من الصفوف. كان استعلام على 196 000 صف يستغرق 838 ثانية في نسخ الذاكرة أثناء تشغيل ضغط في CI؛ أما الآن فيستغرق نحو 5 ثوانٍ. #115773 (Groene AI).
  • تسريع التحقق من السلاسل المكررة لمتجهات شروط PromQL التي تتكون بالكامل من أصفار. #115822 (Minh Vu).
  • تسريع GROUP BY دون دوال تجميعية على مفاتيح String وFixedString وLowCardinality: لم يعد الاستعلام يعيد كتابة عنصر نائب غير مستخدم في جدول التجزئة لكل صف، بل للصفوف التي تضيف مفتاحًا جديدًا فقط. #115834 (Nikita Taranov).
  • تسريع toUTCTimestamp/to_utc_timestamp وfromUTCTimestamp/from_utc_timestamp للوسائط من نوع DateTime64، مع استعادة معدل النقل السابق لإصلاح التجاوز في #109738. لم تتغير النتائج. يغلق #115802. #115838 (Groene AI).
  • تقليل استخدام الذاكرة ووقت تحسين خطة الاستعلام للتجميعات ذات المفاتيح على القيم الحرفية الكبيرة المطوية كثوابت. يُجزّأ مفتاح ذاكرة التخزين المؤقت لإحصاءات جدول تجزئة التجميع الآن أثناء تسلسله بدلاً من تجميعه في الذاكرة أولاً، لذا لم تعد الخطة التي تحمل قيمة حرفية كبيرة تحتفظ بنسخة منها أثناء التحسين. بالنسبة إلى قيمة حرفية بحجم 80 MB، تنخفض ذروة استخدام الذاكرة بنحو 250 MB ووقت التحسين بنحو 2.5x. يبقى المفتاح المحسوب دون تغيير. #115847 (Groene AI).

تحسينات

  • تُوسَم الآن طلبات HTTP الصادرة بتنسيق OpenAI باسم SQL لدالة الذكاء الاصطناعي المستدعية، لتحديد نقطة النهاية الأولية. #110449 (George Larionov).
  • تقليل زمن استجابة الإلغاء للصيغ الإيجابية من LIMIT BY: أصبح KILL QUERY وCtrl+C يوقفان التنفيذ ضمن كتلة واحدة بدلًا من انتظار اكتمال الخطوة بأكملها. #106070 (Roman Vasin).
  • عند فشل INSERT لأن جدول الهدف TO لعرض مادي يرفض الكتابة أثناء إنشاء مسار الإدراج، تعرض رسالة الخطأ الآن اسم العرض المادي وجدول هدفه بدلًا من الإبلاغ عن خطأ التخزين المجرد فقط. #107234 (Groene AI).
  • مع input_format_protobuf_oneof_presence، لم يعد ClickHouse يتطلب أن يسرد تعداد وجود oneof العلامات المعرّفة في مخطط Protobuf بدقة: يُسمح الآن بعلامات إضافية لا تقابلها أعمدة في جدول الهدف، مما يسهّل إجراء تغييرات على المخطط. #109174 (Ilya Golshtein).
  • تقبل دوال المسافة المنقولة على QBit (L2DistanceTransposed وcosineDistanceTransposed وdotProductTransposed ومتغيراتها المكمّاة) الآن متجهًا مرجعيًا أطول من عدد الأبعاد التي يجري البحث فيها، مع تجاهل العناصر الزائدة في نهايته. يتيح ذلك إعادة استخدام متجه استعلام كامل الحجم لبحث Matryoshka منخفض الأبعاد دون تقطيعه مسبقًا. #109388 (Alexey Milovidov).
  • أُعيدت تسمية الإحصائية الفرعية NullCount ضمن إحصاءات basic إلى DefaultCount، وأصبحت تحسب الصفوف التي تساوي القيمة الافتراضية لنوع العمود، لا صفوف NULL فقط في أعمدة Nullable. #109977 (Han Fei).
  • دعم الكتابة المتزامنة في جداول Iceberg على قرص محلي: ينفذ LocalObjectStorage الآن عمليات كتابة شرطية، لذا تعمل عملية المقارنة والاستبدال التي تنشر لقطة جديدة عبر version-hint.text فيه، ولا يفقد الكتّاب المتزامنون تحديثات بعضهم البعض. #112556 (Alexey Milovidov).
  • يُطلق ALTER TABLE ... MOVE/REPLACE PARTITION بين جدولي MergeTree ذوي مستوى تفصيل غير متوافق الخطأ BAD_ARGUMENTS الآن بدلًا من LOGICAL_ERROR. #110535 (Groene AI).
  • لم يعد تنسيق Values يسجل أخطاء تحليل زائفة في system.errors وsystem.error_log عندما ينتقل التحليل المتدفق بنجاح إلى تحليل تعبير SQL. #111141 (Pablo Marcos).
  • أُضيف ProfileEvent باسم DuplicationDataHashComputations، والذي يحسب عمليات احتساب تجزئة البيانات لكل عمود التي تُجرى أثناء إزالة تكرار كتل INSERT في جداول *MergeTree. #111173 (Valery Petrov).
  • إبراز أمري ./clickhouse وsudo ./clickhouse install في مخرجات برنامج التثبيت العام. #111514 (Alexey Milovidov).
  • لم تعد عمليات الربط الديكارتية وعمليات الربط ذات الشرط الثابت التي يخطط لها المحلل تفشل بسبب إعداد join_algorithm غير متوافق عند استخدام المحلل. #108289 (János Benjamin Antal).
  • تدعم bitmaskToArray وbitmaskToList الآن الوسائط Int128 وUInt128 وInt256 وUInt256. كما أصبحت bitPositionsToArray أسرع للوسائط ذات الأعداد الصحيحة الكبيرة، لأنها تتناسب الآن مع عدد البتات المضبوطة بدلاً من موضع أعلى بت مضبوط. #110743 (Manuel).
  • أُصلح تعطل في التعبيرات المُصرَّفة بأسلوب JIT في إصدارات macOS/aarch64 الأصلية المبنية من المصدر، وذلك باستخدام LLVM host triple الصحيح لنظام التشغيل المضيف. #111591 (Raúl Marín).
  • أُصلحت JSON_EXISTS وJSON_VALUE وJSON_QUERY مع إدخال Dynamic عندما تحتوي وسائط مسار tuple على عناصر LowCardinality، مما يمنع استثناءات LOGICAL_ERROR. يغلق #110345. #109944 (Groene AI).
  • أصبحت ملفات ORC التالفة التي تعلن شجرة أنواعها عن أعمدة أكثر مما يحتويه تذييل الشريط تفشل في استنتاج المخطط بالخطأ CANNOT_EXTRACT_TABLE_STRUCTURE بدلاً من الإنهاء المفاجئ في إصدارات التصحيح أو sanitizer. #110967 (Groene AI).
  • يمكن الآن وسم جداول سجلات النظام التي خضعت للتدوير، مثل system.metric_log، بأنها table_readonly حتى عندما تتجاوز بياناتها الوصفية max_query_size، لذا لم يعد التدوير يسجل QUERY_IS_TOO_LARGE ويستمر بصورة طبيعية. #111703 (Alexey Milovidov).
  • في Play، أُضيف زر لإغلاق جميع علامات التبويب باستثناء علامة التبويب الحالية. #111835 (Mikhail Artemenko). وأُصلح تركيز لوحة المفاتيح بعد تفعيله بمفتاح Enter أو Space عندما يخفي الزر نفسه. #111899 (Alexey Milovidov).
  • في Play، يؤدي الضغط باستمرار على Ctrl (Cmd على Mac) أثناء تمرير المؤشر فوق خلية جدول قيمتها عنوان URL لصورة إلى عرض معاينة للصورة. #109347 (Alexey Milovidov).
  • على Linux، يضيف ClickHouse الآن إدخالاً إلى system.warnings عند بدء التشغيل إذا كان rseq غير متاح، لأن عدادات ملف التعريف لكل CPU تعود حينها إلى مسار sched_getcpu الأبطأ. #109283 (Azat Khuzhin).
  • لم يعد COUNT(*) عبر دالة الجدول file يطلق استثناءً عندما يغلّف استنتاج المخطط الأعمدة في Nullable. يغلق #102044. #102509 (Rory Shanks).
  • تعمل الدوال L1Normalize وL2Normalize وLinfNormalize وLpNormalize (وأسماؤها المستعارة) الآن مع وسائط Array، وليس فقط وسائط Tuple، بما يتسق مع L2Norm ودوال المسافة. #110052 (Alexey Milovidov).
  • أُزيل قارئ ORC القديم المعتمد على Apache Arrow. يستخدم تنسيق الإدخال ORC الآن دائماً مفكك الترميز الأصلي في ClickHouse، والذي كان بالفعل الخيار الافتراضي. إعداد input_format_orc_use_fast_decoder متقادم وليس له أي تأثير. #110074 (Alexey Milovidov).
  • أُتيحت إمكانية ضبط الوسائط الشائعة لـ clickhouse-client من XML (<hints/>, <highlight/>, <echo/>, <echo_query_id/>, <echo_formatted/>, <print-profile-events/>)، مع الاحتفاظ بقيم إعدادات العميل عند حذف علامات CLI المقابلة ذات القيم الافتراضية، لإعدادات مثل history_max_entries وsuggestion_limit وprogress وprogress-table وenable_progress_table_toggle وprint-memory-to-stderr وchime-threshold-seconds وprofile-events-delay-ms. #110607 (Larry Snizek).
  • أُضيف إعداد analyzer_compatibility_apply_final_to_all_joined_tables لاستعادة السلوك القديم الذي يجعل FINAL على الجدول الواقع في أقصى يسار JOIN يُطبَّق أيضًا على الجداول الأخرى المنضمة. يُسجَّل الإعداد في سجل تغييرات الإعدادات، لذا تستعيد compatibility تلقائيًا الدلالات القديمة مع الإصدارات السابقة للإصدار 26.6. #111589 (Nikita Fomichev).
  • في Play، أصبح زر + (علامة تبويب جديدة) يُعرض بالارتفاع الصحيح في Firefox. #109524 (Alexey Milovidov).
  • أصبح الاستعلام الفرعي المتداخل والمترابط EXISTS الذي يشير إلى عمود من نطاق يتجاوز استعلامه الخارجي المباشر يفشل بالخطأ NOT_IMPLEMENTED بدلًا من الاستثناء الداخلي NOT_FOUND_COLUMN_IN_BLOCK. #110310 (Groene AI).
  • لم يعد تنسيق استعلام EXECUTE AS بعد إعادة كتابة AST يطرح استثناءً من جهة العميل، مثلًا في AST fuzzer. #111725 (Groene AI).
  • تحسين دعم استعلام DESCRIBE للعروض ذات المعلمات، ودعم العروض ذات المعلمات في التعبيرات القياسية في المحلل الجديد. يغلق #66307. يغلق #69598. #68978 (Dmitry Novik).
  • أصبحت تعبيرات CREATE INDEX وCREATE HYPOTHETICAL INDEX غير الصالحة التي لا يمكنها اجتياز دورة تنسيق-تحليل-تنسيق تُبلغ عن استثناء بدلًا من التسبب في خطأ منطقي Inconsistent AST formatting في إصدارات التصحيح والإصدارات المبنية باستخدام أدوات sanitizer. #109175 (Groene AI).
  • واجهة الويب: إصلاح بقاء حقل اسم المستخدم/كلمة المرور باللون الأحمر حتى عند صحة بيانات الاعتماد وإمكانية الوصول إلى الخادم، وإعادة التحقق من بيانات الاعتماد بعد تعديل الاتصال لكي تتحول القيمة الصحيحة إلى اللون الأخضر. #109414 (Alexey Milovidov).
  • أُضيف إعدادا text_index_max_processed_tokens_before_flush وtext_index_max_memory_usage_before_flush للتحكم في وقت قيام منشئي فهارس النص بتفريغ المقاطع المؤقتة. #111573 (Rory Shanks).
  • أُضيف إعداد system_cache_extensions للتحكم في امتدادات الملفات التي تُخزَّن في ذاكرة التخزين المؤقت للنظام عند تمكين use_split_cache. #111575 (Kirill).
  • تعرض رسائل الخطأ في الإصدارات المبنية على musl الآن نص strerror المقروء بشريًا بدلًا من قيمة فارغة أو رقمية مثل strerror: 0. #111620 (Konstantin Bogdanov).
  • أصبح نوع تخزين المجموعات المُسمّاة الفعّال متاحًا الآن باسم named_collections_storage.type في system.server_settings ومن خلال getServerSetting('named_collections_storage_type'). #111806 (Pablo Marcos).
  • يخفّف التحقق المفرط في صرامته من حجم التبديل في ColumnReplicated::permute بحيث يتوافق مع عقد IColumn::permute العام، الذي يسمح بأن يكون التبديل أقصر من العمود عند تعيين حد. #109897 (Groene AI).
  • يحسّن تخطيط استعلامات البث عبر توحيد خطة القراءة الداخلية للبث، ما يتجنب التحسين المزدوج لقراءات فهرس النص المباشرة. #111821 (Mikhail Artemenko).
  • واجهة الويب: أصبحت المسافة بين زري Run one وRun all مساوية للهامش الأيسر قبل الزر الأول. #111988 (Alexey Milovidov).
  • لم تعد جدولة حجز الذاكرة (تجريبية) تُخلي تخصيصًا عندما يوفّر تحرير ذاكرة معلّق المساحة اللازمة لزيادة حجز تتجاوز الحد؛ إذ ينتظر قرار الإخلاء الآن تطبيق التخفيضات قيد الإرسال، ما يجنب إنهاء الاستعلامات دون داعٍ تحت ضغط الذاكرة. #112299 (Sergei Trifonov).
  • يتطلب Iceberg v2 وجود sequence_number في ملفات البيان، لكن محركات أخرى مثل BigQuery يمكنها كتابة ملفات بيان بدونه. ويمكن لـ ClickHouse الآن قراءة هذه الجداول. #112431 (Konstantin Vedernikov).
  • إظهار تحذير عند غياب الإحصاءات اللازمة لإعادة ترتيب الربط. #107666 (Vladimir Cherkasov).
  • أُضيفت أعمدة للتوافق مع MySQL إلى عروض INFORMATION_SCHEMA: SCHEMATA.DEFAULT_COLLATION_NAME وDEFAULT_ENCRYPTION؛ وTABLES.ENGINE وأعمدة MySQL ذات الصلة؛ وCOLUMNS.COLUMN_KEY وPRIVILEGES وGENERATION_EXPRESSION وSRS_ID. يتيح ذلك للعملاء المتوافقين مع MySQL تشغيل استعلامات استبطان الكتالوج دون مواجهة UNKNOWN_IDENTIFIER. #109351 (Alexey Milovidov).
  • لم يعد يُبلّغ عن المرجع غير المؤهل إلى مفتاح INNER JOIN المساوى في شرط ON (مثلًا SELECT id FROM a INNER JOIN b ON a.id = b.id) باعتباره معرّفًا ملتبسًا، إذ يُضمن أن يحمل الطرفان القيمة نفسها. #109366 (Alexey Milovidov).
  • إرجاع رمز HTTP 403 Forbidden (بدلًا من 500 Internal Server Error) لاستثناءات ACCESS_DENIED عبر واجهة HTTP. #111043 (Schum).
  • كتابة SST لفهرس UNIQUE KEY مباشرةً إلى تخزين الجزء بدلًا من وضعه مؤقتًا في ملف محلي، ما يزيل الاعتماد على وحدة تخزين مؤقتة محلية ويتجنب إنشاء نسخة إضافية. #111189 (johnjing).
  • تقبل UTMToGeo الآن حرف نطاق خط العرض في MGRS الذي تُرجعه geoToUTM كوسيط رابع لها، بالإضافة إلى علامة نصف الكرة الأرضية الصحيحة، بحيث يمكن تمرير نتيجة geoToUTM مباشرةً إلى UTMToGeo وإعادتها دون فقدان البيانات. #111521 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR (“تم إنشاء فهرس Min-Max على مستوى الجزء من مجموعة أعمدة غير متوقعة”) كان يمكن أن يؤدي إلى إيقاف عملية دمج في الخلفية في إصدارات debug/sanitizer بعد خفض part_minmax_index_columns (مثلًا من with_block_number_offset إلى partition_key_only). #111511 (Groene AI).
  • يُصلح نقص الإبلاغ في ProfileEvents['JoinResultRowCount'] عن حجم نتيجة JOIN التي تُرحَّل إلى القرص. كانت الصفوف الصادرة من الحاويات المؤجَّلة تُحتسب فقط ضمن JoinDelayedJoinedTransformRowCount ولا تُضاف إلى الإجمالي. كانت نتائج الاستعلام صحيحة دائمًا؛ وكان الخطأ مقتصرًا على حدث ملف التعريف. #112673 (Groene AI).
  • أصبح SYSTEM DISABLE FAILPOINT يرفض اسم نقطة فشل غير موجود ويطرح BAD_ARGUMENTS، كما كان SYSTEM ENABLE FAILPOINT يفعل بالفعل. سابقًا، كان الاسم المكتوب خطأً يُبلّغ عن النجاح مع إبقاء نقطة الفشل المقصودة مفعّلة، دون أي إشارة إلى عدم تعطيل أي شيء. #112680 (Groene AI).
  • أُضيف عمود جديد skipping_indices_types إلى جدول system.tables. ويحتوي على الأنواع المميزة لفهارس تخطي البيانات المعرّفة لكل جدول. #106388 (Anton Popov).
  • أُضيف فحص اتساق للتأكد من أن الاستعلام الموزع يحمل دائمًا إصدار عميل معروفًا، بحيث يُطرح خطأ منطقي بدلًا من تمرير إصدار صفري بصمت إلى الأجزاء البعيدة. أصبحت الاستعلامات التي يبدأها الخادم (عمليات تفريغ الخلفية، والمستهلكات المتدفقة، وإعادة تحميل القواميس، وعمليات تفريغ الإدراج غير المتزامن) تُبلّغ الآن عن إصدار الخادم نفسه باعتباره إصدار المُبادِر. #109408 (Alexey Milovidov).
  • خُفّض مستوى تفصيل تشخيصات البحث الثنائي عن المفتاح الأساسي لكل جزء في MergeTree من تسجيل التتبع إلى تسجيل الاختبارات. #110324 (Alexey Milovidov).
  • أصبح مسار نموذج تقسيم Hive لجداول تخزين الكائنات (مثل S3) يُحدَّد عند أول استخدام للجدول بدلًا من CREATE/ATTACH، لذا لم تعد نقطة نهاية يتعذر الوصول إليها تمنع إنشاء الجدول وبدء تشغيل الخادم. #111842 (Nikolay Degterinsky).
  • أُصلح ReadBufferFromPocoSocketBase::setReceiveTimeout الذي كان يتعامل مع وسيطه بوصفه ثوانٍ بدلًا من ميكروثوانٍ، كما أُصلحت البُنى المهيأة باستخدام -DENABLE_LIBFIU=OFF التي لم تكن تُجمَّع. في البُنى التي لا تتضمن libfiu، أصبحت SYSTEM ENABLE FAILPOINT والأوامر ذات الصلة تطرح استثناءً بدلًا من عدم تنفيذ أي إجراء بصمت. #112767 (Alexey Milovidov).
  • يُصلح clickhouse-local نقص الإبلاغ عن rows_read وعدادات التقدم الأخرى في statistics لمخرجات JSON/XML وفي شريط التقدم: إذ كانت زيادة التقدم التي تصل أثناء تجميع حزمة التقدم تُهمل. #112958 (Alexey Milovidov).
  • أُصلح الخطأ المُبلّغ عنه عندما يحتاج INSERT غير متزامن إلى جدول Distributed إلى دليل قائمة انتظار يتجاوز طول اسمه حد نظام الملفات البالغ 255 بايتًا (ويمكن الوصول إلى هذه الحالة باستخدام use_compact_format_in_distributed_parts_names = 0). كان الخطأ LOGICAL_ERROR لجزء ذي internal_replication، وCode: 1001. std::exception دون إسناد في الحالات الأخرى؛ ويُبلّغ كلاهما الآن عن ARGUMENT_OUT_OF_BOUND مع ذكر الجدول والعنقود والحد. #113083 (Groene AI).
  • ارفض حدود حصة execution_time الخارجة عن النطاق باستخدام BAD_ARGUMENTS بدلًا من الاعتماد على سلوك غير معرّف عند تحويلها إلى نانوثوانٍ داخلية. #113178 (Alexey Milovidov).
  • تدعم النسخ المتماثلة المتوازية التلقائية الآن استعلامات JOIN. #106073 (Nikita Taranov).
  • دعم مصادقة رمز التحديث لكتالوج OneLake. #110413 (alesapin).
  • أصبح إعداد Keeper write_snapshot_version قابلاً لإعادة التحميل أثناء التشغيل. #112150 (alesapin).
  • تنفيذ SYSTEM DROP FILESYSTEM CACHE بالتوازي. #112532 (Kseniia Sumarokova).
  • أصبح التداخل غير المدعوم لطريقة عرض SQL SECURITY DEFINER أو SQL SECURITY NONE فوق s3Cluster أو urlCluster أو fileCluster يُرفض بخطأ استعلام عادي بدلاً من ظهور LOGICAL_ERROR في إصدارات التصحيح والبناء باستخدام sanitizer. #113371 (Groene AI).
  • أُضيف الإعداد analyzer_compatibility_multiple_joins_qualify_column_names (قيمته الافتراضية false). عند تفعيله، وإذا احتوى بند FROM في استعلام على عمليتي JOIN أو أكثر، تحاكي أسماء أعمدة النتائج التي يُنتجها المحلل إعادة كتابة عمليات الربط المتعددة في المحلل القديم: تُسمّى الأعمدة الموسعة من * بالصيغة <alias-or-table>.<column>، ويحافظ مرجع العمود غير المستعار في قائمة SELECT على اسمه تمامًا كما كُتب. يتيح ذلك للاستعلامات الخارجية التي تشير إلى هذه الأسماء المؤهلة، مثل SELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...)، أن تعمل كما كانت مع المحلل القديم. ويعالج أيضًا فقدان المحلل لأسماء أعمدة النتائج المؤهلة للأعمدة الموسعة من * عند استخدام group_by_use_nulls مع ROLLUP أو CUBE أو GROUPING SETS، مما كان يؤدي إلى أسماء أعمدة نتائج مكررة وتعطّل المراجع الخارجية إليها. #110746 (Dmitry Novik).
  • أُعيدت تسمية allow_experimental_delta_kernel_rs إلى allow_delta_kernel_rs. ويُحتفظ بالاسم القديم كاسم مستعار. #113476 (Kseniia Sumarokova).
  • عند تمرير مجموعة مسماة غير موجودة إلى دوال الجدول remote/remoteSecure أو محركات الجدول Remote/RemoteSecure مع تجاوز key = value، يُبلغ ClickHouse الآن عن المجموعة المسماة غير الموجودة بدلاً من إعادة تحليل الاستدعاء موضعيًا والإبلاغ عن خطأ غير ذي صلة. #113510 (Groene AI).
  • لم يعد بدء shell مع إكمال clickhouse-bootstrap يطبع متغيرات البيئة عند تحميل الإكمال من خطاف إكمال المستخدم. #113694 (Azat Khuzhin).
  • أُضيفت القيمة sainte_lague إلى الإعداد shared_merge_tree_merge_coordinator_distribution_algorithm، وأصبحت القيمة الافتراضية بدلاً من water_filling. #113442 (Mikhail Artemenko).
  • أُضيف الإعداد filesystem_cache_wait_for_concurrent_download_timeout_milliseconds لتحديد أقصى مدة انتظار لقراءةٍ ما ريثما يُنزّل استعلام آخر من ذاكرة التخزين المؤقت لنظام الملفات جزءًا واحدًا (نحو 1 MiB)، وليس شريحة ملف كاملة. #113322 (Kseniia Sumarokova).
  • أُضيف إعداد Keeper min_time_between_fsyncs_ms (قيمته الافتراضية 5 مللي ثانية)، الذي يجمع عمليات الإلحاق بسجل التغييرات التي تصل بعد وقت قصير من التفريغ السابق بدلاً من بدء عملية تفريغ أخرى فورًا. #113749 (Michael Kolupaev).
  • تُصدر جداول Kafka ذات الإزاحات المخزنة في Keeper (kafka_keeper_path) الآن الخطأ ABORTED بدلاً من LOGICAL_ERROR عندما يصبح الجدول غير نشط بعد فقدان جلسة Keeper، مثلًا أثناء قراءة مباشرة أو بث materialized-view. #113913 (Alexey Milovidov).
  • تم إصلاح عدم اتساق تنسيق AST في viewIfPermitted: لم يعد نموذج دالة الجدول ينسّق عاملًا مثل not بشكل غير صحيح في فرع ELSE، ولم يعد نموذج التعبير viewIfPermitted(...) يتلقى ELSE زائدًا. #113652 (Alexey Milovidov).
  • تم إصلاح خطأ زائف Failed to drop temporary table after refresh. Table ... is left behind and requires manual cleanup. كان يُسجَّل عند إلغاء تحديث عرض مادي قابل للتحديث (مثلًا عند إيقاف الخادم) مع تمكين database_atomic_wait_for_drop_and_detach_synchronously. كان الجدول المؤقت قد حُذف بالفعل، لذا لم تكن هناك حاجة إلى تنظيف يدوي. #113957 (Groene AI).
  • يُطلق الخادم الآن الخطأ UNKNOWN_ELEMENT_IN_CONFIG عند وجود خيارات تهيئة غير معروفة في تهيئة الخادم، مما يساعد على اكتشاف الأخطاء المطبعية وخيارات التهيئة الخاطئة مبكرًا. يمكن تعطيل هذا الفحص باستخدام <skip_check_for_incorrect_settings>. #100332 (Alexey Milovidov).
  • في واجهة الويب، لم يعد سجل المتصفح وعنوان URL يُحدَّثان عند كل ضغطة مفتاح؛ بل يُسجَّلان عند تنفيذ استعلام بنجاح أو عند تغيير علامة التبويب. #113596 (Alexey Milovidov).
  • يُبلّغ ClickHouse الآن عن تجاوز سعة المكدس بدلًا من التوقف بصمت: تعمل معالجات الإشارات الفادحة على مكدس إشارات بديل، لذا تُنتج SIGSEGV وSIGABRT وSIGILL وSIGBUS وSIGSYS وSIGFPE وSIGTRAP تتبع مكدس حتى عندما يكون الخيط المتسبب في الخطأ قد استنفد مكدسه. #113927 (Groene AI).
  • أصبح ALTER TABLE ... MODIFY COLUMN <col> Tuple(...) على Tuple مُسمّى عمليةً للبيانات الوصفية فقط عند إضافة حقول فرعية فقط، وبسرعة مماثلة لـ ADD COLUMN على المستوى الأعلى. يتطلب تفعيله ضبط SET allow_metadata_only_named_tuple_alter = 1. #107305 (Amos Bird).
  • أُضيف الإعداد input_format_json_max_object_size للحد من حجم كائن JSON أثناء التحليل. يُغلق #106704. #107669 (Pavel Kruglov).
  • تجنب تسجيل sasl.kerberos.kinit.cmd configuration parameter is ignored. لتهيئات محرك Kafka التي لا تستخدم مصادقة Kerberos عبر keytab. #108235 (Ivan Shelestov).
  • أُضيف system.s3(azure)_queue_metadata. #108522 (Kseniia Sumarokova).
  • سجّل إخفاقات الاتصال المقبولة بقواعد بيانات MySQL/PostgreSQL البعيدة كتحذيرات بدلًا من أخطاء. #109472 (Shaohua Wang).
  • عندما لا يكون أي من port أو secure محددًا، يحاول clickhouse-client المنفذين الافتراضي 9000 والآمن 9440 بالتزامن ويستخدم أول منفذ يستجيب، لذا يتصل clickhouse-client --host play.clickhouse.com --user play عبر TLS دون --secure، رغم أن المنفذ غير الآمن لذلك الخادم يُسقط الاتصالات بصمت بدلًا من رفضها. إذا اتضح أن المنفذ المستجيب غير قابل للاستخدام — كمنفذ آمن بشهادة غير موثوقة مثلًا — يعود العميل إلى المنفذ الآخر، لأن البروتوكول لم يُطلب صراحةً. #110130 (Alexey Milovidov).
  • يؤدي النقر على شعار السحابة في Playground الآن إلى فتح موقع ClickHouse في علامة تبويب جديدة، كي لا تفقد تقدمك أثناء تشغيل الاستعلامات. #110422 (William Hatcher).
  • أُضيف المعدِّل STREAM BOUNDED، الذي يقرأ اللقطة الأولى فقط من الاستعلام المتدفق ثم ينهي التنفيذ بدلاً من الاشتراك في التحديثات. #110653 (Smita Kulkarni).
  • أُضيفت معلومات عن الحالة الداخلية لعمليات الربط إلى EXPLAIN ANALYZE. #110892 (Kirill Kopnev).
  • عند فشل تأكيد إعادة الدخول في RWLockImpl::getLock() ‏(RWLock is already locked in exclusive mode / Cannot acquire exclusive lock while RWLock is already locked)، تعرض رسالة الخطأ الآن معرّفات query_id الأخرى التي تمتلك القفل حالياً، وعدد الأقفال التي يحتفظ بها query_id الطالب بالفعل، لتسهيل تشخيص أخطاء ترتيب الأقفال هذه. #110971 (Groene AI).
  • يسجل ClickHouse Keeper الآن حدث “Client has not sent any data” بمستوى Information بدلاً من Warning، بما يتوافق مع معالج TCP في الخادم. يتجنب هذا التحذيرات الزائفة الناتجة عن مجسات التحقق من سلامة TCP (مثل مجسات الحيوية tcpSocket في Kubernetes) التي تفتح اتصالاً بمنفذ عميل Keeper ثم تغلقه فوراً. #111217 (Zeynel).
  • يحتفظ MaterializedPostgreSQL الآن بقيم TOAST غير المتغيرة في PostgreSQL أثناء التحديثات بدلاً من استبدالها بالقيم الافتراضية. #111552 (OrpheusAgent).
  • keeper: رُفعت القيمة الافتراضية لـ write_snapshot_version إلى 8، وأصبح بالإمكان إعادة تحميلها أثناء التشغيل. #111715 (Michael Kolupaev).
  • أُضيف المعدِّل STREAM UNORDERED: يتخطى الفرز حسب ترتيب الالتزام لكل لقطة. #111794 (Smita Kulkarni).
  • أُضيف إعداد MergeTree جديد باسم text_index_version يتحكم في إصدار التنسيق على القرص لفهارس النص: v0_initial أو v1_with_codec أو v2_with_positions. أثناء الترقية المتدرجة أو قبل الرجوع إلى إصدار أقدم، اضبطه على إصدار أقدم لكي تستمر الخوادم الأحدث في كتابة أجزاء فهرس النص بتنسيق لا تزال الخوادم الأقدم قادرة على قراءته؛ ويضبطه إعداد التوافق تلقائياً. #111803 (Anton Popov).
  • ترفض دوال النص المدعومة بالذكاء الاصطناعي (aiGenerate وaiClassify وaiExtract وaiTranslate) الآن استجابات المزوّد المقتطعة أو غير المكتملة بأي شكل آخر (مثل عندما يصل النموذج إلى حد max_tokens) بدلاً من إرجاع مخرجات جزئية بصمت. يتبع السلوك الإعداد ai_function_throw_on_error. #111830 (George Larionov).
  • حُسِّنت L2DistanceTransposedQuantized وcosineDistanceTransposedQuantized وdotProductTransposedQuantized منخفضة الدقة عبر إعادة بناء رموز QBit(Int8) ذات p < 8 باستخدام مراكز بادئة ذات متوسط شرطي غاوسي. تظل الدقة الكاملة (p = 8) مطابقة على مستوى البت؛ وقد تتغير المسافات التقريبية منخفضة الدقة، بينما تعتمد مكاسب الاستدعاء وزمن الاستجابة على عبء العمل. #111867 (Sergey Kuznetsov).
  • تم إصلاح عدم تعبئة ذاكرة التخزين المؤقت لشروط الاستعلام للحبيبات التي استُبعدت بواسطة أي اقتران غير الأخير في عبارة WHERE التي تحتوي على عدة شروط AND. #112083 (Shankar Iyer).
  • أُضيف إعداد جديد input_format_json_max_string_column_growth_step يقيّد نمو مخازن String الداخلية، وفق قوى العدد اثنين، عند إنشاء عمود JSON، مما يقلل ذروة استخدام الذاكرة عند إدراج مستندات JSON كبيرة. ويكون معطّلًا افتراضيًا. #112159 (Pavel Kruglov).
  • خُفِّضت ذروة استخدام الذاكرة عند كتابة أعمدة JSON التي تستخدم تسلسل البيانات المشتركة القائم على buckets (map_with_buckets والمتقدم)، وذلك بتقسيم البيانات المشتركة إلى buckets واحدًا تلو الآخر أثناء الكتابة بدلًا من مَوضعة جميع buckets في وقت واحد. يفيد ذلك خصوصًا أعمدة Array(JSON): ففي JSON القياسي تُقسَّم البيانات المشتركة لكل granule (بحد أقصى index_granularity_bytes)، لذا يكون التوفير محدودًا، بينما قد يحتوي granule واحد من Array(JSON) على العديد من الصفوف المتداخلة، وبالتالي على كمية كبيرة من البيانات المشتركة، حيث يخفض التقسيم bucket تلو الآخر ذروة استخدام الذاكرة بشكل ملحوظ. #112172 (Pavel Kruglov).
  • تتضمن وثائق الإعداد في system.documentation — التي تعرضها صفحة /docs المضمنة والأمر help — الآن سجل تغييرات قيمته الافتراضية: الإصدار الذي أُضيف فيه الإعداد، وكل تغيير لاحق لقيمته الافتراضية، مع القيمة السابقة والقيمة الجديدة وسبب التغيير. #112177 (Alexey Milovidov).
  • يعمل EXPLAIN ANALYZE الآن مع الاستعلامات المتدفقة. #112445 (Kirill Kopnev).
  • يمكن الآن كتابة مُعدِّلات تعريف العمود — COMMENT وCODEC وSTATISTICS وTTL وCOLLATE وPRIMARY KEY وSETTINGS لكل عمود — بأي ترتيب في CREATE TABLE، وبحد أقصى مرة واحدة لكل منها. سابقًا، لم يكن يُقبل سوى ترتيب ثابت واحد، وكان مثلًا x UInt64 CODEC(ZSTD) COMMENT 'text' خطأً نحويًا. في ALTER TABLE ... ADD COLUMN / MODIFY COLUMN، يمكن أيضًا كتابة المُعدِّلات المدعومة — COMMENT وCODEC وSTATISTICS وTTL وSETTINGS لكل عمود — بأي ترتيب؛ وتُطبَّق الآن SETTINGS لكل عمود في ADD COLUMN وSTATISTICS المُعلنة في ADD COLUMN / MODIFY COLUMN بدلًا من إسقاطها بصمت، كما أن COLLATE وPRIMARY KEY في أوامر ALTER هذه يطلقان الآن استثناءً بدلًا من تجاهلهما بصمت. #112788 (Alexey Milovidov).
  • تتطلب طريقة القراءة pread_threadpool استدعاء النظام preadv2 مع العلامة RWF_NOWAIT لقراءة البيانات الموجودة أصلًا في ذاكرة التخزين المؤقت للصفحات دون إحالة القراءة إلى thread pool. يُتحقق الآن عند بدء التشغيل مما إذا كان يمكن استخدام استدعاء النظام هذا، وإذا تعذّر ذلك — لأن نواة Linux أقدم من 5.11، أو لأن ملف تعريف seccomp لبيئة تشغيل حاويات يرفض استدعاء النظام — تُغيَّر القيمة الافتراضية لـlocal_filesystem_read_method إلى pread، ويُبلّغ عن السبب في سجل الخادم. سابقًا، كانت كل قراءة تتحمل تكلفة إحالتها إلى thread pool على هذه الأنظمة، وكان ملف تعريف seccomp الذي يُرجع EPERM يتسبب في فشل الاستعلامات بالخطأ CANNOT_READ_FROM_FILE_DESCRIPTOR. #112945 (Alexey Milovidov).
  • أبلغ عن بيانات تعريف thrift غير الصحيحة الخاصة بـ Parquet باعتبارها INCORRECT_DATA. #113311 (Groene AI).
  • أُصلح تعامل codec ‏GCD مع القيم الموقعة ذات العرض الثابت والأرقام السالبة. سابقًا، كان يحسب المقسوم عليه من القيم الموقعة مباشرةً، ما قد يفوّت القاسم المشترك ويقلل كفاءة الضغط بدرجة كبيرة للأعمدة الصحيحة والعشرية الموقعة. يحسب الآن المقسوم عليه من القيم المطلقة للأنواع الموقعة، مع الحفاظ على السلوك الحالي للأنواع غير الموقعة وفك الضغط. #113798 (Kirill Shcherbatov).
  • أضف الإعدادات enable_alp_codec وenable_sz3_codec وenable_zxc_codec وenable_quantized_codec لتمكين كل codec ضغط تجريبي على حدة. #113824 (Raufs Dunamalijevs).
  • اسمح باستخدام ALTER TABLE ... MODIFY COLUMN لعمود تُستخدم أعمدته الفرعية في المفتاح الأساسي أو مفتاح التقسيم، ما دامت الأعمدة الفرعية المستخدمة في المفتاح تحتفظ بنوع متوافق على القرص. سابقًا، كان أي ALTER من هذا النوع محظورًا. #113862 (Pavel Kruglov).
  • أضف لوحة المعلومات Filesystem cache إلى system.dashboards. #113884 (Kseniia Sumarokova).
  • اجعل سجلات cache لكل إعادة تعبئة للمخزن المؤقت خاضعة للإعداد filesystem_cache_verbose_logging. #113885 (Groene AI).
  • عندما يختلف النوع المعلن للعمود عن بياناته أثناء قراءة MergeTree (بسبب مصادر بيانات بأنواع مختلطة، مثلًا بعد ALTER TABLE ... MODIFY COLUMN لم تكتمل عمليته بعد)، يُبلغ الخادم الآن عن استثناء واضح يحدد العمود والبنيتين، بدلًا من إجراء تحويل نوع غير متحقق منه: كانت إصدارات التصحيح وsanitizer تتوقف سابقًا برسالة Bad cast from type A to B مقتضبة لا تذكر أي عمود، بينما كانت إصدارات الإنتاج تتعامل بصمت مع ذاكرة غير متطابقة. #114087 (Alexey Milovidov).
  • تعمل الآن دالة نافذة مع PARTITION BY ضمن make_distributed_plan. وعندما يسمح شكل الخطة بذلك، تُنفَّذ دالة النافذة بالتوازي عبر حاويات تتلقى كل منها أقسامًا كاملة. #114111 (Vighnesh Pathrikar).
  • واجهة الويب: أصبح مؤشر التحميل على شكل ساعة رملية في لوحة قواعد البيانات متحركًا مجددًا. #114187 (Alexey Milovidov).
  • تُستخدم الآن دالة hash ذات 64 بت لأساليب aggregation الخارجية Nullable ثابتة العرض، لتجنب مشكلة التصادمات عند aggregation ذات cardinality مرتفعة جدًا. #114210 (Nikita Taranov).
  • تستنتج جداول Distributed وBuffer التي لا تحدد قائمة أعمدة الآن البنية دائمًا وفقًا لـ access rights الخاصة بالمستخدم الذي أنشأها. #114211 (Pedro Ferreira).
  • يعيد x IN (subquery) على عمود LowCardinality الآن LowCardinality(UInt8) — وهو النوع نفسه الذي يعيده x IN (literal list). سابقًا، كان الشكلان يعيدان نوعين مختلفين، وكانت الخطط الموزعة التي تتضمن IN من هذا النوع تحتاج إلى حالة خاصة عند التحقق من نوع الخطة. #114229 (Alexander Gololobov).
  • تم تمكين ie_join افتراضيًا: أصبحت القيمة الافتراضية لـ join_algorithm هي direct,parallel_hash,hash,ie_join. يُنفَّذ الآن JOIN الذي لا يحتوي قسم ON فيه إلا على شروط عدم مساواة (مقارنتان باستخدام < أو <= أو > أو >= بين تعبيرات الجداول الموصولة) باستخدام خوارزمية IEJoin القائمة على الفرز بدلًا من CROSS JOIN مع عامل تصفية، كما أصبحت عمليات الربط LEFT/RIGHT/FULL/SEMI/ANTI بهذه الشروط مدعومة. وبما أن ie_join يأتي أخيرًا في القائمة، فلا يُستخدم إلا عندما لا تنطبق الخوارزميات الأخرى. #114327 (Vladimir Cherkasov).
  • تم إصلاح المخططات في واجهة الويب التي كانت تعرض بيانات نقطة متناظرة في تلميح التمرير لنتيجة مرتبة حسب x ترتيبًا تنازليًا. يمكن الآن رسم الأعمدة Date وDate32 وDateTime وDateTime64 بيانيًا؛ إذ كانت طوابع Unix الزمنية الصحيحة فقط مدعومة سابقًا. تُعرض التواريخ على المحاور وفي التلميحات بتنسيق ISO 8601، وكذلك الكميات ذات اللاحقات K/M/G/…، كما في لوحة المعلومات المتقدمة. #114349 (Alexey Milovidov).
  • دعم تحليل الأعداد الصحيحة التي تتجاوز نطاق 64 بت في نوع البيانات JSON وJSONExtract وisValidJSON. تُقرأ هذه القيم في أنواع أعداد صحيحة واسعة مثل Int128/UInt256 بدلًا من رفض المستند بأكمله. #114379 (Pavel Kruglov).
  • أصبحت جداول QueryRunner تبدأ خيوط التنفيذ العاملة عند الطلب وتحررها عند خمولها، بدلًا من شغل خيوط التنفيذ طوال عمر الجدول. #114522 (Miсhael Stetsyuk).
  • أُضيفت قابلية الرصد لمكدسات الألياف، التي تُستخدم للاتصال غير المتزامن بالنسخ المتماثلة البعيدة: أحداث ملف التعريف FiberStackAllocs وFiberStackAllocBytes وFiberStackAllocNanoseconds وFiberStackFreeNanoseconds، والمقاييس FiberStacks وFiberStackBytes. #114541 (Alexey Milovidov).
  • PromQL: دعم معدّلات الطابع الزمني @ start() و@ end(). #114558 (Minh Vu).
  • نقل سياق التتبّع في OpenTelemetry إلى الألياف المستخدمة لإنشاء الاتصالات غير المتزامن وتنفيذ الاستعلامات عن بُعد (الطلبات المحوطة، async_socket_for_remote، async_query_sending_for_remote). أصبحت امتدادات الاستعلامات عن بُعد ضمن استعلام موزع تُربط بشكل صحيح تحت امتداد Connection::sendQuery الخاص بالعقدة البادئة، بدلًا من ربطها مباشرةً بسياق التتبّع الذي يقدمه العميل، وينتج كل تنفيذ لمهمة غير متزامنة امتدادًا خاصًا به. #114813 (Diego Gomes Tomé).
  • مع هذا التغيير، عند استخدام فهارس WHATIF، يُبلغ خط الأساس المعروض عبر الإسقاطات عن not_applicable لكل مرشح بدلًا من فشل التعليمة. #114846 (Yarik Briukhovetskyi).
  • أصبح DROP DATABASE يحذف الجداول بالترتيب الطوبولوجي العكسي لتبعيات التحميل والتبعيات المرجعية معًا (سابقًا تبعيات التحميل فقط)، لذا لا يمكن لتعطل في منتصف DROP DATABASE أن يترك جدولًا حُذفت تبعياته بالفعل. #114952 (Alexey Milovidov).
  • في لوحات المعلومات بواجهة الويب، استُبدلت شاشة الخطأ العامة بملاحظة فوق لوحات المعلومات، لذا لم يعد تعطل مخطط واحد يخفي الصفحة بأكملها. #115019 (Mikhail Artemenko).
  • إفراغ جداول مرحلة التعلّم الخاصة بالمجمّع التكيفي إلى القرص عند ضغط الذاكرة. #115038 (Groene AI).
  • أصبح clickhouse-local يجيب عن طلبات Preflight لـ CORS بالرؤوس المتساهلة نفسها التي يستخدمها clickhouse-server، لذا يمكن استخدام واجهة HTTP التي يفتحها SYSTEM START LISTEN HTTP من المتصفح دون إعداد إضافي، بما في ذلك واجهة الويب المفتوحة من عنوان URL من نوع file://. #115045 (Alexey Milovidov).
  • دعم معاملات مطابقة التعبيرات النمطية بأسلوب PostgreSQL: ~ (اسم مستعار للدالة match)، و~* (مطابقة غير حساسة لحالة الأحرف)، و!~ و!~* (النفي). تعمل الآن أوامر \d و\dt و\dv في psql عند الاتصال بـ ClickHouse عبر بروتوكول توافق PostgreSQL، ولم يعد الاستعلام الفاشل ينهي الاتصال. #115066 (Alexey Milovidov).
  • لم يعد clickhouse-client يطبع الرسالة Connecting to ... مرتين عند طلب كلمة المرور تفاعلياً. #115081 (Alexey Milovidov).
  • يوضح EXPLAIN WHATIF الآن سبب تجاوز التقدير التجريبي في سطر جديد باسم empirical_reason، يظهر عندما تكون قيمة empirical_status هي unsupported. #115140 (Yarik Briukhovetskyi).
  • عندما لا تتمكن أي خوارزمية ربط مفعّلة بإعداد join_algorithm من تنفيذ JOIN، تسرد رسالة الخطأ الآن الخوارزميات التي جرت تجربتها، ودرجة الصرامة ونوع JOIN الذي فشل، بدلاً من الاكتفاء بالإبلاغ عن عدم نجاح أي منها. #115226 (Alexey Elkin).
  • يمكن لاستعلامات البحث المتجهي الآن استخدام فهرس تشابه المتجهات عندما يكون المتجه المرجعي قيمة حرفية لمصفوفة أعداد صحيحة، مثل ORDER BY L2Distance(vec, [1, 2]). سابقاً، كانت هذه الاستعلامات تعود بصمت إلى فحص بالقوة الغاشمة. #115255 (Robert Schulze).
  • يُعاد الآن محاولة فشل الشبكة من جهة العميل في Azure (إعادة تعيين الاتصال أو رفضه، وأخطاء DNS وTLS) بوصفه أخطاء نقل بدلاً من إظهاره كخطأ 500 اصطناعي، بما يتوافق مع عميل S3. #115269 (Arsen Muk).
  • يمكن الآن استرداد توثيق جميع عبارات SQL (مثل الاسم والبنية والوصف والأمثلة) من جدول النظام system.statements. #115341 (Robert Schulze).
  • لم يعد BACKUP يترك ملف قفل في وجهته إذا فشلت المحاولة التي أنشأته قبل كتابة أي شيء، سواء أثناء حجز الوجهة أو عند فتح أرشيف. لم يكن بإمكان أي نسخة احتياطية لاحقة مطابقة هذا القفل، لذا كانت كل إعادة محاولة للوجهة نفسها تفشل إلى أن يُحذف الملف يدوياً. تنشئ النسخ الاحتياطية إلى وجهات S3 وAzure القفل أيضاً بشكل حصري، ويُبلّغ عن القفل التابع لنسخة احتياطية أخرى باعتباره نسخة احتياطية متزامنة، بدلاً من أي خطأ تُرجعه وحدة التخزين. #115387 (Julia Kartseva).
  • دعم مصادقة رمز الحامل في BuilderRWBufferFromHTTP (المحاولة 2). #115400 (Sergei Trifonov).
  • إضافة بعض المقاييس ذات الأبعاد إلى S3Queue. #115422 (Bharat Nallan).
  • أُضيف keyword كاسم مستعار لمُجزّئ النص array الخاص بفهرس النصوص، لتحسين التوافق مع OpenSearch وElasticsearch وSolR وLucene. #115507 (Robert Schulze).
  • السماح بإنشاء جداول S3 خاصة. #115652 (Konstantin Vedernikov).
  • عدم تسجيل الذاكرة غير المتتبعة لكل خيط في أخطاء MEMORY_LIMIT_EXCEEDED التي لا تشمل الخادم بأكمله. #115658 (Azat Khuzhin).
  • يدعم بروتوكول Prometheus remote-write الآن عمليات الإدراج غير المتزامنة: تُجمَّع البيانات الواردة من عدة طلبات remote-write متزامنة قبل تكوين الأجزاء، وفقًا لإعداد async_insert (مفعّل افتراضيًا؛ أضف async_insert=0 إلى URL المعالج للحفاظ على السلوك المتزامن). ولا يُقَرّ الطلب إلا بعد تفريغ البيانات إلى جميع الجداول الداخلية لجدول TimeSeries الهدف. #115688 (Nikita Mikhaylov).
  • أصبحت جميع الدالات التجميعية timeSeries* تتعامل مع الطوابع الزمنية المكررة وفق قاعدة واحدة (تُعتمد القيمة الأكبر، وتخسر NaN أمام أي قيمة أخرى)، مما يصلح النتائج التي تعتمد على الترتيب في timeSeriesInstantRateToGrid وtimeSeriesInstantDeltaToGrid وtimeSeriesLastTwoSamples وtimeSeriesResampleToGridWithStaleness عندما تكون بعض القيم ذات الطابع الزمني نفسه NaN. والقاعدة موثقة ومختبرة الآن. #115920 (Vitaly Baranov).

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

  • إصلاح تلف أسماء الأعمدة واستثناءات BAD_ARGUMENTS مع inject_random_order_for_select_without_order_by: لم تعد استعلامات SELECT متعددة الأعمدة تفشل، وتُحفَظ أسماء أعمدة الإخراج في CREATE TABLE AS SELECT وCREATE VIEW AS SELECT والتنسيقات المُسمّاة مثل JSONEachRow بدلًا من استبدالها بالأسماء المستعارة الداخلية __subquery_column_<UUID>. إغلاق #102812. إغلاق #101107. #105896 (Groene AI).
  • إصلاح NOT_FOUND_COLUMN_IN_BLOCK في قارئ Parquet V3 الأصلي عندما يحتوي PREWHERE على شروط مترافقة تشترك في تعبير وسيط. #107059 (Groene AI).
  • إصلاح NOT_FOUND_COLUMN_IN_BLOCK للاستعلامات التي تستخدم الأعمدة الافتراضية _part_starting_offset أو _part_offset في WHERE مع التجسيد الكسول. #108287 (Vladimir Cherkasov).
  • إصلاح Not found column or subcolumn c.null in block عند تشغيل WHERE col IS NULL أو IS NOT NULL على عمود Iceberg خضع لتطور المخطط وأُضيف بعد كتابة ملفات بيانات أقدم، مع optimize_functions_to_subcolumns = 1 (الإعداد الافتراضي). #109515 (Groene AI).
  • إصلاح أخطاء ICEBERG_SPECIFICATION_VIOLATION الزائفة عند قراءة جدول Iceberg يُسلسَل فيه نوع عشري أو نوع بدائي آخر ذي معلمات بمسافات بيضاء مختلفة بين ملفات البيانات الوصفية، مثل decimal(20,0) في البيانات الوصفية للجدول وdecimal(20, 0) في ملف البيان. #109676 (Groene AI).
  • إصلاح PREWHERE المؤجل مع optimize_move_to_prewhere = 1 عندما يُطبَّق PREWHERE بعد FINAL: لم تعد شروط WHERE تُنقل قبل سياسة صفوف مؤجلة، إذ كان ذلك قد يغيّر نتائج الاستعلام. #109703 (Yarik Briukhovetskyi).
  • إصلاح BAD_GET عند مقارنة عمود Array(String) بحرفية مصفوفة مثل arr = ['x'] وكان للعمود فهرس تخطٍ من نوع text أو tokenbf_v1 أو ngrambf_v1. تعود هذه المقارنات الآن إلى فحص كامل بدلًا من فشل الاستعلام. #110057 (Groene AI).
  • إصلاح النتائج الخاطئة للدوال has وmapContainsKey وmapContainsValue عند استخدام قيمة بحث فارغة بوجود فهرس نصي. #110246 (Robert Schulze).
  • إصلاح Host is empty in S3 URI عند استخدام استعلام فرعي قيَمي كوسيطة عنوان URL لدالة الجدول s3، أو كوسيطة لأي دالة جدول أخرى، في استعلامات CREATE TABLE ... AS SELECT. #110254 (Sema Checherinda).
  • إصلاح عمليات التحقق من امتيازات ON CLUSTER لـ SYSTEM STOP/START CLEANUP وSYSTEM STOP/START VIRTUAL PARTS UPDATE: لم تعد تتطلب SYSTEM PULLING REPLICATION LOG، وأصبحت تستخدم SYSTEM CLEANUP أو SYSTEM VIRTUAL PARTS UPDATE. #110289 (Groene AI).
  • إصلاح مشكلة عدم اكتشاف النسخة المتماثلة للقراءة فقط في تخزين الكائنات، عند ضبط read_only = true، للأجزاء الجديدة عبر refresh_parts_interval، وفشل table_disk = true على هذا القرص برسالة table_disk is not supported for non-ObjectStorage disks. #110460 (Julia Kartseva).
  • إصلاح عمليات الكتابة عبر دوال جداول بحيرة البيانات، مثل INSERT INTO FUNCTION icebergS3(...)، التي كانت تُنتج ملفات Parquet تفقد فيها الأعمدة النصية توصيف النوع String، مما يجعل البيانات المكتوبة غير قابلة للقراءة بواسطة قارئات خارجية مثل Spark. #110465 (Shaohua Wang).
  • إصلاح فشل استنتاج المخطط مع Map cannot have a key of type LowCardinality(Nullable(String)) عند قراءة ملفات ORC ذات مفاتيح الخرائط المُرمّزة بالقاموس، بما في ذلك الملفات التي يكتبها Spark والملفات التي يكتبها ClickHouse نفسه عند تمكين output_format_orc_dictionary_key_size_threshold. #110492 (Shaohua Wang).
  • إصلاح نتائج IS NULL / IS NOT NULL / count() غير الصحيحة مع optimize_functions_to_subcolumns لعمود حُوّل إلى Nullable عبر ALTER MODIFY COLUMN T مقتصر على البيانات الوصفية إلى Nullable(T). بالنسبة إلى الأجزاء المكتوبة قبل التحويل، يُشتق الآن العمود الفرعي .null من العمود الأب الموجود فعليًا بدلًا من القيمة الافتراضية لنوع التخزين. #110584 (Groene AI).
  • إصلاح نتائج الاستعلامات غير الصحيحة الناتجة عن تحسين optimize_and_compare_chain عندما تمزج الشروط المتعدية أنواعًا ذات دلالات مقارنة مختلفة، مثل Enum مع String، أو Decimal مع Float64، أو قيم FixedString ذات أطوال مختلفة. #110621 (Yarik Briukhovetskyi).
  • إصلاح النتائج غير الصحيحة لبعض استعلامات القراءة بالترتيب عندما يوسّع المُحسِّن بادئة مفتاح الفرز. #110725 (Groene AI).
  • إصلاح عبارات CREATE التي تحتوي على عبارة COMMENT بحيث تُصدر خطأً نحويًا عند غياب سلسلة التعليق الحرفية، بدلًا من قبول استعلام فُسّر بصورة خاطئة بصمت. على سبيل المثال، لم يعد CREATE VIEW v COMMENT AS SELECT 1 ينشئ عرضًا دون تعليق. #111159 (Shaohua Wang).
  • إصلاح النتائج غير الصحيحة من SummingMergeTree وCoalescingMergeTree مع FINAL عندما يكون optimize_move_to_prewhere_if_final = 1 وتكون عبارة WHERE شرطًا منطقيًا ضمنيًا على عمود مفتاح الفرز، مثل WHERE k. #111342 (Groene AI).
  • إصلاح استثناءات Directory '...' was created concurrently with remote path '...' الزائفة في العمليات المقتصرة على البيانات الوصفية لقواعد البيانات والجداول المدعومة بتخزين الكائنات، مثل DROP DATABASE. #111353 (Mikhail Artemenko).
  • تُبلغ كتالوجات REST لبحيرة البيانات الآن عن بيانات الاعتماد المنتهية الصلاحية بالاستثناء المناسب بدلًا من التعامل معها بصمت كجدول مفقود أو إرجاع UNKNOWN_TABLE. #111379 (alesapin).
  • إصلاح تجاهل SQL SECURITY DEFINER وSQL SECURITY NONE للعروض ذات المعلمات عند تعطيل المحلل (enable_analyzer = 0). سابقًا، كان الاستعلام عن مثل هذا العرض بواسطة مستخدم لا يملك امتيازات على الجدول الأساسي يفشل مع ACCESS_DENIED، رغم أن العرض نفسه يعمل عند تمكين المحلل. #111458 (Groene AI).
  • رفض إنشاء عمود Nullable(Nothing)، أو أي نوع آخر غير مسموح به في الجداول، عند تنفيذ CREATE TABLE إذا كان المخطط مستنتجًا من التخزين، مثلًا في جدول remote أو Remote أو Distributed بلا أعمدة فوق عرض ينفّذ SELECT NULL، بدلًا من حفظ بيانات وصفية يتعذر تحميلها عند إعادة تشغيل الخادم التالية وتمنع تحميل الجداول غير ذات الصلة. #111487 (Groene AI).
  • إصلاح std::bad_variant_access والتطور غير الصحيح لمخطط Iceberg في أعمدة Array(Map(...)) المتداخلة التي يتم تعديل Struct الداخلي فيها. #111489 (Konstantin Vedernikov).
  • إصلاح فشل ALTER MODIFY COLUMN عند تحويل عمود Nullable إلى نوع مختلف مع DEFAULT، مثل التحويل من Nullable(UInt8) إلى String أو LowCardinality(String) أو Array(UInt8). #102156 (DQ).
  • إصلاح ظهور BAD_ARGUMENTS (Dictionary not found) من dictGet بعد رفض DETACH DICTIONARY ... PERMANENTLY بسبب HAVE_DEPENDENT_OBJECTS؛ إذ يبقى القاموس الآن قابلًا للاستخدام عند رفض فصله. #105259 (Groene AI).
  • تتضمن ملفات البيانات التي يكتبها ClickHouse لجداول Iceberg الآن معرّفات حقول Iceberg في Avro وORC، وتُكتب أعمدة String في ORC بصيغة string بدلًا من صيغة ثنائية، وتحافظ حقول ORC المركبة الاختيارية (Array وMap وTuple) الآن على البيانات الوصفية الصحيحة iceberg.required. يعالج هذا نتائج NULL الصامتة بعد إعادة تسمية الأعمدة ويستعيد التوافق مع القارئات المتوافقة مع المواصفة، مثل Spark وiceberg-java. #109994 (Groene AI). #111775 (Groene AI).
  • إصلاح قراءة الملفات على أقراص plain_rewritable بعد إعادة كتابة مسار موجود بمحتوى بحجم مختلف، إذ كان من الممكن أن تؤدي البيانات الوصفية القديمة المخزنة في الذاكرة إلى حدوث UNEXPECTED_END_OF_FILE. #110304 (Konstantin Bogdanov).
  • إصلاح انحراف متتبع الذاكرة لكل مستخدم الناجم عن سجلات النظام، مثل query_log وquery_views_log، والذي كان من الممكن أن يؤدي إلى تفعيل حد خاطئ لـ max_memory_usage_for_user لدى المستخدمين ذوي أعباء العمل المستمرة. #110708 (Raúl Marín).
  • إصلاح حالة تنافس نادرة كان فيها تنفيذ ALTER لتعديل تعليق فقط أو إعدادات فقط على جدول ReplicatedMergeTree قد يحذف بصمت عمودًا أضافه تنفيذ متزامن لـ ALTER ... ADD COLUMN، مما يترك نسخة متماثلة ببيانات وصفية قديمة للجدول. #111029 (Shaohua Wang).
  • إصلاح التقليم غير الصحيح للمفتاح الأساسي في الجداول التي ينتهي مفتاح ترتيبها بترتيب تنازلي، مثل ORDER BY (g, r DESC)، والذي كان من الممكن أن يستبعد صفوفًا مطابقة. #111059 (Nihal Z. Miaji).
  • إصلاح تسرّب ذاكرة لشهادة النظير عند كل مصافحة TLS مع تمكين التحقق من الشهادة. #111425 (Konstantin Bogdanov).
  • إصلاح الطفرات التي تستخدم معلمة استعلام كتقسيم في ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}: إذ يمكن الآن تحليل قيمة التقسيم المتسلسلة مجددًا بصورة صحيحة، لذا لم يعد ALTER يكتب إدخالات طفرات تعطل تحميل الجدول. #111518 (Michael Kolupaev).
  • إصلاح تعطل على macOS/aarch64 عند التقاط تتبع مكدس على مكدس coroutine أو fiber، مثلًا بواسطة محلل أداء الذاكرة. #111656 (Raúl Marín).
  • إصلاح تعطل الخادم عند قراءة بيانات Protobuf باستخدام input_format_allow_errors_num > 0، إذا سبقت رسالة صالحة رسالة تالفة قابلة للتخطي ضمن الكتلة نفسها. #107739 (Andrey Tsarevskiy | Андрей Царевский ).
  • إصلاح NOT_FOUND_COLUMN_IN_BLOCK عندما يستخدم استعلام على جدول Distributed القيمة _shard_num أو shardNum التي تصبح Nullable، مثلًا ضمن FULL JOIN مع join_use_nulls = 1 وبالاقتران مع ORDER BY والمحلل. #109798 (Groene AI).
  • إصلاح النتائج الخاطئة واستثناءات UNKNOWN_ELEMENT_OF_ENUM في LEFT/RIGHT/FULL/ASOF JOIN مع join_algorithm = 'full_sorting_merge'، إذ كان يمكن ملء الصفوف غير المرتبطة بـ 0 بدلًا من القيمة الافتراضية لنوع العمود. #111197 (Groene AI).
  • إصلاح استثناء LOGICAL_ERROR عندما يكون جسم lambda لدالة عالية الرتبة عبارة عن if أو multiIf ذي شرط ثابت، يمزج فرعًا حرفيًا من نوع Bool مع فرع مقارنة من نوع UInt8، مثلًا arrayFilter(p -> multiIf(false, true, p = 'ALL'), ['ALL']). #111245 (Groene AI).
  • يشير العنصر النائب {_partition_id} في مسار محركات S3 وAzureBlobStorage وURL والمحركات المشابهة للملفات، عند عدم تحديد partition_strategy صراحةً، مجددًا إلى استراتيجية wildcard، مما يعيد التوافق مع عبارات DDL السابقة للإصدار 26.6 التي بدأت تفشل مع BAD_ARGUMENTS. #111279 (Nikita Fomichev).
  • إصلاح NUMBER_OF_COLUMNS_DOESNT_MATCH في استعلامات GROUP BY على جدول Merge يغلّف جدول Distributed، عندما يكون مفتاح التجميع دالةً لعمود وتقرأ دالة تجميعية العمود نفسه. #111334 (Groene AI).
  • يُرفض الآن GRANT role TO role للدور نفسه مع BAD_ARGUMENTS بدلًا من إنشاء إدخال ذاتي المرجع بصمت في system.role_grants. #103315 (zxuhan7).
  • إصلاح عمليات الكتابة إلى جداول Iceberg عندما لا يحتوي ملف البيانات الوصفية على قسم refs. #106896 (Aleksandr Musorin).
  • إصلاح تعذر قراءة system.session_log بعد تسجيل دخول Arrow Flight: كان عمود interface من النوع Enum8، لكن القيمة ArrowFlight كانت مفقودة من تعداده، لذا كانت عملية تسجيل الدخول عبر بروتوكول Arrow Flight تكتب القيمة الخام 10، وكان أي SELECT يقرأ هذا الصف يطرح استثناء Unexpected value 10 in enum. #110758 (Alexey Milovidov).
  • إصلاح تجاوز عدد صحيح موقّع في toStartOfInterval مع فواصل زمنية دون الثانية: بالنسبة إلى قيم DateTime64 الواقعة ضمن فاصل زمني واحد من الحد الأدنى لـ Int64، كانت النتيجة المقربة تلتف بصمت إلى قيمة موجبة غير صالحة؛ أما الآن، فترمي الدالة استثناء DECIMAL_OVERFLOW. #111370 (Alexey Milovidov).
  • إصلاح readWKTPoint وreadWKT اللذين كانا يعيدان إحداثيات غير مهيأة (في الوضع القياسي) أو إحداثيات الصف السابق (في الوضع المتجه) لنقطة فارغة موسومة ببُعد، مثل POINT M EMPTY. تُرفض هذه المدخلات الآن بالخطأ CANNOT_PARSE_TEXT، بما يتسق مع POINT EMPTY. #111517 (Groene AI).
  • إصلاح استثناءات Unexpected number of columns in result sample block في RIGHT وFULL JOIN عندما يحتوي الجانب الأيسر على عمود مكرر بالاسم نفسه، مثل 1 AS b, 1 AS b، ويستمر هذا التكرار عبر UNION ALL. #111554 (Groene AI).
  • إصلاح استثناءات CANNOT_CONVERT_TYPE وLOGICAL_ERROR في الاستعلامات الموزعة التي تستخدم الموفّق -Tuple مع المعدّل RESPECT NULLS أو IGNORE NULLS ضمن موفّقات متداخلة، مثل anyRespectNullsStateTuple(...) IGNORE NULLS. #111570 (Alexey Milovidov).
  • إصلاح تمييز بناء جملة SQL في Play على iPhone، إذ كان تضخيم النص التلقائي في Safari على iOS قد يؤدي إلى اختلال محاذاة طبقة التمييز المتراكبة. #111683 (Alexey Milovidov).
  • إصلاح UNKNOWN_QUERY_PARAMETER عند استدعاء عرض مقيّد بمعلمات بوسيط قيمته استعلام فرعي من النوع Array أو Tuple أو LowCardinality، مثل SELECT * FROM v(param = (SELECT groupArray(x) FROM t)). #111790 (Groene AI).
  • إصلاح TYPE_MISMATCH (Key type for complex key ... does not match) عندما تستخدم عملية JOIN على قاموس مفتاح ربط من النوع Nullable أو LowCardinality أو LowCardinality(Nullable)، بينما لا يكون مفتاح القاموس مغلفًا. أصبحت عملية البحث في القاموس للربط المباشر تطبّع المفتاح إلى نوع المفتاح المعلن للقاموس، كما يفعل dictGet وdictHas بالفعل، ولا يتطابق مفتاح NULL مطلقًا. #111857 (Groene AI).
  • مع fsync_part_directory = 1، أصبحت إعادة تسمية دليل الجزء من اسمه المؤقت إلى اسمه النهائي دائمة بحد ذاتها عبر تنفيذ fsync للدليل الأب، وكذلك للدليل الأب المصدر عند النقل بين دليلين أبويين. سابقًا، كان يُنفّذ fsync للدليل المنقول فقط، لذا كان فقدان الطاقة مباشرة بعد تثبيت جزء قد يتركه مفقودًا على القرص ويتسبب في فقدان صفوف رغم تفعيل الإعداد. #111861 (Groene AI).
  • إصلاح حالات التعليق في randChiSquared وrandStudentT وrandFisherF وrandBinomial عند استخدام معلمات قصوى. لم يكن بالإمكان مقاطعة هذه الاستعلامات باستخدام max_execution_time أو KILL QUERY. تُرفض هذه المعلمات الآن حتى عند ضبط max_rand_distribution_parameter أو max_rand_distribution_trials على 0، ولم يعد بالإمكان رفع max_rand_distribution_trials فوق قيمته الافتراضية 10^9 لـ randBinomial. #111909 (Alexey Milovidov).
  • إصلاح النتائج الخاطئة عندما يعيد المحلل كتابة سلاسل المقارنة مثل x = c1 OR x = c2 OR ... أو x != c1 AND x != c2 AND ... أو has(const_array, x) إلى IN وNOT IN. كما يصلح استثناءات Illegal type ... of argument of function in للتعبيرات ذات البنية Dynamic أو Array(Dynamic) أو JSON. #111924 (Groene AI).
  • إصلاح النتائج الخاطئة وظهور LOGICAL_ERROR عند اختيار عمود Nullable(Tuple(...)) مع أحد الأعمدة الفرعية لعناصره الحاملة للقيم الفارغة (Variant أو Dynamic أو LowCardinality) من جدول MergeTree. #111949 (Groene AI).
  • رفض مصافحات البروتوكول الأصلي التي تستخدم USER_INTERSERVER_MARKER لمجموعة غير معروفة أو لمجموعة مهيأة من دون عنصر <secret>. كان يمكن لهذه المصافحات سابقًا الدخول في وضع الاتصال بين الخوادم قبل المصادقة وقراءة معلومات عن الجداول المحلية. #99675 (Dan Anderson).
  • إصلاح JOIN على جداول EmbeddedRocksDB وRedis وKeeperMap، إذ كان قد يعيد بصمت صفرًا من الصفوف عند استخدام DirectKeyValueJoin مع مفاتيح String أو Nullable(String). #105253 (Vladimir Cherkasov).
  • إصلاح العروض المادية القابلة للتحديث المنسقة في قاعدة بيانات Replicated التي كانت تتعطل بعد إعادة الإرفاق بـ Keeper لا تتوفر فيه علامة الميزة MULTI_READ؛ إذ يتوقف العرض الآن بصورة سليمة بالحالة Disabled بدلًا من تسجيل Unexpected exception in refresh scheduling إلى ما لا نهاية. #108890 (Groene AI).
  • إصلاح إرسال عميل ZooKeeper بادئة طول int32 متجاوزة للسعة للطلبات الأكبر من INT32_MAX بايت. تُرفض الطلبات كبيرة الحجم الآن من جهة العميل. يمكن ضبط الحد عبر max_request_size ضمن <zookeeper>، وإلا فيُستمد من Keeper. يُغلق #109165. #109190 (Arsen Muk).
  • إصلاح وضع Ordered لـS3Queue/AzureQueue مع عُقد المعالجة الدائمة: تُجدَّد أقفال الحاوية الآن أثناء التدفق، بحيث لا تؤدي عملية التنظيف باستخدام TTL، التي يتحكم بها persistent_processing_node_ttl_seconds، إلى إزالة أقفال معالج نشط. وإذا فُقدت ملكية القفل رغم ذلك، يُكتشف الأمر ويُبلَّغ عنه، ويتعافى التدفق باستخدام مكرّر ملفات جديد. #110292 (Kseniia Sumarokova).
  • إصلاح البيانات الخاطئة واحتمال القراءة خارج الحدود عند قراءة أعمدة String ذات string_serialization_version = 'with_size_stream' بعد تخطي الصفوف الأولى، وعند قراءة الكائنات الفرعية لأعمدة JSON المخزنة باستخدام object_shared_data_serialization_version = 'map'. #110471 (Alexey Milovidov).
  • إصلاح قبول المحلل في CREATE TABLE وALTER TABLE لتعبير DEFAULT أو MATERIALIZED يشير إلى عمود افتراضي مثل _table أو _database. تُرفض هذه التعبيرات الآن عند تعريفها بدلًا من فشلها لاحقًا عند الإدراج مع NOT_FOUND_COLUMN_IN_BLOCK. #111776 (Groene AI).
  • إصلاح حالة تسابق في دوال UDF القابلة للتنفيذ، ومحرك الجدول executable، والقواميس القابلة للتنفيذ، إذ كان يمكن لـfcntl على واصف ملف مغلق مسبقًا أن يفسد واصفًا غير ذي صلة لاستعلام متزامن، مما يؤدي إلى تعليق الاستعلامات إلى أجل غير مسمى. #111779 (Raúl Marín).
  • يؤدي إنشاء إحصاءات minmax المهجورة الآن إلى إصدار تحذير بدلًا من طرح استثناء. #111785 (Han Fei).
  • إصلاح جداول Iceberg التي يكتبها ClickHouse بحيث تصبح قابلة للقراءة بواسطة قارئات خارجية مثل PyIceberg وSpark. تتضمن مخططات Avro لقائمة البيان والبيان الآن خصائص field-id المطلوبة في Iceberg. #111786 (Groene AI).
  • أعِد إنشاء العمودين المُجسّدين داخل الجزء block_number وblock_offset أثناء عمليات إرفاق الأجزاء وفصلها ونقلها واستنساخها، حتى لا تصبح قيمهما قديمة بعد معالجة الأجزاء. #111801 (Mikhail Artemenko).
  • أصلح تحسين query_plan_split_filter الذي كان يترك عمودًا داخليًا باسم __split_filter في أحد فروع INTERSECT أو UNION، ما قد يؤدي إلى الاستثناء Block structure mismatch in IntersectOrExceptStep stream: different number of columns. #111930 (Groene AI).
  • أصلح AMBIGUOUS_COLUMN_NAME في الاستعلامات التي تكرر شرط JOIN ON في WHERE عند استخدام join_use_nulls = 1؛ إذ تُرجع هذه الاستعلامات نتائجها الآن بدلًا من الفشل. #112007 (Groene AI).
  • أصلح مصادقة DLF في كتالوج REST لـ Paimon: لم تعد الطلبات اللاحقة للطلب الأول تفشل برمز HTTP 401، وأصبحت عمليات التحقق من وجود الجداول تتعرف على HTTP 404 بشكل صحيح. #112015 (JIaQi Tang).
  • أصلح LOGICAL_ERROR أثناء التنظيف المتزامن لجداول Kafka في Keeper؛ فلم تعد عمليات الإنشاء أو الإزالة تفشل إذا اختفى مسار Keeper الخاص بالجدول بعد انتهاء الجلسة. #112078 (Groene AI).
  • أصلح عمليات الدمج والتعديل عند تمكين فهرس الحدين الأدنى والأقصى على مستوى الجزء للعمودين _block_number و_block_offset. #109281 (Mikhail Artemenko).
  • أصلح حالات فشل INSERT في جداول DeltaLakeLocal أو deltaLake التي كانت تترك ملف بيانات غير مُنهى بعد بدء الكتابة. #109328 (Groene AI).
  • أصلح تسرّب بيانات الاعتماد في SHOW CREATE وsystem.query_log وسجلات الخادم ومخرجات EXPLAIN الخاصة بـ s3/s3Cluster والمحركات المعتمدة على S3 وBACKUP ... TO S3 ووسائط الأسرار لدوال encrypt وdecrypt وHMAC المُنشأة من تعبيرات أو دوال SQL معرّفة من المستخدم. #109768 (Raúl Marín).
  • أصلح قراءة ملفات Parquet الكبيرة من إدخالات zip غير المضغوطة من نوع STORED عبر s3 وfile. #110495 (Eva Wuuu).
  • أصلح تعليق EXPLAIN ANALYZE في الاستعلامات التي تتضمن قراءة متدفقة FROM ... STREAM مخفية في استعلام فرعي أو تعبير الجدول الشائع أو عرض. تُرفض هذه الاستعلامات الآن باستخدام NOT_IMPLEMENTED، كما هي الحال بالفعل مع القراءات المتدفقة من المستوى الأعلى. #110935 (Groene AI).
  • ارفض المتجهات التي يفيض مقدارها التربيعي إلى ما لا نهاية عند استخدام فهرس vector_similarity مع تكميم i8. في السابق، كانت هذه المتجهات تُنتج بيانات غير صالحة دون إصدار أي تنبيه. #111085 (Groene AI).
  • نفّذ fsync لملفات فهرس النصوص الخاصة بجزء مدموج أو مُجسّد عند تعيين min_rows_to_fsync_after_merge أو min_compressed_bytes_to_fsync_after_merge أو fsync_part_directory. في السابق، كانت هذه الملفات الوحيدة في الجزء التي لا تُزامَن، لذا كان انقطاع الطاقة مباشرة بعد الدمج قد يترك جزءًا مُثبتًا لكنه معطوبًا، ما قد يؤدي إلى فقدان البيانات. #111335 (Groene AI).
  • أصلح التحقق من المسارات بالنسبة إلى user_files. #111442 (Alexander Tokmakov).
  • إصلاح فشل SYSTEM REFRESH أحيانًا في استهلاك البيانات المتراكمة في قائمة الانتظار من جدول RabbitMQ متوقف. تنتظر عملية التحديث الآن بدء حلقة تسليم AMQP قبل استهلاك دورة البث الوحيدة خارج الترتيب. #111480 (Groene AI).
  • قصر الوصول إلى الكائنات المحلية على المسار user_files. #111483 (Konstantin Vedernikov).
  • إصلاح segfault ناتج عن وصول إلى الذاكرة خارج حدودها عند إلغاء تسلسل حالة دالة تجميعية مشوهة تحتوي على قيمة String. تُتحقق هذه الحالات الآن ويُرفض غير الصالح منها. #111606 (Miсhael Stetsyuk).
  • إصلاح تجاوز سعة عدد صحيح أثناء تحليل system.zookeeper_info. #111629 (Kseniia Sumarokova).
  • إصلاح NOT_FOUND_COLUMN_IN_BLOCK عندما يرشّح استعلام FINAL حسب عمود من مفتاح الفرز غير موجود في قائمة SELECT ويُنقل المرشح إلى PREWHERE، على سبيل المثال SELECT s FROM t FINAL WHERE k GROUP BY s مع optimize_move_to_prewhere_if_final = 1. #111721 (Groene AI).
  • إصلاح INSERT المقسّم إلى DeltaLake مع allow_experimental_delta_lake_writes = 1 الذي كان يفسد قيم الأقسام التي تحتوي على محارف مسار ويرفض قيم الأقسام NULL. تُرمَّز قيم الأقسام الآن بترميز النسبة المئوية ضمن مقطع مسار واحد، وتُكتب قيم NULL أو السلاسل الفارغة بوصفها __HIVE_DEFAULT_PARTITION__ مع إدخال partitionValues بقيمة null. #111793 (Groene AI).
  • إصلاح استثناء وتخطي بيانات بصمت عند قراءة عمود فرعي ديناميكي عبر جدول Buffer. #111948 (Alexey Milovidov).
  • إصلاح فقدان clickhouse-client لقاعدة البيانات الحالية بعد USE {db:Identifier}. إذا اضطر العميل إلى إعادة الاتصال لاحقًا، كان يبدّل الجلسة بصمت إلى قاعدة البيانات default. #111982 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR (Type mismatch when building statistics for column) أثناء عمليات mutation في MergeTree بعد أن يغيّر ALTER MODIFY COLUMN يقتصر على البيانات الوصفية نوع عمود يحمل إحصاءات. يُعاد الآن حساب إحصاءات الأعمدة التي تعيد عملية mutation كتابتها فعليًا، بينما تحتفظ الأعمدة غير المعدلة بإحصاءاتها الحالية. #112009 (Groene AI).
  • إصلاح قراءات جدول Paimon التي كان يمكن أن تفشل أثناء استبدال تلميح snapshot/LATEST القابل للتغيير بالتزامن. تُتجاهل الآن التلميحات غير الصالحة أو القديمة، ويُحمَّل snapshot من الكتالوج بدلًا من ذلك. #112010 (JIaQi Tang).
  • إصلاح قراءة ملفات GeoParquet وArrow وArrowStream التي يستخدم عمود الهندسة المُرمَّز بـ WKT فيها كلمة مفتاحية للنوع بأحرف غير كبيرة مثل point(1 2)، أو حاوية فارغة مثل LINESTRING EMPTY أو POLYGON(). يصلح هذا أيضًا إعادة قراءة الملفات التي تخزّن مخرجات wkt لهندسة فارغة. #112020 (Groene AI).
  • إصلاح عدم تطبيق تجاوزات الإعدادات على مستوى الاستعلام على النسخ الأصلي لـ Azure. #112037 (Smita Kulkarni).
  • إصلاح إعادة query_masking_rules كتابة نوع عمود EPHEMERAL، ما قد يؤدي إلى أن يخزّن CREATE TABLE نوعًا خاطئًا أو يفشل. #112048 (Alexey Milovidov).
  • لم تعد معاملات دوال الجدول تقبل حالات التجميع، إذ كانت تؤدي سابقًا إلى خطأ منطقي لأن هذه المعاملات غير مدعومة. يغلق #112085. #112087 (Pedro Ferreira).
  • إصلاح النتائج الخاطئة في JOIN الذي يحتوي تعبير ON فيه على اقتران ثابت، مثل ON l.id = r.id AND CAST(NULL AS Nullable(UInt8)). #112155 (Vladimir Cherkasov).
  • إصلاح النتائج الخاطئة لعمليات البحث hasAllTokens وغيرها من عمليات بحث فهرس النصوص متعددة الرموز في البُنى التي لا تستخدم simdcomp، مثل aarch64، عندما يكون text_index_posting_list_apply_mode = 'lazy'. #112178 (Groene AI).
  • إصلاح النتائج الخاطئة عند استدعاء عرض مُعلَّم بمعاملات بوسيطة ليست تعيينًا بصيغة parameter = value. تُرفض هذه الاستدعاءات الآن باستخدام UNKNOWN_QUERY_PARAMETER في مساري التنفيذ كليهما. #112194 (Groene AI).
  • إصلاح العروض المُعلَّمة بمعاملات التي يستخدم متن SELECT فيها INTERSECT أو EXCEPT أو سلسلة UNION تمزج بين UNION DISTINCT وUNION ALL، إذ كانت تُصنَّف خطأً كعروض عادية، ما جعل بياناتها الوصفية غير قابلة للتحميل. #112211 (Groene AI).
  • إصلاح استنتاج المخطط لعائلة TSV الذي كان يستنتج String للقيم العشرية المكتوبة بصفر بادئ، مثل 0.0 أو 0.5، ويعامل هذا الصف الأول كرأس. كما أُصلح TSKV الذي كان يستنتج نوعًا رقميًا لقيمة مرمَّزة بتسلسل هروب مثل x=1\x2E5. يغلق #112105. #112226 (Groene AI).
  • إصلاح system.s3_queue_settings الذي كان يبلّغ عن قيم غير صحيحة لـ bucketing_mode وpartitioning_mode وpartition_regex وpartition_component. #112300 (Bharat Nallan).
  • إصلاح النتائج الخاطئة، ومخرجات ORDER BY المرتبة بشكل غير صحيح، واستثناءات BAD_TYPE_OF_FIELD عندما يكون المفتاح الأساسي Array أو Tuple ويطبّق الاستعلام عليه plus أو minus أو multiply أو divide أو intDiv. #112339 (Groene AI).
  • إصلاح التنفيذ عن بُعد للاستعلامات التي تحتوي على PASTE JOIN، مثلًا عبر جدول Distributed أو دالة الجدول *Cluster. لم يعد ClickHouse ينسّق الاستعلام بالصياغة غير الصالحة ALL PASTE JOIN. #112404 (Groene AI).
  • إصلاح LOGICAL_ERROR (Invalid number of rows in Chunk) في JoiningTransform لـ LEFT JOIN ذي مفاتيح يمنى فريدة، وشرط ON مختلط، وقيمة صغيرة لـ max_joined_block_size_rows. #106928 (Groene AI).
  • تم إصلاح العمود الافتراضي _tags لمحرك الجداول S3Queue: كان مُعلنًا عنه لكنه لم يُملأ مطلقًا، لذا كان SELECT _tags يعيد دائمًا خريطة فارغة. ويعيد الآن وسوم الكائن، كما يفعل محرك S3 ودالة الجدول s3. #108676 (Groene AI).
  • إصلاح فقدان بيانات عمود لا يحتوي على تعبير افتراضي عند تنفيذ عملية دمج بالتزامن مع ALTER TABLE... RENAME COLUMN، أو عندما تكون قيم العمود الوحيدة ناتجة من UPDATE خفيف. إذ كان يمكن إسقاط العمود من الجزء المدمج، فتُقرأ جميع قيمه لاحقًا على أنها NULL. #109356 (Groene AI).
  • إصلاح إسقاط فهارس التخطي من جزء بيانات (أو فشل CHECK TABLE بالخطأ UNEXPECTED_FILE_IN_DATA_PART) بعد طفرة تعيد كتابة الجزء بالكامل، مثل ALTER TABLE... DROP COLUMN لعمود MATERIALIZED، في جزء Wide. #109616 (Groene AI).
  • تم إصلاح خطأين في مسار DateTime64 للدالتين toUTCTimestamp/fromUTCTimestamp (والاسمين المستعارين to_utc_timestamp/from_utc_timestamp) وtoTime64. الأول هو تجاوز عدد صحيح موقّع قرب حد Int64 (ويُحسب الآن باستخدام Int128 ويُقيَّد بالنطاق القابل للتمثيل). والثاني نتيجة خاطئة للقيم الكسرية السالبة قرب حد إزاحة المنطقة الزمنية: إذ كان تقسيم الثواني يقتطع باتجاه الصفر، فتفحص timezoneOffset() الثانية التالية وقد تختار الجانب الخطأ من تغيير التوقيت الصيفي/الإزاحة. #109738 (Groene AI).
  • إصلاح خطأ منطقي (“Cannot determine row level filter; 0 columns deleted, 0 columns added”) عند القراءة من جدول Merge كان جدوله الفرعي يملك سياسة صف يكون عامل تصفيتها عمودًا موجودًا فقط (مثلًا CREATE ROW POLICY... USING flag). #109843 (Groene AI).
  • تم إصلاح خطأين يظهران عند تشغيل استعلام يحتوي على GROUP BY GROUPING SETS (أو استعلام فرعي قياسي أو استعلام فرعي لطفرة يتضمنه) مع force_aggregation_in_order = 1: الخطأ Trying to get name of not a column: ExpressionList في المحلل القديم (enable_analyzer = 0)، والخطأ Memory bound merging of aggregated results is not supported for grouping sets. لاستعلام موزع مع enable_memory_bound_merging_of_aggregation_results = 1 في المحلل. #109862 (Groene AI).
  • إصلاح تحليل القيمتين الرقميتين 1/0 كقيم Bool داخل أنواع الحاويات (مثل Array(Bool) وTuple(Bool,...)). سابقًا، كان [1,0] يفشل بالخطأ CANNOT_READ_ARRAY_FROM_TEXT، بينما كان [true,false] يعمل. #109976 (Groene AI).
  • تم إصلاح خطأ ILLEGAL_COLUMN غير صحيح صادر عن ALTER TABLE... ADD COLUMN IF NOT EXISTS عندما يكون العمود موجودًا بالفعل وقت التطبيق. كان ذلك يحدث عند إضافة العمود نفسه مرتين باستخدام IF NOT EXISTS في تعليمة واحدة، أو عندما يضيف ALTER متزامن العمود بين مرحلتي التحضير والتطبيق. #110080 (Groene AI).
  • تم إصلاح نتيجة خاطئة كانت فيها length (وبُعد QBit) لعمود FixedString تعيد 0 بدلًا من الحجم الثابت N عند استخدام النسخ المتماثلة المتوازية، عندما يتضمن الاستعلام عامل تصفية انتقائيًا. #110427 (Groene AI).
  • تم إصلاح فقدان flipCoordinates للنوع Geometry: إذ أصبحت نتيجة تمرير وسيطة من النوع Geometry هي Geometry مجددًا بدلًا من Variant(...) الأساسي، ما يتيح تمريرها مباشرةً إلى دوال مثل areaCartesian. #110694 (Groene AI).
  • تم إصلاح تغيّر نتائج الاستعلامات بسبب optimize_injective_functions_in_group_by مع GROUP BY GROUPING SETS وGROUP BY... WITH TOTALS. يوثَّق هذا الإعداد على أنه لا يغيّر النتائج، لكن إزالة دالة حقنية لمفتاح تجميع كانت تنتج قيمة خاطئة (أو تحذف صفًا) للصفوف التي لا يكون فيها ذلك المفتاح ضمن المجموعة المجمَّعة (مجموعة غير عضو في GROUPING SETS) أو لصف WITH TOTALS. وقد تتطابق القيمة الخاطئة مع قيمة مفتاح فعلية، مما يجعل صف التجميع الفائق غير قابل للتمييز عن مجموعة فعلية ضمن مجموعة النتائج نفسها. #110721 (Groene AI).
  • أصبحت القيم الرقمية 1/0 عند تحليل JSON كـ Bool تراعي إعداد allow_special_bool_values. سابقًا، كانت مدخلات JSON مثل {"v":1} لـ Variant(Bool, UInt32) تُقرأ كـ Bool حتى مع allow_special_bool_values_inside_variant = 0، لأن محللات JSON لـ Bool كانت تتجاهل الإعداد ولأن لـ Bool أولوية أعلى عند إلغاء تسلسل Variant من أنواع الأعداد الصحيحة. #110835 (Groene AI).
  • تم إصلاح خطأ منطقي block.rows() == getRows() (قراءة خارج الحدود وتعطل إزالة تكرار عمليات الإدراج في إصدارات الإصدار) عند مرور INSERT عبر عرض مادي تابع يكون هدفه Alias ويغيّر استعلامه الداخلي عدد الصفوف، مع وجود جدول لإزالة التكرار يمكن الوصول إليه بعد الاسم المستعار. #111103 (Alexey Milovidov).
  • تم إصلاح خطأ منطقي Block structure mismatch (في إصدارات التصحيح وsanitizer) وخطأ Illegal types of arguments في عمليات المجموعات على أعمدة لحالات تجميع متوافقة (مثل quantileState وquantilesState(0.9)) متداخلة داخل أعمدة حاوية مثل Tuple أو Array أو Map أو Nullable أو Variant. #111191 (Alexey Milovidov).
  • تم إصلاح DISTINCT مع LIMIT/OFFSET مرتّب، الذي كان يعيد صفوفًا خاطئة عندما لا يتمكن تلميح حد الإيقاف المبكر لـ DISTINCT من تقييد بداية النتيجة: LIMIT سالب (كان يعيد البداية بدلًا من النهاية)، أو LIMIT/OFFSET كسري (لا يُحسم الكسر إلا بعد قراءة كاملة)، أو OFFSET دون LIMIT (كانت تُحذف النهاية بعد الإزاحة). على سبيل المثال، كان SELECT DISTINCT intDiv(x, 100) FROM t ORDER BY intDiv(x, 100) LIMIT -1 على جدول متعدد الأجزاء يعيد أصغر قيمة مميزة بدلًا من أكبرها. #111326 (Groene AI).
  • تم إصلاح نتائج خاطئة عندما يحتوي الاستعلام على فهرس تخطي set ومسند بالشكل (x AND <null-value>) OR y، حيث تنتج NULL من دالة (مثل toInt64OrNull('x') أو nullIf(1, 1) أو CAST(NULL AS Nullable(Int64))). كانت هذه القيمة تُغلَّف بواسطة __bitWrapperFunc وتنشر NULL بدلًا من قناع “غير معروف”، ما يسمح لفهرس set باستبعاد حبيبات تتطابق فعليًا، فيعيد الاستعلام صفوفًا أقل مما ينبغي. #111604 (Groene AI).
  • تم إصلاح DELETE/UPDATE على جدول Iceberg، الذي كان يحذف بصمت صفوفًا خاطئة (أو يطرح NOT_FOUND_COLUMN_IN_BLOCK) عندما يحتوي الجدول على ملفات بيانات كُتبت قبل وبعد ALTER TABLE... ADD COLUMN مع تمكين optimize_move_to_prewhere. #111693 (Groene AI).
  • تم إصلاح LOGICAL_ERROR (“عدد الصفوف غير صالح في Chunk”) — وكذلك إجهاض ذي صلة بسبب تجاوز الحدود في البنيات المُحصّنة — عند استخدام ORDER BY ... WITH FILL ... INTERPOLATE على جدول Distributed يضم جزأين أو أكثر، أو عبر clusterAllReplicas، أو عبر النسخ المتماثلة المتوازية ذات المفاتيح المخصصة، بما في ذلك النتائج الفارغة. يُطبَّق WITH FILL الآن فقط على العقدة التي تنتج النتيجة النهائية، مما يصلح أيضًا تكرار صفوف الملء المُولَّدة عبر الأجزاء/النسخ المتماثلة. #111919 (Yakov Olkhovskiy).
  • الحفاظ على إمكانية استخدام randBinomial مع الاحتمالين الحديين 0 و1 لأي عدد من التجارب. #112021 (Alexey Milovidov).
  • إصلاح نتائج خاطئة ناتجة عن تلويث استعلام بحث متجهي لذاكرة التخزين المؤقت لشرط الاستعلام. كان استعلام SELECT... WHERE <condition> ORDER BY <distance function> LIMIT n على جدول ذي فهرس vector_similarity قد يسجل الحبيبات على أنها لا تطابق <condition>، مما يؤدي إلى أن يعيد استعلام SELECT... WHERE <condition> عادي لاحق على الجدول نفسه عددًا أقل من الصفوف بصمت. لم تعد قراءات البحث المتجهي تكتب في ذاكرة التخزين المؤقت لشرط الاستعلام. #112086 (Groene AI).
  • إصلاح خطأ كان يؤدي إلى قبول CREATE VIEW أو CREATE FUNCTION يستدعي تعريفه substr أو mid أو byteSlice بصيغة لا تستطيع قواعد substring تحليلها مجددًا، لكن البيانات الوصفية التي يكتبها ClickHouse له ليست SQL صالحة. تفشل قراءة هذا التعريف لاحقًا مع SYNTAX_ERROR، وعند بدء الخادم يتوقف تحميل البيانات الوصفية، لذلك لا يمكن للخادم البدء مطلقًا. أصبحت هذه التعريفات الآن قابلة للتحليل والكتابة مجددًا، وأصبحت ملفات البيانات الوصفية الحالية بصيغة substring(x, a, b, c) قابلة للقراءة مجددًا، بحيث يبدأ الخادم المتأثر دون تدخل يدوي. #112195 (Groene AI).
  • إصلاح جدول TimeSeries كانت بياناته الوصفية المحلية قد اختلفت عن Keeper، مما جعل استرداد النسخة المتماثلة في قاعدة بيانات Replicated يتعطل إلى الأبد، فلا تعود النسخة المتماثلة تخدم قاعدة البيانات وتظل معطلة بعد إعادة التشغيل. تُحذف الآن الجداول الداخلية لمثل هذا الجدول بينما لا تزال معاملة البيانات الوصفية للاسترداد متاحة، بدلًا من تأجيلها إلى مهمة خلفية لم تكن تستطيع تنفيذ DROP أصلًا. #112218 (Groene AI).
  • تم إصلاح قراءة عمود فرعي من عمود Nullable(Tuple(...)) يكون عنصره LowCardinality(T) غير قابل للقيم الخالية، عندما يقرأ الاستعلام نفسه أيضًا العمود الفرعي الأصلي. في جزء مضغوط، كان العمود الفرعي الأصلي يعيد قيمًا خاطئة، أو يفشل الاستعلام مع Unexpected return type from assumeNotNull، أو يُقتل الخادم بسبب تأكيد تحصين string_view، لأن العمود الفرعي المستخرج كان يُفك تسلسله في مخزن مؤقت LowCardinality(Nullable(T)) ثم تُشارك تدفقاته الفرعية مع قراءة العمود الفرعي الأصلي. #112232 (Groene AI).
  • تم إصلاح تعليق دائم للخادم على macOS ناتج عن فقدان pthread_rwlock لإشارات التنبيه عند تمكين محلل الاستعلامات بأخذ العينات (خطأ Apple FB24027930): يُستبدل pthread_rwlock الآن بتنفيذ متين في مواجهة الإشارات على Darwin. #112267 (Raúl Marín).
  • إصلاح تجاهل max_execution_time وKILL QUERY أثناء تقييم استعلام لـ geohashesInBox أو arrayFold أو sleep أو base58Decode أو h3PolygonToCells أو h3PolygonToCellsWithContainment. كان يمكن لمثل هذه الاستعلامات الاستمرار في التشغيل لدقائق بعد الإلغاء. يشمل ذلك الآن أيضًا التقييمات داخل التعبيرات المخزنة في البيانات الوصفية للجدول، مثل مفاتيح الفرز وفهارس التخطي ومفاتيح PARTITION BY. #112273 (Groene AI). #113456 (Groene AI).
  • يُصلح خطأً منطقيًا Cannot add step Expression to QueryPlan because it has incompatible header with root step JoinLazyColumnsStep في استعلام يستخدم FINAL ومرشح PREWHERE وLIMIT صغيرًا وmake_distributed_plan = 1، عندما تكون الأعمدة المحددة مرتبةً على نحو يختلف عن ترتيب أعمدة الجدول. إذ كانت المادية الكسولة تستبدل عقدةً في الخطة دون الاحتفاظ بترويسة مخرجاتها، مما يجعل خطة الاستعلام غير متسقة. #112303 (Groene AI).
  • يُصلح كتابة جداول Iceberg التي يتضمن مخططها Tuple متداخلًا داخل Tuple آخر. إذ كانت البيانات الوصفية المنشورة للجدول تستبدل أسماء حقول الـ Tuple الداخلي بأسماء موضعية 1، 2،…، ولذلك كان INSERT يفشل بالخطأ INCORRECT_DATA عند استخدام تنسيق Parquet الافتراضي، ولم يكن بالإمكان قراءة العمود مجددًا باستخدام Avro. #112480 (Groene AI).
  • يُصلح الخطأ ATTEMPT_TO_READ_AFTER_EOF عند دمج أجزاء تحتوي على فهرس نصي إذا كان أحد الأجزاء المدمجة فارغًا، مثلًا بعد عملية mutation حذفت جميع صفوف الجزء. #112490 (Anton Popov).
  • يُصلح نتائج غير صحيحة وخطأً منطقيًا عندما تأتي وسيطة يجب أن تكون ثابتة، مثل مقياس toDecimal32 أو المنطقة الزمنية لـ toDateTime، من استعلام فرعي قيَمي مع استخدام المحلل القديم. إذ كانت هذه الوسيطة تُحلل كما لو أن قيمتها صفر أو فارغة، فتختلف النتيجة المحسوبة عن نوع النتيجة المُعلن، ويؤدي CREATE VIEW وCREATE MATERIALIZED VIEW إلى حفظ نوع عمود خاطئ. #112492 (Groene AI).
  • يُصلح LOGICAL_ERROR (“Part… contains column… that is absent in table…”) عندما تُجري نسخة متماثلة من ReplicatedMergeTree عملية mutation على جزء جلبته من نسخة متماثلة أخرى قبل تطبيق ALTER... ADD COLUMN المعلّق الخاص بها. تُؤجَّل عملية mutation هذه الآن حتى يُطبَّق تغيير البيانات الوصفية. #112510 (Groene AI).
  • أصلح نتائج استعلام غير صحيحة عند استخدام GROUP BY مع ORDER BY وarrayJoin في الإسقاط. #101775 (Yash ).
  • يُصلح تعطل الخادم (وصول خارج الحدود) في S3Queue/AzureQueue مع enable_hash_ring_filtering = 1 عندما تحتوي دفعة على ملف غير قابل للمعالجة، ويفشل في الوقت نفسه طلب Keeper لتعيين الدفعة بحالة processing. #108977 (Groene AI).
  • يُصلح خطأً منطقيًا Stream <col>.variant_discr... is not found (توقف الخادم في إصدارات debug وsanitizer) عندما يغيّر ALTER TABLE... MODIFY COLUMN عمودًا إلى نوع ذي أعمدة فرعية ديناميكية (مثلًا من Variant إلى Dynamic) في جدول ذي أجزاء Wide، ثم يُقرأ الجزء أو يُدمج لاحقًا. #110204 (Groene AI).
  • يُصلح تجاوز سعة عدد صحيح موقّع (UBSan) عند تحويل قيمة قصوى من DateTime64 (مثل INT64_MIN) إلى Time/Time64 في منطقة زمنية ذات إزاحة سالبة. #110451 (Groene AI).
  • أصلح مشكلة تجعل جدول MergeTree يحتوي على إسقاط _part_offset أو إسقاط بترتيب commit غير قابل للإرفاق بشكل دائم بعد تعطيل allow_part_offset_column_in_projections أو allow_commit_order_projection وفصل الجدول أو إعادة تشغيل الخادم. هذان الإعدادان يمثلان بوابتين عند وقت CREATE، لذا لم يعد يُعاد التحقق منهما عند ATTACH. #110570 (Groene AI).
  • مع analyzer_compatibility_join_using_top_level_identifier = 1، أصبح بالإمكان الآن حلّ معرّف في JOIN... USING باستخدام اسم مستعار مُعرّف لتعبير فرعي ضمن قائمة SELECT (مثلًا، SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id))، بما يتوافق مع سلوك المحلّل القديم. في السابق، لم تكن تُؤخذ في الحسبان إلا الأسماء المستعارة للإسقاطات في المستوى الأعلى، وكانت هذه الاستعلامات تفشل باستثناء UNKNOWN_IDENTIFIER حتى عند تمكين هذا الإعداد. ويُعرض الآن أيضًا تلميح الخطأ الذي يقترح هذا الإعداد عندما يكون الاسم المستعار المطابق متداخلًا. #110739 (Dmitry Novik).
  • يُصلح مشكلة كانت تتيح للطلبات غير الموثَّقة أن تتسبب في قيام ClickHouse بحل أسماء المضيفين الواردة في ترويسات عناوين العملاء المُمرَّرة. يقبل ClickHouse الآن عناوين IP رقمية فقط من هذه الترويسات. وتُتجاهل القيم غير الصالحة عند إسناد الحصص إلى العناوين المُمرَّرة، من دون إجراء حل DNS. وعند تمكين auth_use_forwarded_address، تُرفض العناوين المُمرَّرة غير الصالحة أثناء المصادقة. وتُسجَّل حالات الرفض على مستوى التصحيح. #111060 (Dmitriy Borisenko).
  • يُصلح NOT_FOUND_COLUMN_IN_BLOCK عندما تشير سياسة صفوف وadditional_table_filters إلى العمود نفسه الذي لا يختاره الاستعلام لولا ذلك. #111099 (Groene AI).
  • يُصلح خطأ UNKNOWN_IDENTIFIER للأعمدة المؤهَّلة باسم تعبير الجدول الشائع (cte_name.column) في الاستعلامات المخزنة ضمن العروض عند تمكين المحلّل. #111386 (Dmitry Novik).
  • يُصلح خطأ LOGICAL_ERROR (Got read request from replica N for unknown stream...) كان قد يؤدي إلى إيقاف الخادم عند القراءة باستخدام النسخ المتماثلة المتوازية، إذا أُجيب عن الاستعلام بالكامل بواسطة تحسين إسقاط على البادئ (عدد دقيق، أو عدد minmax، أو إسقاط تجميعي/عادي مخزَّن لا يختار أي نطاقات). #111689 (Groene AI).
  • أُصلح تجاوز سعة لعدد صحيح موقّع في التحميل الزائد ذي الوسائط الثلاثة للدالة toStartOfInterval: إذ كانت الدالة، عند وجود وسيطة origin قرب الحد الأدنى لـ Int64، تُرجع قيمة ملتفة بدلًا من الإبلاغ عن خطأ. #112045 (Alexey Milovidov).
  • يُصلح استثناء LOGICAL_ERROR (Block structure mismatch in joined block stream) في عملية ربط متعددة الجداول، حيث لا ينتج الربطان الفرعيان أي أعمدة إخراج، مثل SELECT count() FROM t1, t2, t3, t4 WHERE (t1.b = t2.b) AND (t3.a = t4.a) مع ضبط query_plan_optimize_join_order_limit على 0 أو 1. #112205 (Groene AI).
  • أُصلحت دالة الجدول values التي كانت تعرض ثابت Bool غير حرفي (مثل CAST(true, 'Nullable(Bool)')) مُدرجًا في عمود String/نصي على هيئة 1/0 بدلًا من true/false. #112308 (Yakov Olkhovskiy).
  • يُصلح LOGICAL_ERROR (partitions_count > 0) عند تقسيم أجزاء بيانات Iceberg التي أفرغتها عمليات الحذف حسب الموضع، مثلًا أثناء ضغط جدول Iceberg مُقسَّم يحتوي على ملفات بيانات محذوفة بالكامل. #112432 (Pedro Ferreira).
  • تم إصلاح استنتاج المخطط الذي كان يقترح نوعًا رقميًا لقيم نصية يتعذر على محلل القيم قراءتها مجددًا. كان الاستنتاج يقبل أسًّا غير مكتمل (1e+) أو مانتيسا مفقودة (.) أو إشارة مكررة (++inf)، ثم يرفضها readFloatTextPrecise باستخدام CANNOT_PARSE_NUMBER عند قراءة المخطط المستنتج؛ وكان ذلك يؤدي إلى خطأ عند INSERT في عمود Dynamic. يتحقق الاستنتاج الآن من الرقم باستخدام المحلل الذي يستخدمه القارئ فعليًا. ويزيل هذا أيضًا حالة كان فيها النوع المستنتج يعتمد على max_read_buffer_size، ويتيح لصيغ الأس الصالحة ذات الأصفار البادئة، مثل 0e5، استنتاج Float64 في TSV، كما هو الحال بالفعل في CSV. يتبع #112226 ويغلق الجزء المتعلق بالأس من #112105. #112453 (Groene AI).
  • الإبلاغ عن الموضع الصحيح للأخطاء في استعلامات PromQL. #112494 (Minh Vu).
  • إصلاح خطأ LOGICAL_ERROR (Cannot add transform Resize to Pipes because it has no outputs) الذي يحدث عند تشغيل استعلام يجمع البيانات عبر عنقود مع serialize_query_plan = 1 والنسخ المتماثلة المتوازية المستندة إلى الخطة، بسبب قيام خطوة الدمج بتغيير حجم خط المعالجة إلى صفر من التدفقات. #112506 (Groene AI).
  • إصلاح تجاوز سالب غير موقّع في التحقق من طول اسم الجدول كان يسمح بإنشاء جدول لا يمكن حذفه أبدًا. عندما بلغ اسم قاعدة البيانات المُهرَّب 214 بايتًا، حدث التفاف في الحد المحسوب لاسم الملف metadata_dropped، لذا تم قبول CREATE TABLE وفشل DROP TABLE أو DROP DATABASE اللاحق برسالة File name too long. يُرفض الآن هذا الاسم باستخدام ARGUMENT_OUT_OF_BOUND، وهو الخطأ نفسه الذي كان يُعاد بالفعل قبل ذلك الحد مباشرةً. #112527 (Groene AI).
  • إصلاح الاستثناء Context has expired عند استخدام getClientHTTPHeader داخل استعلام فرعي. #112533 (Alexey Milovidov).
  • تم إصلاح الرفض غير الصحيح من s3_allow_server_credentials_in_user_queries لـ extra_credentials(role_arn = '...') المقدمة ضمن الاستعلام. أصبح تولّي دور عبر STS مع تحديد الدور صراحةً مسموحًا به دائمًا، لأنه لا يكشف بيانات اعتماد الخادم نفسه للاستعلام، ولأنه الطريقة الموثقة لمنح الوصول إلى حاوية S3 خاصة. #112603 (Raúl Marín).
  • إصلاح فرض رسوم زائدة على عدادات القراءة (read_rows، read_bytes، ProfileEvents['SelectedRows']، ProfileEvents['SelectedBytes']) وحصص READ_ROWS وREAD_BYTES للاستعلامات التي يكتب فيها ORDER BY بيانات مؤقتة إلى القرص. كانت الصفوف المعاد قراءتها من الملفات المؤقتة للفرز الخارجي تُحتسب مجددًا كقراءات من المصدر، لذا كان الاستعلام الذي يكتب بيانات مؤقتة إلى القرص يبالغ في الإبلاغ عما قرأه وقد يُرفض باستخدام QUOTA_EXCEEDED رغم بقائه ضمن حصته. #112645 (Groene AI).
  • إصلاح جدول Iceberg بتنسيق كتابة Avro كان يُسلسل حقلًا مُعلنًا عنه بـ "required": false ونوعه list أو map أو struct على أنه مطلوب، من دون اتحاد ["null", T]، مما كان يجعل مخطط ملف البيانات نفسه لا يتوافق مع بيانات تعريف الجدول، ويرى قارئو Iceberg الآخرون الحقل مطلوبًا. يُكتب هذا الحقل الآن كاتحاد ["null", T] الذي تستخدمه مواصفة Iceberg للحقل الاختياري. #112648 (Groene AI).
  • إصلاح مشكلة في جداول DeltaLake كانت تؤدي إلى إرجاع عدد قليل جدًا من الصفوف عندما يحتوي مسند WHERE على تعبير فرعي لا يستطيع مترجم المسندات في delta-kernel التعامل معه ويقع ضمن NOT. يُبلّغ الآن عن هذا التعبير الفرعي إلى delta-kernel باعتباره مسندًا غير معروف صراحةً بدلًا من اعتباره نهاية مكرّر العناصر الفرعية، وهو ما كان يؤدي سابقًا إلى اقتطاع الاقتران المحيط بصمت. #112652 (Groene AI).
  • إصلاح تلف في الكومة كان قد يتسبب في تعطل الخادم عند إيقاف التشغيل، وينجم عن قيام التابع constAccessRights::getFilters بتعديل شجرة لحقوق الوصول تتشاركها استعلامات متزامنة. #112692 (Groene AI).
  • إصلاح خطأ منطقي في تنسيق الاستعلامات عندما لا تتضمن عبارة ARRAY JOIN أي تعبيرات. تُرفض هذه العبارة الآن أثناء التحليل باستخدام SYNTAX_ERROR، على غرار USING الفارغة، بدلًا من قبولها وتنسيقها كنص لا يمكن تحليله مجددًا. #112699 (Groene AI).
  • إصلاح تعليق استعلام أثناء التنفيذ المحلي لخطط الاستعلامات الموزعة (distributed_plan_execute_locally = 1): إذ كان قارئ التبادل داخل الذاكرة قد يحجب خيط pipeline الوحيد قبل بدء المصادر التي تنتج بياناته. #111762 (Alexander Gololobov).
  • إصلاح حقول Iceberg المعلنة باستخدام "required": false والتي يكون نوعها list أو map أو struct، إذ كانت تُكتب كـ REQUIRED في تذييل Parquet. تُكتب هذه الحقول الآن كـ OPTIONAL، بما يتوافق مع مخطط Iceberg المنشور والقارئات الأخرى. #112669 (Groene AI).
  • إصلاح استخدام الكومة بعد تحريرها في منفّذ pipeline، كان قد يتسبب في تعطل الخادم عندما يزيل استعلام معالجات أثناء وقت التشغيل (مثل FINAL مع القراءات الكسولة أو الفرز الخارجي)، وقد اكتشفه AST fuzzer. #111017 (Groene AI).
  • إصلاح استخدام بعد التحرير (خطأ تجزئة) عندما يزيل استعلام ذو لقطة تخزين مشتركة (الإعداد enable_shared_storage_snapshot_in_query) أجزاء بيانات من اللقطة — مثل استعلام فرعي متدفق يقرأ جدول MergeTree نفسه الذي يقرأه جزء آخر من الاستعلام بالتزامن. #111192 (Alexey Milovidov).
  • رفض الاستخدامات غير المدعومة لأعمدة AggregateFunction في تعبيرات TTL عند تنفيذ CREATE TABLE (مثل TTL toDateTime(state)) بدلًا من الفشل لاحقًا أثناء تنفيذ TTL باستخدام ILLEGAL_TYPE_OF_ARGUMENT. يشمل ذلك أيضًا الحالات الموجودة ضمن بدائل Variant وقيم Dynamic. وما زالت المستهلكات الصالحة المراعية للحالة، مثل finalizeAggregation، مقبولة. #107366 (Ria Khatoniar).
  • إصلاح LOGICAL_ERROR ‏(CTE '...' does not have query tree, but was not planned yet) عندما يُشار إلى CTE ‏MATERIALIZED من أكثر من موضع في شجرة الربط (مثل استعلامين فرعيين مربوطين، أو استعلام فرعي مربوط واستعلام فرعي قيَمي في WHERE) ضمن استعلام على جدول Distributed. يُنفّذ الاستعلام الآن بدلًا من إثارة الاستثناء (إذ كان يؤدي إلى إيقاف الخادم في إصدارات debug/sanitizer). #108924 (Groene AI).
  • الحفاظ على الترتيب الأصلي للمفاتيح في تسلسل Map المقسّم إلى حاويات لإصلاح عمليات المقارنة التي تعتمد عليه. #109178 (Pavel Kruglov).
  • تم إصلاح تحوّل made_current_at في system.iceberg_history إلى 1970-01-01 للقطة محتفَظ بها بعد تنفيذ ALTER TABLE... EXECUTE expire_snapshots على جدول Iceberg. كما تم إصلاح عدم إرجاع system.iceberg_history أي صفوف لجدول لا تحتوي بياناته الوصفية على snapshot-log. #111781 (Groene AI).
  • تم إصلاح محاولة تحليل نص من نوع FixedString كانت تترك بايتات مضافة جزئيًا في العمود عند فشل التحليل، ما قد يسبب الخطأ المنطقي Sizes of nested column and null map of Nullable column are not equal أثناء تسلسل أعمدة Variant/Array/Nullable، أو ينتج بايتات نتيجة مزاحة بصمت. #111908 (Groene AI).
  • تم إصلاح تجاهل replaceOne وreplaceAll وreplaceRegexpOne وreplaceRegexpAll لـ max_execution_time وKILL QUERY. يتحقق الاستدعاء الواحد الآن من الإلغاء أثناء تنفيذه، بحيث يتوقف الاستبدال طويل التشغيل على قيمة كبيرة أو عدد كبير من الصفوف بدلًا من شغل خيط خادم حتى اكتماله. لا يمكن لهذا الاستدعاء إرجاع نتيجة جزئية، لذا فإنه في ظل timeout_overflow_mode = 'break' يبلّغ عن تجاوز الموعد النهائي كخطأ: دائمًا عند الطي الثابت، وفي خط الأنابيب كلما وصلت العملية إلى نقطة التحقق هذه قبل فحص المنفّذ بين الكتل، الذي يواصل إيقاف الاستعلام بصمت. #112483 (Groene AI).
  • تم إصلاح خطأ منطقي وسجل تبعية خاطئ عندما يشير متن VIEW عادي إلى جدول أو قاموس عبر معامل استعلام، كما في CREATE VIEW v AS SELECT x FROM {db:Identifier}.t. لم يعد هذا العرض يسجل تبعية مرجعية لجدول بالاسم نفسه في قاعدة البيانات الحالية، لذا أصبح بالإمكان حذف الجداول غير المرتبطة مجددًا. #112704 (Groene AI).
  • تم إصلاح قراءة بنوع خاطئ لعمود فرعي لعنصر Nested حُذف عموده ثم أُضيف مجددًا. كان اختيار هذا العمود الفرعي مع العمود الأصل الخاص به يعيد العنصر كاملًا في موضع العمود الفرعي، بينما كانت الكتلة لا تزال تعلن نوع العنصر، ما كان ينتج قيمًا عشوائية في إصدارات الإنتاج وخطأً منطقيًا في إصدارات التصحيح وsanitizer. #112769 (Groene AI).
  • تم إصلاح الخطأ Cannot read all data of type FixedString عند قراءة العمود الفرعي product_quantization_codebook لعمود يستخدم برنامج الترميز Quantized('product',...). يُكتب دفتر الشيفرات الخاص بكل جزء بعد بيانات جميع الحبيبات، ولذلك لا تحدّه العلامات، وقد تؤدي قراءة ينتهي نطاق علاماتها قبل العلامة النهائية للجزء إلى قراءته بشكل ناقص. #112818 (Alexey Milovidov).
  • تم إصلاح تعطل تجزئة وفساد صامت للبيانات عند تنفيذ INSERT في محرك File أو دالة الجدول file لإضافة بيانات إلى ملف غير فارغ بتنسيق لا يدعم الإضافة، مثل Avro. كانت الكتابة عبر واصف ملف أو مسار مقسّم تتجاوز الفحص القائم، لذا كانت بادئة التنسيق تُحذف ويُكتب ترويس ثانٍ بعد البايتات الموجودة، ما يجعل الملف غير قابل للقراءة. يُرفض الآن INSERT من هذا النوع بالخطأ CANNOT_APPEND_TO_FILE، كما هو الحال بالفعل مع مسار عادي. #112839 (Groene AI).
  • تم إصلاح ظهور الخطأ Context has expired من connectionId عند استخدامها داخل استعلام فرعي، وذلك بالتقاط معرّف اتصال العميل عند إنشاء الدالة. يغلق #112533. #112870 (ClickGap AI Bot).
  • أُصلح تحليل الأعداد الصحيحة التي لا تتسع في النوع الهدف في Poco::NumberParser، المستخدم لقراءة أرقام JSON. إذ كان هذا العدد يُحلَّل بصمت إلى قيمة خاطئة (مثلًا، كان 18446744073709551617 يصبح 1) بدلًا من رفضه، كما أن رقم UInt64 الذي يتجاوز الحد الأقصى لـ Int64 لم يكن يحتفظ بقيمته بعد التحويل ذهابًا وإيابًا عبر JSON الخاص بـ AST. #112904 (Alexey Milovidov).
  • أُصلح IS DISTINCT FROM لقيم Array وMap عند مقارنتها بـ NULL. يغلق #103042. #103162 (yanglongwei).
  • منع استنفاد إعادات المحاولة في DDL الموزع المنسوخ الذي ينفذه القائد من حظر استعلامات DDL اللاحقة باستخدام ON CLUSTER بشكل دائم. #108505 (Ahaan Limaye).
  • أُصلح LOGICAL_ERROR (“محاولة استخراج جزء من ChunkBuffer قبل انتهاء جميع المدخلات”) عند دمج عملية مجموعات (INTERSECT / UNION ALL / EXCEPT) لفروع تستخدم استعلامات فرعية مترابطة وcorrelated_subqueries_default_join_kind = 'left'. #108554 (Groene AI).
  • أصبح تحويل قيم الفاصلة العائمة خارج النطاق (BFloat16، Float32، Float64) وقيم UInt64 التي تتجاوز Int64::max() إلى DateTime وTime يتشبع بصورة موثوقة عند حدود النطاق على جميع المعماريات (إذ كانت نتيجة التحويل خارج النطاق تعتمد سابقًا على المعمارية وقد تلتف على x86-64)، وأصبحت القيم غير المنتهية (NaN، inf) تطرح استثناءً بدلًا من إنتاج نتيجة عشوائية. يُطبَّق الإصلاح نفسه على مسار التحويل من الفاصلة العائمة إلى Date في toDate وعلى تحويلات UInt64 والأعداد الصحيحة العريضة ((U)Int128، (U)Int256) إلى Date وDate32، التي كان يمكن أن تعيد يومًا سابقًا للعصر بدلًا من التشبع. كما أصبح تحويل الأرقام إلى Time يتشبع ضمن نطاق النوع لجميع أنواع المصادر الرقمية (إذ كانت القيم من المصادر غير الموقعة الضيقة أو مصادر الأعداد الصحيحة العريضة تُخزَّن سابقًا دون تقييد ولا تُقيَّد إلا عند طباعتها)، ولم يعد التحويل الدقيق إلى Time يرفض القيم السالبة التي يدعمها Time أو يشبع بصمت القيم التي لا تتسع فيه. ولم يعد التحويل الدقيق لعدد إلى Date32 (accurateCast، accurateCastOrNull) يشبع بصمت قيمة خارج النطاق أو غير منتهية، بل يطرح استثناءً أو يعيد NULL، كما كان يفعل مع Date وDateTime، بينما تعيد صيغ OrDefault القيمة الافتراضية لـ Date32 لمثل هذا الإدخال. وأصبح التحويل الدقيق لعدد ذي فاصلة عائمة غير صحيح إلى Date أو Date32 أو DateTime أو Time مرفوضًا بدلًا من اقتطاعه بصمت. أُصلحت أيضًا وثائق الدالة toDateTime32، التي كانت تعرض خطأً أمثلة toDateTime64 وتصف نطاق قيم DateTime64. #110459 (Alexey Milovidov).
  • أصبح ALTER TABLE... DETACH PARTITION/PART ينفذ الآن fsync للنسخة التي ينشئها ضمن detached/ (الشجرة الفرعية للجزء وسلسلة الدلائل حتى جذر القرص) عند تمكين إعداد fsync_part_directory للجدول، وذلك لكلٍّ من تخزين الأجزاء Full (الدليل) وPacked. سابقًا، لم يكن يُنفَّذ fsync للنسخة مطلقًا، بينما كان يُنفَّذ للجزء المغطي الفارغ الذي يزيل الصفوف من المجموعة النشطة؛ لذلك كان فقدان الطاقة مباشرة بعد الإقرار قد يؤدي إلى إتلاف البيانات المفصولة على btrfs (إذ تتراجع إدخالات دليل النسخة غير المتزامنة، مما يترك detached/ فارغًا ولا شيء لتنفيذ ATTACH عليه). يخضع ذلك لإعداد fsync_part_directory الحالي، ولا يتغير السلوك الافتراضي. #111426 (Groene AI).
  • إصلاح CREATE OR REPLACE الذي كان يترك الكائن المستبدَل باسم داخلي عندما لا يملك المستدعي صلاحية حذفه. #111466 (Nikolay Degterinsky).
  • إصلاح تعطل عند تنفيذ قراءة STREAM (enable_streaming_queries = 1) على جدول يحتوي على أكثر من قسم واحد ومُعرَّفة عليه سياسة صفوف. في إصدارات التصحيح والتنقية، كان يفشل بالخطأ المنطقي Filter column... not found in DAG outputs؛ وفي إصدارات الإنتاج، كان قد يؤدي إلى خطأ تجزئة. #111572 (Groene AI).
  • إصلاح count() في جداول Iceberg التي يكون ملخص لقطة الحالة فيها غير دقيق أو تالفًا: يستمد تحسين العد البسيط الآن أعداد الصفوف الدقيقة من ملفات البيان، ويلجأ إلى مسح فعلي عندما تجعل عمليات الحذف على مستوى الصف أعداد البيانات الوصفية غير دقيقة. كما يُصلح OPTIMIZE TABLE في Iceberg الذي كان يكتب أعداد قائمة البيانات الوصفية وسجل الأصل بشكل غير صحيح، ويجعل البيانات الوصفية totalBytes أكثر متانة أمام الملخصات التالفة. #111617 (Melvyn Peignon).
  • إصلاح عمود DEFAULT مفقود في جزء كان يُملأ بالقيمة الافتراضية للنوع بدلًا من تعبير DEFAULT عندما يُقسَّم شرط PREWHERE إلى عدة خطوات قراءة. يغلق #111757. #111795 (Yarik Briukhovetskyi).
  • إصلاح الخطأين المنطقيين Expected UInt64 column for __grouping_set, got BLOB وColumnBLOB should be converted to a regular column before usage في استعلام موزع يُنفَّذ على جزء مع تفعيل enable_parallel_blocks_marshalling (مُفعَّل افتراضيًا)، مثلًا عند استخدام GROUP BY GROUPING SETS على عنقود يتضمن نسخة متماثلة محلية، أو عند قراءة جدول Merge يمتد عبر جدول محلي وآخر موزع. لم تعد BlocksMarshallingStep تُضاف إلى الخطط التي تُستهلك كتلها ضمن العملية نفسها. #111997 (Groene AI).
  • تفشل العمليات الآن عند تحميل إحصاءات MergeTree تالفة بدلًا من تجاهل الخطأ. #112201 (Sergey Kuznetsov).
  • إصلاح خطأ منطقي عند استخدام PREWHERE على جدول Merge فوق جدول Merge آخر أو عرض مادي يختلف نوع أحد أعمدته. كما يُصلح تجاهل سياسة صفوف بصمت في الجداول التي تقرأ من خوادم بعيدة (جدول Distributed أو جدول يغلّف واحدًا)، مما قد يكشف صفوفًا كان يُفترض أن تخفيها السياسة؛ إذ تُرفض هذه الاستعلامات الآن بخطأ ILLEGAL_PREWHERE. عرّف هذه السياسات بدلًا من ذلك على الجداول المحلية الأساسية في كل خادم بعيد؛ لاحظ أن هذه السياسة لا تزال لا تُطبَّق على القراءات المُرسلة مع serialize_query_plan = 1، وهذا خطأ منفصل موجود مسبقًا. #112326 (Pedro Ferreira).
  • إصلاح connection_pool_max_wait_ms بحيث تعني قيمته الموثقة والافتراضية 0 مهلة انتظار لا نهائية. كان الاستعلام الذي يجد تجمّع الاتصالات ممتلئًا يعيد المحاولة في حلقة محكمة، مستهلكًا CPU ومسجلًا No free connections in pool. Waiting 0 ms. في كل تكرار. وينتظر الآن حتى يُعاد اتصال إلى التجمّع. يغلق #112053. #112380 (Groene AI).
  • إصلاح الفقدان الصامت لعمليات كتابة Iceberg المُقَرّ بها على HDFS: ينشر التزام Iceberg كل ملف بيانات وصفية جديد بعملية كتابة مشروطة، لكن HDFSObjectStorage كان يتجاهل الشرط ويجري استبدالًا عاديًا، لذا كان يُقَرّ بجميع الكتّاب المتزامنين بينما تصبح لقطة أحدهم غير قابلة للوصول. يرفض HDFS الآن الكتابة المشروطة بدلًا من ذلك، ولذلك تفشل الآن عمليات كتابة Iceberg المُدارة بواسطة التخزين على HDFS، بما فيها CREATE TABLE... ENGINE = IcebergHDFS(...) مع قائمة أعمدة صريحة. لا تتأثر القراءات. #112437 (Groene AI).
  • إصلاح قراءة خارج الحدود (تؤدي إلى تعطل في إصدارات الإصدار) في إزالة تكرار عمليات الإدراج عندما تمر عملية INSERT عبر عرض مُجسَّد يغيّر استعلامه الداخلي عدد الصفوف، ويكون جدول الهدف لإزالة التكرار مُقسّمًا. كانت DeduplicationInfo::filterToPartition تُسنِد كل رمز لإزالة التكرار إلى الأقسام عبر اجتياز نطاق صفوف المصدر الخاص بالرمز ضمن محدد أقسام بحجم كتلة إخراج العرض (الأصغر)، ما يؤدي إلى القراءة بعد حدوده. وهي الآن تحتفظ بكل رمز في كل قسم لأي هدف عرض مُجسَّد — إذ لم تعد مطابقة صفوف المصدر بالأقسام متاحة بعد تغيّر عدد الصفوف — بدلًا من هذا الاجتياز خارج الحدود (وبدلًا من NOT_IMPLEMENTED الذي كان يثيره فحص لاحق لعملية الإدراج نفسها). #112649 (Sema Checherinda).
  • إصلاح خطأ منطقي (يؤدي إلى الإيقاف في إصدارات التصحيح وبُنى أدوات التعقيم) عند تطبيق finalizeAggregation على عمود تأتي حالات التجميع فيه من دوال مختلفة تشترك في تمثيل الحالة لكنها تُنهي إلى أنواع مختلفة — مثل quantileState وquantilesState(0.9) اللتين تُجمعان بواسطة UNION أو تُنتجان عبر arrayReduce. تُصدر هذه الاستعلامات الآن خطأً عاديًا بدلًا من التعطل. #112662 (Zain Ul Abidin).
  • إصلاح DELETE في جداول KeeperMap الذي كان يحذف أول max_block_size صفوف متطابقة فقط، مع الإبلاغ عن اكتمال الطفرة بنجاح. وإصلاح DELETE أيضًا مع keeper_map_strict_mode = 1 لكونه غير ذري؛ إذ كان يمكنه الرجوع إلى عمليات إزالة غير مُرقّمة بالإصدارات وحذف صفوف حُدّثت بالتزامن، كما كان يطبّق الصفوف المتطابقة كتلةً تلو أخرى، بحيث قد يترك التعارض الحذف مطبقًا جزئيًا. #112777 (Alexey Milovidov).
  • إصلاح تطبيق ALTER على جداول MergeTree بينما لا تزال طفرة التعديل RENAME COLUMN غير المكتملة قيد التنفيذ. كان ذلك قد يحدّث البيانات الوصفية للتخزين على نحو غير متوافق ويمنع الطفرات اللاحقة تمامًا. #112783 (Mikhail Artemenko).
  • إصلاح فشل بدء الخادم وATTACH برسالة WITH RECURSIVE is not supported with the old analyzer لعرض يحتوي على تعبير جدول شائع تعاودي عندما تكون enable_analyzer = 0 هي القيمة الافتراضية للخادم. #112784 (Nikolay Degterinsky).
  • إصلاح خطأ منطقي عند استخدام محرك الجدول Join على الجانب الأيمن من عملية JOIN تحتوي عبارة ON فيها على شرط يشير إلى أعمدة كلا الجدولين، مثل ON (t.key = j.key) AND (t.a < j.a). يُرفض هذا الاستعلام الآن باستثناء واضح بدلًا من ظهور required columns:... but not found any in left table أو std::bad_variant_access. #112815 (Groene AI).
  • إصلاح نتائج خاطئة لعملية JOIN تحتوي عبارة ON فيها على شرط مختلط، أي شرط متبقٍ غير تساوٍ بين الجانبين مثل ON (t1.key = t2.key) AND (t1.a * 10 < t2.a). لا تقيّم هذا الشرط إلا خوارزميات عائلة التجزئة، لكن full_sorting_merge وpartial_merge وربط المفتاح-القيمة المباشر كانت تدّعي قدرتها على تنفيذ عمليات الربط هذه ثم تتجاهل الشرط المتبقي بصمت، فتُرجع صفوفًا إضافية. وهي ترفضها الآن، لذا تُستخدم خوارزمية تجزئة بدلًا من ذلك. #112831 (Groene AI).
  • إصلاح الخطأ المنطقي ReadBufferFromEncryptedFile: Wrong file position عند قراءة جزء Compact من قرص encrypted باستخدام إدخال/إخراج مباشر، والذي كان يؤدي إلى توقف عمليات الدمج في system.replication_queue. #112943 (Alexey Milovidov).
  • إصلاح تباطؤ تربيعي عند تحليل استعلام PromQL ذي ذيل طويل من المحارف غير المعروفة (مثل قيمة FixedString محشوة ببايتات NUL): كان تحليل إدخال غير صالح بحجم ميغابايت يشغل خيط تنفيذ لعشرات الدقائق دون إمكانية إلغائه، لأنه يحدث أثناء تحليل الاستعلام. يتوقف المُحلِّل الآن عند الخطأ الأول. #112944 (Alexey Milovidov).
  • رفض مدد PromQL التي تتكرر فيها الوحدات أو لا تكون مرتبة من الأطول إلى الأقصر. #112954 (Minh Vu).
  • إصلاح تعليق عند كتابة Parquet مع تفعيل output_format_parquet_parallel_encoding (وهو الإعداد الافتراضي) وكون max_threads أكبر من 1. إذا تعذّر على المُرمِّز جدولة خيط تنفيذ إضافي، كان عدّاد خيوط التنفيذ النشطة يتعرض لنقصان سفلي، وقد تتوقف الكتابة عن إحراز أي تقدم نهائيًا بدلًا من الاكتمال أو الإبلاغ عن خطأ. #112959 (Groene AI). #113170 (Alexey Milovidov).
  • إصلاح استهلاك geohashesInBox وقتًا غير محدود عند معالجة صندوق ذي مساحة صفرية، مثل geohashesInBox(0., 0., 180., 0., 12). كان هذا الاستعلام يعيد geohash الصحيح الوحيد، لكنه يستهلك نحو 5e8 تكرارًا فارغًا للحلقة لكل صف ويتجاهل كلاً من max_execution_time وKILL QUERY. #112976 (Groene AI).
  • إصلاح سلوك غير معرّف (تمرير مؤشر فارغ إلى memcpy) في replaceRegexpOne/replaceRegexpAll عندما يحل نص الاستبدال محل مجموعة التقاط لم تشارك في المطابقة، مثل replaceRegexpAll('abc', '(a)|(b)', '\\2'). #113012 (Alexey Milovidov).
  • رفض تغيير SETTINGS المعلَّم على أنه مكتوب دون قيمة إذا كان يحمل قيمة غير true، وعدم حذف قيمة هذا التغيير مطلقًا عند تنسيق استعلام. سابقًا، كان بإمكان حمولة AST JSON مُعدّة تنفيذ إعداد Bool بقيمة false، بينما كان system.query_log وformatQueryFromJSON يعرضان الصيغة بلا قيمة. #113025 (Alexey Milovidov).
  • إصلاح سلوك غير معرّف وخطأ جدولة صامت عند جدولة مهمة في الخلفية بتأخير كبير جدًا، مثلًا بواسطة عرض مادي قابل للتحديث بفترة REFRESH AFTER ضخمة. أصبحت التأخيرات الآن مقيّدة بأكبر قيمة قابلة للتمثيل بدلًا من تجاوز السعة. #113041 (Groene AI).
  • إصلاح كتابة خارج الحدود عند قراءة عمود DECIMAL في Parquet يكون نوعه الفيزيائي أعرض من النوع الذي تقابله دقته المعلنة، مثل DECIMAL(9, 2) المخزّن بالنوع الفيزيائي INT64. هذه الملفات صالحة في Parquet وتنتجها أدوات كتابة أخرى، لكن القارئ كان يحدد حجم العمود الوجهة استنادًا إلى الدقة المعلنة، بينما كان مفكك الترميز يكتب بالعرض الفيزيائي، مما يفسد الذاكرة. تؤدي قراءة مثل هذا الملف الآن أيضًا إلى ظهور DECIMAL_OVERFLOW عندما لا تتسع قيمة ضمن الدقة المعلنة، بدلًا من إرجاع بيانات تالفة، وتتم القراءة دون فقدان للبيانات مع تلميح نوع بعرض لا يقل عن عرض النوع الفيزيائي. #113046 (Groene AI).
  • تم إصلاح intDiv عند استخدامه على عمود غير ثابت مع مقسوم عليه ثابت قيمته -1، إذ كان يلتف بصمت عند قسمة أصغر عدد صحيح موقّع (مثل intDiv(-9223372036854775808, -1)) بدلاً من طرح استثناء ILLEGAL_DIVISION كما في مسارات التنفيذ الأخرى. وكان هذا الالتفاف الصامت قد يؤدي أيضاً إلى نتائج خاطئة في ORDER BY/DISTINCT، لأن تحسين القراءة بالترتيب يعامل intDiv مع ثابت سالب، على نحو صحيح، باعتباره رتيباً، بينما كانت القيمة الملتفة تخالف ترتيب الفرز الناتج. #113048 (Alexey Milovidov).
  • تم إصلاح مشكلة عدم توافق كانت تمنع تحميل فهارس النص التي أُنشئت في ClickHouse 26.3 باستخدام محلل الكلمات unicode_word في الإصدارات اللاحقة. #113061 (Robert Schulze).
  • تم إصلاح خطأ منطقي Pipeline stuck في الاستعلامات التي توزّع البيانات حسب التقسيم، مثل دالة نافذة تتضمن PARTITION BY أو عملية join تتضمن join_algorithm = 'parallel_full_sorting_merge'، عندما ينتهي المسار اللاحق لأحد الأجزاء الموزعة في حين تكون كتلة قد وُزّعت جزئياً فقط. #113190 (Groene AI).
  • تم إصلاح نتائج خاطئة عند استخدام hash join بمفتاح LowCardinality واحد من نوع أعرض من 8 بايتات (UInt128 وInt128 وUInt256 وInt256 وبدائلها Nullable). إذ كانت عملية join هذه تعيد بصمت صفوفاً لا تتساوى قيم مفاتيحها. #113230 (Groene AI).
  • تم إصلاح مشكلة في ALTER TABLE ... ADD PROJECTION فوق عمود ALIAS على مستوى الجدول كانت تجعل الجدول غير قابل للاستخدام، وتتسبب في فشل عمليات INSERT اللاحقة بالخطأ UNKNOWN_IDENTIFIER (Missing columns) عندما تكون الجلسة مضبوطة على optimize_respect_aliases = 0. #109091 (Groene AI).
  • تم إصلاح استثناءي NOT_FOUND_COLUMN_IN_BLOCK وLOGICAL_ERROR في JOIN من النوع direct على جدول MergeTree الأيمن، وكذلك حالات الإنهاء المرتبطة بها في إصدارات debug وsanitizer. #109932 (Groene AI).
  • تم إصلاح المقارنات التي كانت تطرح سابقاً ILLEGAL_TYPE_OF_ARGUMENT عندما لا يكون للمعاملات أصغر نوع فائق مشترك. يمكن الآن مقارنة المصفوفات مثل Array(Int64) مقابل Array(UInt64) وArray(Int256) مقابل Array(UInt256) معجمياً باستخدام = و!= و< و<= و> و>= وIS DISTINCT FROM وIS NOT DISTINCT FROM. كما أصبح isDistinctFrom وisNotDistinctFrom يقارنان أزواج الأنواع الرقمية والعشرية المدعومة غير المصفوفية حسب القيمة بدلاً من طرح استثناء، وتم أيضاً إصلاح مقارنة المساواة للمصفوفات المتداخلة داخل Tuple(Nullable(...)). يغلق #33897. #110245 (Diego Gomes Tomé).
  • تم إصلاح LOGICAL_ERROR (Bad cast from ColumnString to ColumnLowCardinality) أثناء تحليل فهرس المفتاح الأساسي عندما يكون عمود المفتاح LowCardinality مغلفاً بسلسلة CAST متداخلة تعيد إدخال LowCardinality، مثل WHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5'. في إصدارات debug وsanitizer، كان ذلك يؤدي إلى إيقاف الخادم، بينما كان يتسبب في فشل الاستعلام في إصدار النشر. #111050 (Groene AI).
  • تم إصلاح النتائج الخاطئة لعملية FULL JOIN على جدول بمحرك Join باستخدام USING عندما يكون المفتاح الأيسر Nullable ومفتاح التخزين ليس كذلك: إذ كان صف أيسر غير مطابق بمفتاح NULL يعيد 0 بدلاً من NULL. #111371 (Groene AI).
  • إصلاح ظهور الإصدارات القديمة والمحذوفة من الصفوف عند قراءة قاعدة بيانات MaterializedPostgreSQL عبر جدول Merge. تمر هذه القراءات الآن عبر غلاف MaterializedPostgreSQL، مع تطبيق ترشيح FINAL و_sign = 1 نفسه المستخدم في القراءات المباشرة. #112382 (Alexey Milovidov).
  • إصلاح الخطأ Bad cast from ColumnNullable to ColumnString عند تشغيل طفرة تعيد كتابة الجزء بالكامل على جزء يكون نوع عموده أقدم من النوع في بيانات تعريف الجدول، مثلًا بعد ALTER TABLE ... MODIFY COLUMN متبوعًا بـ ALTER TABLE ... MATERIALIZE PROJECTION. #112501 (Alexey Milovidov).
  • إصلاح تجاهل تنسيقات الإدخال المستندة إلى الصفوف لـ KILL QUERY وmax_execution_time لعدة دقائق أثناء تحليل كتلة. تتحقق الآن من الإلغاء كل 8192 صفًا، لذا يتوقف INSERT الذي تم إنهاؤه (بما في ذلك تفريغ async-insert غير المتزامن في الخلفية) فورًا بدلًا من الاستمرار حتى نهاية الكتلة. #112646 (Groene AI).
  • إصلاح تحقّق RENAME TABLE من الحد الأقصى لطول اسم الجدول في قاعدة البيانات المصدر بدلًا من قاعدة البيانات الوجهة. كان من الممكن أن تؤدي إعادة تسمية جدول إلى قاعدة بيانات ذات اسم طويل إلى إنشاء جدول يتعذر على DROP TABLE حذفه، كما كان يُرفض خطأً إعادة تسمية جدول خارج قاعدة بيانات كهذه. #113019 (Groene AI).
  • إصلاح UNKNOWN_IDENTIFIER عند الاختيار من VIEW تختلف أنواع أعمدته المعلنة عن الأنواع التي ينتجها استعلامه الداخلي، مثلًا SELECT sum(length(arr)) FROM v حيث يعلن v عن arr Array(UInt8) فوق عمود String. مع القيمة الافتراضية optimize_functions_to_subcolumns = 1، كان المُحسِّن يعيد كتابة length(arr) لقراءة العمود الفرعي arr.size0 ويمرّر هذا الاسم إلى الاستعلام الداخلي الذي لا يحتوي على عمود فرعي كهذا. #113057 (Groene AI).
  • إصلاح استثناء (أو خطأ في إصدارات الإنتاج يمنع بدء تشغيل الخادم) عندما يستخدم مسند طفرة دالة الجدول merge دون اسم صريح لقاعدة البيانات. تُستخدم الآن قاعدة بيانات الجدول المُعدَّل، كما هو الحال مع أسماء الجداول. #113185 (Alexey Milovidov).
  • إصلاح نتائج خاطئة وخطأ LOGICAL_ERROR عند قراءة عمود فرعي لعضو Nested حُذف ثم أُعيدت إضافته مع عضو موجود من المجموعة نفسها، في جدول MergeTree مع share_nested_offsets = 1. كانت الأعضاء الموجودة تُرجع قيمًا من كتلة لاحقة عندما تمتد القراءة عبر أكثر من كتلة واحدة. #113225 (Groene AI).
  • إصلاح تعليق عبارات ALTER وOPTIMIZE وTRUNCATE وعبارات معالجة الأقسام مع alter_sync = 2 على ReplicatedMergeTree عندما يبدأ الجدول في الإيقاف بينما تنتظر العبارة نسخة متماثلة أخرى، مثلًا بسبب DROP DATABASE ... SYNC متزامن. تفشل هذه العبارة الآن بالخطأ UNFINISHED، كما تلتزم بـ max_execution_time وKILL QUERY. #113228 (Groene AI).
  • عدم كتابة تسلسل الهروب ANSI إلى INTO OUTFILE عندما يكون stdout طرفية TTY. #113252 (Azat Khuzhin).
  • إصلاح حالة نادرة من استخدام الذاكرة بعد تحريرها في قائمة انتظار الإدراج غير المتزامن عندما تكون للإدخالات المختلفة مواعيد نهائية متطابقة. #113363 (Miсhael Stetsyuk).
  • أصلح مشكلة بقاء الجداول فارغة دون أي تنبيه عند إنشاء أكثر من قاعدة بيانات بمحرك ENGINE = Backup من النسخة الاحتياطية نفسها، أو عند إعادة إنشاء قاعدة بيانات كهذه باسم مختلف. أصبحت سياسة التخزين التي تدعم قاعدة بيانات Backup تُعرَّف باسم يتضمن أيضًا اسم قاعدة البيانات المحلية، بحيث تحصل كل قاعدة بيانات على القرص المُنشأ لمسار بياناتها الخاص. #113378 (Groene AI).
  • أصلح مشكلة عدم حذف الصفوف مطلقًا عندما يحتوي جدول MergeTree على قاعدتين أو أكثر من قواعد TTL ... DELETE WHERE ذات تعبير الوقت نفسه والتي تختلف فقط في شرط WHERE. بعد دمج للحذف وفق TTL، كانت قيمة rows_where_ttl_info الخاصة بالجزء تُصفَّر، لذلك لم يكن يُجدوَل له أي دمج TTL آخر، وظلت الصفوف منتهية الصلاحية محفوظة إلى أجل غير مسمى دون أي خطأ أو رسالة سجل. يغلق #113116. #113384 (Groene AI).
  • أصبح الاستعلام على جدول Merge (أو دالة الجدول merge) الذي يطابق عددًا كبيرًا من الجداول يستجيب لـ KILL QUERY وmax_execution_time أثناء إنشاء خطط الاستعلام لكل جدول، بدلًا من الاستجابة فقط بعد اكتمال تخطيط جميع الجداول الفرعية. ومع timeout_overflow_mode = 'break'، يتوقف الآن أيضًا عن إنشاء خطط الاستعلام للجداول المطابقة المتبقية ويعيد النتيجة الجزئية دون خطأ، وفقًا لما هو موثق لهذا الوضع. #113415 (Alexey Milovidov). #113642 (Groene AI).
  • أصلح خروج clickhouse-client بالرمز 139 بدلًا من 0 بعد إلغاء استعلام باستخدام Ctrl+C، أو بعد تنفيذ INSERT يقرأ البيانات من stdin. #113431 (Groene AI).
  • اسمح لتعبيرات preprocessor وpostprocessor في فهرس نصي بالإشارة إلى أعمدة ALIAS. #110014 (Jimmy Aguilar Mena).
  • أصلح عدة حالات كانت فيها النسخ المتماثلة المتوازية تُرجع صفوفًا مكررة: إذ كان distributed_aggregation_memory_efficient يُتجاهل في النسخ المتماثلة المتوازية المستندة إلى الخطة، فتصل الحاويات الخاصة بالدمج الفعّال للذاكرة بترتيب غير صحيح وتُدمج مرتين؛ كما كان يُقرأ جزء موزع من جميع نسخه المتماثلة رغم أن البيانات غير مقسمة بينها، عندما لا تنطبق النسخ المتماثلة المتوازية على الاستعلام أو عندما يطلب parallel_replicas_mode التصفية بمفتاح مخصص دون parallel_replicas_custom_key. #112942 (Nikita Taranov).
  • أصلح تحول CREATE TABLE ... AS SELECT إلى عملية يتعذر إيقافها عندما يفشل SELECT الذي يملأ الجدول وتكون database_atomic_wait_for_drop_and_detach_synchronously مفعّلة: إذ كان DROP الداخلي لتنظيف الجدول المؤقت ينتظر قائمة انتظار الحذف الخلفية ويتجاهل كلًا من KILL QUERY وmax_execution_time. #113504 (Groene AI).
  • أصلح حذف ALTER TABLE ... EXECUTE remove_orphan_files لملف metadata/version-hint.text مستخدم لجدول Iceberg. كان إدخال مجموعة العناصر القابلة للوصول يُنشأ بربط السلاسل النصية مع افتراض وجود شرطة مائلة لاحقة في قيمة لا تحتوي عليها مطلقًا، لذلك لم يُتعرَّف على ملف التلميح الفعلي باعتباره قابلًا للوصول، وأُزيل عند تجاوز عمره عتبة older_than. ومع iceberg_use_version_hint = 1، كان الجدول يفشل بعد ذلك في القراءة تمامًا. #113548 (Groene AI).
  • تم إصلاح فقدان العرض المُعلَّم بالمعلمات لقاعدة بياناته عند إرسال استعلام يشير إليه دون تأهيل إلى جزء بيانات، إذ كان جزء البيانات يحلّ الاسم وفقًا لقاعدة بياناته الافتراضية. وبحسب محتوى تلك القاعدة، كان الاستعلام إما يفشل بالخطأ UNKNOWN_FUNCTION أو يعيد بصمت صفوفًا من عرض مختلف. يؤثر ذلك في IN وJOIN وremote عبر جدول Distributed. #113550 (Groene AI).
  • تم إصلاح LOGICAL_ERROR عند تصفية استعلام لـ system.databases بناءً على عمود name باستخدام استعلام فرعي داخل indexHint، مثلًا SELECT count() FROM system.databases WHERE indexHint(name IN (SELECT 'foo')). #113556 (Groene AI).
  • تم إصلاح حلقة لا نهائية في عمليات الدمج الخلفية وOPTIMIZE عندما كانت قيمة merge_max_block_size_bytes أقل من byteSize() لعمود فارغ. يظل عمود LowCardinality الفارغ محتفظًا بقاموسه، لذلك كان يمكن بلوغ حد البايتات قبل دمج صف واحد؛ ثم كان الدمج ينتج كتلًا فارغة إلى الأبد، مستهلكًا 100% من نواة CPU من دون تحرير خانته في مجمع العمليات الخلفية. #113585 (Groene AI).
  • تم إصلاح استعلام على عمود Variant كان يتجاهل max_execution_time وKILL QUERY. كان استدعاء دالة بعدة وسائط Variant يحل الدالة مرة واحدة لكل بديل من كل وسيطة، ولم تكن أي من الحلقتين اللتين تنفذان هذا العمل تتحقق من الإلغاء، لذلك تعذر إيقاف هذا الاستعلام حتى يكتمل. #113612 (Groene AI).
  • تم إصلاح الخطأ Unknown compression method لتلميحات الضغط auto وnone عند كتابتها بحالة أحرف غير الأحرف الصغيرة بالكامل، مثلًا file('data.csv.gz', 'CSV', 'x String', 'AUTO'). كانت أسماء برامج الترميز مثل GZIP مقبولة بالفعل دون حساسية لحالة الأحرف؛ وأصبح التلميحان الخاصان يتصرفان بالطريقة نفسها. #113631 (Groene AI).
  • تم إصلاح طي الثوابت في analyzer الجديد، الذي كان يغيّر نوع قيمة Geometry ثابتة. إن Geometry هو Variant مسمّى يمكن لبدائله أن تتشارك تخطيط التخزين نفسه (LineString/Ring وMultiLineString/Polygon والقيم الفارغة)، لذا كان يمكن لثابتين مطويين يختلفان فقط في بديلهما أن ينهارا إلى ثابت واحد؛ فعلى سبيل المثال، كان MULTIPOLYGON EMPTY يصبح LINESTRING(). #110709 (Groene AI).
  • تم إصلاح استثناء (Cannot calculate columns sizes when columns or checksums are not initialized) أثناء دمج جدول MergeTree أحادي العمود، عندما يكون عموده الوحيد ذا TTL تنتهي صلاحيته بالكامل، مع min_bytes_for_wide_part = 1. #111169 (Groene AI).
  • لم يعد فشل بدء مجمع الجدولة الخلفية (مثل مجمع iceberg عند استنفاد مجمع خيوط التنفيذ العام) يوقف الخادم: أصبح الخطأ الآن استثناءً قابلًا للاسترداد. كما أن قراءة system.background_schedule_pool لم تعد تنشئ تلك المجمعات كأثر جانبي. #111209 (Groene AI).
  • تم إصلاح قراءة خارج الحدود في البروتوكول الأصلي عند وجود بيانات فهرس تالفة. #112331 (Pavel Kruglov).
  • تم إصلاح حالة جمود تؤدي إلى تعليق قاعدة بيانات Filesystem أو HDFS بشكل دائم عندما يحل استعلامان اسم الجدول نفسه في الوقت ذاته. ويُحجب كل استعلام لاحق على قاعدة البيانات تلك إلى الأبد ولا يمكن مقاطعته، لذا يلزم إعادة تشغيل الخادم للتعافي. #112495 (Groene AI).
  • إصلاح عدم فعالية max_execution_time وKILL QUERY بصمت في استعلام موزّع ينشئ اتصالات بالنسخ المتماثلة. يتوقف هذا الاستعلام الآن عند محاولة الاتصال التالية، بدلًا من المرور على كل نسخة متماثلة ومحاولة إعادة الاتصال بها. #112689 (Groene AI).
  • إصلاح تعليق DROP TABLE وSYSTEM STOP VIEW عندما يُحظر عرض مادي قابل للتحديث أثناء تخطيط استعلام التحديث الخاص به. #113188 (Nikolay Degterinsky).
  • إصلاح كشف CREATE TABLE مع ENGINE = Distributed(...) أو ENGINE = Buffer(...) ومن دون قائمة أعمدة لبنية جدول مُشار إليه لا يملك المستخدم الذي ينشئه صلاحية رؤيته. بالنسبة إلى CREATE محلي، تُستنتج البنية الآن ضمن سياق المستخدم نفسه، لذا يلزم امتلاك صلاحية SHOW COLUMNS على الجدول المُشار إليه. لا يشمل ذلك CREATE المُعاد تشغيله من طابور DDL (ON CLUSTER أو داخل قاعدة بيانات Replicated). #113220 (Groene AI). #113372 (Groene AI).
  • إصلاح قراءة قاعدة البيانات الداخلية _temporary_and_external_tables عبر دالة الجدول merge ومحرك الجدول Merge، التي كانت تتيح لجلسة قراءة الجداول المؤقتة لجلسات ومستخدمين آخرين. يتخطى التعبير النمطي لقواعد البيانات هذه القاعدة الآن، ويُرفض ذكرها صراحةً، كما يُرفض الوصول المباشر إليها. #113224 (Alexey Milovidov).
  • إصلاح تجاهل countSubstrings وcountSubstringsCaseInsensitive وcountSubstringsCaseInsensitiveUTF8 وcountMatches وcountMatchesCaseInsensitive لـ KILL QUERY وmax_execution_time: إذ كان يمكن لاستدعاء على عدد كبير من الصفوف أو المطابقات، أو على قيمة كبيرة واحدة، أن يستمر لدقائق بعد إلغاء الاستعلام. #113369 (Groene AI). #113886 (Groene AI).
  • إصلاح عملية mutation لجزء Compact كانت تنتج نتيجة مختلفة بحسب ما إذا كانت معلومات تسلسل الجزء لا تزال في الذاكرة أو أُعيد تحميلها من serialization.json، عندما يستخدم الجدول serialization_info_version = 'basic'. في ReplicatedMergeTree، كان هذا يؤدي إلى أن تكتب نسختان متماثلتان تحتفظان بجزء مصدر متطابق البايتات أجزاء معدّلة مختلفة، فتفشل عملية mutation بالاستثناء CHECKSUM_DOESNT_MATCH. يغلق #113500. #113588 (Groene AI).
  • إصلاح إبلاغ made_current_at في system.iceberg_history عن أقدم وقت أصبحت فيه لقطة ما حالية، بدلًا من أحدث وقت، عندما يظهر snapshot-id نفسه أكثر من مرة في snapshot-log الخاص بـ Iceberg، كما يحدث عند إجراء تراجع. #113598 (Groene AI).
  • إصلاح القيم غير الصحيحة للأعمدة الافتراضية، مثل _table أو _database، المُختارة من الجانب الأيمن لـ JOIN مع مصدر key-value مثل EmbeddedRocksDB أو KeeperMap أو Redis أو قاموس. كان يمكن أن يعيد الاستعلام قيمة عمود بيانات بدلًا منها، أو يفشل باستثناء LOGICAL_ERROR. #113698 (Groene AI).
  • إصلاح فشل EXPLAIN ANALYZE على جدول Merge يحتوي على عدة children، وPREWHERE بعمود دون تعبير، وWHERE منفصل، مع الرسالة Required output position N is out of range for pass-through inputs. يغلق #113621. #113725 (Groene AI).
  • تم إصلاح فشل نقل دليل باستخدام clickhouse-disks move مع ظهور الخطأ DIRECTORY_ALREADY_EXISTS على الأقراص ذات metadata_type = plain_rewritable (مثل s3_plain_rewritable)، والذي كان يترك أيضًا دليل وجهة فارغًا. #113727 (Groene AI).
  • تم إصلاح فشل قراءة جداول Merge مع الخطأ No set is registered for key ... عندما يعرّف أحد الجداول التابعة عمود ALIAS يحتوي على IN وتختلف الجداول التابعة في القيمة الافتراضية لذلك العمود. #113757 (Groene AI).
  • تم إصلاح الخطأ UNKNOWN_IDENTIFIER مع enable_analyzer = 0 عندما تشير WHERE إلى عمود تنتجه untuple داخل استعلام فرعي، مثل SELECT t.keys FROM (SELECT untuple(arrayJoin(m)) AS t FROM ...) WHERE t.values > 0. كانت إعادة الكتابة بواسطة enable_optimize_predicate_expression تدفع هذا الشرط إلى الاستعلام الفرعي باعتباره HAVING، حيث لا يكون الاسم موجودًا بعد. #113760 (Groene AI).
  • تم إصلاح فشل ALTER TABLE ... MODIFY COLUMN مع الخطأ Cannot specify codec for column type ALIAS عندما تحوّل تعليمة واحدة عمود ALIAS إلى عمود فعلي (DEFAULT أو MATERIALIZED) وتحدد CODEC في الوقت نفسه. يغلق #113693. #113853 (Groene AI).
  • تم إصلاح ORDER BY ALL وGROUP BY ALL على جدول Merge مرتبط باستخدام المحلل القديم (allow_experimental_analyzer = 0). لم يعد الاستعلام يفشل باستثناء داخلي، ولم تعد إصدارات التصحيح وإصدارات sanitizer تُجهض. #109139 (Groene AI).
  • تم إصلاح استثناء متقطع Cannot parse string ... as UInt64 ... While executing ValuesBlockInputFormat قد يحدث عند إدراج قيم تتضمن تعبيراتها تحويلاً رقميًا، مثل initializeAggregation('sumState', 0::UInt64). #110637 (Groene AI).
  • تم إصلاح الإبلاغ عن حالات فشل لقرص سليم أثناء الفحص الدوري للقرص المحلي. فعندما يشغّل الخادم Keeper مضمّنًا إلى جانب قرص local، كان من الممكن أن يتحقق خيطا فحص من الملف نفسه، وأن يسجلا مؤقتًا FILE_DOESNT_EXIST أو CANNOT_READ_ALL_DATA أو CANNOT_UNLINK، وأن يُحتسب القرص مؤقتًا ضمن مقياس BrokenDisks. #110773 (Groene AI).
  • تم إصلاح نتائج غير صحيحة وخطأ منطقي Cannot serialize FutureSetFromSubquery with no query plan في الاستعلامات على جداول Merge ودالة الجدول merge عند تمكين النسخ المتماثلة المتوازية القائمة على الخطة. #112849 (Alexey Milovidov).
  • لم يعد جدول في محرك قاعدة البيانات URL يكشف لمستخدم لا يملك امتياز قراءة المصدر ما إذا كان ملف محلي موجودًا. أصبح كل من EXISTS TABLE، الذي لا يتطلب سوى امتياز SHOW TABLES، وحل اسم الجدول ينتظران التحقق من الامتياز قبل فحص نظام الملفات. #113029 (Alexey Milovidov).
  • تم إصلاح تعبير TTL الذي يصبح غير قابل للاستخدام عندما يزيل طيّ الثوابت الأعمدة التي يشير إليها، مثل TTL d + INTERVAL 1 DAY DELETE WHERE isNull(x) على عمود x غير Nullable، مما كان يتسبب في فشل كل عملية INSERT في الجدول مع الخطأ Missing columns. كما تم إصلاح فشل تشغيل الخادم عندما يحتوي جدول على تعبير TTL لعمود Variant أُنشئ باستخدام variant_throw_on_type_mismatch = 0. #113042 (Alexey Milovidov).
  • تم إصلاح إلغاء قراءات دالة الجدول postgresql ومحرك الجدول PostgreSQL. إذ كان الإلغاء أثناء بدء القراءة قد يتسابق مع مؤشر المعاملة ويُفقد، مما يترك الاستعلام قيد التشغيل حتى ينهيه PostgreSQL. #113150 (Groene AI).
  • يمكن الآن مقاطعة UNDROP TABLE باستخدام KILL QUERY أثناء انتظارها للاستعلامات قيد التشغيل كي تحرر الجدول المُسقَط. #113263 (Alexey Milovidov).
  • إصلاح تسرّب ذاكرة لمحلل XML بأكمله عندما يطرح معالج XML من Poco استثناءً أثناء التحليل، مثل تجاوز سعة Poco::XML::NamePool عند تحليل مستند يحتوي على عدد كبير من أسماء العناصر الفريدة. #113348 (Alexey Milovidov).
  • تم إصلاح عمليات الكتابة إلى قرص HDFS: لم تعد تفشل بالرسالة Parent directory doesn't exist عندما يحتوي مفتاح الكائن المُنشأ على بادئات أدلة متداخلة، إذ تُنشأ الآن أدلة الأصل المفقودة. #113396 (Alexey Milovidov).
  • إصلاح النتائج الخاطئة، وإخفاق التحقق في الإصدارات التي تكون فيها التحققات مفعّلة، لعملية JOIN على قاموس تحتوي عبارة ON الخاصة بها على شرط غير متساوٍ يشمل كلا الجدولين، مثل ON (t.key = d.key) AND (t.a * 10 < d.a)، عند تفعيل join_use_nulls. #113534 (Alexey Milovidov).
  • إصلاح تعليق استعلام لمدة تصل إلى receive_timeout ثانية عندما ينتهي بسرعة كبيرة على العُقدة البادئة. #113551 (Nikita Taranov).
  • إصلاح قراءة UPDATE وDELETE خفيف الوزن للجداول الخاطئة عندما تختلف قاعدة بيانات الجدول المُحدَّث عن قاعدة بيانات الجلسة. تُحل الآن أسماء الجداول غير المؤهلة ودالة الجدول merge بالنسبة إلى قاعدة بيانات الجدول المُحدَّث، لذا لم يعد البيان يحدّث أو يحذف بصمت صفوفًا محددة من جدول مختلف. #113748 (Groene AI).
  • إصلاح رفض زائف بسبب TOO_MANY_PARTS لعملية INSERT متوازية: عندما يجعل max_insert_threads عملية INSERT عادية متوازية، لم يعد الاستعلام يحتسب الأجزاء التي التزمت بها المصارف النظيرة التابعة له. يُغلق #114015. #114016 (Alexey Milovidov).
  • تم إصلاح NO_SUCH_COLUMN_IN_TABLE عندما يحدد استعلام ذو نسخ متماثلة متوازية عمود ALIAS لجدول يُنقل كجدول مؤقت GLOBAL JOIN، وMULTIPLE_EXPRESSIONS_FOR_ALIAS عندما يعلن جانبا JOIN موزعة عن عمود ALIAS بالاسم نفسه، وUNKNOWN_IDENTIFIER عندما يعلن جدول Distributed عن عمود ALIAS فوق عمود ALIAS آخر، بما في ذلك عند استخدامه كمفتاح JOIN USING. #107700 (Yakov Olkhovskiy).
  • تم إصلاح قراءة Tuple بتنسيق CSV عندما يكون عنصره الأول NULL. عند تمكين input_format_csv_deserialize_separate_columns_into_tuple وinput_format_null_as_default، كان \N في بداية صف مثل \N,1 يُفسَّر على أنه يعني أن العمود بأكمله NULL، فيُستبدل الصف بقيمة افتراضية وتتسبب خلايا العناصر المتبقية في خطأ تحليل. أصبح NULL الأول الآن قيمة العنصر الأول، ويُطبَّق input_format_null_as_default على ذلك العنصر. أما الصف الذي يحتوي على حقل واحد \N لـ Tuple غير مغلّف بالكامل، فيُعد الآن ناقصًا للعناصر المتبقية ويُرفض؛ عيّن input_format_csv_deserialize_separate_columns_into_tuple = 0 لقراءة هذا الحقل باعتباره العمود بأكمله مجددًا. #109744 (Groene AI).
  • إصلاح خطأ نادر Logical error: 'No more packets are available.' في استعلام موزع صالح يتضمن LIMIT. وكان يؤدي أيضًا إلى إيقاف الخادم في إصدارات التصحيح وإصدارات sanitizer. #110334 (Groene AI).
  • تم إصلاح خطأ منطقي (!part.empty()) عند استخدام جدول Distributed معرّف باسم قاعدة بيانات بعيدة فارغ في JOIN مع distributed_product_mode = 'local'. #110677 (Groene AI).
  • إصلاح تحليل أسماء الأعمدة المؤهلة بالكامل، مثل db.table.column، في المحلّل للجداول التي تحمل الاسم نفسه لقاعدة بياناتها. يغلق #82084. #110976 (Alexey Milovidov).
  • تم إصلاح فقدان وصلات التجزئة لتحسيناتها اللاحقة بعد البناء (التحويل إلى جدول تجزئة ثابت، ومرشح وقت التشغيل المشترك، وإعادة ترتيب نطاقات الجدول الأيمن) عند تكوين حد تلقائي للكتابة إلى القرص، وهو الإعداد الافتراضي منذ الإصدار 26.5. #111972 (Alexey Milovidov).
  • تم إصلاح خلل كان يحدث عند استخدام ALTER TABLE ... MODIFY COLUMN لتغيير تلميح نوع JSON (مع تمكين allow_experimental_json_lazy_type_hints) في عمود يُستخدم عموده الفرعي في المفتاح الأساسي أو مفتاح الفرز أو مفتاح التقسيم أو فهرس تخطٍ صريح، إذ كان يمكن أن يفسد المفتاح أو الفهرس على القرص. كانت عمليات القراءة العادية تخفي ذلك عبر البنية المخزنة مؤقتًا، لكن بعد إعادة تحميلها (مثلًا عند إعادة تشغيل الخادم) كانت الاستعلامات تفشل برسالة CANNOT_READ_ALL_DATA أو تعرض نتائج خاطئة. تُرفض عمليات ALTER هذه الآن كلما غيّرت النوع على القرص لعمود فرعي مُشار إليه من JSON. تظل تغييرات تلميحات النوع على الأعمدة خارج تلك البنى، أو التغييرات التي لا تغيّر النوع على القرص للأعمدة الفرعية المُشار إليها (مثل إضافة مسار مكتوب غير ذي صلة)، مقتصرة على البيانات الوصفية. #112302 (Pavel Kruglov).
  • إصلاح النتائج الخاطئة عندما يبدّل query_plan_join_swap_table جانبي ANY JOIN بينما join_any_take_last_row = 1: يحتفظ ClickHouse الآن بالترتيب الأصلي لجانبي الوصل بحيث يظل ANY JOIN يعيد آخر صف مطابق. يغلق #111645. #112458 (Vladimir Cherkasov).
  • تم إصلاح listObjects على قرص AzureBlobStorage ذي نقطة النهاية ذات البادئة، إذ كان يعيد أسماء blob خاطئة في كل صفحة بعد الأولى لأن ترقيم الصفحات كان يتجاوز غلاف العميل الذي يزيل بادئة نقطة النهاية. يدخل ترقيم الصفحات الآن إلى الغلاف مجددًا عبر رمز الاستمرار، بحيث تكون أسماء blob في كل صفحة صحيحة. #112872 (Arsen Muk).
  • تم إصلاح تخصيص ذاكرة غير محدود عند قراءة ملف Parquet تعلن بياناته الوصفية Thrift عن طول حاوية أو سلسلة أكبر من البيانات الوصفية نفسها. يُرفض هذا الطول الآن بدلًا من تخصيص ذاكرة له. #113212 (Groene AI).
  • تم إصلاح الخطأ Cannot insert element into Set (NOT_IMPLEMENTED) عند تمكين read_in_order_use_virtual_row واستخدام استعلام قراءة مرتبة من MergeTree يجمع بين WITH FILL ... INTERPOLATE ومرشح IN أو has. #113264 (Groene AI).
  • إصلاح تجاهل optimize_read_in_order بصمت في بعض استعلامات ORDER BY، بما في ذلك الاستعلامات التي تستخدم صفًا افتراضيًا أو toString/CAST(..., 'Nullable(String)') على مفتاح فرز من نوع String. كما تم إصلاح النتائج الخاطئة للمرشحات أو ORDER BY على toString لقيم Time أو Time64 أو DateTime في المناطق الزمنية التي تطبق التوقيت الصيفي. #113291 (Vladimir Cherkasov).
  • رفض تعبيرات parallel_replicas_custom_key غير الصالحة، مثل tuple() أو (x, y)، بالخطأ ILLEGAL_TYPE_OF_COLUMN_FOR_FILTER بدلًا من القراءة بعد نهاية قائمة أنواع المفتاح المخصص. #113359 (Nikita Taranov).
  • إصلاح فشل إعادة تشغيل الخادم بعد إنهائه أثناء تنفيذ DROP TABLE لجدول يستخدم مجموعة مسماة: إذ كان يمكن أن تنجح عملية DROP NAMED COLLECTION لاحقة، مما يترك بيانات تعريف جدول تشير إلى مجموعة مسماة مفقودة ويتسبب في فشل بدء التشغيل التالي بالخطأ NAMED_COLLECTION_DOESNT_EXIST. #113524 (Alexey Milovidov).
  • إصلاح حالتين كانت فيهما قاعدة بيانات AWS Glue في DataLakeCatalog تُبلغ عن عدم وجود جدول بدلًا من الإبلاغ عن خطأ. لم يعد SHOW TABLES وsystem.tables يفشلان بالخطأ DATALAKE_DATABASE_ERROR (“Exception calling GetTables … not found”) عندما تكون قاعدة بيانات Glue غير موجودة أثناء سرد جداولها، مثلًا بسبب حذف قاعدة بيانات غير مرتبطة في حساب AWS نفسه بالتزامن؛ إذ لا تسهم قاعدة البيانات هذه الآن بأي جداول بدلًا من إيقاف السرد. ولم يعد EXISTS TABLE يُرجع 0 لجدول موجود عند فشل استدعاء GetTable الأساسي لسبب غير عدم وجود الجدول، مثل فشل المصادقة أو DNS أو خطأ 5xx. ولا تزال جميع أخطاء Glue الأخرى تُنقل في كلا المسارين. #113591 (Groene AI).
  • تم إصلاح خطأ في متانة Keeper، إذ كان التعطل أثناء حفظ ملف حالة Raft (الذي يخزن term وvoted_for) قد يترك العقدة دون حالة صالحة أو نسخة احتياطية. وعند إعادة التشغيل، كان يمكن للعقدة إعادة الضبط إلى term = 0 ومنح تصويت سبق أن منحته في ذلك المصطلح، مما قد يؤدي إلى وجود قائدين وفقدان البيانات الملتزم بها. وتُحتفظ الآن بالحالة السابقة حتى يُكتب ملف الحالة الجديد بالكامل وتتم مزامنته. #113654 (Alexey Bakharew).
  • إصلاح سباق بيانات عند حذف جدول MergeTree بينما لا تزال مهام تحديث الإحصاءات في الخلفية أو تحديث الأجزاء أو تحميل الأجزاء القديمة/غير المتوقعة قيد التشغيل. #113722 (Alexey Milovidov).
  • إصلاح ORDER BY ALL في WINDOW VIEW، وأخطاء UNKNOWN_IDENTIFIER الخاصة بـ INTERPOLATE وWINDOW وLIMIT BY في استعلام على جدول Merge أو Distributed يتضمن ربطًا، عند استخدام المحلل القديم. #113759 (Alexey Milovidov).
  • إصلاح تسرب للذاكرة في برنامج ترميز الضغط التجريبي SZ3: فعند فشل ضغط بيانات ضعيفة القابلية للضغط أو بيانات تالفة بسبب استثناء، كانت مخازن الذاكرة المؤقتة تظل مخصصة. #113916 (Alexey Milovidov).
  • إصلاح التعقيد التربيعي عند تحليل وسيطة العنوان في دوال الجدول remote وmysql وما شابهها: إذ كان العنوان الطويل جدًا (مثل FixedString بحجم ميغابايت ومُعبّأ بأصفار بادئة) يؤدي إلى تعليق الاستعلام أثناء التحليل دون إمكانية إلغائه. #113918 (Alexey Milovidov).
  • إصلاح فشل OPTIMIZE TABLE على جدول Iceberg بالخطأ Unsupported snapshot's operation type OVERWRITE عندما كان سجل الجدول يحتوي على عملية حذف صفوف أزالت أكثر من صف واحد لكل ملف حذف حسب الموضع. يغلق #113745. #113964 (Groene AI).
  • عدم تكرار ALTER TABLE ATTACH PARTITION FROM لقواعد البيانات ذات النسخ المتماثلة. #94835 (MikhailBurdukov).
  • تُرفض الآن إعدادات حجم التحميل غير الصالحة في Azure (مثل azure_min_upload_part_size = 0 أو azure_max_blocks_in_multipart_upload = 0) مبكرًا برسالة خطأ واضحة بدلًا من التسبب في استثناء داخلي (second_size > 0) عميقًا في مسار الكتابة. ينطبق ذلك على كل من إعدادات الاستعلام وتكوين قرص Azure. #103394 (Statxc).
  • إصلاح الإفلات غير الصحيح للقيم الحرفية في SQL في StorageSQLite ودالة الجدول sqlite() عند دفع شروط WHERE إلى SQLite: إذ كانت علامات الاقتباس المفردة ومحارف التحكم (\n و\r و\t و\) تُفلَت بشرطات مائلة عكسية لا يفسرها SQLite، مما يؤدي إلى أخطاء في البنية أو نتائج استعلام غير صحيحة. كما أُصلح إفلات القيم الحرفية النصية المدفوعة إلى PostgreSQL: إذ كانت السلاسل المتداخلة داخل قوائم IN تحتفظ بإفلات ClickHouse، وتُرسل محارف التحكم كتسلسلات شرطات مائلة عكسية يقرأها PostgreSQL كبايتات مختلفة. #104217 (Shaohua Wang).
  • إصلاح استثناء NOT_FOUND_COLUMN_IN_BLOCK في استعلامات INNER JOIN ... ON arrayJoin(...) = ... عند تفعيل query_plan_convert_join_to_in وعندما يشير SELECT إلى عمود المصفوفة المصدر. #104809 (Shaohua Wang).
  • إصلاح تعبيري IN وNOT IN ذوي معاملات الجانب الأيمن غير الثابتة التي تشير إلى أعمدة من الصف الحالي، ومواءمة معالجة الصفوف في الجانب الأيمن في analyzer الجديد مع دلالات IN الحالية في ClickHouse. في analyzer القديم، كان عمود مصدر مجرّد في الجانب الأيمن (x IN (arr)) يُفسَّر باسم جدول ويبقى خارج النطاق. #104993 (Yue Ni).
  • إصلاح الخطأ Cannot add column ...: column with this name already exists عند تنفيذ INSERT SELECT من دالة جدول مثل file أو s3 أو input، عندما يُختار عمود المصدر نفسه أكثر من مرة. #105982 (etienne).
  • رفض max_replication_lag_to_enqueue = 0 في قواعد بيانات Replicated. كانت هذه القيمة تجعل فحص عدم التزامن بعد الاستعادة صحيحًا دائمًا، وتتسبب في إيقاف الخادم بخطأ LOGICAL_ERROR في إصدارات debug وsanitizer. يُرفض الآن 0 وقت التحليل مع BAD_ARGUMENTS من جميع المصادر (CREATE DATABASE ... SETTINGS، وكتلة تكوين الخادم <database_replicated>، وإعادة تشغيل ATTACH، وإعادة تشغيل البيانات الوصفية الحالية عند الترقية). أصغر قيمة صالحة هي 1. يغلق #98823. #106006 (Groene AI).
  • إصلاح Logical error: 'Pipeline stuck' في الاستعلامات التي تستخدم enable_sharding_aggregator = 1 مع UNION ALL وmax_streams_for_union_step أصغر من عرض خط الأنابيب. يُنهي BufferedShardByHashTransform الآن منافذ إخراج قوائم الانتظار الفارغة فور استنفاد الإدخال، ويواصل سحب الإدخال عندما لا يحتوي منفذ فارغ مطلوب على بيانات قابلة للتصريف، حتى إذا بلغت قائمة انتظار شقيقة حد الضغط الخلفي. #106251 (Groene AI).
  • إصلاح تجاوز سعة عدد صحيح موقّع عند ضبط إعداد مهلة انتظار، مثل interactive_delay، على قيمة ضخمة: إذ كان من الممكن أن تنتهي المهلة فورًا بدلًا من الانتظار، وقد يتوقف الخادم عند استخدام Undefined Behavior Sanitizer. #106961 (Groene AI).
  • يُرفض الآن تصدير قيم Time/Time64 الواقعة خارج نطاق وقت يوم صالح (سالبة أو >= 24h) إلى تنسيق Arrow برسالة خطأ واضحة، بدلًا من كتابة بيانات time32/time64 غير صالحة في Arrow. #107179 (Shaohua Wang).
  • إصلاح النتائج الخاطئة لـ GROUP BY على جدول Distributed ذي أعمدة ALIAS مكررة تتوسع إلى التعبير نفسه (مثلًا، عمودان معرّفان بـ toString(x)) عند استخدام التجميع الموزع ثنائي المستوى أو الموفر للذاكرة. كانت المفاتيح المكررة تُطوى إلى مفتاح واحد على الأجزاء، لكنها تُدمج باستخدام مجموعة المفاتيح الكاملة على البادئ؛ لذا كانت المجموعات المتساوية من أجزاء مختلفة تقع في دلاء مختلفة عند التجميع ثنائي المستوى ولا تُدمج، فتُعاد مجموعة واحدة لكل جزء مع count() مقسّم. #108855 (Groene AI).
  • إصلاح خطأ زائف Inconsistent AST formatting في ALTER TABLE ... MOVE PART ... TO SHARD '<path>'. كان منسّق الاستعلام يحذف الكلمة المفتاحية SHARD، لذا لم يكن من الممكن تحليل الاستعلام المنسّق مجددًا، مما أدى إلى LOGICAL_ERROR (استثناء مُعالَج في إصدارات الإنتاج، وإيقاف في إصدارات التصحيح وsanitizer). #109060 (Groene AI).
  • رفض إزاحات Array غير الرتيبة في جميع مسارات القراءة التي تفك ترميزها كقيم مطلقة، بدلًا من تنسيق Native فقط. كان جزء حبيبة من skip index set تالف يمر سابقًا دون تحقق ثم يُقرأ خارج الحدود. #109212 (Groene AI).
  • يراعي JSONExtract الآن cast_string_to_date_time_mode عند تحويل قيم JSON النصية إلى DateTime/DateTime64، بما يتسق مع CAST. يغلق #109126. #109252 (Utkal Singh).
  • إصلاح خطأ منطقي محتمل “Unexpected substream … for column …” عند رفع إصدار إعداد compatibility. #109496 (Pavel Kruglov).
  • تعيين مكوّن coordination المفقود في حساب حجم system.detached_parts. #109553 (Den Kalantaevskii).
  • إصلاح احتمال عدم انتهاء مهلة انتظار الكتلة لعمليات الإدراج المتدفقة (input_format_max_block_wait_ms) أبدًا أثناء تفعيل query profiler: إذ كانت عملية استطلاع واصف الملف تُعاد بمهلة كاملة بعد كل إشارة من profiler، ما قد يسمح لمصدر إدخال متوقف بتأخير flush للكتلة الجزئية إلى أجل غير مسمى بدلًا من إفراغها عند بلوغ حد الانتظار. #109602 (Shaohua Wang).
  • لم يعد طيّ الثوابت أثناء تخطيط الاستعلام ينفّذ دالةً يختلف نوع وسيطها عن النوع الذي حُلّت الدالة على أساسه أثناء التحليل. كان هذا التعارض يؤدي سابقًا إلى ظهور LOGICAL_ERROR أثناء حساب ترويسة الإخراج، وهو فشل تأكيد في إصدارات التصحيح وإصدارات sanitizer. يُتخطى الطيّ الآن بدلًا من ذلك، بينما يظل الاستعلام غير الصالح فعليًا يُبلغ عن الخطأ القابل للاسترداد ILLEGAL_TYPE_OF_ARGUMENT من مسار التنفيذ المعتاد. #109747 (Groene AI).
  • إصلاح فشل mutation يشير إلى العمود الافتراضي _sample_factor في منتصف التنفيذ مع ظهور Unexpected const virtual column: _sample_factor وبقاء mutation عالقًا. تقرأ mutation هذا العمود الآن بالقيمة 1، وهي القيمة نفسها التي يعيدها استعلام لا يستخدم SAMPLE. #109813 (Groene AI).
  • إصلاح ثلاث مشكلات في use_constant_folding_in_index_analysis: خطأ منطقي Invalid partition key size كان قد يوقف استعلام SELECT يستخدم إسقاطًا عاديًا عندما يضبط الجدول part_minmax_index_columns = 'with_block_number_offset'؛ ونتائج خاطئة (حذف صفوف بصمت) لمرشح على مفتاح تقسيم يعتمد على باقي القسمة، مثل PARTITION BY id % 200؛ وتعطلًا (سباق بيانات) عند الاستعلام عن فهرس text يستخدم محلل sparseGrams مع شرط LIKE عبر عدد كبير من الأقسام مع max_threads > 1. #109896 (Groene AI).
  • إصلاح سباق بيانات (وتعطل نادر) عند الإبلاغ عن خطأ في التحليل النحوي أو التحليل أثناء قراءة جدول ملف أو تخزين كائنات. كان خطأ التحليل النحوي الذي يُثار أثناء التهيئة الكسولة لـ KeyCondition يُشارك ككائن استثناء واحد بين خيوط القراءة، وكان بإمكان خيطين إلحاق (in file/uri ...) برسالته بالتزامن، ما يؤدي إلى سباق على سلسلة رسالة الاستثناء. #109911 (Groene AI).
  • إصلاح تمرير إعدادات الاستعلام في accurateCastOrDefault، مع الحفاظ على قيم NULL الأصلية المرمزة بواسطة Dynamic وVariant. يغلق #109943. #109946 (Pavel Kruglov). #114912 (Alexey Milovidov).
  • تصحيح النتائج غير الصحيحة من subBitmap وbitmapSubsetInRange وbitmapSubsetLimit للـ bitmaps التي لا تزال تستخدم التمثيل الصغير، بما في ذلك قيم العناصر UInt64 وInt64 التي تتجاوز 2^32، والتي كانت تُقتطع إلى 32 بت. تستخدم المقارنات في دوال bitmap لأنواع العناصر الموقعة الآن القيمة غير الموقعة لنوع العنصر بصورة متسقة؛ لذلك، في bitmap من نوع Int8، يُقارن العنصر -1 بوصفه 255 بدلًا من 4294967295 بعد توسيع الإشارة. ويصلح هذا أيضًا bitmapMin وbitmapMax وbitmapContains وbitmapTransform للـ bitmaps التي تجاوزت التمثيل الصغير. يجب تعديل الاستعلامات التي مررت عتبات موسعة الإشارة: في bitmap من نوع Int8، تصبح bitmapSubsetInRange(bm, 4294967168, 4294967296) هي bitmapSubsetInRange(bm, 128, 256). صُحح أيضًا groupNumericIndexedVector الذي كان يعيد نتائج مختلفة لأعمدة الفهرس Int8 وInt16 مقارنةً بأنواع الفهارس الأوسع، وnumericIndexedVectorGetValue الذي كان يعيد 0 للفهارس السالبة. كما صُححت وثائق دوال bitmap، بما في ذلك دوال subset التي وُصفت بأنها تستخدم فهرسة تبدأ من 1، ودعم bitmapBuild / bitmapToArray للأنواع الموقعة. #110072 (Rami Darwiche).
  • إصلاح تجاهل optimize_aggregation_in_order لإلغاء الاستعلامات. يتحقق AggregatingInOrderTransform الآن من الإلغاء أثناء تجميع جزء، بحيث يتوقف الاستعلام الذي أوقفته KILL QUERY أو max_execution_time (مع الإعداد الافتراضي timeout_overflow_mode = 'throw') سريعًا بدلًا من إكمال معالجة الجزء بالكامل. #110104 (Groene AI).
  • إصلاح حالة سباق بين KILL TRANSACTION وALTER TABLE ... UPDATE/DELETE المنفذ ضمن معاملة: كان التراجع الذي يحدث بين تسجيل التعديل في المعاملة وتسجيله في الجدول يترك إدخال تعديل يتيمًا، مما يؤدي إلى ظهور خطأ منطقي (Cannot find transaction ... that has started mutation ...) في المهام الخلفية ويحجب جميع التعديلات اللاحقة للأجزاء المتأثرة إلى حين إعادة تشغيل الخادم. #110226 (Shaohua Wang).
  • إصلاح خطأ LOGICAL_ERROR (Left and right columns have same names) في مُحسِّن ترتيب الربط، كان يمكن أن ينجم عن ربط بفاصلة على عرض متعدد الجداول عند تفعيل query_plan_merge_expression_into_join. #110227 (Groene AI).
  • أصبح تقدير عدد الصفوف في ترتيب الربط يركّب إحصاءات الأعمدة على الأجزاء المتبقية بعد تقليم القسم/المفتاح الأساسي، بدلًا من جميع الأجزاء النشطة. سابقًا، كان يُخطط لاستعلام مقتصر على قسم صغير باستخدام إحصاءات الجدول بالكامل (ولوحظت مبالغة بمقدار 2500 ضعفًا في تقدير عدد الصفوف أدت إلى تبديل جانب البناء في ربط التجزئة)، وكان تعطيل الإحصاءات، على نحو متناقض، ينتج خطة أفضل. أُصلح أيضًا: كان FINAL الكسول يُعطّل بصمت لعلاقات MergeTree ضمن JOIN لأن نتيجة تحليل الفهرس المخزنة مؤقتًا في مُحسِّن ترتيب الربط كانت تُعامل خطأً على أنها إسقاط مطبّق. #110283 (Sergey Kuznetsov).
  • إصلاح النتائج الخاطئة من الاستعلامات الفرعية ذات القيمة المفردة المترابطة عندما يحتوي الاستعلام الخارجي على قيم مكررة للعمود المترابط ويُفك ارتباط الاستعلام الفرعي عبر مسار CROSS JOIN. سابقًا، كانت التجميعات مثل count() وsum() تُضرب في عدد التكرارات. يؤثر ذلك في الميزة التجريبية allow_experimental_correlated_subqueries. #110311 (Groene AI).
  • إصلاح خطأ منطقي (Function node with name '...' is not resolved as ordinary function) كان يمكن أن يحدث عند تفعيل optimize_or_like_chain إذا ظهرت دالة تجميع أو دالة نافذة في الطرف الأيسر من LIKE/ILIKE/match ضمن سلسلة OR. #110641 (Groene AI).
  • إصلاح حالة كان فيها TTL ... DELETE WHERE <cond> لا يحذف أبدًا الصفوف التي بدأت تطابق <cond> بسبب ALTER TABLE ... UPDATE على عمود مُشار إليه في WHERE. يعيد التعديل الآن حساب TTL للصف، بحيث تُحذف الصفوف المنتهية الصلاحية التي أصبحت مطابقة حديثًا بدلًا من الاحتفاظ بها بصمت. #110648 (Groene AI).
  • إصلاح تسرب في المحاسبة ضمن تتبع الذاكرة: عندما كان متعقب ذاكرة رئيسي يرفض تخصيصًا (مثل حد الذاكرة على مستوى الخادم)، كانت المتعقبات على مستوى الخيط والاستعلام والمستخدم تحتفظ بالمقدار المرفوض. كان الخطأ يتراكم بمرور الوقت، مما يضخم MemoryTracking واستخدام الذاكرة لكل استعلام ولكل مستخدم، وقد يؤدي إلى أخطاء MEMORY_LIMIT_EXCEEDED زائفة. #110784 (Seva Potapov).
  • إصلاح تسلسل WKB غير القياسي لمضلع فارغ: يُنتج wkb(POLYGON EMPTY) الآن numRings = 0 بدلًا من حلقة زائفة واحدة تضم صفر نقاط، بحيث تحافظ عملية WKB ذهابًا وإيابًا لمضلع فارغ قياسي على هويته. #110796 (Groene AI).
  • يُصلح حالة فشل عند استخدام الأسماء المستعارة لأعمدة تعبير الجدول الشائع مع استعلامات INTERSECT أو EXCEPT، مثل WITH t (a, b) AS (SELECT 1, 2 INTERSECT SELECT 1, 2) SELECT a, b FROM t، إذ كان الاستعلام يفشل بالخطأ UNKNOWN_IDENTIFIER. يُغلق #104770. #110885 (Yarik Briukhovetskyi).
  • أُصلح خطأ std::length_error (LOGICAL_ERROR) عند قراءة جدول MergeTree باستخدام قيمة غير اعتيادية لـ max_streams_for_merge_tree_reading (قريبة من الحد الأقصى لـ UInt64) مع allow_asynchronous_read_from_io_pool_for_merge_tree = 1. يُقيَّد الإعداد الآن بالحد الأعلى نفسه الخاص بـ max_threads. #110936 (Groene AI).
  • يُصلح تعطلًا (إلغاء إسناد مرجع لمؤشر فارغ أثناء تحليل الاستعلام) عند استدعاء getSubcolumn على وسيطة JSON ذات اسم عمود فرعي لتلميح نوع داخلي، أي اسم يبدأ بعلامة نوع backtick. #110940 (Groene AI).
  • أُصلح الخطأ Nested type LineString cannot be inside Nullable type (ILLEGAL_TYPE_OF_ARGUMENT) عند قراءة عمود مكاني قابل للقيم الفارغة من MySQL (LINESTRING أو POLYGON أو MULTILINESTRING أو MULTIPOLYGON أو MULTIPOINT أو GEOMETRY العام) عبر دالة الجدول mysql أو محركات الجدول/قاعدة البيانات MySQL. تستخدم هذه الأعمدة الآن Nullable(String) كبديل، للاحتفاظ بالقيمة كما تُرجعها MySQL (بادئة SRID بحجم 4 بايت، تليها حمولة WKB). ويظل POINT مُعيّنًا إلى Nullable(Point). #110943 (Groene AI).
  • يُصلح تسلسل Native لمُغلِّفات SimpleAggregateFunction التي تحتوي على حالات تجميع ذات إصدارات للنظراء الأقدم. #110997 (Groene AI).
  • أُصلح الخطأ LOGICAL_ERROR: ReadBuffer is canceled. Can't read from it. الذي قد يحدث في ربط grace_hash عند فشل قراءة الكتل المُفرَّغة أثناء القراءة، بينما تشترك خيوط متعددة في القارئ. #111056 (Groene AI).
  • يُحتسب كل مفتاح SSH الآن بشكل منفرد ضمن حد max_authentication_methods_per_user، لذا يُطبَّق الحد بصورة متسقة بغض النظر عن الصياغة. سابقًا، كانت المفاتيح المتعددة في أسلوب ssh_key واحد تُحتسب كمفتاح واحد. #111181 (Yecine Megdiche).
  • يُصلح خطأ LOGICAL_ERROR (Reading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query plan) عند قراءة تعبير جدول شائع مُجسَّد معاد استخدامه (enable_materialized_cte) في فرع يُتجاهل فيه مخرج WITH TOTALS أو extremes، بما في ذلك التجميع الخارجي وINSERT ... SELECT وعمليات المجموعات وEXPLAIN ANALYZE. #111194 (Groene AI).
  • أُصلح map[key] الذي كان يُرجع قيمة مفتاح مكرر لاحق بدلًا من الأول. عندما يحتوي عمود Map على مفاتيح مكررة، قد تعتمد نتيجة map[key] على الصفوف السابقة في الكتلة نفسها وعلى إعداد optimize_functions_to_subcolumns، لذا قد تختلف نتائج SELECT وWHERE للصف نفسه. #111246 (Groene AI).
  • إصلاح خطأ منطقي !rhs_literal->getValue().isNull() في مُحسِّن التعبيرات المنطقية عند مقارنة سلسلة AND عمودًا بثابت قيمته NULL ومن نوع غير Nullable (مثل Variant بقيمة NULL)، مع use_variant_default_implementation_for_comparisons = 0. #111292 (Groene AI).
  • إصلاح أخطاء NOT_FOUND_COLUMN_IN_BLOCK / THERE_IS_NO_COLUMN (وكذلك نتائج خاطئة بصمت في بعض الإصدارات) في RIGHT JOIN عند تعيين parallel_replicas_min_number_of_rows_per_replica وإسقاط عمود من الجدول الأيسر. #111332 (Groene AI).
  • أصبح RESTORE ينفذ الآن fsync لملفات الأجزاء المستعادة عندما يكون fsync_after_insert مفعّلًا في الجدول الوجهة، بحيث يصبح الجزء المستعاد مقاومًا لفقدان الطاقة بالقدر نفسه الذي يتمتع به الجزء المُدرج. سابقًا، كانت الملفات المستعادة تُكتب وتُغلق فقط (من دون تنفيذ fsync)، لذا قد يؤدي فقدان الطاقة مباشرةً بعد أن يعيد RESTORE القيمة RESTORED إلى تلف الأجزاء وترك الجدول فارغًا. #111378 (Groene AI).
  • إصلاح نافذة نادرة لفقدان بيانات Keeper على أقراص اللقطات المحلية: ينفذ مسار كتابة اللقطة الآن fsync لدليل اللقطة بعد إزالة وسم tmp_، لذلك لم يعد فقدان الطاقة قادرًا على فقدان عملية إزالة الوسم مع الإبقاء على محتوى اللقطة. سابقًا، كان مثل هذا التعطل يجعل Keeper يتعامل مع لقطة سليمة ومتزامنة بالكامل على أنها غير مكتملة ويحذفها عند إعادة التشغيل، مما يؤدي إلى فقدان عمليات كتابة تم تأكيدها حتى مع force_sync=true. لا يشمل ذلك أقراص اللقطات المدعومة بتخزين الكائنات. #111397 (Groene AI).
  • إصلاح قراءة خارج الحدود (في إصدار الإنتاج) / خطأ منطقي (في إصدار التصحيح) في تحسين الإظهار الكسول، وخطأ منطقي في Pipe::unitePipes لجداول Merge، عندما يترك تحسين القراءة المباشرة من فهرس النص عمودًا افتراضيًا غير مستخدم للفهرس في ترويسة القراءة لجدول MergeTree يحوي عدة فهارس text. #111467 (Groene AI).
  • إصلاح مشكلة كان فيها العمود الافتراضي _time في دوال الجداول url/urlCluster يساوي دائمًا NULL في الإصدارات المبنية على musl، بسبب تحليل غير قابل للنقل لترويسة HTTP Last-Modified. #111619 (Konstantin Bogdanov).
  • إصلاح LOGICAL_ERROR (Cannot create part with type Compact and storage type Full because table does not support polymorphic parts) الذي يحدث عندما يحمّل جدول MergeTree جزءًا موجودًا مسبقًا من نوع Compact بينما تعطل إعداداته الحالية الأجزاء متعددة الأشكال (الدقة غير التكيفية). قد يحدث ذلك، على سبيل المثال، عندما يشارك جدول للقراءة فقط مسارًا على القرص مع جدول آخر ويعيد تحميل أجزائه عبر SYSTEM RESTART DISK أو عند بدء تشغيل الخادم. في إصدارات التصحيح وإصدارات sanitizer، يؤدي الاستثناء إلى إيقاف الخادم. #111626 (Groene AI).
  • إصلاح فشل CREATE TABLE ... ENGINE = KeeperMap بسبب Coordination error: No node, path .../metadata/drop_lock_version عندما يُحذف جدول آخر على مسار Keeper نفسه بالتزامن. يتعامل الإنشاء الآن مع الشجرة الفرعية للبيانات الوصفية التي اختفت باعتبارها عملية تنظيف مكتملة، ثم يعيد المحاولة، كما يفعل بالفعل في الحالة نفسها بعد تعليمة واحدة. #111966 (Groene AI).
  • إصلاح حالة تسابق بين mutation في ReplicatedMergeTree وإزالة الأدلة المؤقتة القديمة، كان يمكن أن تؤدي إلى نشر جزء مُعدّل مع فقدان بعض ملفاته، مما يتسبب في فشل قراءة ذلك الجزء وجميع تعديلاته اللاحقة. #111992 (Alexey Milovidov).
  • إصلاح quantileDeterministic وquantilesDeterministic وmedianDeterministic التي كانت تُرجع نتائج مختلفة للبيانات نفسها عند كل تشغيل عندما يستخدم الاستعلام النسخ المتماثلة المتوازية أو جدولًا موزعًا أو تجميعًا خارجيًا، أو عند تخزين الحالات في جدول (بما في ذلك داخل قيمة Dynamic). تحتفظ الحالات المكتوبة قبل هذا الإصدار باستخدام تهجئة النوع غير المُرقّمة بسلوكها السابق، إذ لا يمكن تغيير بنيتها. #112052 (Alexey Milovidov).
  • إصلاح إسقاط serialize_string_in_memory_with_zero_byte من خطة الاستعلام المُسلسلة. مع serialize_query_plan = 1، كان يمكن لعنقود يعمل مع تعطيل هذا الإعداد أن يختلف فيه التمثيل النصي في الذاكرة بين البادئ والعقدة التي تنفذ الخطة بعد إلغاء تسلسلها، لأن الإعداد كان يُقرأ عند إلغاء التسلسل لكنه لا يُكتب عند التسلسل، وبالتالي كان يُضبط دائمًا على قيمته الافتراضية في العقدة المنفذة. #112131 (Groene AI).
  • إصلاح عرض إطار مكدس على أنه ? بدلًا من اسم دالته في رسائل السجل الفادحة وفي العمود trace_full من system.crash_log. أثّر ذلك في إطارات الدوال العادية التي تُنسب شفرتها إلى ترويسة __functional من libc++، وهو أمر شائع في إصدارات الإصدار النهائي. #112152 (Alexey Milovidov).
  • إصلاح حالات فقدان الصفوف بصمت عندما يرشّح استعلام باستخدام intDiv(constant, key) أو divide(constant, key). يُبلغ تحليل المفتاح الأساسي والقسم عن اتجاه رتابة خاطئ لثابت مقسوم على عمود مفتاح، فتُستبعد الحبيبات المطابقة ويُرجع الاستعلام عددًا أقل من الصفوف دون خطأ. يصلح أيضًا intDiv مع مقسوم ثابت غير موقّع تكون بتّه العليا مضبوطة، ويمنع اعتبار العملية رتيبة عندما يجعل معامل Decimal القسمة تُحسب بالعرض الأصلي للعدد العشري، ويمنع تحليل المفتاح من إصدار Cannot compare DB::IPv4 with long لاستعلام صالح يقسم ثابت IPv4/IPv6 على عمود مفتاح. #112156 (Groene AI).
  • إصلاح تعليق DROP TABLE ... SYNC إلى الأبد عندما كان استعلام على system.replicas قد أُنهي قبل معالجة طلبات الحالة الخاصة به. #112164 (Nikolay Degterinsky).
  • إصلاح إنهاء الخادم (SIGABRT) عندما تُرجع دالة WebAssembly UDF من نوع BUFFERED_V1 مخزن نتائج مؤقتًا فارغًا؛ يفشل الاستعلام الآن بخطأ WASM_ERROR يمكن التقاطه، ويظل الخادم قيد التشغيل. #112182 (Nikolai Ovchinnikov).
  • إصلاح استخدام الذاكرة بعد تحريرها عندما كان JOIN مع join_algorithm = 'direct' على قاموس يتلقى مفتاح ربط مخزنًا بتسلسل متفرق. كانت getColumnVectorData تُرجع مرجعًا إلى عمود مؤقت، لذا كانت عملية البحث في القاموس تقرأ ذاكرة محررة: قد تُرجع إصدارات الإصدار النهائي نتائج خاطئة، بينما كانت إصدارات التصحيح أو sanitizer تتوقف. #112327 (Groene AI).
  • إصلاح حالات لم تُطبّق فيها سياسة الصفوف على إسقاطات MergeTree أثناء تنفيذ الاستعلام. #112329 (Yarik Briukhovetskyi).
  • تم إصلاح تلف البيانات عند الإدراج في جدول Iceberg يتم الوصول إليه عبر MATERIALIZED VIEW. كان ملف البيانات يُكتب باستخدام أنواع أعمدة الهدف وقت CREATE بدلًا من مخطط Iceberg الحالي، لذا كانت قيمة DateTime تُخزَّن كقيمة Avro int مجردة وتُقرأ لاحقًا على أنها ميكروثوانٍ، بينما تعذرت قراءة الملف نهائيًا مع DateTime64(0) أو DateTime64(9). ونتيجة لذلك، أصبح INSERT INTO <materialized view> على هدف يكون مخطط Iceberg الخاص به أوسع من الأعمدة المعلنة للعرض يطلق الآن الخطأ TYPE_MISMATCH بدلًا من كتابة صف تالف. #112359 (Groene AI).
  • لم يعد Keeper يرفض طلب Set ذا البيانات الفارغة عندما يتجاوز max_memory_usage_soft_limit. فلا يمكن لمثل هذا الطلب زيادة كمية البيانات المخزنة، وكان رفضه يمنع العملاء من إعادة إنشاء جلستهم، ما قد يُبقي الجداول في وضع القراءة فقط طوال مدة حدث الذاكرة في Keeper. #112386 (Shaohua Wang).
  • تم إصلاح مشكلة خروج تابع Keeper من النصاب لفترة طويلة، ما كان يتسبب في أخطاء Session expired جماعية، بعد تثبيته بنجاح لقطة كبيرة: كان القائد يتجاهل إقرار التابع إذا استغرق تطبيق اللقطة وقتًا أطول من مهلة تثبيت اللقطة، ثم يُرجع فهرس سجل ذلك التابع بمقدار إدخال واحد في كل رحلة ذهاب وإياب. أُضيف أيضًا إعداد Keeper ‏nuraft_snapshot_sync_ctx_timeout_ms للتحكم في هذه المهلة، التي لم يكن يمكن تغييرها سابقًا إلا عبر raft_limits_response_limit، وبالتالي لم يكن ذلك ممكنًا دون إبطاء اكتشاف النظراء المتوقفين أيضًا. #112405 (Shaohua Wang).
  • إصلاح سباقات البيانات في أحداث الملف التعريفي ومتتبع الذاكرة. #112466 (Miсhael Stetsyuk).
  • إصلاح خطأ متعلق بالأمان. #112479 (Kseniia Sumarokova).
  • إصلاح قراءة فهرس ثانوي قديم (فهرس تخطٍّ) بعد تغيير نوع عبر ALTER TABLE ... MODIFY COLUMN لم تُنفَّذ العملية التحويرية الخاصة به مطلقًا، مثلًا لأن KILL MUTATION أزالها: كانت الحبيبات على القرص تُكتب بالنوع القديم، لكن تُفك شفرتها بالنوع الجديد، ما يؤدي إلى إطلاق LOGICAL_ERROR أو طلب تخصيصات بحجم عدة إكسابايت أو إرجاع نتيجة خاطئة بصمت. ويصلح أيضًا النتائج الخاطئة من فهرس فوق تعبير يتغير معناه رغم بقاء جميع البايتات المخزنة متطابقة، فلا تُنشأ أي عملية تحوير إطلاقًا، مثل MODIFY COLUMN الذي يغير المنطقة الزمنية لـ DateTime فقط، أو اسم نوع مخصص فقط، مثل تغيير UInt8 إلى Bool. يُتخطى هذا الفهرس الآن للجزء المتأثر. يغلق #112213. #112484 (Groene AI).
  • تم إصلاح تعطل عند قراءة ملف Parquet ذي بيانات وصفية غير متسقة لمرشح bloom. وكان يمكن لهذه الملفات أيضًا أن تعيد بصمت عددًا من الصفوف أقل مما ينبغي. #112498 (Shaohua Wang).
  • إصلاح سباق بيانات في readBigAt ضمن AsynchronousBoundedReadBuffer. يغلق #109678. #112573 (Kseniia Sumarokova).
  • إصلاح عدم ظهور قائمة الأسماء المستعارة للأعمدة، مثل (SELECT 1) AS t(x) أو WITH t(x) AS (SELECT 1)، داخل دالة الجدول view، إذ كان المرجع إلى t.x يفشل بالخطأ UNKNOWN_IDENTIFIER رغم أن البنية نفسها تعمل خارج view. #112690 (Groene AI).
  • أُصلح الخطأ المنطقي SortingAggregatedTransform already got bucket with number N الذي قد يحدث في استعلامات GROUP BY الموزعة متعددة الطبقات التي تستخدم التجميع ثنائي المستوى. #112794 (Nikita Taranov).
  • أُصلحت مشكلة كانت تؤدي إلى توقف جدول NATS المعيَّن له nats_stream عن استهلاك أي بيانات بصمت بعد إعادة تشغيل خادم NATS. يُعاد الآن إنشاء اشتراك JetStream تلقائيًا بدلًا من الحاجة إلى DETACH TABLE وATTACH TABLE. #112828 (Groene AI).
  • أُصلح تصنيف خطأ عابر في Azure Blob Storage على مسار القراءة أو الدمج — مثل 403 Forbidden أثناء نشر صلاحيات RBAC، أو فشل مصادقة بيانات الاعتماد، أو مهلة اتصال تظهر كـ408 — على أنه غير قابل لإعادة المحاولة والإبلاغ عنه كـPOTENTIALLY_BROKEN_DATA_PART (الرمز 740)، مما كان يطلق تنبيهًا حرجًا خاطئًا لجزء بيانات سليم. تُعامل هذه الإخفاقات العابرة الآن على أنها قابلة لإعادة المحاولة، بينما يظهر الإخفاق المستمر فعليًا كخطأ Azure عادي بدلًا من جزء بيانات معطوب وهمي. #112871 (Arsen Muk).
  • أُصلح عدم تسجيل حذف الكائنات دفعيًا في Azure لأي أحداث Delete في system.blob_storage_log عند فشل طلب الدفعة نفسه، مما كان يترك الدفعة بأكملها دون تسجيل. يُسجَّل الآن حدث Delete لكل كائن عند حدوث فشل على مستوى الدفعة. #112873 (Arsen Muk).
  • أُصلح فقدان فهرس MinMax لكل جزء على _block_number و_block_offset بعد إعادة تحميل جدول، عندما يكون الجزء ناتجًا عن عملية mutation لا تعيد كتابة الجزء بأكمله. #112878 (Alexey Milovidov).
  • أُصلح خطأ منطقي ونتائج غير صحيحة عندما يحتوي شرط JOIN ON غير متكافئ، يُقيَّم أثناء الربط، على arrayJoin. ترفض الآن عمليات الربط hash أو parallel_hash أو grace_hash هذا الشرط مع INVALID_JOIN_ON_EXPRESSION. إذا كان التوسيع يعتمد على جانب واحد فقط، فانقله إلى ARRAY JOIN في استعلام فرعي قبل الربط؛ أما إذا كانت وسيطة arrayJoin تقرأ أعمدة من كلا الجانبين، فيجب إعادة هيكلة الشرط. #112889 (Groene AI).
  • أُصلحت النتائج غير الصحيحة لـORDER BY عند القراءة من جدول Merge فوق جداول Distributed: إذ كان يمكن إرجاع الصفوف بترتيب غير صحيح، وقد تغيب صفوف ينبغي أن تظهر في النتيجة عند استخدام LIMIT. #112931 (Alexey Milovidov).
  • أُصلح تحويل ثابت Bool في الطرف الأيمن من IN إلى String في الطرف الأيسر بصيغة '1'/'0' بدلًا من الصيغة القياسية 'true'/'false'، ليصبح متسقًا مع CAST ودالة الجدول values. #113051 (Yakov Olkhovskiy).
  • أُصلح عمود views في query_log لعمليات الإدراج في جدول Alias الذي يؤدي هدفه إلى تشغيل العروض المادية، إذ كان فارغًا دائمًا. #113076 (Enric Calabuig).
  • أُصلح LOGICAL_ERROR عند قراءة جدول يحتوي على فهرس تخطٍّ set معرّف على تعبير، ويكرر الاستعلام هذا التعبير بمعامل Nullable، مثل WHERE intDiv(id, (SELECT 1000)) = 3 مع INDEX b_set intDiv(id, 1000) TYPE set(100). ويكفي استعلام فرعي قيَمي لإثارة الخطأ، لأنه من النوع Nullable. #113244 (George Larionov).
  • إصلاح خطأ منطقي (استثناء) Chunk info was not set for chunk in MergingAggregatedTransform عند تفعيل الإعداد inject_random_order_for_select_without_order_by وقراءة استعلام تجميعي من جدول Merge يحتوي على جدول فرعي Distributed: لم يعد الغلاف العشوائي ORDER BY rand() يُحقن في الاستعلامات التي لا تُخطط إلا حتى مرحلة وسيطة. #113266 (Alexey Milovidov).
  • إصلاح توقف في تحسين خطة الاستعلام عندما تحتوي عبارة WHERE على ثابت سلسلة كبير يحوي نقاطًا كثيرة، ويحتوي الجدول على فهرس تخطٍ من نوع bloom_filter أو tokenbf_v1 أو ngrambf_v1 أو text. كانت مطابقة اسم عمود التصفية مع أعمدة الفهرس JSONAllPaths(...) تُعدِّد جميع التقسيمات الممكنة للاسم عند كل نقطة، مما جعل بناء شرط فهرس التخطي ذا تعقيد تربيعي بالنسبة إلى طول الثابت. يغلق #113003. #113289 (Groene AI).
  • إصلاح ATTACH لجدول Kafka عندما يتجاوز kafka_num_consumers الحد المستمد من عدد أنوية CPU. #113390 (Nikolay Degterinsky).
  • إصلاح تعليق دائم في DROP TABLE وتسرب للذاكرة بعد فشل استعلام يستخدم تعبير جدول شائع مُجسَّد. كان الجدول يبقى عالقًا في قائمة انتظار الحذف حتى إعادة تشغيل الخادم. #113397 (Shaohua Wang).
  • إصلاح خطأ منطقي IDENTIFIER is not a table expression عند استخدام دالة جدول من عائلة remote مع وسيطة view(...) على الجانب الأيسر من JOIN ... USING، عندما يكون مفتاحها اسمًا مستعارًا في قائمة SELECT، مع analyzer_compatibility_join_using_top_level_identifier = 1. #113400 (Groene AI).
  • إصلاح قراءة جداول Paimon المقسمة حسب عمود TIMESTAMP بدقة أعلى من المللي ثانية، والتي كانت تفشل بالرسالة scale 6 is not supported, only support scale <= 3. يغلق #112768. #113401 (JIaQi Tang).
  • إصلاح خطأ segfault وخطأ LOGICAL_ERROR (No host found for exchange stream final_result__0_0) عندما يضبط استعلام فرعي distributed_plan_execute_locally في عبارة SETTINGS الخاصة به ضمن make_distributed_plan. كانت الخطة الموزعة والرمز الذي ينفذها يقرآن الإعداد من سياقين مختلفين وقد يختلفان، مما أدى إلى إنشاء المُبادِر مسار تنفيذ متناقضًا ذاتيًا. #113422 (Groene AI).
  • إصلاح قراءة جداول Paimon التي تحتوي على عمود ARRAY أو MAP قابل للقيم الخالية. لم يكن بالإمكان قراءة هذا الجدول إطلاقًا، لأن معيّن المخطط كان يغلّف النوع المركب في Nullable، وهو ما لا يسمح به ClickHouse، لذا كان كل من DESC وSELECT يفشلان بالرسالة Nested type Array(Nullable(Int32)) cannot be inside Nullable type. يُعيَّن الآن العمود المركب القابل للقيم الخالية إلى نوع مركب غير Nullable، وتُقرأ قيمة NULL كقيمة فارغة. يغلق #113337. #113450 (Groene AI).
  • إصلاح تقليم الأجزاء والحبيبات لشرط JOIN ON يتضمن أعمدة ثابتة من الجانب الآخر. #113484 (Vladimir Cherkasov).
  • أُوقفت كتابة جزء يكون فيه تخطيط Map متعارضًا مع بياناته الوصفية، وذلك لقيمة Map داخل عمود Dynamic. كانت الجداول التي لا تختلف إلا في map_serialization_version تشترك في كائن تسلسل واحد مخزّن مؤقتًا، لذا كان يمكن أن يحصل الجزء على تخطيط Mapbasic بينما تشير بياناته الوصفية إلى with_buckets، فتفشل قراءته لاحقًا بالخطأ LOGICAL_ERROR: Stream ...buckets_info ... is not found. تظل الأجزاء التي كتبتها إصدارات سابقة بهذه الطريقة غير قابلة للقراءة ويجب حذفها. #113514 (Groene AI).
  • أُصلح اعتماد نوع العمود المستنتج على ترتيب الاستعلامات السابقة لمصدر يُخزَّن مخططه مؤقتًا. كانت الإعدادات التي تغيّر نوعًا مستنتجًا غائبة عن مفتاح ذاكرة التخزين المؤقت لاستنتاج المخطط، لذا كانت قيمة الاستعلام الأول تحدد النوع الذي تراه جميع الاستعلامات اللاحقة: input_format_try_infer_exponent_floats وmax_parser_depth وinput_format_json_infer_array_of_dynamic_from_array_of_different_types، وبالنسبة إلى Parquet أيضًا input_format_parquet_local_time_as_utc وinput_format_parquet_allow_geoparquet_parser وinput_format_parquet_skip_columns_with_unsupported_types_in_schema_inference وschema_inference_make_json_columns_nullable. كما سُجّلت دالة جلب مفتاح ذاكرة التخزين المؤقت المفقودة لـ Form، وأصبحت دالة جلب Template تستخدم قاعدة الإفلات الخاصة بتنسيق الصفوف. #113533 (Groene AI).
  • أُصلح سباق بيانات نظري في أحداث ملف التعريف عند استخدام إعداد trace_profile_events_list لكتابة تتبعات المكدس لبعض أحداث ملف التعريف إلى system.trace_log. #113553 (Miсhael Stetsyuk).
  • أُصلح قبول RENAME DATABASE لاسم هدف طويل بما يكفي لجعل حذف جداول قاعدة البيانات مستحيلًا. أصبح فحص طول اسم الجدول يُنفّذ الآن بغض النظر عن check_table_dependencies، ويشمل أيضًا الجداول المنفصلة التي لم تكن تُفحص من قبل، ولذلك كانت متأثرة حتى بالإعدادات الافتراضية. يغلق #101747. #113557 (Groene AI).
  • أُصلح الخطأ LOGICAL_ERRORReading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query plan الذي كان يظهر عندما يقرأ جدول Merge له أكثر من جدول تابع تعبير جدول شائع ماديًا يشير إليه الاستعلام الخارجي. #113558 (Alexey Milovidov).
  • أُصلح تقييم سياسة صف تحتوي على استعلام فرعي قيَمي مرة واحدة فقط، ثم إعادة استخدام نتيجته إلى الأبد بعد قراءة الجدول عبر جدول Merge. تُخزَّن حالة السياسة المحللة مؤقتًا وتُشارك بين جميع الاستعلامات، وكانت قراءتها عبر Merge تعيد كتابة التعبير المخزّن مؤقتًا في موضعه، ما تسبب أيضًا في سباق بيانات بين الاستعلامات المتزامنة التي تستخدم السياسة نفسها. #113563 (Alexey Milovidov).
  • أُصلح الخطأ Unsupported JOIN keys of type keys256 in StorageJoin عند قراءة جدول بمحرك Join يكون مفتاحه مركبًا من عدة أعمدة، أو قيمة واحدة بحجم 16 أو 32 بايت مثل UUID أو Int256 أو FixedString(4). كان يمكن إنشاء مثل هذا الجدول والكتابة إليه وإجراء join معه، لكن لم يكن بالإمكان قراءته مجددًا باستخدام SELECT. يغلق #74362 و#77394. #113578 (Groene AI).
  • في واجهة الويب، لم يعد فتح رابط يتضمن run=1 يؤدي إلى تشغيل الاستعلامات تلقائيًا من عناوين URL الخاصة بعلامات التبويب الأخرى عند إعادة تحميل الصفحة التالية. #113595 (Alexey Milovidov).
  • أُصلح خطأ منطقي عند مقارنة مصفوفات يكون نوع عناصرها Nothing. #113609 (Groene AI).
  • تُبلغ النسخ الاحتياطية الآن عن خطأ الوصول الفعلي إلى ملف القفل بدلاً من الإبلاغ خطأً عن نسخة احتياطية متزامنة عندما يتعذر على وحدة التخزين الوجهة قراءة ملف .lock. #113637 (Kirill Shokhin).
  • إصلاح خطأ منطقي Sending a distributed query with unknown (zero) client version عند إرفاق أو تحميل جدول Distributed بلا بنية فوق جزء موزع بعيد من بيانات تعريف كتبها إصدار أقدم من الخادم. #113675 (Alexey Milovidov).
  • التعامل مع بايت NUL كمحرف حرفي عادي في أنماط match(). #113690 (Vitaly Baranov).
  • إصلاح theilsU ضمن إطار نافذة، إذ كان يعيد قيمة عشوائية بدلاً من 0 عندما تكون الوسيطة الأولى ثابتة ضمن الإطار. #113691 (Alexey Milovidov).
  • إصلاح Logical error: Duplicate announcement received for replica number N عندما تعتمد النسخ المتماثلة المتوازية التلقائية (automatic_parallel_replicas_mode) خطةً قُسّم متغيرها أحادي العقدة إلى أجزاء موزعة بواسطة query_plan_join_shard_by_pk_ranges. #113730 (Alexey Milovidov).
  • إصلاح CANNOT_CONVERT_TYPE واستثناء في GroupingAggregatedTransform عند قراءة جدول Merge يكون أحد جداوله الفرعية جدول Distributed ضمن النسخ المتماثلة المتوازية ذات المفتاح المخصص (parallel_replicas_mode = 'custom_key_sampling' أو 'custom_key_range'). يغلق #113741. #113742 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR عند استخدام SELECT لمُعدِّل STREAM على جدول مُسمّى مع النسخ المتماثلة المتوازية في وضع مهام القراءة. عند استخدام تعبير الجدول الشائع المُجسّد كمجموعة IN في PREWHERE، كان الخادم يثير Reading from materialized CTE ... DelayedPortsProcessor gate is missing in the query plan (ويتوقف الخادم في إصدارات التصحيح وإصدارات sanitizer). يُرفض الآن جدول يحمل STREAM عند طلب النسخ المتماثلة المتوازية: عند enable_parallel_replicas = 2 يفشل الاستعلام بـ SUPPORT_IS_DISABLED، وعند 1 يُنفّذ من دونها، تماماً كما يحدث مع FINAL. #113754 (Groene AI).
  • إصلاح تعطل الخادم عند إجراء JOIN بتعبير ON ثابت مع جانب أيمن يحتوي على ARRAY JOIN. إذ كانت قراءة عمود مُنسخ بتكاسل من الجانب الأيمن تستخدم ColumnReplicated مُحرَّراً. يغلق #113859. #113901 (Groene AI).
  • إصلاح السلوك غير المعرّف والنتائج الخاطئة في avg على Date/DateTime/DateTime64/Time/Time64: يُحسب المتوسط الآن بدقة باستخدام الأعداد الصحيحة، ما يصلح تجاوز السعة عند حد Int64 (UB، ونتيجة خاطئة على x86) وفقدان دقة Float64 فوق 2^53 (الظاهر على مقياس النانوثانية). #113912 (Alexey Milovidov).
  • إصلاح النتائج الخاطئة في JOIN مع join_algorithm = 'partial_merge' عندما يحتوي الجانب الأيمن على المجاميع: إذ كان يمكن أن يبقى الجانب الأيمن غير مدموج، فتستبدل عمليات LEFT JOIN القيم الافتراضية بالمطابقات الفعلية، ولا تعيد عمليات INNER/RIGHT JOIN أي صفوف. وفي مسار RIGHT/FULL غير المنضم، كانت الحالة نفسها تفك مرجع مؤشر فارغ، ما يؤدي إلى تعطل الخادم. #113936 (Groene AI).
  • تم إصلاح عيب في تكاملات MySQL كان يسمح بتجاوز بيانات اعتماد TLS لمجموعة مسمّاة بقيمة فارغة لـ ssl_ca_pem/ssl_cert_pem/ssl_key_pem عندما كانت المجموعة تخزن بيانات الاعتماد بصيغة المحتوى، ما يؤدي بصمت إلى إسقاط CA أو شهادة العميل المُعدّة بدلًا من رفض التجاوز. #113947 (Alexey Milovidov).
  • إصلاح استثناء std::out_of_range (Logical error: 'std::exception. Code: 1001, type: std::out_of_range'، والذي يؤدي أيضًا إلى إيقاف الخادم في إصدارات التصحيح وإصدارات sanitizer) في قارئ Parquet v3، عندما كان يُجدوَل فك ترميز عمود مطلوب فقط لتقييم عامل التصفية بعد أن كانت خانة الإخراج الخاصة به قد أُسقطت بالفعل. #113956 (Groene AI).
  • إصلاح خطأ منطقي (Unexpected return type) عند دفع عامل تصفية إلى التخزين لعرض يختلف نوع عموده عن التخزين الأساسي (مثل information_schema.tables، حيث يكون engine من النوع Nullable(String)، فوق system.tables حيث يكون من النوع String). #113984 (Alexey Milovidov).
  • إصلاح مشكلة تمنع ClickHouse Keeper من البدء مع CORRUPTED_DATA بعد تعطل أثناء اقتطاع سجل Raft عبر المقاطع (writeAt)؛ إذ كان ذلك قد يترك إدخال سجل مؤكّدًا عالقًا خلف مقاطع قديمة من سجل التغييرات. #114003 (Nishant Agarwal).
  • أصبح يُرفض الآن جدول أو قاعدة بيانات يُستبدل اسمها في مسار ZooKeeper لـ ReplicatedMergeTree عبر الماكرو {database} أو {table} إذا لم يكن الاسم مكوّن مسار آمنًا واحدًا. سابقًا، كان الاسم الذي يحتوي على / يُدرج دون تهريب، ما يؤدي إلى تسجيل الجدول لعُقد znode الخاصة به ضمن الشجرة الفرعية لـ Keeper لجدول آخر وتعطيل ALTER وOPTIMIZE فيها بشكل دائم. كما تُرفض المكوّنات . و.. وأحرف التحكم وبنية الماكرو. وتستمر الجداول الحالية في التحميل والإرفاق. #114006 (Groene AI).
  • إصلاح تسرّب للذاكرة مع optimize_aggregation_in_order = 1 عندما يكون مفتاح فرز الجدول بادئة فعلية لمفتاح GROUP BY وتُستخدم دالة تجميعية تمتلك حالتها ذاكرة كومة، مثل quantileDD. كانت ذاكرة الخادم تزداد مع كل استعلام من هذا النوع حتى إعادة التشغيل. #114010 (Groene AI).
  • إصلاح خطأ منطقي عندما تحتوي خطة تنفيذ استعلام موزّع على دالة نافذة تنتج حالة دالة تجميعية، مثل theilsUState(a, b) OVER (ORDER BY a) مع make_distributed_plan = 1. يؤثر ذلك في عائلات cramersV وcramersVBiasCorrected وtheilsU وcontingency. #114020 (Groene AI).
  • إصلاح نتائج خاطئة لـ SELECT DISTINCT مع LIMIT يتطلب قراءة كامل مدخلاته: كان LIMIT n WITH TIES يُسقط الصفوف المتعادلة، وكان exact_rows_before_limit = 1 يُبلغ عن قيمة مبتورة لـ rows_before_limit_at_least، وكان GROUP BY ... WITH TOTALS يحسب صف الإجماليات من بادئة التدفق. #114025 (Groene AI).
  • تم إصلاح تجاهل isProbablePrime على UInt128/UInt256 لـ max_execution_time وKILL QUERY. كانت كتلة من القيم كبيرة العرض تُنفّذ حتى الاكتمال ضمن استدعاء دالة واحد دون نقطة إلغاء، لذا كان يمكن أن يستمر الاستعلام لدقائق بعد تجاوز موعده النهائي. #114032 (Groene AI).
  • يُصلح صفًا مفقودًا في system.query_views_log لعرض مادي يفشل أثناء جمع تبعياته عند تفعيل materialized_views_ignore_errors. وفي إصدارات التصحيح وsanitizer، كان هذا يؤدي أيضًا إلى إجهاض الخادم باستخدام std::out_of_range بدلًا من تسجيل العرض. #114064 (Groene AI).
  • أُصلح الخطأ Code: 46. DB::Exception: Unknown function exists. (UNKNOWN_FUNCTION) الذي كان يحدث عندما تحتوي عبارة PREWHERE على شرط IN (subquery) ويُضبط rewrite_in_to_join = 1 (أو make_distributed_plan = 1، الذي يفعّله قسرًا). وكان الاستعلام نفسه عند كتابته باستخدام WHERE يعمل بصورة صحيحة. #114067 (RohithPariki).
  • أُصلح ORDER BY ... LIMIT الذي كان يعيد صفوفًا أقل من المطلوب، أو قد لا يعيد أي صفوف، عندما كانت سياسة الصف هي مرشح الاستعلام الوحيد وكان عمود الفرز يحتوي على فهرس تخطٍّ من نوع minmax. كان تحسين أعلى K يقيّد القراءة قبل تطبيق سياسة الصف. #114073 (Alexey Milovidov).
  • يُصلح hasAny وhasAll وhas وindexOf وmapContainsKey وmapContainsValue وmapContains التي كانت تعيد صفوفًا أقل من اللازم، أو تفشل بالخطأ TOO_LARGE_STRING_SIZE، عند الاستعلام عن فهرس bloom_filter باستخدام ثابت FixedString. كان الفهرس يحسب تجزئة الشكل المحشو للثابت، بينما تقارن الدالة الشكل غير المحشو، مما أدى إلى تخطي حبيبة مطابقة. #114089 (Alexey Milovidov).
  • أُصلح الخطأ LOGICAL_ERROR ‏“Not-ready Set is passed as the second argument for function globalNullIn” وفقدان رسالة الخطأ الفعلية للاستعلام، اللذان كانا قد يحدثان عندما ينفّذ تقليم الأجزاء بالإحصاءات استعلامًا فرعيًا IN/GLOBAL IN استباقيًا أثناء تحليل الفهرس ويفشل ذلك الاستعلام الفرعي. #114121 (Groene AI).
  • احترم إعداد allow_calculating_subcolumns_sizes_for_merge_tree_reading في تحسين PREWHERE. #114146 (Pavel Kruglov).
  • ارفض القاموس التالف أو الضار إذا تجاوز lcp الرمز السابق أو حدث تجاوز في lcp + data_size، قبل الكتابة إلى المخزن المؤقت. #114155 (Elmi Ahmadov).
  • أُصلحت min وmax على أعمدة DateTime64 التي كانت تعيد نتائج خاطئة بعد تصريف التجميع عبر JIT إذا احتوت البيانات على طوابع زمنية قبل عام 1970. لم يكن is_signed مخصصًا لـDateTime64 وTime64، اللذين يشتقان من Decimal64، لذا كانت الشيفرة المُولَّدة تقارن أعداد النبضات كأعداد صحيحة غير موقعة، فيفوز الطابع الزمني السابق لعام 1970 في max ويخسر في min. #114168 (Groene AI).
  • أُصلح استثناء عند قراءة جدول MergeTree باستخدام طبقات نطاق المفتاح الأساسي عندما تُنتج إحدى الطبقات مسارًا فارغًا. #114177 (Alexey Milovidov).
  • أُصلح رمز الخطأ المُبلّغ عنه لبعض الأعمدة ذات التسلسل Replicated المشوّهة المستلمة عبر البروتوكول الأصلي: تُرفض هذه الآن باستخدام INCORRECT_DATA بدلًا من LOGICAL_ERROR (الذي كان يجهض الخادم في إصدارات التصحيح وsanitizer). #114186 (Pavel Kruglov).
  • إصلاح فشل ATTACH PARTITION FROM وREPLACE PARTITION وMOVE PARTITION TO TABLE وإضافة نسخة متماثلة من ReplicatedMergeTree مع ظهور Tables have different ... أو METADATA_MISMATCH أو INCOMPATIBLE_COLUMNS في الجداول التي كُتبت تعريفاتها بأقواس زائدة، مثل PARTITION BY (a) وORDER BY (b) وINDEX ix (b * c) TYPE minmax وPROJECTION p (SELECT (b) ...) وCONSTRAINT c CHECK (a > 0) وTTL (d + INTERVAL 10 YEAR) أو DEFAULT (a + 1). #114188 (Alexey Milovidov).
  • إصلاح عدم تضمين ALP وFPC وGCD للمعلَمة المشتقة من النوع في تجزئة برنامج الترميز. في جزء Compact، يستخدم الكاتب تدفقًا مضغوطًا واحدًا مشتركًا لكل تجزئة مميزة لبرنامج الترميز، لذا تصادم عمودان بعرضَي قيم مختلفين يستخدمان برنامج الترميز نفسه، وتشاركا كائن برنامج ترميز واحدًا يحمل العرض الخاطئ. أدى ذلك إلى رفض عمليات الإدراج الصالحة مع CANNOT_COMPRESS عند اختلاف العروض، أو إلى ضغط أحد الأعمدة بكفاءة أقل مما ينبغي. #114189 (Groene AI).
  • إصلاح الخطأ std::out_of_range: map::at: key not found عندما يحتوي تعبير مفتاح MergeTree على استدعاء لـ mortonEncode أو hilbertEncode لا يشكّل بحد ذاته عمود مفتاح، مثل ORDER BY mortonEncode(hilbertEncode(x, y), x, y) أو PARTITION BY mortonEncode(x, y) % 4. #114233 (Groene AI).
  • إزالة LIMIT/OFFSET العاديين من استعلام مصدر الملء التاريخي لعرض النافذة. #114247 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR في arrayAutocorrelation عندما تكون الوسيطة مصفوفة غير فارغة من عناصر نوعها Nothing، مثل SELECT arrayAutocorrelation([arrayMax([])]). تُرفض هذه الوسيطة الآن بالخطأ ILLEGAL_COLUMN. وتبقى قيمة المصفوفة الفارغة الحرفية [] تُرجع []. #114249 (Groene AI).
  • إصلاح عدم انضمام خادم Keeper إلى المجموعة مطلقًا عند تفعيل nuraft_use_bg_thread_for_snapshot_io: إذ كانت دفعة السجل المرسلة إلى خادم قيد الانضمام تُسقَط بصمت، لذلك لم يكتمل تغيير العضوية مطلقًا. #114275 (Shaohua Wang).
  • إصلاح قراءة XDG_CACHE_HOME من XDG_STATE_HOME. #114278 (Alexey Milovidov).
  • تسجيل مساحة أسماء Iceberg في الكتالوج قبل كتابة ملفات الجدول (وهو مطلوب لـ SeaweedFS). #114285 (Azat Khuzhin).
  • إصلاح النتائج غير المتسقة عند دفع مرشح على عمود غير مفتاح في الجدول الأيمن إلى ما دون ANY INNER JOIN. #114313 (Kirill Shokhin).
  • إصلاح الإكمال التلقائي في bash مع bash-completion 2.12+ (_comp_get_words). #114339 (Azat Khuzhin).
  • يُصلح تعطلًا عند قراءة جدول بحيرة بيانات يعرّف مخططه عمودًا باسم فارغ. تُرفض بيانات Iceberg الوصفية غير الصالحة بالخطأ ICEBERG_SPECIFICATION_VIOLATION، ويُرفض المخطط الذي يوفّره كتالوج أو Delta Lake أو Paimon بالخطأ AMBIGUOUS_COLUMN_NAME. يجري هذا الفحص دون قيد، لذا يصبح جدول Iceberg الذي يحتفظ فقط بمخطط تاريخي غير مستخدم ذي اسم حقل فارغ غير قابل للقراءة أيضًا، بدلًا من التعطل عند قراءة ذلك المخطط. #114394 (Groene AI).
  • يُصلح خطأً كان قد يؤدي إلى احتجاز عميل يتصل بـ ClickHouse Keeper أثناء تغيير قائد Raft طوال مدة session_timeout_ms (30 ثانية افتراضيًا) قبل رفض اتصاله، بدلًا من رفضه فور إسقاط الطلب قيد الإرسال. يمكن للعميل المتصل الآن إعادة الاتصال بنسخة متماثلة أخرى في وقت أبكر. #114401 (Groene AI).
  • أصبح BACKUP وRESTORE وENGINE = Backup يتحققون الآن من صلاحية موقع النسخ الاحتياطي وفقًا لمنح SOURCES الخاصة بالمستخدم، بالطريقة نفسها التي تعمل بها s3() وfile() وazureBlobStorage(). سابقًا، كان يمكن لمستخدم يملك BACKUP دون SOURCES كتابة نسخة احتياطية إلى أي موقع يستطيع الخادم الوصول إليه وقراءة نسخة احتياطية منه. تتطلب كتابة نسخة احتياطية الآن صلاحية WRITE على مصدر الوجهة (WRITE ON S3، WRITE ON AZURE، WRITE ON FILE)، بينما تتطلب قراءتها READ؛ وتبقى وجهات Disk(...) مقيدة بـ backups.allowed_disk فقط. #114405 (Groene AI).
  • يُصلح تسرّب CREATE OR REPLACE لجدول داخلي باسم _tmp_replace_*، وفشل CREATE OR REPLACE VIEW بالخطأ NOT_IMPLEMENTED عند تعيين ignore_drop_queries_probability. إن عمليات DROP التي يُصدرها داخليًا هي خطوات ضمن عبارة مستخدم واحدة، لذا لم يعد حقن أخطاء DROP ينطبق عليها. #114420 (Groene AI).
  • أُصلح خطأ LOGICAL_ERROR ‏(Bad cast from type DB::ASTLiteral to DB::ASTPartition) وSQL منسق غير قابل للتحليل عند إقران أمر ALTER TABLE ... MOVE، الذي فُك تسلسله من JSON AST (dialect = clickhouse_json)، بصيغة PART مع TO TABLE أو بصيغة PARTITION مع TO SHARD. تُرفض هذه الحمولات الآن بالخطأ BAD_ARGUMENTS. #114429 (Groene AI).
  • لا تُزل الأعمدة عند الإشارة إليها في شرطي التصفية PREWHERE وWHERE معًا، حتى إذا أُعيدت كتابتها إلى عمود افتراضي لفهرس نصي. #114460 (Elmi Ahmadov).
  • أُصلح خطأ Not-ready Set is passed as the second argument for function 'in' عند إلغاء عملية mutation يتضمن predicate الخاص بها IN (subquery)، مثلًا بواسطة KILL MUTATION أو DETACH DATABASE، بينما لا تزال مجموعة الاستعلام الفرعي قيد الإنشاء. ذو صلة: #107619. #114463 (Groene AI).
  • أصبح ALTER TABLE ... DROP COLUMN لعمود مستخدم في مفتاح الفرز أو المفتاح الأساسي أو مفتاح التقسيم يفشل بالخطأ ALTER_OF_COLUMN_IS_FORBIDDEN مع توضيح، تمامًا كما يفعل ALTER TABLE ... CLEAR COLUMN. سابقًا، كان يفشل برسالة الخطأ المربكة UNKNOWN_IDENTIFIER: Missing columns الناتجة عن إعادة حساب تعبيرات المفتاح. ينطبق الأمر نفسه على إسقاط أو مسح مجموعة Nested كاملة باستخدام بادئتها المشتركة عندما يُستخدم عمود من المجموعة في مفتاح؛ إذ كان ذلك سابقًا قد يدمر بيانات المجموعة بصمت أو يترك عملية mutation لا تنتهي أبدًا. يؤدي إسقاط عمود مستخدم فقط في تعبير TTL الآن أيضًا إلى الإبلاغ عن تعبير TTL الذي يعطله. #114468 (Maksim Dergousov).
  • تم إصلاح قراءة عمود Tuple يكون عنصره الأول NULL في التنسيقات CustomSeparated وRegexp وTemplate باستخدام قاعدة الإفلات CSV. يشغل Tuple غير المغلّف حقلاً واحداً لكل عنصر في هذه التنسيقات، لذا فإن الحقل الأول \N يمثل ذلك العنصر لا العمود بأكمله. سابقاً، كان يُستهلك باعتباره العمود بأكمله، مما يؤدي إلى إزاحة حقول العناصر المتبقية إلى الأعمدة التالية، ولذلك لم يكن CustomSeparated يستطيع قراءة مخرجاته الخاصة. يغلق #114402. #114471 (Groene AI).
  • تم إصلاح إرجاع arrayExists(x -> x = needle, arr) نتيجة خاطئة، أو فشله مع TOO_LARGE_STRING_SIZE، عندما يكون عنصر المصفوفة والـ needle من أنواع String مختلفة (على سبيل المثال، needle من نوع String مقابل عنصر من نوع Array(FixedString(N))). كانت عملية التحسين optimize_rewrite_array_exists_to_has، المفعّلة افتراضياً، تعيد كتابة هذا الاستدعاء إلى has، الذي لا يقارن القيم المحشوة بأصفار بالطريقة نفسها التي يفعلها =. #114496 (Groene AI).
  • لم تعد قراءة جدول Iceberg تؤدي إلى إيقاف الخادم عندما تصف بياناته الوصفية تطوراً في المخطط تحظره مواصفة Iceberg. كان يُبلّغ عن أربعة انتهاكات للمواصفة في IcebergSchemaProcessor باعتبارها LOGICAL_ERROR، الذي يُعامل كتأكيد فاشل، أو كانت تصل إلى تأكيد قاتل دون تحقق؛ وهي الآن تثير ICEBERG_SPECIFICATION_VIOLATION. #114518 (Groene AI).
  • تم إصلاح قيام تنسيق الإدخال Regexp بتجاهل الجزء غير المحلل من حقل مطابق بصمت، مما كان يؤدي إلى تخزين قيمة مقتطعة أو مختلقة بدلاً من الإبلاغ عن خطأ: كانت قراءة v=-1 كـ UInt64 تعطي 0، وقراءة v=2020-01-01junk كـ Date تعطي 1975-07-14 وفق قاعدة JSON. تُرفض الآن الحقول غير الصالحة وفق قواعد Escaped وCSV وJSON، بما يتوافق مع التنسيقات الموثقة بأن هذه القواعد تحاكي سلوكها. وفق Raw، يُقرأ الآن الحقل المطابق الذي يحتوي على علامة تبويب كاملاً بدلاً من اقتطاعه عند علامة التبويب. #114520 (Groene AI).
  • تم إصلاح LOGICAL_ERROR عند تصفية عمود Iceberg جعلته ALTER TABLE ... MODIFY COLUMN من نوع Nullable. يغلق #85029. #114521 (Groene AI).
  • أصبح CREATE TABLE وALTER TABLE يرفضان برامج الترميز التي تسبب فقدان البيانات، مثل SZ3، في عمود مستخدم في مفتاح الفرز. #114531 (Groene AI).
  • تم إصلاح LOGICAL_ERROR عند قراءة جدول Delta Lake يحدد فيه metaData.partitionColumns عموداً لا يعرّفه metaData.schemaString. تُرفض هذه البيانات الوصفية الآن باستخدام BAD_ARGUMENTS في قارئ delta-kernel وباستخدام INCORRECT_DATA في القارئ القديم، كلما تمت قراءة الجدول أو مخططه من لقطة، وليس فقط عندما يتضمن الاستعلام predicate. #114538 (Groene AI).
  • رفض Variant تُقرأ فروع ORC الخاصة به كنوع واحد. #114540 (Groene AI).
  • تم إصلاح تقييم فهرس النص للعامل LIKE/ILIKE المبني على حاويات Map أو JSON. #114544 (Elmi Ahmadov).
  • دعم أسماء التسميات المقتبسة في معدِّلات التجميع في PromQL.. #114545 (Minh Vu).
  • يُصلح القيم الحرفية غير الصحيحة لـ Time64 وثوابت قائمة IN، التي غالبًا ما تكون إشارتها معكوسة، والناتجة عند إعادة تحجيم Decimal64 ذي مقياس أقل بما يؤدي إلى تجاوز Int64. يُبلّغ هذا التحويل الآن عن DECIMAL_OVERFLOW، بما يتوافق مع فرع DateTime64 وعبارة CAST الصريحة. #114546 (Groene AI).
  • قبول الفواصل الختامية في قوائم تسميات التجميع في PromQL. #114548 (Minh Vu).
  • يدعم أسماء المقاييس والتسميات الموضوعة بين علامتي اقتباس في محددات PromQL. #114551 (Minh Vu).
  • كان يمكن إلغاء استعلام قبل انقضاء max_execution_time بما يصل إلى 1 مللي ثانية، فيفشل برسالة متناقضة ذاتيًا: Timeout exceeded: elapsed 999.672 ms, maximum: 1000 ms. #114559 (Alexey Milovidov).
  • أُصلحت قراءة جدول أثناء تنفيذ mutation، إذ كان يمكن لعمود MATERIALIZED أن يعيد قيمة قديمة، كما كان اختيار هذا العمود مع عمود مُحدَّث قد يفشل بخطأ. #114561 (Shaohua Wang).
  • يُصلح قبول clickhouse-local لعبارة CREATE TABLE يكون اسمها أطول من المسموح به في --default_database المُهيأ، ما كان يؤدي إلى إنشاء جدول لا يمكن حذفه. يتحقق DatabaseOverlay الآن من طول اسم الجدول كما تفعل قاعدة البيانات الموجودة على القرص التي يكتب إليها. #114567 (Groene AI).
  • أُصلح تجاوز لآلية RBAC في محرك الجداول Alias كان يسمح للمستخدمين الذين لا يملكون امتيازات على الجدول الهدف بكشف مخططه وعدد صفوفه وحجمه ووجوده. #114596 (Kai Zhu).
  • أُصلحت إحصاءات جدول التجزئة — ومعها التخصيص المسبق لجدول تجزئة التجميع — التي كانت تُعطَّل بصمت وبشكل دائم على مستوى الخادم بأكمله عندما كان استعلام يستخدم تحسين FINAL الكسول (query_plan_optimize_lazy_final) أول عملية تجميع تُنفّذ بعد بدء تشغيل الخادم. #114597 (Alexey Milovidov).
  • أُصلح عمود أُعيدت تسميته وحُذف ثم أُضيف مرة أخرى ضمن ALTER واحد، إذ كان يعيد قيم العمود المحذوف بدلًا من قيمته الافتراضية بينما كانت mutation لا تزال معلقة. #114601 (Shaohua Wang).
  • أُصلحت حلقة لا نهائية وغير قابلة للإلغاء في الدالتين hop وwindowID عندما يكون مدى وسيطة interval بالثواني مضاعفًا لـ 2^32 (على سبيل المثال، toIntervalDay(2147483648)): إذ كان الطرح مع الالتفاف يتجاوز فحص تجاوز الوقت، ومع الوسيطات الثابتة كانت الحلقة تعمل أثناء التحليل، حيث لم يكن بالإمكان حتى قتل الاستعلام. وكان يمكن للفاصل الزمني نفسه أيضًا أن يجعل الخيط الخلفي لـ WINDOW VIEW يدور إلى الأبد؛ ويُرفض الآن إنشاء window view كهذا. #114607 (Alexey Milovidov).
  • يُصلح خطأً يُخزَّن فيه access entity يحمل إعدادًا بقيمة Map، مثل profile إعدادات يتضمن http_response_headers أو additional_table_filters، بصيغة لا يستطيع ClickHouse قراءتها مجددًا، مما يجعل الكيان غير قابل للتحميل بشكل دائم بعد إعادة التشغيل. #114620 (Groene AI).
  • أُصلح تسرّب target table السابق في refreshable materialized view عند تفعيل ignore_drop_queries_probability. إن عبارة DROP التي يُصدرها التحديث لتنظيف الهدف السابق هي خطوة من عملية التحديث، وليست DROP طلبها المستخدم، لذلك لم يعد حقن الأعطال ينطبق عليها. #114622 (Groene AI).
  • إصلاح الدوال has وindexOf وcountEqual وmapContainsKey وmapContainsValue والفهرسة الفرعية لـMap التي كانت تُرجع “غير موجود” عند استخدام قيمة ثابتة من LowCardinality كإبرة تساوي القيمة الافتراضية لنوع العنصر، مثل String فارغ أو الرقم صفر. #114624 (Groene AI).
  • إصلاح الخطأ المنطقي Multi-block postings must be compressed في الاستعلامات على الجداول ذات الفهرس النصي في وضع التطبيق الكسول لقائمة الترحيلات، عند إلغاء الاستعلام أثناء القراءة. #114636 (Anton Popov).
  • إصلاح تنسيق وسيط استعلام فرعي لدالتي الجدول view وviewIfPermitted عندما يحتوي الاستعلام المحيط على عبارة SETTINGS في نهايته. كان هذا الاستعلام يُنسَّق كـview((SELECT ...))، وهو ما لا يمكن تحليله مجددًا، لذا كان يفشل في فحص التنسيق-التحليل-التنسيق الداخلي ويُطلق الخطأ Inconsistent AST formatting. #114658 (Groene AI).
  • إصلاح تلف ذاكرة الكومة عند قراءة Parquet عبر تنسيق إدخال يمتلك مخزن القراءة المؤقت الخاص به، مثل قاموس يحتوي على SOURCE(FILE(... format 'Parquet')). كان بإمكان مهام الجلب المسبق وفك الترميز في الخلفية الاستمرار في القراءة والكتابة عبر المخزن المؤقت بعد أن يحرره خط الأنابيب، مما قد يؤدي إلى توقف الخادم. #114668 (Groene AI).
  • إصلاح قراءة عمود فرعي (.size0 أو .null أو عنصر من tuple أو String.size) عبر جدول Merge عندما يعرّف الجدول الأساسي العمود الأب باعتباره ALIAS. كانت هذه القراءة تُرجع القيمة الافتراضية للنوع، وعند اختيار العمود الأب في الاستعلام نفسه، كان يمكن أن تُرجع قيمة عمود غير ذي صلة. #114673 (Groene AI).
  • إصلاح ANY RIGHT JOIN وSEMI RIGHT JOIN عند وجود عدة شروط موصولة بـOR في قسم ON، حيث كانت تُرجع بعض صفوف الجدول الأيمن مرتين وتفقد المطابقات لبعض الصفوف الأخرى. تأثر أيضًا ANY LEFT JOIN المكتوب صراحةً، لأن المخطط قد يبدّل الجدولين وينفذه كـANY RIGHT JOIN. #114676 (Vladimir Cherkasov).
  • إصلاح النتائج غير الصحيحة لتحسين GROUP BY ... LIMIT البسيط (الإعداد optimize_trivial_group_by_limit_query) في الاستعلامات التي تتضمن DISTINCT أو QUALIFY أو دوال النوافذ أو arrayJoin في الإسقاط: إذ تستهلك هذه العناصر المجموعات أو ترشحها بعد التجميع، لذا قد يؤدي تقييد التجميع بمفاتيح LIMIT + OFFSET إلى إرجاع عدد قليل جدًا من الصفوف أو قيم خاطئة. لم يعد هذا التحسين يُطبّق على مثل هذه الاستعلامات. #114695 (Alexey Milovidov).
  • إصلاح الصفوف المفقودة من نتيجة SELECT المُرشَّحة بواسطة pointInPolygon على مفتاح أساسي في MergeTree، عندما يكون وسيط المضلع قيمة حرفية ثابتة غير صالحة وvalidate_polygons = 0. استمد تحليل المفتاح الأساسي استبعاد الـgranule من مضلع لم يتحقق من صحته مطلقًا، فاستبعد granules تحتوي على صفوف مطابقة. #114710 (Groene AI).
  • إصلاح تعطل الخادم الذي يحدث عند دمج حالات التجميع لمركبي -OrNull أو -OrDefault مع group_by_overflow_mode = 'any' وقيمة غير صفرية لـmax_rows_to_group_by، مثلًا عندما يقرأ الاستعلام عبر إسقاط تجميعي. #114740 (Groene AI).
  • إصلاح LOGICAL_ERROR (“Unexpected number of kept output positions after removing unused columns from ReadFromMergeTree”) الذي كان يُطلقه SELECT ... FINAL عندما يستخدم PREWHERE عمودًا يحتاجه FINAL للدمج (ver أو is_deleted أو sign) دون اختيار ذلك العمود. #114746 (Groene AI).
  • إصلاح خطأ منطقي (Block structure mismatch) عند قراءة جدول Merge مع تفعيل make_distributed_plan عبر العقد التابعة التي تتضمن عمليات مجموعات داخلية. #114753 (Alexey Milovidov).
  • رفض قيمة كبيرة بصورة غير معقولة لـ kafka_num_consumers مع رسالة خطأ واضحة، بدلًا من فشل تخصيص الذاكرة داخل محرك الجداول Kafka. سابقًا، عند تفعيل kafka_disable_num_consumers_limit، كانت هذه القيمة تؤدي إلى الاستثناء std::length_error. #114764 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR: Context has expired عند تقييم تعبير مخزّن يحتوي على accurateCastOrDefault أو الدالة to<Type>OrDefault بعد انتهاء الاستعلام الذي أنشأه، مثل القيمة الافتراضية لعمود MATERIALIZED في INSERT أو تعبير mutation. #114769 (Groene AI).
  • إصلاح LOGICAL_ERROR (Cannot find input column ... on its position in inputs of expression actions DAG) عندما يتضمن استعلام JOIN فوق جدول يُستخدم عموده المفهرس نصيًا في كلٍّ من مسندي البحث النصي PREWHERE وWHERE. #114771 (Groene AI).
  • إصلاح فقدان إشارة إيقاظ خيط إعادة التشغيل عند بدء التشغيل من خيط الإرفاق. #114802 (Azat Khuzhin).
  • كان OPTIMIZE TABLE على جدول لتخزين الكائنات لا يطبق محركه compaction يُبلغ عن نجاح العملية دون تنفيذ أي شيء. أصبح الآن يُصدر خطأً، مثل جميع المحركات الأخرى التي لا تدعم هذه العبارة. يؤثر ذلك في DeltaLake وPaimon وHudi ومحركات تخزين الكائنات الأساسية (S3 وGCS وCOSN وOSS وAzureBlobStorage وHDFS وURL المدعوم بتخزين الكائنات)؛ أما Iceberg، الذي يطبق compaction، فلم يتغير. يغلق #114765. #114805 (Groene AI).
  • كانت timeSeriesRange وtimeSeriesFromGrid تُصدران خطأ DECIMAL_OVERFLOW غير صحيح للطوابع الزمنية السابقة لعام 1970، لأن طوابعي البداية والنهاية الزمنيين كانا يُقرآن كقيم غير موقعة. كذلك، بالنسبة إلى الطوابع الزمنية من نوع DateTime/UInt32، كانت قيمة الخطوة تُقتطع بصمت إلى أدنى 32 بت. تُجرى الآن جميع الحسابات باستخدام Int64. #114815 (Vitaly Baranov).
  • إصلاح إجهاض للخادم (Logical error: Part patch-... doesn't exist) عند تنفيذ DROP TABLE بالتزامن مع UPDATE خفيف على جدول ReplicatedMergeTree. يحتفظ التحديث الآن بالقفل المشترك للجدول حتى يتم تثبيت جزء التصحيح الخاص به، لذا ينتظر DROP بدلًا من إزالته. #114826 (Groene AI).
  • إصلاح بعض الأخطاء في عمليات الإدراج غير المتزامنة (تعطل محتمل عند فشل بعض الاستعلامات بسبب MEMORY_LIMIT_EXCEEDED، وعدم عمل async_insert_queue_flush_on_shutdown مطلقًا). #114839 (Azat Khuzhin).
  • تم إصلاح LOGICAL_ERROR: Unexpected return type from tuple. Expected Tuple(..., UInt8). Got Tuple(..., LowCardinality(UInt8)) عند قراءة عمود LowCardinality مُقارَن بـ IN (subquery) عبر tuple(...) عند تجاوز حدّ استعلام فرعي ومع enable_analyzer = 0. مع analyzer القديم، يعيد x IN (subquery) لعمود LowCardinality الآن النوع LowCardinality(UInt8)، وهو نفس نوع x IN (literal list) ونفس النوع عند استخدام enable_analyzer = 1. #114856 (Nikita Fomichev).
  • كانت إعدادات حصة دوال الذكاء الاصطناعي (ai_function_max_api_calls_per_query، ai_function_max_input_tokens_per_query، ai_function_max_output_tokens_per_query) تُطبَّق لكل كتلة بدلاً من كل استعلام، مما كان يسمح للاستعلام بتجاوز الحد المُهيأ بما يتناسب مع عدد الكتل والخيوط المعالَجة. وهي الآن تقيّد الاستعلام بالكامل على كل خادم: حد استدعاءات واجهة برمجة التطبيقات سقف دقيق (بحجز ذري)، بينما تُطبَّق حدود الرموز المميزة بأفضل جهد. يفرض الاستعلام الموزع الحدود بشكل مستقل على كل خادم/جزء مشارك. #114885 (George Larionov).
  • إصلاح إيقاف الخادم الذي يحدث عندما يكون مجمع الخيوط العام مشبعًا مؤقتًا بينما لا تزال الجداول قيد التحميل. يواصل AsyncLoader الآن العمل إذا تعذّر عليه إنشاء عامل تحميل إضافي وكان أحد العمال سيستمر في معالجة المهام الموضوعة في قائمة الانتظار، بدلاً من استدعاء std::terminate. #114897 (Groene AI).
  • تم إصلاح سلوك غير معرّف ونتائج حدودية غير صحيحة في quantile وquantiles لقيم DateTime64 وقيم Decimal ذات العرض الكبير. #114919 (Alexey Milovidov).
  • إصلاح إيقاف الخادم عند وجود تذييل شريط ORC تالف. #114924 (Groene AI).
  • إصلاح تعطل محتمل بسبب استخدام ThreadGroup بعد تحريره (في عمليات INSERT غير المتزامنة/MVs/EXPLAIN ANALYZE). #114940 (Azat Khuzhin).
  • تم إصلاح تعليق عند حذف جدول TimeSeries يكون اسمه مرتّبًا معجميًا قبل أسماء جداوله الداخلية، مثل DROP TABLE `-ts`، أو عند حذف عرض مادي معلن باستخدام ENGINE = TimeSeries. كان الحذف يؤدي إلى حالة توقف ذاتي بسبب قفل DDL، ولم يكن بالإمكان إلغاؤه باستخدام KILL QUERY. #114953 (Groene AI).
  • إصلاح BAD_DATA_PART_NAME (“Trying to get part name in new format for old format version”) في ReplicatedMergeTree أُنشئ باستخدام الصياغة الموضعية Deprecated ضمن allow_deprecated_syntax_for_merge_tree. كان يمكن الإبلاغ عن mutation على أنها مكتملة في replica لم تطبقها، وقد يبقى الجدول في وضع readonly بعد إعادة التشغيل. #114980 (Groene AI).
  • إصلاح الخطأ المنطقي Not-ready Set is passed as the second argument for function 'in' في استعلام يحتوي على استعلام فرعي IN يقرأ من cluster بعيد: يفشل الاستعلام الآن بالخطأ الفعلي الصادر عن الاستعلام الفرعي، مثل فشل الاتصال. #114983 (Alexey Milovidov).
  • إصلاح خطأ منطقي في IN عند وجود Tuple غير ثابتة ومتطابقة على كلا الجانبين في analyzer القديم. #114988 (Groene AI).
  • إصلاح قراءة عنصر Tuple عبر تلميح لبنية Tuple موضعية. #115000 (Groene AI).
  • لا تنشئ أسماءً مستعارة لحالات التجميع المسبق لتجميع بحجم صفري في arrayReduceInRanges. #115008 (Groene AI).
  • تم إصلاح عملية INSERT في جدول Log أو TinyLog أو StripeLog التي تفشل عند تثبيت أحجام الملفات المسجلة. كان من الممكن أن تُبقي هذه العملية صفوفها في الجدول رغم إبلاغها عن خطأ، أو أن تترك ملفات بيانات عمود مصفوفة غير متسقة مع بعضها. تؤدي الآن قراءة جدول Log أو TinyLog يحتوي عمود مصفوفة فيه على عناصر فارغة بينما تشير إزاحاته إلى وجود عناصر إلى ظهور خطأ يذكر اسم العمود بدلاً من القراءة بعد نهاية العناصر. وكان عمود العناصر المكتوب جزئياً يُرفض بالفعل. #115027 (Groene AI).
  • إصلاح توقف المُجمِّع التكيفي في الأعمدة المنسوخة عند الطلب. #115034 (Groene AI).
  • تم إصلاح قراءة خارج الحدود في pointInPolygon عند استخدام مضلع ثابت ذي صندوق محيط غير محدود، مثلاً عندما يصل إحداثي إلى +-DBL_MAX. يُرفض هذا المضلع الآن باستخدام BAD_ARGUMENTS، ويُعامل المضلع ذو الحلقة الفارغة على أنه بلا مساحة داخلية. سابقاً، كان يمكن أن يعيد الاستعلام نتيجة خاطئة أو يتسبب في توقف الخادم في الإصدارات التي تُفعّل التحصين أو أدوات كشف الأخطاء. #115035 (Groene AI).
  • تم إصلاح استثناء out_of_range الذي كان يُثار كخطأ داخلي Code: 1001 عندما يحتوي نمط sequenceMatch أو sequenceCount أو sequenceMatchEvents على رقم الحدث 0، مثلاً sequenceMatch('(?0)'). يُرفض هذا النمط الآن باستخدام BAD_ARGUMENTS. وكان الشرط الزمني الذي يتضمن إشارة منفردة، مثل sequenceMatch('(?1)(?t>+)(?2)')، يُعامل بصمت على أنه (?t>0)، ويُرفض الآن باستخدام SYNTAX_ERROR. #115056 (Groene AI).
  • تم إصلاح الخطأ Found patch part ... that intersects mutation with version ... (LOGICAL_ERROR) في الجداول التي تستخدم التحديثات خفيفة الوزن. كان دمج أجزاء التصحيح قد ينتج تصحيحاً يمتد نطاق إصدارات بياناته عبر إصدار بيانات جزء موجود؛ ولا يمكن حينها تطبيق هذا التصحيح أو تجاوزه، لذا كانت كل عملية لاحقة على القسم تفشل ويتوقف طابور النسخ. لم تعد عمليات الدمج هذه تُسند. #115064 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR (Cache file segment is in detached state) عند القراءة عبر ذاكرة التخزين المؤقت لنظام الملفات باستخدام الإعداد التجريبي use_reader_executor. نتج هذا الانحدار عن #110029 ولم يُضمّن في أي إصدار، لذا لا حاجة إلى نقل الإصلاح إلى الإصدارات السابقة. #115070 (Groene AI).
  • خادم Arrow Flight: قبول بيانات اعتماد المصادقة Basic المرمّزة بـBase64 من دون حشو، كما ترسلها عملاء Flight المستندة إلى Go، مثل برنامج تشغيل ADBC Flight SQL، وإرجاع خطأ مصادقة مناسب بدلاً من الخطأ العام Unexpected error in RPC handling عندما يكون ترويس authorization غير صالح. #115085 (Alexey Milovidov).
  • إصلاح الإكمال التلقائي (التلميحات وإكمال TAB من system.completions) في العميل المضمّن الذي تستخدمه واجهة SSH والطرفية على الويب: كانت الاقتراحات تُحمّل عبر اتصال منفصل يصادق كمستخدم default بكلمة مرور فارغة، مما كان يفشل على الخوادم التي تكون لـdefault فيها كلمة مرور، ويكشف بخلاف ذلك أسماء الكيانات التي لا يملك المستخدم المسجل دخوله صلاحية الوصول إليها. تُحمّل الاقتراحات الآن عبر اتصال الجلسة نفسها. #115086 (Alexey Milovidov).
  • أُصلحت مشكلة تمنع الخادم من البدء بعد إنشاء جدول باستخدام CREATE TABLE ... AS url('http://host/**/', ...) مع تمكين allow_experimental_url_wildcard_from_index_pages. إذ كانت قراءة بيانات التعريف الخاصة بهذا الجدول تعيد إجراء التحقق التجريبي وتفشل بالخطأ SUPPORT_IS_DISABLED، مما يوقف عملية البدء. #115095 (Groene AI).
  • إعادة كتابة bucketIndexForTimestamp باستخدام حسابات 64 بت. #115097 (Vitaly Baranov).
  • أُصلح تنسيق ALTER TABLE ... MATERIALIZE INDEX وMATERIALIZE STATISTICS وMATERIALIZE PROJECTION، إذ كان يحذف عبارة IF EXISTS، وبالتالي لم يكن الاستعلام المنسّق هو الاستعلام الذي جرى تحليله. ورُفضت أيضًا أربع حمولات JSON لشجرة AST خاصة بـ ALTER ... STATISTICS لا يستطيع محلل SQL إنتاجها وتُنسَّق إلى أمر مختلف. #115099 (Groene AI).
  • أُصلح استثناء (Block structure mismatch in Expression for FilterSortedStreamByRange) في بعض استعلامات SELECT ... FINAL التي تستخدم PREWHERE على جدول يكون مفتاح فرزه تعبيرًا. #115113 (Shaohua Wang).
  • إصلاح تجاوزات CORS في واجهة CLI لـ clickhouse-local. #115129 (Alexey Milovidov).
  • تعطيل تحليل الفهرس الموزع مع الإسقاطات (لأنه يؤدي إلى نتائج غير صحيحة). #115132 (Azat Khuzhin).
  • أُصلح سلوك if وmultiIf الذي كان يعيد قيمة موجبة كبيرة بدلًا من قيمة سالبة عند دمج فرع Time مع Time64 أو DateTime أو DateTime64 وعندما يكون التعبير مُصرَّفًا بتقنية JIT. #115146 (Groene AI).
  • تتلقى الطرفية على الويب المضمنة في صفحة أخرى، مثل وحدة تحكم SQL أو play.html، بيانات اعتمادها من تلك الصفحة ولم تعد تفتح اتصالًا خاصًا بها قبل وصولها. سابقًا، كانت تتصل مرتين — مرة بكلمة مرور فارغة، ثم مرة أخرى ببيانات الاعتماد الفعلية — وتطبع Connecting... مرتين. #115148 (Alexey Milovidov).
  • أُصلحت النتائج غير الصحيحة عندما تحتوي عبارة WHERE على تعبير NULL ضمن NOT، مثلًا SELECT count() FROM t WHERE NOT (id >= 20 AND NULL). كان تحليل الفهرس يتعامل مع هذا الشرط باعتباره صحيحًا حتمًا على النطاق بأكمله، لذا جرى تجاوز المرشح: أعاد count() صفوفًا يرفضها الاستعلام، وأزال ALTER TABLE ... DELETE بهذا الشرط صفوفًا كان ينبغي الاحتفاظ بها. #115152 (Groene AI).
  • أُصلح فقدان EXPLAIN ANALYZE لإحصاءات الربط الخاصة بعرض مُعلن باستخدام SQL SECURITY DEFINER أو SQL SECURITY NONE ويحتوي نصه على JOIN. في إصدارات التصحيح والإصدارات التي تستخدم sanitizer، كان الاستعلام يُجهض بالخطأ المنطقي JoinStep analyzed without the analyze mode. #115156 (Groene AI).
  • أُصلحت قراءة خارج الحدود أثناء إلغاء تسلسل قوائم النشر التالفة لفهرس نصي. #115222 (Anton Popov).
  • أُصلحت النتائج غير الصحيحة للاستعلام SELECT count(arrayJoin(arr)) مع الإعداد الافتراضي optimize_trivial_count_query = 1. إذ كان يُعاد عدد الصفوف المخزّن بدلًا من عدد عناصر المصفوفة، وكان الاستعلام يعيد 0 عند استخدام file() وurl(). يغلق #115123. #115227 (Groene AI).
  • إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند كل عملية INSERT في جدول يعرّف STATISTICS(...) على عمود ALIAS أو EPHEMERAL، والذي كان يجعل هذه الجداول في وضع القراءة فقط. #115231 (Groene AI).
  • إصلاح ظهور الإحصاءات النهائية للاستعلام المكتمل (N rows in result, Read ... rows) بلون غير مرئي في واجهة الويب. #115245 (Alexey Milovidov).
  • إصلاح النتائج الخاطئة بصمت والسلوك غير المحدد عند قراءة حالة AggregateFunction(uniq, ...) تالفة. كان الحقل skip_degree في الحالة المُسلسلة يُستخدم كأسّ إزاحة دون تحقق، لذا كانت القيمة الخارجة عن النطاق تنتج عدد عناصر عشوائيًا بدلًا من ظهور خطأ. وتُرفض هذه الحالات الآن بالخطأ INCORRECT_DATA. #115276 (Groene AI).
  • إصلاح تجاوز سياسة صفوف، حيث كانت دالة الجدول mergeTreeIndex تكشف قيم المفتاح الأساسي وفهرس MinMax للصفوف التي تخفيها سياسة صفوف SELECT في الجدول المصدر؛ ويُرفض الآن إجراء قراءة من mergeTreeIndex لجدول لديه سياسة صفوف. #115304 (Yarik Briukhovetskyi).
  • إصلاح تجاهل CREATE QUOTA وALTER QUOTA بصمت جميع كتل FOR INTERVAL باستثناء الأخيرة عند حذف الفاصلة الفاصلة بين الفترات. كانت هذه العبارة تنجح دون تثبيت أي من الحدود السابقة. وتتراكم الفترات الآن مجددًا، كما كانت قبل عام 2020. يغلق #115282. #115320 (Groene AI).
  • إصلاح النتائج الخاطئة من if وmultiIf وCASE عندما يكون أحد الفروع من النوع Date أو Date32 ويكون نوع النتيجة DateTime أو DateTime64. مع compile_expressions = 1 (الإعداد الافتراضي)، كان التعبير المُصرَّف ينسخ عدد أيام التاريخ إلى عمود الطابع الزمني دون تحويل الأيام إلى ثوانٍ، لذا كانت if(cond, toDate32('1900-01-01'), toDateTime64('1970-01-01', 3)) تُرجع 1969-12-31 23:59:34.433. يغلق #115272. #115325 (Groene AI).
  • عدم ترك بيانات وصفية تشير إلى مجموعة مسماة محذوفة. #115326 (Groene AI).
  • إصلاح قيام timezoneOffset (الاسم المستعار timeZoneOffset) بإرجاع إزاحة خاطئة بمقدار يوم واحد بالضبط للمناطق الزمنية التي تختلف إزاحتها عن UTC عن إزاحتها في 1970-01-01 بمقدار يوم كامل، مثل Pacific/Kiritimati وPacific/Apia بعد عبورهما خط التاريخ الدولي، وكذلك لمعظم المناطق قبل عام 1970. ويُصلح هذا أيضًا parseDateTime وparseDateTimeOrNull وparseDateTime64 وparseDateTimeInJodaSyntax وEXTRACT(TIMEZONE_HOUR / TIMEZONE_MINUTE ...) و%z في formatDateTime وtoUTCTimestamp وfromUTCTimestamp، التي تعتمد على تلك الإزاحة. يغلق #115281. #115332 (Groene AI).
  • إصلاح تجاوز قيود الإعدادات: كان SET <name> = DEFAULT يعيد تعيين إعداد دون التحقق من القيود في ملف تعريف المستخدم، لذا كان يمكن تجاوز قيد MIN/MAX/CONST بإعادة تعيين الإعداد بدلًا من إسناد قيمة إليه، وكان يمكن لجلسة الخروج من وضع readonly باستخدام SET readonly = DEFAULT. #115334 (Alexey Milovidov).
  • خادم Arrow Flight: رفض بيانات اعتماد المصادقة الأساسية غير الصحيحة التي تفتقر إلى الفاصل بين اسم المستخدم وكلمة المرور. #115347 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR (Join is supported only for pipelines with one output port) في عملية JOIN من full_sorting_merge مع تفعيل query_plan_join_shard_by_pk_ranges عندما يُستبعد أحد الجانبين بالكامل بحيث لا تبقى له أي أجزاء، سواءً بالمفتاح الأساسي أو بإحصاءات الأعمدة أو لأن الجدول فارغ. #115352 (Alexey Milovidov).
  • تعطيل ذاكرة التخزين المؤقت لشروط الاستعلام للمرشحات على _part_starting_offset. #115358 (Azat Khuzhin).
  • إصلاح randConstant الذي كان يعيد قيمتين مختلفتين ضمن استعلام واحد عندما تحمل استدعاءاته أسماء مستعارة مختلفة. تنص وثائق randConstant على أنه يحتفظ بقيمة واحدة للاستعلام بأكمله، وكان SELECT randConstant() = randConstant() يعيد بالفعل 1، لكن إضافة أسماء مستعارة كما في SELECT randConstant() AS a, randConstant() AS b كانت تنتج قيمتين غير مرتبطتين. #115384 (Alexey Milovidov).
  • إصلاح uniq وuniqExact وuniqHLL12 وuniqTheta التي كانت تعيد نتائج خاطئة لوسيطة مغلفة بدالة حقنية تخفي قابلية القيم الفارغة، مثل uniqExact(tuple(x)) على عمود Nullable. كانت عملية التحسين optimize_injective_functions_inside_uniq تزيل الدالة المغلفة، مما يؤدي إلى تخطي صفوف NULL بدلًا من احتسابها. #115466 (Vladimir Cherkasov).
  • إصلاح GroupingAggregatedTransform الذي كان ينتج مقاطع مكررة للحاوية نفسها. #115487 (Nikita Taranov).
  • إصلاح رسالة الخطأ الخاصة بـ geoToH3 التي كانت تشير إلى موضع وسيطة ونوع خاطئين عندما لا يكون أحد الإحداثيات من النوع Float64. ضمن الإعداد الافتراضي geotoh3_argument_order = 'lat_lon'، كانت الرسالة تشير إلى الوسيطة الأخرى وتطبع نوعها. يغلق #101813. #115503 (Groene AI).
  • رفض محرف إرجاع عربة منفرد (\r)، بالإضافة إلى محرف تغذية السطر (\n)، في أسماء وقيم HTTP header التي تمر عبر مرشح HTTP header. يسد ذلك ثغرة حقن HTTP header (تقسيم الطلب/الاستجابة) في الميزات التي تمرر رؤوسًا يوفّرها المستخدم، مثل دالة ومحرك الجدول url، وقواميس HTTP، وكتالوجات بحيرة البيانات. #115510 (Sergei Trifonov).
  • إصلاح الذواكر المؤقتة المضبوطة بحد أقصى لعدد الإدخالات (سياسة SLRU) التي كانت تتوقف بصمت عن قبول إدخالات جديدة بمجرد الوصول إلى ذلك العدد من الإدخالات التي تم الوصول إلى كل منها مرتين على الأقل. تشمل الذواكر المؤقتة المتأثرة ذواكر ملفات البيانات الوصفية لـ Iceberg وPaimon، وذاكرة التخزين المؤقت للبيانات الوصفية لـ Parquet، وذواكر فهرس النص، وذاكرة التخزين المؤقت لفهرس تشابه المتجهات، وذاكرة التخزين المؤقت للتعبيرات المترجمة، وذاكرة التخزين المؤقت لحالة ملف ObjectStorageQueue. #115517 (Groene AI).
  • إصلاح تعليق يستمر حتى ساعة في BACKUP/RESTORE ... TO S3، وأقراص GCS، ودالة الجدول s3 عندما تضبط المجموعة المسماة http_client = 'gcp_oauth' وتقبل نقطة نهاية رمز Google OAuth2 الاتصال لكنها لا ترد مطلقًا. لم يعد طلب Bearer token يرث مهلة طلب نقل البيانات الخاصة بالمستدعي؛ بل يقتصر انتظار استجابته على 10 ثوانٍ، بما يطابق الحد الأقصى لطلب STS AssumeRole. #115531 (Groene AI).
  • إصلاح dictGet وصِيَغه المختلفة في الاستعلامات الموزعة: أصبح اسم القاموس غير المؤهل يُربط بقاعدة البيانات الحالية للعقدة البادئة، بدلاً من حله ضمن قاعدة البيانات الحالية لكل جزء تقسيم، حيث إما لا يُعثر عليه أو يُحل إلى قاموس آخر بالاسم نفسه. #115541 (Alexey Milovidov).
  • إصلاح حالة تنافس قد تؤدي إلى أن يعيد استعلام STREAM BOUNDED صفوفاً أقل من تلك التي ثُبّتت قبل بدئه، وغالباً لا يعيد أي صفوف. #115543 (Alexey Milovidov).
  • إصلاح كتابة لقطات Keeper كملفات فارغة عند تعطيل compress_snapshots_with_zstd_format. كان الخادم يسجل Created persistent snapshot، لكن ملف اللقطة كان بحجم 0 بايت، ثم كانت العقدة ترفض البدء مع CORRUPTED_DATA. يغلق #115388. #115553 (Groene AI).
  • إصلاح إبلاغ read_rows وread_bytes وwritten_rows وwritten_bytes في system.query_thread_log بالإجمالي التراكمي طوال عمر خيط التنفيذ بدلاً من القيم الخاصة بالاستعلام المسجل. تأثرت بذلك صفوف خيوط التنفيذ طويلة العمر في التجمع، ولا سيما خيط التنفيذ HTTPHandler الذي يبدأ الاستعلام. #115596 (Groene AI).
  • إصلاح قراءة خارج الحدود لتجزئات القاموس المخزنة مؤقتاً عند التجميع أو الربط باستخدام مفتاح LowCardinality(String) ينمو قاموسه أثناء تجميعه، ويمكن الوصول إلى هذه الحالة عبر TTL ... GROUP BY. كان ذلك قد ينتج تجزئة خاطئة أو خطأ heap-buffer-overflow مُبلّغاً عنه في إصدارات sanitizer. #115604 (Groene AI).
  • أصبح CREATE TABLE وALTER TABLE يرفضان برنامج ترميز فاقداً مثل SZ3 لعمود مستخدم في مفتاح التقسيم. #115626 (Groene AI).
  • إصلاح محارف الهروب بالشرطة المائلة العكسية غير الصالحة في فهارس text وtokenbf_v1 وngrambf_v1. #115634 (Elmi Ahmadov).
  • إصلاح removePartAndCoveredParts عند استدعائه لجزء موجود في مجموعة أجزاء البيانات النشطة. #115640 (Mikhail Artemenko).
  • السماح لقراء KeeperMap بقبول بيانات وصفية مشتركة عندما لا تختلف المفاتيح الأساسية المتكافئة إلا في أقواس خارجية زائدة. #115642 (Sergey Kuznetsov).
  • إصلاح خلل كانت فيه استعادة قاعدة بيانات أو جدول باسم جديد تحذف الأسماء المستعارة للجداول من نصوص العروض المخزنة، مما يؤدي إلى فشل قراءة عرض مستعاد مع UNKNOWN_IDENTIFIER. يغلق #115479. #115645 (Groene AI).
  • إصلاح Code: 349. Cannot convert NULL value to non-Nullable type عندما يحمل الشرط has أو notHas عنصر Array بقيمة NULL ويكون المفتاح الأساسي String أو Array(String) أو Map(String, String)، وإصلاح النتائج الخاطئة عندما يكون ذلك العنصر Dynamic أو Variant يحتوي على NULL. يُحذف NULL الآن من المجموعة أثناء تحليل المفتاح، كما كان يحدث بالفعل لأنواع المفاتيح الأخرى. #115647 (Groene AI).
  • إصلاح خلل في الدالة formatRowNoNewline كان قد ينتج نتائج غير صحيحة أو خطأً منطقياً عند تنسيق صف إلى نتيجة فارغة. #115669 (Alexey Milovidov).
  • رفض قيم step الصفرية والسالبة في استعلامات نطاق Prometheus أحادية النقطة. #115679 (Minh Vu).
  • رفض الطوابع الزمنية والمدد في PromQL التي تتجاوز نطاق Int64. #115682 (Minh Vu).
  • إصلاح أعطال الخادم الناتجة عن إدخال متداخل بعمق في readWKB وJSONMergePatch، ومحلل العناوين في دوال الجداول url/remote/cluster/mysql/postgresql، ومحلل عبارة CURSOR ومحلل مخطط CapnProto. وإصلاح عطل في محلل عبارة EXECUTE عندما لا تكون الوسيطة قيمة حرفية. #115700 (Alexey Milovidov).
  • عدم إرجاع ذاكرة غير مهيأة في نتيجة قيمة حرفية لسلسلة ثنائية لا يكون طولها مضاعفًا للثمانية، أو من مفكك ضغط LZ4 عندما لا تحتوي كتلة مضغوطة على بيانات. #115704 (Alexey Milovidov).
  • تقييد حجم رسالة بدء تشغيل بروتوكول PostgreSQL الشبكي، التي تُقرأ قبل المصادقة. #115708 (Alexey Milovidov).
  • إصلاح الخطأ MULTIPLE_EXPRESSIONS_FOR_ALIAS في الاستعلامات التي يتطابق فيها الاسم المستعار لعمود مع الاسم المستعار لتعبير جدول في قسم FROM (تراجع في المحلل في الإصدار 25.2). #115714 (Alexey Milovidov).
  • إصلاح إنهاء clickhouse-local للعملية بأكملها عندما يُلقي معالج اتصال لمستمع بدأ بـ SYSTEM START LISTEN خطأً، مثلًا لأن عميلًا أرسل حزمة تالفة أو أعاد ضبط مقبس keep-alive. تسجل العملية الآن الخطأ وتواصل الخدمة، كما يفعل clickhouse-server. #115715 (Groene AI).
  • إصلاح LOGICAL_ERROR: No available columns عندما لا يقرأ استعلام أي أعمدة من تعبير جدول لا يحتوي على أعمدة إطلاقًا، مثل SELECT count() FROM loop(db, tbl)، حيث يكون tbl جدول Alias حُذف هدفه، أو عرضًا ذا معلمات. يفشل هذا الاستعلام الآن بالخطأ UNSUPPORTED_METHOD بدلًا من إيقاف الخادم في إصدارات debug وsanitizer. #115716 (Groene AI).
  • إصلاح الخطأ LOGICAL_ERROR “Reading from materialized CTE ‘X’ before its materialization completed - DelayedPortsProcessor gate is missing in the query plan” عند القراءة من CTE MATERIALIZED داخل استعلام فرعي IN على جدول Distributed. يغلق #113184. #115740 (Groene AI).
  • رفض الأسماء غير الصالحة للإسقاطات والفهارس. #115824 (Alexander Tokmakov).
  • رفض معدلات مطابقة المتجهات في PromQL عندما يكون أحد المعاملين قيمة قياسية. #115828 (Minh Vu).
  • إصلاح عدم احتفاظ cast_keep_nullable بقابلية NULL عندما يكون النوع الهدف هو LowCardinality. كان تحويل قيمة تقبل NULL إلى LowCardinality(T) يُلقي الخطأ CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN بدلًا من إنتاج LowCardinality(Nullable(T)). يغلق #103485. #115851 (Groene AI).
  • إضافة مسارات Objects إلى تجزئة إزالة التكرار، لمنع إزالة التكرار غير الصحيحة. #115866 (Mikhail f. Shiryaev).
  • إصلاح TYPE_MISMATCH (“لا يمكن تنفيذ CAST AS Array إلا بين أنواع مصفوفات لها عدد الأبعاد نفسه”) لاستعلام يحتوي على ثابت من النوع Array(Map(...))، مثل has([map('k', 'v')], m)، يُنفَّذ على جدول Distributed أو باستخدام النسخ المتماثلة المتوازية. #115883 (Alexey Milovidov).
  • إصلاح الخطأ Unknown identifier الذي يظهر أثناء تحسين خطة الاستعلام مع make_distributed_plan = 1، عندما يمر عمود الفرز في استعلام نافذة عبر خطوة Expression لا تشير إليه. يغلق #115737. #115890 (Groene AI).
  • إصلاح h3kRing وh3HexRing وh3Line وh3ToChildren التي كانت تتجاهل max_execution_time وKILL QUERY أثناء توسيع كتلة من الصفوف. #115893 (Alexey Milovidov).
  • لم تعد القراءة من خلال جدول Merge يطابق جدول Alias هدفه عرض ذو معلمات تؤدي إلى ظهور LOGICAL_ERROR: Table has no columns. (الذي يؤدي إلى إيقاف الخادم في إصدارات debug وsanitizer). يُبلّغ هذا الجدول الآن عن STORAGE_REQUIRES_PARAMETER، وهو الخطأ نفسه الذي يُبلّغ عنه العرض ذو المعلمات نفسه. وأي جدول مطابق آخر لا يمكنه توفير أعمدة يُبلّغ الآن عن UNSUPPORTED_METHOD بدلًا من خطأ داخلي. #115896 (Groene AI).
  • إصلاح المعاينة الفورية لطفرة معلّقة يشير تعبيرها إلى _sample_factor. مع apply_mutations_on_fly = 1 وعبارة SAMPLE، كان التعبير يُقيَّم بعامل العينة الخاص باستعلام القراءة بدلًا من القيمة التي تحتفظ بها المادية في الخلفية، لذا اختلفت الصفوف المُعايَنة عن النتيجة المادية النهائية، وكان من الممكن أن تؤدي عبارة ALTER TABLE t DELETE WHERE _sample_factor > 1 معلّقة إلى إرجاع قراءة SAMPLE دون أي صفوف. لم يتغير عمود _sample_factor الخاص بالاستعلام نفسه. #115906 (Groene AI).
  • إصلاح حالة لم يكن فيها ATTACH TABLE الذي يحمل تعريف ENGINE = URL(...) يتحقق من صلاحية TABLE ENGINE للمحرك الذي يوجّه إليه مخطط URL. كان المستخدم الذي يمتلك فقط TABLE ENGINE ON URL يستطيع إرفاق جدول مدعوم بـFile أو S3 أو AzureBlobStorage أو HDFS ثم القراءة منه، بينما يرفض CREATE TABLE ذلك على نحو صحيح. #115914 (Groene AI).
  • عدم السماح لعقدة بيانات وصفية لـ KeeperMap غير قابلة للتحليل بمنع الخادم من البدء. #115941 (Groene AI).
  • إصلاح تعطل الدالة showCertificate على خادم يحصل على شهادة TLS باستخدام ACME (Let’s Encrypt). تُبلّغ الدالة الآن عن الشهادة المقدَّمة فعليًا، بما في ذلك بعد إعادة تحميل الشهادة. #115976 (Alexey Milovidov).
  • إصلاح إيقاف الخادم في إصدارات debug وsanitizer عند الإدراج في عرض مادي يكون هدف TO له عرضًا ماديًا آخر. كان هذا الإدراج يفشل بالفعل في الإصدارات المنشورة، مع Code: 1001 STD_EXCEPTION غير مفيد؛ ويُبلّغ الآن عن NOT_IMPLEMENTED مع تحديد العرض المسبب للمشكلة. #115985 (Groene AI).
  • تُقرأ الآن ملفات الإحصاءات ذات إصدار التنسيق V3 بدلًا من رفضها بالخطأ ILLEGAL_STATISTICS. لم تُنتَج هذه الملفات إلا بواسطة إصدارات master خلال فترة قصيرة، لكن الأجزاء التي تحتوي عليها كانت غير قابلة للقراءة تمامًا، ولا يمكن لـ ALTER TABLE ... MATERIALIZE STATISTICS إعادة إنشائها على قرص readonly. #116030 (Alexey Milovidov).
  • إصلاح الخطأ LOGICAL_ERROR: Index with name auto_minmax_index_<column> already exists الذي كان يحدث عندما تجمع تعليمة واحدة من ALTER TABLE بين RENAME COLUMN وأمر آخر، مثل MODIFY SETTING، في جدول ذي فهارس minmax ضمنية (add_minmax_index_for_numeric_columns وما شابهها). كذلك، لم تعد إعادة تسمية عمود عادي تؤدي إلى فشل DROP COLUMN لاحق بالخطأ UNKNOWN_IDENTIFIER أو إلى إضافة ADD COLUMN لاحقة دون فهرسها الضمني. #116063 (Groene AI).
  • إصلاح تعطل العاملين عديمي الحالة عند استخدام تخزين الكائنات. #116067 (Konstantin Vedernikov).

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

  • توفير حِزم موقَّعة لنظام macOS. #115169 (Konstantin Bogdanov).
  • إصلاح البناء من المصدر باستخدام clang 23. #112288 (Azat Khuzhin).
  • تقليل التبعيات وحجم شيفرة محلل SQL، الذي أصبح بالإمكان بناؤه بصورة مستقلة — راجع utils/wasm-parser للحصول على إصدار WebAssembly مستقل منه. أصبحت جداول الكلمات المفتاحية في SQL وأنواع الوصول تُبنى وقت الترجمة بدلًا من كل مرة يبدأ فيها الخادم. #112067 (Alexey Milovidov).
  • أصبح البناء من المصدر يفشل الآن أثناء مرحلة توليد CMake بدلًا من إتلاف StorageSystemLicenses.generated.cpp عند فشل توليد الترخيص. #111222 (Mikhail Artemenko).
  • تحديث مكتبة Apache Thrift المضمّنة إلى الإصدار 0.24.0. #111278 (Groene AI).
  • إضافة libucontext إلى بُنى musl، بما يتيح الواجهة الخلفية ucontext الخاصة بـ boost::context والمستخدمة في بُنى sanitizer. #111437 (Konstantin Bogdanov).
  • إصلاح مشكلات قابلية النقل على مستوى الشيفرة المصدرية عند البناء باستخدام musl. #111631 (Konstantin Bogdanov).
  • لم يعد تعديل Core/ProtocolDefines.h يؤدي إلى إعادة بناء شبه كاملة عند البناء من المصدر: أُزيل التضمين من BlockInfo.h وأُضيف فقط إلى الملفات التي تستخدم ثوابته. #111650 (Alexander Gololobov).
  • إصلاح إيقاف مفاجئ عند بدء التشغيل في بُنى تصحيح الأخطاء على macOS، وذلك بتعطيل فحوصات تصحيح الأخطاء لمتعقب الذاكرة للتخصيصات التي تجريها مكتبات النظام. #112080 (Arsen Muk).
  • تحديث libarchive المضمّنة إلى الإصدار 3.8.9. #112434 (Konstantin Bogdanov).
  • تحديث StringZilla إلى الإصدار 5.0.5. #112319 (Konstantin Bogdanov).
  • تحديث jwt-cpp إلى الإصدار v0.7.2. #112595 (Konstantin Bogdanov).
  • تحديث تجميعة SQLite المضمّنة من 3.41.2 إلى 3.53.4. #112599 (Konstantin Bogdanov).
  • تحديث aws-c-http إلى الإصدار 0.11.0. #112413 (Govind R Nair).
  • تحديث libcotp إلى الإصدار v4.2.1. #112596 (Konstantin Bogdanov).
  • يمكن الآن بناء OpenSSL من مصادر C القابلة للنقل على المعماريات التي لا تتضمن تعليمات تجميع مكتوبة يدويًا في وصف البناء، بدلًا من الفشل في مرحلة الربط النهائية بسبب رموز غير معرّفة. ويحدد خيار CMake الجديد OPENSSL_NO_ASM هذا المسار صراحةً. #112863 (Alexey Milovidov).
  • أُضيف خيار CMake باسم ENABLE_ORC (مفعّل افتراضيًا)، بحيث يمكن أن يتضمن الإصدار Parquet دون ORC أو protobuf وprotoc اللذين يعتمد عليهما ORC. #112864 (Alexey Milovidov).
  • لم يعد Common/Exception.cpp يتطلب نسخة libc++ المصححة الخاصة بـ ClickHouse لكي يُترجم، لذا تحصل الإصدارات التي تربط مكتبة C++ قياسية مختلفة على استثناءات من دون stack trace لموضع throw، بدلًا من فشل الترجمة. #112865 (Alexey Milovidov).
  • أصبح فكّ المكدس في إصدارات musl على aarch64 يتابع عبر إطارات الإشارات واستدعاءات syscall المحجوبة بدلًا من التوقف عند إطار libc، مما يحسّن stack traces الصادرة عن معالج الأخطاء الفادحة وSampling query profiler. #112592 (Konstantin Bogdanov).
  • تحديث libexpat المضمّن إلى 2.8.2. #112593 (Konstantin Bogdanov).
  • تحديث simdjson إلى v4.6.5. #112594 (Konstantin Bogdanov).
  • تحديث Apache Arrow إلى 25.0.0 وApache ORC إلى 2.3.1. #112604 (Konstantin Bogdanov).
  • أصبحت إصدارات التغطية (WITH_COVERAGE) تربط ببيئة تشغيل profile المُنشأة ضمن شجرة المصدر من مصادر LLVM المضمّنة، بدلًا من الأرشيف المرفق مع سلسلة أدوات clang على المضيف. #112607 (Konstantin Bogdanov).
  • تحديث Protocol Buffers إلى v35.1 وgRPC إلى v1.83.0. #112614 (Konstantin Bogdanov).
  • أُضيف هدف WebAssembly تجريبي (wasm64 عبر Emscripten): أصبح emcmake cmake يهيئ شجرة المصدر وتُبنى الطبقات الدنيا. كما أُصلح -DENABLE_LIBFIU=OFF، الذي لم يكن يُبنى على أي منصة. #112911 (Alexey Milovidov).
  • أُصلحت جميع مواضع -Wunique-object-duplication: مثيلات singleton قابلة للتغيير معرّفة في header، كانت ستنشئ نسخة لكل كائن مشترك بدلًا من نسخة واحدة لكل عملية. وتم ذلك في الغالب بنقل التعريف إلى .cpp. #112995 (Alexey Milovidov).
  • أصبح تثبيت حزمة tgz فوق ارتباط رمزي معلّق يحافظ على سلسلة الارتباطات الرمزية ويطبّق أذونات وملكية الهدف المضمّن في الحزمة بدلًا من أذونات مشتقة من umask. #112766 (Alexey Milovidov).
  • في إصدارات musl على aarch64، يستخدم memmove الآن تنفيذ ARM optimized-routines بلغة التجميع (المشترك مع memcpy) بدلًا من حلقة C العامة التي تعالج كلمة في كل مرة. #113502 (Konstantin Bogdanov).
  • في إصدارات musl، يتبع getaddrinfo مع AI_ADDRCONFIG الآن دلالات glibc، لذلك لم يعد localhost يُحلّ أولًا إلى ::1 غير قابل للاستخدام في بيئات IPv4 فقط، كما تُرجع sysconf تلميحات glibc لحجم المخزن المؤقت لـ getpwuid_r/getgrgid_r بدلًا من -1، مما يعالج مشكلة libhdfs3. #113485 (Konstantin Bogdanov).
  • في بنى musl، أصبحت sched_getcpu الآن قراءة rseq (~1ns) بدلًا من syscall، بما يتوافق مع glibc ويزيل عبء وقت النظام الناتج عن percpu_arena في jemalloc ضمن أعباء العمل كثيفة التخصيص؛ كما يسجّل musl‏ rseq مسبقًا ويصدّر ABI ‏__rseq_* الخاص بـ glibc. #113501 (Konstantin Bogdanov).
  • إصلاح البنى المحلية (غير التابعة لـ CI) التي كانت تترجم جميع شيفرات Rust المورّدة، بما في ذلك codec ‏PCO، وقراءات Delta Lake عبر delta-kernel-rs، وprqlc، وchdig، وwasmtime، وبحث السجل الضبابي للعميل عبر skim، باستخدام opt-level = 0. كان متغير CMake ‏SANITIZE مُعرّفًا باستخدام option، لذا كانت قيمته الافتراضية BOOL ‏OFF، التي أخفقت اختبارات STREQUAL "" الخاصة بـ “عدم وجود sanitizer”، مما جعل كل بنية تُهيّأ دون -DSANITIZE=... صريح تتخذ مسار الحل البديل لـ sanitizer الذي يعطّل تحسين Rust. #114083 (Alexey Milovidov).
  • دفع طبقات صورة Docker مضغوطة بـ zstd. #114342 (Alexey Milovidov).
  • بناء حزم Debian لبنى الإصدار فقط. #114739 (Alexey Milovidov).
  • إصلاح بناء unit_tests_dbms في التهيئات التي لا تتضمن المجموعة الكاملة من المكتبات (ENABLE_LIBRARIES=0 أو ENABLE_ROCKSDB=0). #115655 (Alexey Milovidov).

إصدار ClickHouse 26.7، 2026-07-22. العرض التقديمي, الفيديو

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

  • لم يعد الوصول إلى S3 الصادر من SQL المستخدم يحلّ افتراضيًا بيانات اعتماد السحابة الخاصة بالخادم نفسه (البيئة، وIMDS/IRSA، وملف تعريف المثيل، وملفات config الخاصة بـ AWS، وSTS المستند إلى role_arn، وبيانات GCP OAuth الوصفية)؛ ويجب أن يستخدم هذا الطلب بيانات اعتماد صريحة أو NOSIGN. كما أصبحت المجموعات المسماة تضبط use_environment_credentials افتراضيًا على 0. ويمكن استعادة السلوك السابق لكل طلب باستخدام use_environment_credentials = 1 (أو على مستوى عام عبر config ‏<s3>) مع الإعداد الجديد s3_allow_server_credentials_in_user_queries (وهو معطّل افتراضيًا). ولا تتأثر بيانات الاعتماد المورّدة صراحةً أو بيانات اعتماد config التي يوفّرها المشغّل. وعند بدء تشغيل الخادم أو تنفيذ RESTORE، يُحمَّل جدول S3/S3Queue دائم، أو disk ديناميكي من S3، أو DataLakeCatalog يحلّ تعريفه بيانات الاعتماد هذه، بصورة مجهولة (ولا يمكن الوصول إليه حتى إعادة تزويده ببيانات الاعتماد) بدلًا من إيقاف بدء التشغيل، ويتحكم في ذلك إعداد الخادم الجديد s3_load_table_anonymously_if_credentials_restricted (مفعّل افتراضيًا). #106855 (Raúl Marín).
  • أصبح glob ‏**/ (أي عدد من الأدلة) يطابق الآن أيضًا الدليل نفسه. في السابق، لم يكن **/ في glob patterns يُعامل كحالة خاصة، لذا فإن data/**/file.txt لم يكن يطابق data/file.txt (أي صفرًا من مستويات الأدلة). #97676 (Alexey Milovidov).
  • رُفض تنسيق أرشيف النسخ الاحتياطي zip/zipx للنسخ الاحتياطية المخزنة على التخزين الكائني — سواء كانت وجهات S3(...)/AzureBlobStorage(...) مباشرة أو وجهات Disk(...) المعتمدة على S3 أو Azure — وذلك لكلٍّ من BACKUP وRESTORE. يتطلب Zip إجراء seek لقراءة دليله المركزي، وهذا بطيء جدًا عبر التخزين الكائني. استخدم بدلًا من ذلك تنسيقًا قائمًا على tar مثل tar.gz. #101770 (Yash ).
  • تم توسيع النطاق المدعوم لـ DateTime64 من [1900-01-01, 2299-12-31] إلى [0000-01-01, 9999-12-31]. وأصبحت القيم الواقعة خارج النطاق السابق تُحسب الآن بشكل صحيح (عبر cctz) بدلًا من حصرها عند الحدود. ومع precision ‏8 أو 9، يبقى النطاق أضيق لأن ticks تُخزَّن بصيغة Int64 (ومع دقة النانوثانية يبقى الحد الأقصى 2262-04-11). التوافق مع الإصدارات السابقة: إذا كنت قد استخدمت تواريخ وأوقات خارج النطاق سابقًا، لكنك اعتمدت على قواعد الإشباع المحددة جدًا داخل النطاق القديم، فضع في اعتبارك أن النتائج تتغير الآن لتصبح أكثر صحة. #107907 (Alexey Milovidov).
  • يرفض AggregatingMergeTree الآن، عند إنشاء الجدول، المخططات التي يكون فيها عمود ما ليس جزءًا من مفتاح الفرز ولا مقياس حالة تجميع (AggregateFunction/SimpleAggregateFunction). وتُطوى هذه الأعمدة بصمت إلى قيمة اعتباطية أثناء عمليات الدمج في الخلفية، مما يؤدي إلى نتائج خاطئة للاستعلامات التي تستخدم GROUP BY أو تُجري تصفية عليها. اضبط allow_dimensions_outside_sorting_key = 1 لاستعادة السلوك السابق. يغلق #751. #108087 (Alexey Milovidov).
  • أُزيلت تهيئة جدولة أعباء العمل المستندة إلى config (قسما config الخاصان بالخادم: ‏resources وworkload_classifiers). استخدم بدلًا من ذلك استعلامات CREATE RESOURCE وCREATE WORKLOAD. ويتم تجاهل أقسام config المتقادمة مع إصدار تحذير. #108286 (Sergei Trifonov).
  • يستخدم ClickHouse الآن دائمًا هاش إزالة تكرار الإدراج الموحّد لكلٍّ من Synchronous inserts وasynchronous inserts؛ وأزيلت سلوكيات إزالة التكرار القديمة الخاصة بكل عملية insert على حدة. ويُحتفَظ بإعداد الخادوم insert_deduplication_version كإجراء حماية أثناء الترحيل، إذ يرفض الخادوم البدء إذا كان مضبوطًا على قيمة قديمة (old_separate_hashes أو compatible_double_hashes). وللترقية من إصدار كان يستخدم قيمة قديمة، شغّل أولًا إصدارًا يدعم compatible_double_hashes (إذ يكتب كلًا من الهاش القديم والهاش الموحّد). بالنسبة إلى replicated tables، شغّله لمدة لا تقل عن replicated_deduplication_window_seconds (ساعة واحدة افتراضيًا؛ إذ تحتفظ النوافذ الافتراضية بالهاشات الموحّدة لجميع عمليات الإدراج خلال تلك النافذة، ويُعد ذلك كافيًا لحلقة إعادة محاولة الإدراج). أما non-replicated tables التي تكون فيها القيمة non_replicated_deduplication_window > 0، فتكون تلك النافذة قائمة على العدد لا على الزمن، لذا شغّل compatible_double_hashes لما لا يقل عن هذا العدد من عمليات الإدراج. ثم أزل الإعداد (أو اضبطه على new_unified_hash) قبل الترقية إلى هذا الإصدار. #108361 (Sema Checherinda). وإذا لم تكن قد ضبطت insert_deduplication_version مطلقًا، فيمكنك تجاهل هذا البند.
  • أزيلت الدوال المهملة منذ وقت طويل snowflakeToDateTime وsnowflakeToDateTime64 وdateTimeToSnowflake وdateTime64ToSnowflake. فقد أُعلن عن إهمالها سابقًا في v24.6 لصالح snowflakeIDToDateTime وsnowflakeIDToDateTime64 وdateTimeToSnowflakeID وdateTime64ToSnowflakeID، وهي الدوال التي ينبغي استخدامها بدلًا منها. أما الإعداد allow_deprecated_snowflake_conversion_functions (الذي كان يُستخدم سابقًا لإعادة تفعيلها) فقد أصبح الآن متقادمًا ولم يعد له أي تأثير. #108711 (Alexey Milovidov).
  • أصبحت القيمة الافتراضية للإعداد use_legacy_to_time الآن 0، لذا تحوّل toTime القيم إلى نوع البيانات Time بدلًا من تحويل date with time إلى تاريخ ثابت. ولا يزال السلوك القديم متاحًا عبر الدالة toTimeWithFixedDate أو بضبط use_legacy_to_time = 1. #108729 (Alexey Milovidov).
  • أصبحت نماذج Naive Bayes (المستخدمة بواسطة naiveBayesClassifier) تُهيَّأ الآن على شكل Dictionary بتخطيط NAIVE_BAYES، ويجري بناؤها وقت التحميل من table تحتوي على n-gram counts مجمّعة مسبقًا لكل فئة، بدلًا من configuration السابقة على مستوى الخادوم (config file بصيغة XML يشير إلى ملفات نموذج .bin مُسلسلة)، وهو ما لم يعد مدعومًا — لذا يجب إعادة إنشاء النماذج الحالية على شكل Dictionaries. وأُضيفت ثلاث دوال جديدة إلى جانب naiveBayesClassifier: إذ تُرجع naiveBayesClassifierWithProb الفئة المتوقعة مع احتمالها، وتُرجع naiveBayesClassifierWithAllProbs جميع الفئات مع احتمالاتها، وتُجزّئ naiveBayesNgrams النص إلى n-grams بالطريقة نفسها التي يستخدمها القاموس، لبناء بيانات التدريب من نص خام مُصنَّف. بالإضافة إلى ذلك، طُبّقت عدة تحسينات على الأداء: فعلى نموذج لغوي trigram بحجم 9.7 MiB قائم على code points، يستهلك ذاكرة أقل بنحو ~49× (من 1.84 GiB إلى 38 MiB)، ويُحمَّل أسرع بنحو ~11×، ويُصنّف أسرع بنحو ~11×. #108773 (Nihal Z. Miaji).
  • لم تعد الدالة hasColumnInTable تقبل الوسائط الاختيارية hostname وusername وpassword للتحقق من column على remote server كيفما كان؛ ولم يبقَ سوى الصيغة hasColumnInTable(database, table, column). وكان وضع remote الذي أزيل يمثّل مصدر قلق أمني، إذ كان يتيح لأي مستخدم تشغيل connections صادرة إلى hostات عشوائية، كما كان يسرّب credentials إلى query logs، ولم يكن مقيّدًا بأي privilege. #110881 (Alexey Milovidov).

ميزة جديدة

  • تمت إضافة EXPLAIN ANALYZE لفحص أداء الاستعلام: يُنفَّذ الاستعلام، وتُعرَض مقاييس التنفيذ الفعلية بتنسيق خطة الاستعلام المألوف. #106586 (Kirill Kopnev). #110668 (Kirill Kopnev).
  • تمت إضافة دعم لعبارات WHERE في تعريفات الإسقاطات. ولا تُطبَّق الإسقاطات التي تحتوي على WHERE وتُخزَّن فعليًا إلا على الصفوف المطابقة للمسند، ويمكن للمُحسِّن استخدامها (استنادًا إلى الكلفة) عندما تستلزم عبارة WHERE في الاستعلام عبارة WHERE في الإسقاط. #102347 (S Bala Vignesh).
  • تمت إضافة الإعداد skip_unavailable_shards_mode (وهو متاح أيضًا كإعداد لمحرك Distributed) للتحكم في الاستثناءات الصادرة من شظية بعيدة التي يجري تجاهلها بصمت عند تمكين skip_unavailable_shards. #79091 (cjw).
  • تمت إضافة الدالة التجميعية groupFormat التي تُنسِّق الصفوف في كل مجموعة باستخدام تنسيق إخراج محدد وتُرجع النتيجة كسلسلة نصية. #93201 (Yang Hu).
  • تمت إضافة AWS_MSK_IAM كقيمة مدعومة لـ kafka_sasl_mechanism، مما يتيح لـ ClickHouse المصادقة مع Amazon MSK باستخدام أدوار IAM دون الحاجة إلى إدارة بيانات اعتماد SASL/SCRAM. #96100 (kalavt).
  • تمت إضافة مُركِّب الدالة التجميعية -Tuple، الذي يطبّق الدالة التجميعية الأساسية على كل عنصر في عمود Tuple بشكل مستقل ويُرجع Tuple للنتائج مع الحفاظ على أسماء العناصر: فمثلًا، يُرجع sumTuple(t) عندما يكون t = (a, b) القيمة (sum(a), sum(b)). أما الدوال التجميعية ذات الوسائط المتعددة فتأخذ tuple واحدًا لكل وسيطة، مع المطابقة حسب الموضع: يُرجع corrTuple((a1, a2), (b1, b2)) القيمة (corr(a1, b1), corr(a2, b2)). وعلى خلاف -ForEach على المصفوفات، يمكن أن تكون العناصر من أنواع مختلفة، كما تُحفَظ أنواع النتائج لكل عنصر وأسماؤها. #98190 (RinChanNOW).
  • تدعم فهارس النص الآن وسيطة postprocessor — وهي تعبير اعتباطي يحوّل كل رمز بعد التجزئة إلى رموز (على سبيل المثال، lower). #98939 (Jimmy Aguilar Mena). #108606 (Jimmy Aguilar Mena).
  • تمت إضافة جدول النظام system.stemmers، الذي يسرد جميع اللغات التي يمكن تحديدها للدالة stem. #100611 (Jimmy Aguilar Mena).
  • تمت إضافة دعم WITH TIES مع LIMIT السالب. #100930 (Nihal Z. Miaji).
  • تمت إضافة دعم لمعاملي الصياغة اللاحقين في SQL القياسية AT TIME ZONE وAT LOCAL بوصفهما صياغة مختصرة لـ toTimeZone. وأصبح التعبير expr AT TIME ZONE zone الآن مكافئًا لـ toTimeZone(expr, zone)، كما أصبح expr AT LOCAL مكافئًا لـ toTimeZone(expr, timeZone()). #106092 (lizepeng).
  • أصبح محرك الجدول URL ودالة الجدول url يوجِّهان الآن إلى الواجهة الخلفية المناسبة بناءً على مخطط URL: إذ تُعالَج file:// بواسطة المحرك File، وs3:///gs:///gcs:///oss:// بواسطة S3، وaz:///azure:///abfss:///abfs:// بواسطة AzureBlobStorage، وhdfs:// بواسطة HDFS، وhttp(s):// بواسطة المحرك URL كما في السابق. يُطبَّق الإعداد url_base قبل التوجيه بحسب المخطط. ولا تُوجَّه إلا مخططات S3 التي يحلّها url_scheme_mappers الافتراضي؛ أما مخططات المورّدين الأخرى المتوافقة مع S3 (cos وobs و…) فلا تُوجَّه، وتتطلب استخدام المحرك/الدالة s3 مباشرةً. #106093 (Alexey Milovidov).
  • أُضيف محركا الجدول Remote وRemoteSecure، وهما النظيران الدائمان لدالتي الجدول remote وremoteSecure. وأصبح CREATE TABLE ... ENGINE = Remote('addresses', db, table, ...) يعمل الآن بالإضافة إلى CREATE TABLE ... AS remote(...). #106189 (Alexey Milovidov).
  • أُضيفت أوامر SYSTEM STOP وSYSTEM START وSYSTEM PAUSE وSYSTEM CANCEL وSYSTEM REFRESH المحايدة بالنسبة إلى المحرك، إلى جانب صيغها العامة على مستوى الخادم ... ALL BACKGROUND، للتحكم في النشاطات الخلفية لجداول Kafka وRabbitMQ وNATS وS3Queue/AzureQueue والعروض المادية القابلة للتحديث عبر واجهة موحّدة. وبالنسبة إلى العروض المادية القابلة للتحديث، فهي أسماء بديلة لأوامر SYSTEM ... VIEW الحالية. وكجزء من دعم عناصر التحكم هذه في NATS، أصبحت جداول JetStream الآن تُقرّ الرسائل فقط بعد نجاح عملية insert (مرة واحدة على الأقل؛ إذ كانت الرسائل سابقًا تُقَرّ تلقائيًا عند التسليم وقد تُفقَد إذا فشلت عملية insert). كما أُضيف إعداد جديد nats_wait_for_flush_interval (القيمة الافتراضية false، مع الحفاظ على السلوك السابق منخفض الكمون) يُبقي دورة الاستهلاك مفتوحة اختياريًا طوال فترة flush بدلًا من تنفيذ flush بمجرد فراغ queue. ويجعل إعداد جديد nats_commit_on_select تنفيذ SELECT مباشر على جدول JetStream يستهلك الرسائل التي يقرؤها (ويُقِرّ بها). #107476 (Samuel Krempaský).
  • أُضيف دعم لدوال الجدول ومحركات الجداول mysql وpostgresql وsqlite بحيث تقبل استعلام المستخدم (بدلًا من اسم جدول) وتمرّره كما هو إلى قاعدة البيانات الخارجية، سواء كُتب على هيئة استعلام فرعي (SELECT ...) أو بصيغة query('SELECT ...'). ويُستدل على بنية الجدول الناتج من نتيجة الاستعلام، ويكون هذا الجدول للقراءة فقط. يغلق #46758. استنادًا إلى التنفيذ الأولي من Denis Vidiaev (#79652). #107740 (Alexey Milovidov).
  • أُضيفت علامات تبويب إلى واجهة ويب ClickHouse ‏(Play) للعمل على عدة استعلامات في آنٍ واحد. وتُحفَظ علامات التبويب وعناوينها ومعلماتها وحالتها النشطة ولقطات صغيرة من النتائج عبر إعادة التحميل (ولا تُستعاد النتائج الكبيرة ونتائج الصور)، كما تتكامل مع سجل المتصفح وURL، ويمكن التنقل بينها بعجلة الفأرة. #107826 (Alexey Milovidov).
  • أُضيف محرك الجدول QueryRunner. وتمثل السجلات المُدرجة في جدول QueryRunner الاستعلامات التي ينفذها المحرك. ويمكن استخدام هذا المحرك لتنفيذ الاستعلامات غير المتزامن، والتنفيذ الدفعي للاستعلامات المُولَّدة، وتوجيه الاستعلامات إلى عناقيد بعيدة، واختبارات الأداء، والاختبار بالتشويش، والاختبار باستخدام حركة مرور ظلّية. #107888 (Miсhael Stetsyuk).
  • أُضيف تنسيق الإخراج GeoJSON لكتابة مستندات FeatureCollection بصيغة GeoJSON، مع إنشاء ميزة واحدة لكل صف. ويصبح العمود الوحيد ذي النوع الجغرافي (Point أو LineString أو MultiLineString أو Polygon أو MultiPolygon أو Ring أو Geometry) هو geometry لكل ميزة؛ ويصبح العمود المسمى id هو id للميزة؛ وتصبح أي أعمدة متبقية هي properties الخاصة بالميزة، وفي حال وجود عمود واحد فقط من نوع object باسم properties (من نوع JSON أو Map أو Tuple مُسمّى)، فيُكتَب مباشرةً ككائن properties. ويُكتَب Ring على هيئة Polygon أحادي الحلقة. ويتحكم الإعداد الجديد format_geojson_validate_geometry (المفعّل افتراضيًا) في ما إذا كانت الأشكال الهندسية غير الصالحة كأشكال GeoJSON — مثل Polygon يحتوي على أقل من أربع نقاط أو حلقة Polygon غير مغلقة — ستُرفَض عند القراءة والكتابة. بالإضافة إلى ذلك، يستنتج تنسيق الإدخال GeoJSON الآن العمود id على أنه Nullable(String) بدلًا من String، بحيث تُقرأ الميزة التي تفتقد العضو id أو تحتوي صراحةً على العضو "id": null على أنها NULL وتظل مميزة عن السلسلة الفارغة "". استنادًا إلى التنفيذ الأولي من Mark Needham (#98124). #108065 (Nihal Z. Miaji).
  • أُضيفت الدالة dotProductTransposed (بالاسم البديل scalarProductTransposed) التي تحسب الجداء الداخلي التقريبي بين عمود QBit ومتجه مرجعي، استكمالًا للدالتين الحاليتين L2DistanceTransposed وcosineDistanceTransposed. #108100 (Alexey Milovidov). وأُضيفت أيضًا دوال المسافة المنقولة المُكمّاة cosineDistanceTransposedQuantized وL2DistanceTransposedQuantized وdotProductTransposedQuantized التي تعمل على QBit(Int8) من رموز Lloyd-Max الخاصة بـ quantizeBFloat16ToInt8، مع فك تكميم الرموز المخزنة آنيًا. ويكون المتجه المرجعي ذي الفاصلة العائمة هو الاستعلام كامل الدقة، وتُجرى المقارنة بدقة Float32 (ويُحوَّل الاستعلام من نوع Float64 إلى دقة أضيق)؛ أما المرجع من نوع Array(Int8) فيُفك تكميمه هو أيضًا، لتحقيق مسافة متماثلة من نوع quantized-vs-quantized. #109405 (Alexey Milovidov).
  • أُضيف معامل اختياري stride إلى نوع البيانات QBit (QBit(T, dimension, stride)) لتخزين مجموعات الأبعاد في تدفقات منفصلة، بحيث يمكن للبحث المتجهي قراءة الأبعاد الأولى فقط بكفاءة (مثلًا في Matryoshka embeddings). وتقبل دوال المسافة المنقولة وسيطة رابعة اختيارية هي used_dims لقراءة عدد أقل من الأبعاد. #108103 (Alexey Milovidov).
  • أُضيف دعم نوع العنصر Int8 في نوع البيانات QBit، مما يتيح التخزين وإجراء البحث المتجهي بالمسافة المنقولة (L2DistanceTransposed وcosineDistanceTransposed) على متجهات أعداد صحيحة مُكمّاة من 8 بت. #108105 (Alexey Milovidov).
  • دالة جديدة randomHadamardTransform(vector[, seed[, output_dims]]): تحويل Hadamard عشوائي حتمي لمتجه ذي فاصلة عائمة — وهو تدوير متعامد يحافظ على المعيار، ومفيد للمعالجة المسبقة لـ embeddings قبل quantization، وكذلك (عندما يكون مقتطعًا) كإسقاط عشوائي من نوع Johnson–Lindenstrauss / subsampled-randomized-Hadamard. #108227 (Alexey Milovidov).
  • دعم تهيئة التحميل الكسول للقواميس على مستوى كل dictionary على حدة باستخدام الإعداد dictionary_lazy_load في تعريف dictionary، مع تجاوز إعداد الخادم العام dictionaries_lazy_load، بحيث يمكن تحميل بعض القواميس كسولًا بينما تُحمَّل أخرى تحميلًا فوريًا. #108314 (Miсhael Stetsyuk).
  • أُضيفت صفحة بحث مضمّنة في التوثيق، متاحة على المسار /docs ضمن واجهة HTTP، وتوفّر بحثًا فوريًا في جدول system.documentation وتعرض الوثائق المرجعية (مع تمييز بناء الجملة، والصيغ الرياضية، والروابط المتقاطعة). #108345 (Alexey Milovidov).
  • أُضيفت الدالة xxHash64Spark، التي تحسب قيم xxHash64 المتوافقة مع Spark لمدخلات String وNULL باستخدام البذرة 42 وتُرجع Int64. #108436 (Lalit Yadav).
  • أصبحت ALTER USER وALTER ROLE وALTER SETTINGS PROFILE تقبل الآن SET name = value كاسم مستعار لـ MODIFY SETTING name = value. ويؤدي ذلك إلى تعديل الإعدادات الفردية في مكانها مع الإبقاء على بقية الإعدادات، بخلاف عبارة SETTINGS المجرّدة التي تستبدل قائمة الإعدادات بالكامل. وهذا يقلّل من احتمال مسح إعدادات المستخدم الأخرى عن طريق الخطأ. #108722 (Groene AI).
  • أُضيف دعم ALTER TABLE ... MODIFY CONSTRAINT [IF EXISTS] name CHECK expr لتغيير التعبير الخاص بقيد موجود في مكانه. #108768 (Alexey Milovidov).
  • واجهة الويب: أُضيف مفتاح تبديل لترميز الألوان لكل عمود (أيقونة 🌈 في رأس العمود) للتبديل بين الأشرطة، والخريطة الحرارية، والتصنيف الفئوي، وعدم استخدام أي تصور. ويُحفَظ الوضع المحدد في عنوان URL وسجل المتصفح. #108873 (Alexey Milovidov).
  • أصبح Keeper الآن يتعامل على نحو صحيح مع opcode ‏CreateContainer (19) الخاص بـ ZooKeeper، وذلك عبر علامة ميزة اختيارية جديدة create_container (معطّلة افتراضيًا، مثل create_ttl). وبعد تفعيلها عقب ترقية كاملة للمجموعة، يمكن لعملاء ZooKeeper الخارجيين (مثل Java ZooKeeper 3.9+) إنشاء عقد حاوية على Keeper بدلًا من تلقي ConnectionLoss؛ كما تُبلِغ عقد الحاوية عن قيمة المؤشر ephemeralOwner المتوقعة، ويحذف خيط GC في الخلفية على القائد الحاويات التي بلا أبناء تلقائيًا. ويستمر رفض طلب Create العادي الذي يحمل علامة وضع الإنشاء CONTAINER من دون opcode 19 (ZBADARGUMENTS)، إذ لا يوجد أي عميل ZooKeeper معروف يُصدر هذا المزيج. وهذا توافق على مستوى البروتوكول من جهة الخادم فقط: إذ إن عميل ZooKeeper الخاص بـ ClickHouse (zkutil) لم يتغير ولا يوفّر API لإنشاء عقد حاوية بنفسه. #108908 (unintended).
  • أُضيفت الدوال geoToUTM وUTMToGeo وgeoToMGRS وMGRSToGeo للتحويل بين الإحداثيات الجغرافية WGS84 ونظامَي الإحداثيات UTM وMGRS. #108939 (Alexey Milovidov).
  • أُضيفت الدالة digits(n, offset[, length])، التي تُرجع أرقام n بدءًا من offset ذي الفهرسة التي تبدأ من 1 وتمتد على length رقمًا، أو حتى نهاية العدد إذا لم يُحدَّد length. #109012 (Umang Agrawal).
  • أُضيفت الدالة الحسابية sqr لحساب مربع عدد. #109061 (Lalit Yadav).
  • أُضيفت دالة جديدة dictGetRoot تُرجع السلف الأعلى (الجذر) لمفتاح في قاموس هرمي. وهي مكافئ مناسب لـ dictGetHierarchy(dict_name, key)[-1]. #109459 (Alexey Milovidov).
  • أُضيف الأمران SYSTEM UNLOAD DICTIONARY وSYSTEM UNLOAD DICTIONARIES لتحرير الذاكرة التي تستخدمها القواميس دون حذف تعريف القاموس. وستُعاد تحميل القواميس عند الوصول إليها لاحقًا عند الحاجة. #109639 (Matheus Nerone).
  • أُضيفت الدالتان geometryIntersectCartesian وgeometryIntersectSpherical اللتان تُرجعان ما إذا كان شكلان هندسيان يتقاطعان. وعلى خلاف polygonsIntersectCartesian/polygonsIntersectSpherical، فإنهما تقبلان أي نوع بيانات هندسية (Point, LineString, MultiLineString, Ring, Polygon, MultiPolygon)، بما في ذلك النوع العام Geometry، كما يمكن أن تكون الوسيطتان من نوعين مختلفين. #110062 (Alexey Milovidov).
  • يمكن الآن استخدام معلمات الاستعلام (استبدالات {name:Type}) كقيم للإعدادات، سواء في عبارة SETTINGS داخل الاستعلام (مثل SELECT أو INSERT) أو في استعلامات SET المستقلة، مثل: SELECT ... SETTINGS max_threads = {threads:UInt64} وSET max_threads = {threads:UInt64}. #108760 (Alexey Milovidov).

ميزة تجريبية

  • توسيع أحرف البدل للدالة الجدولية url ومحرك الجدول URL: تُوسَّع أحرف البدل في مسار URL من خلال استعراض صفحات فهرس HTTP (قوائم أدلة بصيغة HTML أو plaintext) واستخراج عناوين URL المطابقة، مع فرض حدود على حجم صفحة الفهرس وعدد الأدلة المقروءة. يُفعَّل ذلك بالإعداد allow_experimental_url_wildcard_from_index_pages. #95181 (Yue Ni).
  • يمكن الآن لـ Text indexes تخزين مواضع الرموز (وسيطة الفهرس support_phrase_search) لتمكين المطابقة الدقيقة للعبارات باستخدام direct read للدالة hasPhrase. ويتطلب ذلك تفعيل إعداد MergeTreeallow_experimental_text_index_phrase_search. #103172 (Elmi Ahmadov). وقد طُرحت هذه الوسيطة في البداية تحت الاسم positions. #109900 (Elmi Ahmadov).
  • دعم compaction لملف البيانات الوصفية لجداول Iceberg عبر OPTIMIZE TABLE ... MANIFEST (مع حمايته بالإعداد allow_experimental_iceberg_compaction). يُغلق #95174. #98178 (Smita Kulkarni). وإصلاح OPTIMIZE TABLE ... MANIFEST لجداول Iceberg عندما لا تتطابق tuples تقسيم manifest مع مواصفة التقسيم الخاصة بها. #111368 (Smita Kulkarni).
  • إضافة متغير Real Doubles ‏(RD) ووسيطة اختيارية ALP(AUTO|STD|RD) إلى codec التجريبي ALP. وأصبح ALP من دون وسيطة يختار تلقائيًا بين المخطط الحالي STD وRD بدلًا من استخدام STD دائمًا. #99654 (Nazarii Piontko).
  • إضافة cache داخل الذاكرة من نوع SLRU لملفات البيانات الوصفية Paimon بعد إلغاء تسلسلها (manifest lists وmanifests). وعند تفعيله عبر الإعداد use_paimon_metadata_files_cache، تتجاوز الاستعلامات المتكررة على جدول Paimon نفسه إعادة تنزيل البيانات الوصفية من object storage وإعادة تحليلها. #104657 (XiaoBinMu).
  • أُضيفت “drivers” للدوال المعرّفة من قبل المستخدم القابلة للتنفيذ. ويمكن استخدام driver مُعلن في <user_defined_executable_function_drivers_config> ضمن CREATE FUNCTION name ARGUMENTS (...) RETURNS T ENGINE = DriverName(...) AS '...code...' لتجميع مقتطف شيفرة المستخدم أو معالجته بطريقة أخرى وقت إنشاء الدالة، وإنتاج executable UDF قابل للتشغيل. ويُخزَّن config الناتج في <dynamic_user_defined_executable_functions_path>، ويُحفَظ الاستعلام الأصلي بصيغة ATTACH FUNCTION بحيث تبقى الدالة بعد إعادة تشغيل الخادم. ويقوم driver إثبات المفهوم c_function_body بتجميع أجسام دوال C وتشغيلها داخل حاويات Docker معزولة في وضع executable_pool. استنادًا إلى التنفيذ الأولي من Daniil Timižev (#77128). #105131 (Alexey Milovidov).
  • تقديم SELECT count(*) FROM t WHERE col <op> default(col) اعتمادًا على إحصاءات sparsity لكل عمود في serialization.json من دون أي فحص للبيانات، عندما يقسم predicate العمود بدقة إلى قيم default وغير default (ضمن experimental setting جديد هو optimize_trivial_count_with_sparsity_filter، وهو معطَّل افتراضيًا). #105890 (Raúl Marín).
  • تُسجَّل الآن API request الخاصة بـ Prometheus Query API إلى /api/v1/query و/api/v1/query_range في system.query_log مع مقاييس read_rows وread_bytes. #106611 (James Cunningham).
  • يمكن الآن لمسار القراءة التجريبي ReaderExecutor ‏(use_reader_executor، معطّل افتراضيًا) إبقاء source connection البعيد مفتوحًا وإعادة استخدامه عبر قراءات متسلسلة، مما يقلّل عدد طلبات object storage أثناء عمليات الفحص. #107735 (Sema Checherinda). كما أصبح يدعم أيضًا قراءة الملفات المشفّرة، مع cache عام لـ ترويسة التشفير يُضبط عبر server setting ‏encryption_header_cache_size ويُفرَّغ باستخدام SYSTEM DROP ENCRYPTION HEADERS CACHE. #109702 (Sema Checherinda).
  • دعم قراءات plan الاستعلام الموزّع لـ SELECT ... FINAL على جداول عائلة MergeTree عند تفعيل make_distributed_plan. #108148 (Alexander Gololobov).
  • إضافة تنفيذ تجريبي قائم على plan لوضع parallel replicas في استعلامات MergeTree. #108504 (Igor Nikonov).
  • أُضيفت عائلة codec المتجهات التجريبية Quantize، مع Rewrite اختياري لبحث متّجهي تقريبي على مرحلتين فوق streams المرافقة المُكمّاة. #108565 (Shankar Iyer).
  • أُعيد إحياء codec الضغط الفقدي التجريبي SZ3 ذي الخطأ المحدود لأعمدة Float32/Float64 (ومصفوفاتها)، والذي نُفِّذ أصلًا بواسطة Konstantin Vedernikov (#83088). ويتطلب allow_experimental_codecs. #108788 (Alexey Milovidov). كما أُصلحت قراءة البيانات المضغوطة باستخدام SZ3('ALGO_LORENZO_REG', ...)، التي كانت تفشل سابقًا مع CORRUPTED_DATA، وتم تفادي سلوك غير معرّف عند ضغط القيم floating-point غير المنتهية (NaN وقيم اللانهاية). #110762 (Alexey Milovidov).
  • أُضيف codec التجريبي ZXC — وهو codec لا متناظر من نوع LZ بضغط بطيء وفك ضغط سريع جدًا، مع compression ratio بين LZ4 وZSTD. ويتطلب allow_experimental_codecs = 1، ويعرضه system.compression_codecs على أنه تجريبي. #110620 (Alexey Milovidov). #111007 (Alexey Milovidov).
  • يمكنك الآن المصادقة على OneLake باستخدام Bearer token تم الحصول عليه مسبقًا عبر الإعداد onelake_bearer_token، بدلًا من onelake_client_id وonelake_client_secret. وهذا يجنّب مشاركة client secret طويل الأمد. لا يتم تحديث token، لذا يجب إعادة إنشاء database بمجرد انتهاء صلاحيته. #109104 (Asya Shneerson).
  • لم تعد AI functions تأخذ named collection بوصفها argument الموضعي الأول. تأتي credentials من الإعدادين ai_function_text_default_credentials / ai_function_embedding_default_credentials أو من المفتاح credentials في argument اختياري أخير من النوع Map(String, String)، والذي يحمل أيضًا الإعدادات القابلة للضبط (model, max_tokens, temperature, system_prompt, instructions, dimensions). #109232 (George Larionov). وتأخذ الدالة aiEmbed الآن model بوصفه argument موضعيًا مطلوبًا (aiEmbed(text, model[, params])) بدلًا من قراءته من named collection، مما يضمن قابلية إعادة الإنتاج لـ embeddings. #110619 (George Larionov).
  • إصلاح data_uncompressed_bytes لفهارس التخطي المعبأة في skp_idx.packed (عبر packed_skip_index_max_bytes): كان الحجم غير المضغوط المُبلّغ عنه هو في الواقع الحجم المضغوط، ما كان قد يمنع أيضًا تفعيل distributed_index_analysis. #109272 (Raúl Marín).
  • أُضيف تخزين تجريبي معبأ لـ data part في جداول MergeTree، بحيث تُخزَّن معظم ملفات الجزء في أرشيف واحد data.packed بدلًا من ملف لكل stream (تظل projections وبعض ملفات الخدمة، مثل txn_version.txt، مكتوبة بشكل منفصل). ويجري التحكم فيه عبر الإعدادات min_bytes_for_full_part_storage وmin_rows_for_full_part_storage وmin_level_for_full_part_storage، وهو معطّل افتراضيًا. وما إن يبدأ جدول في كتابة الأجزاء المعبأة، حتى تعجز إصدارات server الأقدم عن قراءتها، لذا فإن تمكين هذا التنسيق يمنع الرجوع إلى إصدار أقدم من server. #108118 (Raúl Marín).
  • أُضيفت table function تجريبية باسم eval، تُقيِّم expression ثابتًا إلى query string ثم تنفّذ استعلام SELECT واحدًا ناتجًا عنه. هذه الميزة معطّلة افتراضيًا، ويمكن تمكينها عبر الإعداد allow_experimental_eval_table_function. المؤلف: Yue Ni. #110132 (Alexey Milovidov).
  • إضافة دعم ضغط zstd إلى HTTP handler التجريبي لـ Prometheus remote-write v1. #110907 (James Cunningham).
  • رُقّيت الكتابة إلى جداول DeltaLake (الإعداد allow_experimental_delta_lake_writes) إلى مرحلة Beta. #107034 (Kseniia Sumarokova).
  • أُضيفت مقاييس ProfileEventsDistributedPlanRemoteTasks وDistributedPlanLocalExecution وDistributedPlanHostsUsed لمراقبة تنفيذ distributed query plans التجريبية (make_distributed_plan). #107985 (Shankar Iyer).
  • أُزيل التخزين التجريبي المستند إلى RocksDB في Keeper (experimental_use_rocksdb). وسيصل قريبًا تخزين جديد أفضل على القرص. #108000 (Michael Kolupaev).
  • أصبح distributed index analysis (وهي ميزة تجريبية يتحكم فيها الإعداد distributed_index_analysis) يرسل القوائم الكبيرة من أسماء data part إلى remote server كقيم scalar بدلًا من تضمينها في query text. وهذا يتجنب الإخفاقات المحتملة بسبب حدود max_ast_elements / max_query_size ويزيل عبء parsing الخاص بـ AST. #110419 (Azat Khuzhin).
  • تحسين دوال aggregation التجريبية timeSeries*ToGrid: أصبحت buckets الآن محاذاة لكلٍّ من step وwindow، كما أصبح aggregation النهائي أسرع بكثير عندما تكون window أكبر بكثير من step. وقد تغيّر format الخاص بـ serialization لحالة aggregation على نحو غير متوافق (فهذه الدوال تجريبية). #106724 (Vitaly Baranov).
  • أصبحت target tables الخارجية لجدول TimeSeries تُسجَّل الآن بوصفها referential dependencies: وعلى غرار materialized views، يمنع هذا إسقاط target table خارجي قبل إسقاط جدول TimeSeries الذي يشير إليه (إذا كان check_referential_table_dependencies مُمكّنًا). #108388 (Vitaly Baranov).
  • إضافة دالة PromQL ‏increase. #111023 (Vitaly Baranov).

تحسين الأداء

  • أصبح بإمكان عمليات JOIN الآن استخدام فهرس المفتاح الأساسي أو skip indexes على الجدول الواقع في الجهة اليسرى لاستبعاد الحبيبات. ويُتحكَّم في ذلك عبر الإعداد enable_join_runtime_filters_index_analysis. #109085 (Shankar Iyer).
  • أصبحت عمليتا التسلسل وإلغاء التسلسل لمتجهات الأنواع القابلة للتسلسل مباشرةً تستخدمان استدعاء إدخال/إخراج واحدًا للمخزن المؤقت بدلًا من معالجة العناصر واحدًا واحدًا. #89842 (Jimmy Aguilar Mena).
  • تحسين عمليات البحث العكسي في القاموس: إذ يُبسَّط الآن شرط المساواة الثابت، مثل WHERE dictGet(dict, attr, key_expr) = value، مباشرةً إلى مرشح مفتاح (key_expr = const أو key_expr IN [...] أو WHERE 0) بدلًا من إعادة كتابته كاستعلام فرعي من النوع IN (SELECT ... FROM dictionary(...))، كما أصبح المسار الثابت لـ dictGetKeys يُنفَّذ بالتوازي. #91164 (Nihal Z. Miaji).
  • إضافة إعداد جديد merge_tree_generic_exclusion_search_max_steps يحدّ من عدد الخطوات التي تقضيها خوارزمية البحث بالاستبعاد العام في تحليل فهرس المفتاح الأساسي لكل جزء بيانات. وتُستهلك الحصة أولًا على أكبر نطاقات المفاتيح المتبقية، لذا فإن حتى الحصة الصغيرة تستبعد معظم البيانات؛ أما النطاقات التي لم تُحلَّل بالكامل فتُقرأ كاملةً، لذلك تظل نتيجة الاستعلام صحيحة ولكن قد تُقرأ حبيبات أكثر. ويُطبَّق الحد بصورة مرنة: إذ قد يُتجاوز بما لا يزيد على merge_tree_coarse_index_granularity خطوة، بالإضافة إلى خطوة واحدة لكل نطاق يكون الجزء مقسّمًا إليه مسبقًا (على سبيل المثال، بواسطة ذاكرة التخزين المؤقت لشرط الاستعلام). وتعني القيمة الافتراضية 0 عدم وجود حد لعدد الخطوات. #92779 (Michael Jarrett).
  • أصبحت الاستعلامات التي تتضمن ORDER BY وLIMIT على العروض فوق جداول Distributed تستخدم الآن تحسين دمج التدفقات المرتبة: إذ يُدفَع ORDER BY/LIMIT الخارجي إلى الاستعلام الداخلي للعرض البسيط، بحيث يرتّب كل shard بياناته محليًا ويقوم المنسّق بدمج التدفقات المرتبة مسبقًا بدلًا من إجراء فرز كامل. #94102 (matanper).
  • جرى تفعيل optimize_or_like_chain افتراضيًا. يُغلق #87779. #94517 (Alexey Milovidov).
  • وَسْم جداول السجل في النظام من نوع MergeTree التي خضعت للتدوير وكانت non-replicated ولا تحتوي على TTL بأنها table_readonly لتجنّب عمليات الخلفية غير الضرورية. كما أن إعداد table_readonly في MergeTree يعطّل الآن أيضًا جميع أعمال الخلفية على جدول MergeTree عادي — بما في ذلك عمليات الدمج العادية، وعمليات TTL (DELETE/MOVE/إعادة الضغط)، وعمليات دمج إعادة الضغط، وmutations في الخلفية، ونقل الأجزاء في الخلفية — ويرفض أوامر partition المعدِّلة (ATTACH/MOVE/DROP/DROP DETACHED/FETCH/REPLACE PARTITION وMOVE PARTITION ... TO TABLE إلى الجدول)، بالإضافة إلى عمليات الإدراج وmutations وOPTIMIZE التي كان يرفضها بالفعل. ونتيجةً لذلك، فإن جدول table_readonly الذي يحتوي على TTL لم يعد يستعيد بياناته منتهية الصلاحية ما دام هذا الإعداد مفعّلًا. #95079 (Mathuranath Metivier).
  • تحسين أداء جلب سجل مستخدم واحد من system.users عندما يحتوي الخادم على عدد كبير من المستخدمين. #96699 (Alistair Evans).
  • أصبحت القراءة بالترتيب مع parallel replicas تستخدم الآن المنطق نفسه المتمثل في تقسيم الجدول إلى max_threads أجزاء كما في القراءة المحلية، لتحقيق قدر أفضل من التوازي. #101434 (Nikita Taranov).
  • استخدم حدود فهرس minmax للتقسيم من أجل تقليم المزيد من الحبيبات أثناء تحليل المفتاح الأساسي لجداول MergeTree، عندما يكون أحد أعمدة المفتاح الأساسي أيضًا عمود إدخال في مفتاح التقسيم. على سبيل المثال، في جدول MergeTree يحتوي على ORDER BY (id, event_time) وPARTITION BY toYYYYMM(event_time)، سيستخدم ClickHouse فهرس minmax للتقسيم على event_time أثناء تحليل فهرس المفتاح الأساسي لاتخاذ قرارات تقليم أكثر دقة للحبيبات. يتحكم في ذلك الإعداد الجديد use_partition_minmax_for_primary_key_pruning (مُمكّن افتراضيًا). #103480 (UnamedRus).
  • تم تمكين ذاكرة التخزين المؤقت لشرط الاستعلام للاستعلامات التي تستخدم التصفية الديناميكية Top-K (ORDER BY ... LIMIT n). ويُقسَّم مُدخل الذاكرة المؤقتة بحسب معاملات خطة Top-K، بحيث يعيد الاستعلام نفسه استخدام نتائج عامل التصفية WHERE المخزنة مؤقتًا، بينما يؤدي اختلاف LIMIT أو عمود الفرز أو اتجاه الفرز إلى إنشاء مُدخل جديد. #104478 (Alexey Milovidov).
  • أُضيف الإعداد use_constant_folding_in_index_analysis (معطّل افتراضيًا). عند تمكينه، يقوم تحليل المفتاح الأساسي وMinMax وتحليل فهرس التخطي في MergeTree بطيّ الثوابت على مستوى القسم داخل مسند التصفية بشكل منفصل لكل جزء، مما يحسّن التقليم لعوامل التصفية التي تعتمد تفرعاتها على قيم التقسيم، مثل (a = 1 AND b >= 1) OR (a = 2 AND b > 10) مع PARTITION BY a. #104582 (Mikhail Artemenko).
  • دفع LIMIT إلى التجميع حسب الترتيب لتمكين الإنهاء المبكر عندما يتطابق مفتاح GROUP BY مع مفتاح ORDER BY ومفتاح فرز الجدول، مما يقلل بشكل كبير عدد الصفوف المقروءة. #104859 (Konstantin Bogdanov).
  • أصبح تحديث profile events الآن أسرع بما يصل إلى 30 مرة، باستخدام عمليات ذرية لكل CPU للعدادات على مستوى الخادم ولكل مستخدم. يتحكم في ذلك إعداد الخادم user_profile_events_per_cpu (ويستخدم نحو 640 KiB لكل مستخدم على 64 نواة، لذا مع وجود عدد كبير جدًا من المستخدمين قد يكون من المنطقي إبقاؤه معطّلًا). #105056 (Azat Khuzhin).
  • تم تمكين allow_aggregate_partitions_independently افتراضيًا. عندما يكون مفتاح GROUP BY مناسبًا لمفتاح التقسيم، يمكن لـ ClickHouse تجميع كل قسم بشكل مستقل وتخطي خطوة الدمج العامة. وتتجاوز آلية الاستدلال في وقت التشغيل هذا التحسين تلقائيًا عندما يجعل تخطيط الأقسام ذلك غير ملائم (عدد أقسام قليل جدًا، أو عدد أقسام كبير جدًا، أو أحجام أقسام غير متوازنة بشكل ملحوظ). #105128 (Alexey Milovidov).
  • أصبحت استعلامات البحث المتجهي مع إعادة التقييم (vector_search_with_rescoring = 1) تحسب الآن المسافة الدقيقة فقط للصفوف التي يعيدها الفهرس المتجهي، مع تطبيق عامل تصفية دقيق لمواضع الصفوف بدلًا من إعادة التقييم بالقوة الغاشمة للصفوف المجاورة من نفس حبيبة MergeTree. #105591 (Sergey Kuznetsov). #108846 (Sergey Kuznetsov).
  • تحسين أداء خوارزمية الربط partial_merge على مفاتيح FixedString من خلال مقارنة سلاسل من القيم دفعة واحدة بدلًا من إجراء استدعاء مقارنة واحد لكل قيمة. #105737 (Artem Zuikov).
  • أصبح SHOW TABLES وsystem.tables على Data Lake Catalog (Iceberg REST وGlue وUnity وHive وPaimon) يدفعان الآن المسندات المقيّدة بمساحة الاسم إلى الـ catalog، مما يتجنب إجراء مسح كامل له. يُغلق #105022. #106029 (Smita Kulkarni).
  • تقييد الذاكرة غير المتعقَّبة لكل CPU لتجنّب overcommit وأخطاء نفاد الذاكرة (تُضبط الحدود باستخدام إعدادات الخادم max_per_cpu_untracked_memory وper_cpu_untracked_memory_thread_buffer). #106055 (Azat Khuzhin).
  • تسريع المشغّلات التي تفحص stream مرتبًا لاكتشاف سلاسل من قيم key المتساوية — DISTINCT بالترتيب، وLIMIT BY بالترتيب، وLIMIT BY السالب بالترتيب، وjoins full_sorting_merge وpartial_merge. #106502 (Nihal Z. Miaji).
  • تنفيذ reader وwriter أصليَّين لتنسيقي Arrow وArrowStream لا يستخدمان مكتبة Apache Arrow، مما يتجنب نسخ البيانات والتحويلات الإضافية. وأصبح هذا الآن الخيار الافتراضي (الإعدادان input_format_arrow_use_native_reader وoutput_format_arrow_use_native_writer)، وهو أسرع في القراءة والكتابة على حد سواء. #106522 (Alexey Milovidov).
  • إعادة تفعيل LTO لـ jemalloc بعد إصلاح تلف في thread-cache ظهر مع LTO، مما يحسّن الأداء. #106898 (Azat Khuzhin).
  • تقليل memory usage وتحسين أداء JOINs. يستخدم الجانب الأيمن من hash join الآن مرجع row مدمجًا بطول 8 بايت قائمًا على الفهرس، بحيث تصبح entries جدول hash في joins ALL صغيرة بقدر نظيراتها في joins ANY لجميع أنواع key. أُجري benchmark على queries join كبيرة من نوع parallel_hash — joins INNER وANY لجداول تضم 100–300 مليون row بمفاتيح UInt64 وString، مع مفاتيح فريدة ومكررة: أصبح وسيط query أسرع بنحو 12% واستخدم Peak memory أقل بنحو 15%، من دون أن تصبح أي query أبطأ. وحققت joins INNER على مفاتيح UInt64 أكبر تحسن (أسرع بنحو 21% في الوسيط مع ذاكرة أقل بنسبة 38%). #107189 (Harikrishnan Prabakaran).
  • أصبحت join keys أحادية العمود من النوع LowCardinality(String) غير Nullable مدعومة أصلًا الآن في hash join. #107264 (Nikita Taranov).
  • إضافة خوارزمية تعداد ترتيب join المسماة dpsub (البرمجة الديناميكية على المجموعات الفرعية)، بما يوفّر planات join مثالية مع overhead optimization أقل من dpsize ودعمًا للـ joins غير الداخلية. #107351 (Fisnik Kastrati).
  • تسريع loading لـ filesystem cache عند بدء التشغيل من خلال ترميز حجم كل ملف cache في اسمه (<offset>_<size>)، مما يتجنب تنفيذ stat لكل ملف. ويظل loading لملفات cache المكتوبة بواسطة الإصدارات الأقدم مدعومًا. #107415 (Alexey Milovidov).
  • تحسين أداء arrayElement على Array(LowCardinality(String)) ووظائف LIKE الخاصة بـ map على Maps التي تحتوي على مفاتيح أو قيم LowCardinality(String)، وذلك بتجنب materialization غير الضروري للسلاسل النصية. #107450 (Michael Jarrett).
  • تجنب تحويل aggregation أحادي المستوى إلى two-level aggregation عندما يكون memory usage منخفضًا، وذلك عبر تتبّع ذاكرة aggregation state نفسها بدلًا من ذاكرة query بأكملها. #107490 (Hechem Selmi).
  • تسريع تحليل queries التجميعية: يُحتسب مفتاح cache لإحصاءات حجم aggregation hash-table الآن انطلاقًا من query plan بدلًا من بناء AST الكامل للـ query. #107643 (Dmitry Novik).
  • تحسين أداء INTERSECT ALL وEXCEPT ALL (الوضع الافتراضي لـ INTERSECT وEXCEPT) عدة أضعاف، وذلك بجعل مفتاح المجموعة المتعددة يعتمد على قيمة الصف بدلًا من احتساب hash لكل صف باستخدام SipHash. #107649 (Raúl Marín).
  • إعادة بناء عوامل تصفية سياسات الصفوف من دون الاحتفاظ بقفل الذاكرة المؤقتة، مما يحسّن قابلية توسع الاستعلامات عند تنفيذ CREATE ROW POLICY وDROP ROW POLICY بالتزامن. #107917 (Azat Khuzhin).
  • تسريع الدوال match وextract وextractAll وreplaceRegexpOne وreplaceRegexpAll للتعبيرات النمطية البسيطة عبر ترجمتها إلى native code باستخدام LLVM. ويتحكم في ذلك الإعداد الجديد compile_regular_expressions (مفعّل افتراضيًا)؛ أما الأنماط الواقعة خارج المجموعة الفرعية المدعومة فتعود تلقائيًا إلى محرك RE2. #108004 (Alexey Milovidov).
  • تسريع فك ضغط ZSTD على AArch64 ‏(ARM) للأعمدة ذات إزاحات المطابقة الصغيرة، مثل أعمدة الأعداد الصحيحة ذات العرض الثابت، من خلال تنفيذ نسخ متّجه للتداخلات القصيرة عند الإزاحات القصيرة باستخدام NEON. فعلى سبيل المثال، أصبح فك ضغط عمود UInt64 أسرع حتى ~2.3× على AWS Graviton 4. #108049 (Alexey Milovidov).
  • استخدام مكتبة libdeflate لضغط وفك ضغط gzip/zlib/deflate، مما يجعلها أسرع (الضغط ~1.15× مع ratio أفضل، وفك الضغط ~1.4–1.5×) لبيانات .gz/HTTP/url/s3 وcodec ‏GZIP الخاص بـ Parquet. #108074 (Alexey Milovidov).
  • تحسين أداء استعلامات البحث النصي المقترنة بعامل تصفية للمفتاح الأساسي. #108114 (Anton Popov).
  • استخدام إحصاءات runtime التي جُمعت أثناء التشغيل الأول للاستعلام لتحسين عمليات التشغيل اللاحقة: إذ يمكن لخوارزمية join ‏hash التبديل تلقائيًا إلى parallel_hash استنادًا إلى الإحصاءات المجمعة. #108125 (Hechem Selmi). كما جرى تحسين حجم عوامل تصفية runtime الخاصة بـ join باستخدام حجم hash table من إحصاءات runtime الخاصة بـ join، ويتحكم في ذلك الإعداد الجديد join_runtime_filter_size_from_hash_table_stats. #108313 (Hechem Selmi).
  • تم تحسين سرعة فك ضغط LZ4 للأعمدة ثابتة الحجم ومنخفضة cardinality. #108175 (Nikita Taranov).
  • تسريع الدوال trimLeft/trimRight/trimBoth الخاصة بالمسافات البيضاء الافتراضية (وأيضًا الأسماء البديلة لها ltrim/rtrim/trim): تُنسخ الصفوف المتتالية التي لا تحتاج إلى إزالة مسافات ضمن Batch واحدة، ولا يُجرى فحص المسافات لكل صف إلا للصفوف التي تحتوي فعلًا على مسافة بادئة أو لاحقة. #108177 (Groene AI).
  • تحسين أداء replaceAll وreplaceRegexpAll عندما يكون pattern حرفًا واحدًا ويكون replacement حرفًا واحدًا (على سبيل المثال replaceRegexpAll(s, ' ', '_')). لم تعد مثل هذه الاستبدالات تغيّر layout الخاص بالسلسلة، لذلك يُنسخ العمود الآن مرة واحدة وتُعاد كتابة البايتات المطابقة في موضعها بدلًا من تشغيل حلقة بحث لكل مطابقة. #108178 (Groene AI).
  • تحسين أداء الدالة pointInPolygon عند استخدام مضلع ثابت. أصبحت ذاكرة التخزين المؤقت للمضلعات المُعالجة مسبقًا تُفهرَس الآن بحسب الوسائط الثابتة الخام، بحيث لا يُحلَّل المضلع الثابت إلا مرة واحدة فقط (عند الإخفاق في ذاكرة التخزين المؤقت) بدلًا من إعادة تحليله مع كل كتلة إدخال. #108184 (Groene AI).
  • تسريع تحليل تمثيل التاريخ والوقت القياسي YYYY-MM-DD hh:mm:ss في وضع أفضل جهد (date_time_input_format = 'best_effort', cast_string_to_date_time_mode = 'best_effort')، وهو الوضع الافتراضي. يعالج هذا تراجعًا في أداء التحليل ظهر عند تبديل تلك القيم الافتراضية من basic إلى best_effort. #108187 (Groene AI).
  • تجنّب الاحتفاظ بعدّادات الانتقائية في system.predicate_statistics_log على مسار القراءة في MergeTree عندما تكون الميزة معطّلة (predicate_statistics_sample_rate = 0، وهو الافتراضي). يزيل هذا تحديثًا ذريًا لكل حبيبة واحتساب O(rows) لعدد البتات المضبوطة في عامل التصفية من كل عملية قراءة، مما يعالج تراجعًا في الأداء كان أوضح ما يكون على AArch64. #108190 (Groene AI).
  • تسريع تحليل الأعداد ذات الفاصلة العائمة من النص عند استخدام precise_float_parsing = 1، بحيث يصبح بنفس سرعة المحلّل الافتراضي أو أسرع منه على معظم المدخلات. ويتضمن ذلك أيضًا ترقية مكتبة fast_float المضمّنة إلى v8.2.10. #108205 (Raúl Marín).
  • استخدام مكتبة simdutf لوظائف ترميز base64 وفك ترميزه، مما يحسّن أداءها. #108333 (Konstantin Bogdanov).
  • تحسين DISTINCT للمفاتيح المكلفة عالية الكاردينالية. #108366 (Nihal Z. Miaji).
  • في البنى غير المعتمدة على Linux (macOS وFreeBSD)، لم يعد jemalloc يطهّر الصفحات المتسخة على نحو متعجّل (استدعاء نظام madvise واحد لكل free)؛ بل يستخدم الآن خيط تطهير في الخلفية مع dirty_decay_ms محدود، كما هو الحال في Linux. يسرّع هذا بشكل ملحوظ أعباء العمل كثيفة التخصيص والتحرير مثل تعبيرات الجدول الشائع التعاودية (~2x في benchmark لتعبير جدول شائع تعاودي على macOS) مع تأثير ضئيل جدًا على RSS. #108430 (Alexey Milovidov).
  • تسريع تخطيط الاستعلامات ضمن المحلّل للتعبيرات التي تشير إلى الاسم المستعار WITH نفسه أو تكرّر التعبير الفرعي نفسه مرات عديدة (مثل سلاسل if/multiIf المتداخلة بعمق)، وذلك عبر عدم إعادة بناء التعبيرات الفرعية المشتركة عند إنشاء DAG الإجراءات. #108523 (Dmitry Novik).
  • تُبنى مرشحات وقت التشغيل الآن على مفاتيح المساواة حتى عندما تحتوي عبارة ON أيضًا على محمولات لا تعتمد على المساواة، مما يقلّل عدد الصفوف الداخلة إلى ربط التجزئة في عمليات الربط التي تمزج بين شروط المساواة وعدم المساواة. ولا يتأثر LEFT ANTI JOIN بذلك. #108579 (Antonio Álvarez Caballero).
  • تفعيل -fno-math-errno على مستوى قاعدة الشيفرة بالكامل، مما يتيح للمصرّف تحسين الدوال الرياضية بشكل أفضل. #108628 (Nikita Taranov).
  • خفض عتبة الجلب المسبق البرمجي لجداول التجزئة الخاصة بالتجميع والربط من 4 * L2 cache size إلى L2 cache size، بحيث يُفعَّل الجلب المسبق بمجرد أن لا يعود جدول التجزئة ملائمًا لذاكرة L2. يعالج هذا تراجعًا في GROUP BY وJOIN على جداول تجزئة متوسطة الحجم (~1-8 MiB) على المنصات التي يكون فيها حجم L2 المُبلّغ عنه كبيرًا (مثل AArch64 مع L2 بحجم 2 MiB). #108655 (Groene AI).
  • تحسين أداء الدوال النافذة. أصبحت الاستعلامات النافذة على الجداول العريضة التي تتضمن SELECT * تستخدم ذاكرة أقل بكثير وتعمل أسرع. كما أصبحت دوال التجميع النافذة، بما في ذلك quantile* وuniq* وgroupArray، أسرع مع OVER () وOVER (ORDER BY ... RANGE ...). وأصبحت الدالة cume_dist أسرع أيضًا، كما تحسّن أداء النوافذ التي تستخدم PARTITION BY أو ORDER BY على الأعمدة التي تحتوي على كثير من القيم المتكررة. #108688 (Nihal Z. Miaji).
  • تسريع تحليل الاستعلامات التي تحتوي على سلاسل AND كثيرة أو كبيرة جدًا من المقارنات: أصبحت آلية التحسين optimize_and_compare_chain الآن مقيّدة بميزانية عمل (إعداد جديد optimize_and_compare_chain_max_hash_work) بدلًا من إجراء hash لجزء كبير من شجرة الاستعلام، ولم تعد آلية تحليل لامبدا تعيد حساب قيم hash لنص لامبدا كجزء من حماية التكرار. #108757 (Alexey Milovidov).
  • إصلاح تراجع في الأداء عند قراءة أعمدة JSON/Dynamic باستخدام عدة threads: إذ كان البحث عن الإعداد input_format_binary_max_type_complexity لكل قيمة يتسبب في تنازع على عدّاد المراجع في سياق الاستعلام المشترك، ما يجعل القراءات المتوازية تسلسلية؛ أما الآن فأصبحت قيمة الإعداد مخزّنة مؤقتًا لكل thread. #108797 (Seva Potapov).
  • إصلاح تراجع في الأداء (أُدخل في #71781) حيث توقفت قراءة أعداد كبيرة من الملفات الصغيرة من object storage عبر s3 ودوال الجداول الأخرى عن prefetching وعادت إلى القراءات المتزامنة، ما أدى إلى إبطاء كبير للقراءات أحادية الخيط وذات التوازي المنخفض لكميات كبيرة من الملفات الصغيرة جدًا. #108872 (Nikita Fomichev). كما أصبح prefetch الأولي للكائنات الصغيرة يُصدر الآن أيضًا عندما تمر قراءات object storage عبر filesystem cache (filesystem_cache_name)، لذلك لم تعد قراءات الأعداد الكبيرة من الملفات الصغيرة (مثل ingestion في S3Queue) مع تفعيل cache متزامنة ومقيّدة بزمن الاستجابة. #109478 (Nikita Fomichev).
  • تحليل القيم الحرفية المتداخلة بعمق من نوع Array وtuple بزمن خطي بدلًا من التربيعي. #108892 (Alexey Milovidov).
  • تقليل الحمل الناتج عن تنازع الأقفال في خوارزمية الربط parallel_hash. #108938 (Hechem Selmi).
  • تسريع estimateCompressionRatio للأعمدة المرمّزة بـ T64 من خلال حساب الحجم المضغوط تحليليًا بدلًا من ضغط البيانات فعليًا. #109054 (Raufs Dunamalijevs).
  • إزالة عنق زجاجة أحادي الخيط في خطوة shuffle ضمن خطط الاستعلامات الموزعة: إذ أصبح كل stream من المنبع يوزّع صفوفه على حاوية الوجهة بشكل مستقل بدلًا من تمرير تدفق البيانات بالكامل عبر transform واحد. #109206 (Alexander Gololobov).
  • تقليل استهلاك CPU أثناء الخمول في خادم Keeper. #109255 (Michael Kolupaev).
  • تسريع serialization وعمليات الدمج لأعمدة JSON التي تحتوي بياناتها المشتركة على كثير من المسارات المتناثرة: فعند flattening البيانات المشتركة إلى أعمدة لكل مسار، أُزيل المسح لكل صف عبر جميع أعمدة المسارات المتراكمة، وأصبح استكمال الفجوات للبيانات السابقة يتم دفعة واحدة بدلًا من إدراج القيم الافتراضية خليةً تلو الأخرى. #109341 (Groene AI).
  • تقليل الحمل الإضافي على CPU عند تقييم التعبيرات في الاستعلامات التي تتضمن عددًا كبيرًا من الأعمدة (على سبيل المثال، البحث المتجهي على عمود QBit مع stride صغير، حيث يُوسَّع كل متجه إلى مئات الأعمدة الفرعية لمستويات البت، وتُمرَّر كلها إلى استدعاء واحد لـ *DistanceTransposed). #109380 (Alexey Milovidov).
  • تحسين أداء دوال Geo في H3 (h3ToGeoBoundary, h3ToGeo, h3CellAreaM2/h3CellAreaRads2, geoToH3) عبر حساب الجيب/جيب التمام المقترنين معًا، وإزالة الاستدعاءات المثلثية الزائدة في تحويلات الإحداثيات. لم تتغير النتائج (متطابقة تمامًا على مستوى البت). #109399 (Alexey Milovidov).
  • تحسين أداء المقارنات (<, >, <=, >=) لأنواع الأعداد الصحيحة العريضة (Int128, UInt128, Int256, UInt256 والأنواع المبنية عليها مثل Decimal128) بما يصل إلى 7 مرات، وكذلك تحويل الأعداد الصحيحة الموقعة إلى Int256 (حتى 7 مرات على البيانات مختلطة الإشارة)، وذلك بجعل شيفرة المقارنة وتوسيع الإشارة بلا تفرعات. #109474 (Manuel).
  • جرى تحسين uniqCombined (بما في ذلك حالة aggregation من دون مفاتيح) وuniqHLL12. #109794 (Anton Popov). #109831 (Anton Popov).
  • أصبحت الدالتان arraySort وarrayReverseSort أسرع عدة مرات عند العمل على مصفوفات رقمية (بما في ذلك Decimal وDateTime64) عند استدعائهما من دون لامبدا. #109832 (Manuel).
  • تسريع addDays وaddWeeks وsubtractDays وsubtractWeeks على قيم DateTime وDateTime64 في المناطق الزمنية ذات الإزاحة الثابتة (مثل UTC) عبر استخدام مسار حسابي سريع. #109836 (Manuel).
  • جرى تحسين تحليل الفهرس النصي. #109886 (Anton Popov).
  • إضفاء التوازي على معالجة الصفوف غير المنضمة في خوارزمية join ‏parallel_hash في حالتين إضافيتين: عند وجود عامل تصفية متبقٍّ، وفي حالة مفاتيح join الصغيرة (خريطة hash أحادية المستوى). #110008 (Hechem Selmi).
  • أصبحت استجابات واجهة الويب المضمنة (واجهة Play UI، وdashboards، ومعالجات الملفات الثابتة) تُضغط الآن وفقًا لترويسة Accept-Encoding الخاصة بالعميل، باستخدام zstd أو gzip أو deflate أو brotli أو lz4 أو xz أو snappy أو bzip2. على سبيل المثال، يتقلص حجم صفحة /play من نحو 350 كيلوبايت غير مضغوط إلى أقل من 120 كيلوبايت مع zstd، مما يقلل أوقات التحميل على الاتصالات البطيئة. وتُترك الاستجابات المضغوطة مسبقًا دون تغيير، كما يُرسَل Vary: Accept-Encoding لضمان صحة تقسيم CDN وcache. #110108 (Sayantanu Dey).
  • ادفع عامل التصفية إلى ما دون دالة نافذة أو إلى ما دون LIMIT BY عندما يكون ذلك آمنًا: إذ إن أي predicate مكتوب فوقهما (مثل WHERE خارجي يحيط بـ subquery، أو conjunct في QUALIFY) ويشير فقط إلى أعمدة PARTITION BY الخاصة بدالة النافذة، أو فقط إلى أعمدة المفتاح الخاصة بـ LIMIT BY (في حالة LIMIT n BY عندما يكون n >= 1 ومن دون OFFSET)، يصل الآن إلى طبقة التخزين ويتيح pruning للمفتاح الأساسي وpartition، وskip indexes، وprojections. على سبيل المثال، لم يعد SELECT ... row_number() OVER (PARTITION BY key ORDER BY ts) AS rn ... QUALIFY rn = 1 AND key = 'x' يقرأ الجدول بالكامل ويطبق عليه دالة نافذة. #110114 (Groene AI). #110116 (Groene AI).
  • مع join_use_nulls = 1، فإن WHERE الذي يستبعد قيم NULL ويشير إلى أعمدة من جانبي outer join (مثل WHERE l.k = 42 AND r.k = 42) يحوّل الآن عملية join إلى INNER (أو LEFT/RIGHT) ويتيح pruning للمفتاح الأساسي، تمامًا كما في حالة join_use_nulls = 0. سابقًا كان هذا التحويل يُتخطّى في هذه الحالة، وكان كلا الجدولين يُقرآن بالكامل. #110121 (Groene AI).
  • أصبحت الدوال التي تحتوي على argument واحد Nullable غير ثابت تشارك null map الخاص بـ argument مع النتيجة بدلًا من تخصيص واحد جديد ودمجه. #110151 (Manuel).
  • تجنّب إجراء تخصيص على heap لكل فحص hyperrectangle في index analysis للمفتاح الأساسي، مما يسرّع تصفية العلامات بنسبة 5-26% بحسب شكل query. #110153 (Manuel).
  • حسّن أداء الدالتين arrayMin وarrayMax على Array رقمية بنحو ~1.3-1.5x باستخدام اختزال موجّه vectorized بدلًا من حلقة مقارنة لكل عنصر. #110163 (Manuel).
  • اجعل فك ضغط codec ‏Delta موجّهًا vectorized. أصبح فك الترميز الآن أسرع بمقدار 1.5–5 مرات لأنواع البيانات ذات 8/16/32-بت، مما يجعل scans الأعمدة المضغوطة بـ Delta أسرع حتى 20%. #110189 (Manuel).
  • سرّع string search functions (like, position, match, countSubstrings, hasToken وغيرها) على أعمدة Enum باستخدام needle ثابت، وذلك عبر البحث فقط في أسماء enum المميّزة ثم إرجاع النتائج لكل row، بدلًا من البحث في كل row. #110325 (Alexey Milovidov).
  • سرّع aggregate functions ‏groupBitOr/groupBitAnd/groupBitXor وعائلة التباين (varPop, varSamp, stddevPop, stddevSamp, skewPop, skewSamp, kurtPop, kurtSamp, covarPop, covarSamp, corr) عبر المعالجة الدفعية الموجّهة vectorized: أسرع حتى 4 مرات مع combinator ‏-If في conditions غير المتوقعة، وأسرع حتى 3 مرات لعائلة التباين من دونه. #110461 (Manuel).
  • سرّع تحليل text index (المرحلة التي تحدد granules التي يجب قراءتها): استخدم البحث بالاستبعاد بدلًا من التكرار على جميع granules، وتجنّب إنشاء bitmap مؤقتة لكل فحص نطاق. #110530 (Anton Popov).
  • احتساب الحجم على القرص للأعمدة الفرعية من Map ضمن تحسين PREWHERE التلقائي. يُصلح هذا تراجعًا في أداء PREWHERE أُدخل في #99200. جزء من #110462. #110623 (Pavel Kruglov).
  • تسريع تحليل قيم UUID من النص (مثل JSONExtract إلى LowCardinality(UUID)، وtoUUID، وCAST AS UUID) عبر التحقق من الأرقام السداسية العشرية وتحويلها في مرور واحد بدلًا من مرورين. #110625 (Groene AI).
  • تحسين أداء الدوال التجميعية timeSeries*ToGrid بشكل ملحوظ باستخدام تطبيقات أسرع للفرز وجداول hash. #110875 (Nikita Mikhaylov).
  • أصبحت الاستعلامات مثل SELECT * FROM t WHERE id تستخدم تخطي الفهرس على العمود id. يُغلق #89222. #89603 (Aditya Chopra).
  • أُضيف الإعداد query_plan_merge_expression_into_join (مفعّل افتراضيًا) للسماح بدمج خطوات التعبير ضمن خطوات JOIN أثناء تحسين إعادة ترتيب JOIN. يتيح ذلك إعادة ترتيب JOIN عبر الاستعلامات الفرعية التي تغلف عمليات JOIN (على سبيل المثال، عندما يكون JOIN داخل استعلام فرعي يحتوي على أعمدة محسوبة)، مما يؤدي إلى تحسين أفضل لأشجار JOIN المعقدة. #98533 (Vladimir Cherkasov).
  • تحسين سلاسل AND التي تتضمن شروط مقارنة متعددة على التعبير نفسه: اكتشاف التناقضات (مثل a < 3 AND a > 5false) وحذف الشروط الزائدة (مثل a = 3 AND a < 5a = 3). #99736 (Xiaozhe Yu).
  • أصبحت Materialized CTEs المشار إليها من عدة فروع في استعلام UNION تُجسَّد مرة واحدة وتُشارك بين جميع الفروع. سابقًا، كان كل فرع يتلقى نسخته الخاصة من CTE، وكانت تُضمَّن inline وتُقيَّم بشكل منفصل. #102107 (Dmitry Novik).
  • أصبحت الخيوط في BackgroundSchedulePool تُنشأ عند الطلب بدلًا من إنشائها كلها دفعة واحدة عند بدء تشغيل الخادم. ويتحكم إعداد الخادم الجديد background_schedule_pool_initial_size (القيمة الافتراضية 16) في عدد العمال الذين يُنشؤون مسبقًا؛ كما ينمو الـ pool حتى background_schedule_pool_size عند الحاجة. يقلل ذلك من عدد الخيوط الخاملة على الخوادم منخفضة الحمل. يُغلق #85265. #105066 (Alexey Milovidov).
  • تخطي عمليات تحميل ملفات العلامات غير الضرورية للتسلسل المتقدم للبيانات المشتركة في النوع JSON. #107051 (Pavel Kruglov).
  • أصبحت ذاكرة التخزين المؤقت للمضلعات الثابتة المُعالجة مسبقًا للدالة pointInPolygon مشتركة الآن بين الاستعلامات والخيوط، ويحدّها إعداد الخادم الجديد point_in_polygon_cache_size (القيمة default هي 256 MiB، وتعطّل القيمة 0 ذاكرة التخزين المؤقت، ويمكن تغييره في وقت التشغيل). سابقًا، كانت ذاكرة التخزين المؤقت تحتفظ بما يصل إلى max_threads نسخة من كل مضلع مُعالج مسبقًا، وكانت تنمو بلا حدود مع المضلعات المختلفة، ولم يكن يُفرَج عنها مطلقًا حتى إعادة تشغيل الخادم. ويمكن مسحها باستخدام SYSTEM DROP POINT IN POLYGON CACHE، ويُبلَّغ عن الاستخدام الحالي في system.metrics على شكل PointInPolygonCacheBytes وPointInPolygonCacheCells وPointInPolygonCacheSizeLimit. يغلق #106393. #107247 (Nihal Z. Miaji).
  • لم يعد Keeper يحتفظ بقفل اللقطات الداخلية أثناء تسلسل snapshot وكتابتها إلى القرص أو نقل snapshots بين الأقراص، لذلك لم تعد عمليات نقل snapshot إلى العقد الأخرى ومعالجة Raft تتعطل بسبب إنشاء snapshot محلية. #107595 (Antonio Andelic).
  • جرى تنفيذ background eviction في filesystem cache بالتوازي (ويتحكم فيه الإعداد keep_free_space_ratio). وأُضيف إعداد جديد keep_free_space_eviction_threads للتحكم في درجة التوازي، كما رُفعت القيمة default لـ keep_free_space_remove_batch من 100 إلى 250. #108147 (Kseniia Sumarokova).
  • حُدِّد عدد الأجزاء المرحلية التي تُجهَّز بالتزامن في عملية النسخ بالقراءة ثم الكتابة في Azure Blob Storage (المستخدمة في النسخ الاحتياطية عندما لا تكون عملية النسخ الأصلية متاحة) إلى max_inflight_parts_for_one_file، مما يمنع الاستخدام المفرط للذاكرة عند نسخ عدد كبير من الملفات الكبيرة بالتوازي. #108232 (Smita Kulkarni).
  • جرى تفعيل جميع ذواكر التخزين المؤقت الثلاث الخاصة بـ text index على مستوى عام — إذ كانت سابقًا مفعّلة فقط داخل الاستعلامات. كذلك، أصبح حجم ذاكرة التخزين المؤقت لـ posting lists الآن صفرًا، ما يعطّلها فعليًا مرة أخرى، لأن posting lists كبيرة وتخزينها مؤقتًا مكلف جدًا. #108274 (Robert Schulze).
  • إضافة ضغط marks المتدفقة داخل الذاكرة أثناء تحميل marks لتقليل Peak memory usage. يغلق #108285. #108325 (Pavel Kruglov).
  • يحجز إعداد filesystem cache الجديد reserve_granularity (القيمة default هي 4 MiB) مساحةً مسبقًا على مستوى granules أكبر، مما يقلل تنازع الأقفال في المسار الساخن لحجز مساحة filesystem cache. #108369 (Kseniia Sumarokova).
  • تقليل مقدار الذاكرة التي تستخدمها metadata الخاصة بـ filesystem cache (لكل file segment ولكل مفتاح). #108477 (Kseniia Sumarokova).
  • أصبحت الاستعلامات الموجَّهة إلى system.iceberg_history مع عوامل WHERE على العمودين database وtable تصل الآن فقط إلى قواعد البيانات المطابقة، مما قد يوفر الوقت إذا كان لديك العديد من قواعد البيانات البعيدة غير ذات الصلة على الخادم. #108492 (Den Kalantaevskii).
  • أُزيلت عمليات القفل غير الضرورية في filesystem cache لتقليل تنازع الأقفال. #108932 (Kseniia Sumarokova).
  • خُفِّض استخدام الذاكرة في معالجة البيانات الوصفية لـ BACKUP وRESTORE. فعند فتح نسخة احتياطية (لأجل RESTORE أو كأساس لـ BACKUPincremental) أصبح تحليل البيانات الوصفية .backup يتم على شكل تدفّق بدلًا من تحميلها إلى شجرة مستند XML داخل الذاكرة، ما يتجنب في النسخ الاحتياطية الكبيرة (وخاصة incremental) تخصيص شجرة DOM بحجم عدة غيغابايت. #109107 (Julia Kartseva). ولم يعد إنهاء BACKUP ينسخ معلومات الملفات لكل الملفات إلى متجه مؤقت، وهو ما كان يستهلك مؤقتًا عدة غيغابايت عند التعامل مع نسخ احتياطية تضم ملايين الملفات. #109861 (Julia Kartseva). كما أن كتابة إدخالات النسخ الاحتياطي لم تعد تنسخ قائمة معلومات ملفات المضيف الحالي. #111162 (Julia Kartseva).
  • تقليل استهلاك الذاكرة في المُجمِّع. #109224 (Konstantin Vedernikov).
  • دعم ذاكرة التخزين المؤقت لشروط الاستعلام لملفات Parquet المحلية المقروءة عبر محرك الجدول File (وكان الدعم سابقًا مقتصرًا على تخزين الكائنات وبحيرات البيانات). #109247 (Alexey Milovidov).
  • خُفِّض استخدام الذاكرة في ذاكرة التخزين المؤقت لترويسة الفهرس النصي بمقدار يتراوح بين مرتين و2.5 مرة. وباتت الذاكرة المؤقتة تستوعب عددًا أكبر من ترويسات أجزاء البيانات (الإعداد text_index_header_cache_size)، مما يقلل قراءات القرص لاستعلامات البحث النصي. #109332 (Anton Popov).
  • أصبحت دوال مسافة المتجهات المنقولة L2DistanceTransposed وcosineDistanceTransposed وdotProductTransposed تطبّق الآن تحسين القراءة الجزئية لـ bit planes على أعمدة Nullable(QBit)، بحيث تُقرأ مستويات البتات المطلوبة فقط بدلًا من العمود كاملًا. #109358 (Alexey Milovidov).
  • أصبح IS NOT DISTINCT FROM وIS TRUE يستخدمان الآن المفتاح الأساسي وفهارس MinMax لاستبعاد الحبيبات، تمامًا مثل =. سابقًا، كان k IS NOT DISTINCT FROM 42 و(k = 42) IS TRUE يفحصان جميع الحبيبات. #110006 (Groene AI).
  • لم تعد الاتصالات المجمّعة تُفحَص عبر ping قبل كل استخدام. وهذا يلغي رحلة الذهاب والإياب Ping-Pong التي كانت تُضاف إلى كل اتصال معاد استخدامه، مما يقلل زمن الاستجابة للاستعلامات الموزعة ولأداة clickhouse-benchmark. ويُكتشف الاتصال المجمّع المتقادم عبر عملية poll بمهلة صفرية (فحص غير حاجب لا يضيف أي رحلة ذهاب وإياب)، ثم يُستعاد بإعادة الاتصال. #110068 (Alexey Milovidov).
  • إصلاح عمليات إعادة الاتصال غير المبررة في اتصالات HTTP المجمّعة من نوع keep-alive عبر TLS ‏(HTTPS وS3). كان فحص الاتصال المتقادم يستخدم poll على الـ socket، ما كان يؤدي إلى الإبلاغ خطأً عن اتصال آمن حيّ على أنه مغلق عندما يحمل سجل TLS غير مقروء بعد المصافحة (تذكرة جلسة أو KeyUpdate)؛ أما الآن فيستخدم MSG_PEEK غير حاجب على sockets العادية وSSL_peek/SSL_has_pending على sockets الخاصة بـ TLS، ما يكتشف أيضًا بشكل صحيح الإغلاق المنظم لـ TLS وسجل TLS الذي وصل منه جزء فقط. #110402 (Alexey Milovidov).
  • أصبحت الاستعلامات المسرَّعة بواسطة التصفية الديناميكية TopK ‏(ORDER BY ... LIMIT k) تستفيد بشكل أكبر من ذاكرة التخزين المؤقت لشروط الاستعلام: إذ تُملأ الذاكرة المؤقتة حتى عند تطبيق lazy materialization على الاستعلام، ويمكن لهذه الاستعلامات إعادة استخدام إدخالات كُتبت سابقًا بواسطة استعلام عادي له شرط WHERE نفسه. #110507 (Shankar Iyer).
  • يستخدم نمط LIKE/NOT LIKE بدون أحرف بدل (%, _) الآن نطاقًا دقيقًا للمفتاح الأساسي، لذا يقرأ العدد نفسه من الحبيبات كما في الشرط المكافئ =/!= بدلًا من نطاق بادئة أوسع. #107077 (Groene AI).
  • إصلاح تنازع القفل الزائد على file segment (وهو تراجع في الأداء أُدخل في 26.1) عند قراءة البيانات عبر ذاكرة التخزين المؤقت لنظام الملفات. #109577 (Kseniia Sumarokova).
  • تم إصلاح عدم استخدام فهارس التخطي المعرّفة على الأعمدة الفرعية من النوع Tuple عند الوصول إلى الحقل عبر tupleElement(t, 'name') أو tupleElement(t, N) أو t.N، مع قراءة الـ tuple الكامل أيضًا في الاستعلام نفسه (مثل SELECT *). وتقوم جميع هذه الصيغ الآن بتقليص الحبيبات بالطريقة نفسها التي يوفّرها الوصول إلى العمود الفرعي المسمّى t.name. #110056 (Groene AI).
  • تم إصلاح بطء استعلامات ORDER BY ... LIMIT على جداول Distributed عندما يختار prefer_localhost_replica نسخة متماثلة محلية: أُزيل الحدّ التمهيدي من خطة الشظية المحلية، مما كان يمنع lazy materialization والتصفية الديناميكية لـ top-K. #110136 (Michael Jarrett).
  • تم إصلاح عدم استخدام فهرس النص مع العامل ILIKE عندما يكون الفهرس معرّفًا على expression بدلًا من عمود مباشر (على سبيل المثال assumeNotNull(col) مع preprocessor من نوع lower(...)): إذ كانت مثل هذه الاستعلامات تقرأ جميع الحبيبات بدلًا من استخدام الفهرس. يغلق هذا #110350. #110595 (Elmi Ahmadov).
  • تقليل تنازع القفل في ذاكرة التخزين المؤقت لنظام الملفات: لم تعد الاستعلامات التي تقرأ من الذاكرة المؤقتة تنتظر قفل طابور الأولوية عند تحديث أولوية LRU لإحدى الإدخالات. #109065 (Antonio Andelic).
  • أصبحت استعلامات فهرس النص التي تستخدم expression من postprocessor مخصّصة للتصفية فقط (مثل if(..., '', token)) تستبعد الآن الـ tokens الفارغة مسبقًا بدلًا من materializing لها صفًا بصف، مما يحسّن الأداء. #109049 (Elmi Ahmadov).
  • تقليل تنازع القفل في طوابير سجلات النظام، مما يخفض tail latency للاستعلامات على clusters المزدحمة. #110539 (Sean Haynes).
  • تم تحسين أداء دوال البحث عن substring (position وcountSubstrings وmultiSearch* وreplaceAll وreplaceOne، ومتغيراتها case-insensitive وUTF-8) مع needle غير ثابتة بما يصل إلى 1.5x، وذلك باستخدام أدوات بحث عن السلاسل مدعومة بـ SIMD في المسار الخاص بكل صف بدلًا من تنفيذ ساذج. #110580 (Raúl Marín).
  • يُطبَّق lazy materialization الآن على استعلامات ReplacingMergeTree التي تتضمن FINAL وfilter وLIMIT صغيرًا حتى من دون ORDER BY. ولا تُجلب الأعمدة غير اللازمة للـ filter ودمج FINAL إلا للصفوف التي تبقى بعد تطبيق الحدّ، مما يجعل مثل هذه الاستعلامات أسرع بكثير عند تحديد أعمدة عريضة مع filter انتقائي. ويُتحكَّم في ذلك عبر query_plan_optimize_lazy_materialization وquery_plan_max_limit_for_lazy_materialization. #110722 (Nikolai Kochetov).
  • تحسين أداء async insert عند تمكين deduplication وانقسام عملية flush واحدة عبر عدة partitions: يعيد ClickHouse الآن استخدام قيم hash المحسوبة لإزالة التكرار عبر partitions بدلًا من إعادة حسابها لكل partition. #111150 (Valery Petrov).

تحسينات

  • تمت إضافة الإعداد input_format_csv_missing_nullable_as_empty_string (معطّل افتراضيًا). عند تفعيله، تُقرأ القيمة المفقودة في عمود Nullable(String) ضمن إدخال CSV على أنها String فارغ بدلًا من NULL، بغض النظر عن input_format_csv_empty_as_default. #58225 (kevinyhzou). #107577 (Alexey Milovidov).
  • أصبحت الدوال toDateOrNull وtoDateTimeOrNull وtoDateTime64OrNull تقبل الآن وسائط عددية صحيحة من جميع أنواع الأعداد الصحيحة الأصلية (وتُفسَّر بالطريقة نفسها كما في toDate وtoDateTime وtoDateTime64، مع وسيطة timezone اختيارية)، وتُرجع NULL للقيم الواقعة خارج نطاق نوع النتيجة. على سبيل المثال، تُرجع toDateTimeOrNull(1583851242, 'Asia/Shanghai') القيمة 2020-03-10 22:40:42، بينما تُرجع toDateTimeOrNull(4294967296) القيمة NULL. #79791 (Jitendra).
  • تمت إضافة عمود is_wildcard إلى جدول system.grants للإشارة إلى ما إذا كان الامتياز يستخدم مطابقة البادئة بأحرف البدل (مثلًا، GRANT SELECT ON db*.*). سابقًا، لم يكن بالإمكان التمييز في system.grants بين الامتيازات ذات أحرف البدل والامتيازات المطابقة تمامًا للاسم نفسه. يُغلق #92835. #98577 (DQ).
  • السماح باستخدام ضغط Snappy في واجهة HTTP (Accept-Encoding: snappy) وإضافة الإعداد snappy_mode للاختيار بين تنسيق كتل Hadoop Snappy وتنسيق framing الخاص بـ Snappy لعمليات الإدخال/الإخراج العامة file/url الخاصة بـ snappy. #100752 (Alexey Milovidov).
  • دعم التوافق مع المحلّل القديم ضمن الإعداد analyzer_compatibility_allow_non_aggregate_in_having. وإذا كان مفعّلًا، فستُنقل الشروط غير التجميعية من HAVING إلى WHERE. #104232 (Dmitry Novik).
  • تمت إضافة إعداد جديد على مستوى الخادم memory_worker_rss_speculative_reserve_ratio (القيمة الافتراضية 1.0) يجعل متعقّب الذاكرة العام يحجز الذاكرة استباقيًا فوق RSS المرصود عندما يتجاوز نمو RSS ما يسجله المتعقّب بين العينات. وبهذا، تحصل عمليات تخصيص الذاكرة على الخطأ MEMORY_LIMIT_EXCEEDED في وقت أبكر، ويقلّ احتمال أن يعمل OOM-killer في النواة أولًا. اضبط النسبة على 0 لتعطيل هذا السلوك الاستباقي. #104976 (Alexey Milovidov).
  • تمت إضافة مقاييس Prometheus اختيارية لنشاط إخلاء filesystem cache (filesystem_cache_evictions_total, filesystem_cache_evicted_bytes_total, filesystem_cache_evicted_segment_hits, filesystem_cache_evicted_segment_size_bytes، ومتغيراتها لكل مستخدم والموسومة بـ user_id)، وتُعرَض لكل cache عبر system.dimensional_metrics وsystem.histogram_metrics ونقطة نهاية Prometheus. ويُتحكَّم فيها عبر إعدادَي تهيئة قرص cache: expose_prometheus_eviction_metrics وexpose_prometheus_eviction_metrics_per_user (وكلاهما متوقف افتراضيًا)، ويمكن تبديلهما في وقت التشغيل عبر SYSTEM RELOAD CONFIG. #105020 (Sacheendra Talluri).
  • أصبح EXPLAIN [PLAN] actions=1, compact=1, pretty=1 هو الافتراضي. #105036 (Kirill Kopnev).
  • تمت ترقية delta-kernel-rs (المكتبة التي تقف وراء تكامل DeltaLake) إلى الإصدار v0.23.0. #105861 (Smita Kulkarni).
  • أُضيف الأمران du وwc إلى clickhouse-disks. يعرض الأول الحجم الإجمالي بالبايت لملف أو directory معيّن، بينما يعرض الثاني عدد البايتات والأسطر والكلمات في ملف. #106268 (Asya Shneerson).
  • أُضيف مقياس غير متزامن جديد UntrackedMemory (ظاهر في system.asynchronous_metrics) يبلّغ عن الذاكرة التي خصصتها الخيوط بالفعل ولكن لم تُحتسب بعد في عدّاد التتبّع العام للذاكرة: إذ يراكم كل خيط التخصيصات الصغيرة محليًا ثم يبلّغ عنها دفعة واحدة. ويساعد ذلك في تفسير الفروقات بين MemoryTracking والاستخدام الفعلي لذاكرة العملية. كما تتضمن رسائل الخطأ MEMORY_LIMIT_EXCEEDED الآن مقدار الذاكرة غير المتتبَّعة، مما يسهّل فهم سبب بلوغ الاستعلام أو الخادم حد الذاكرة. #106386 (Miсhael Stetsyuk).
  • تمت ترقية ClickStack (واجهة observability) إلى الإصدار 2.28.0. #106406 (Aaron Knudtson).
  • أُضيف دعم BFloat16 في dotProduct، كما تحسّن أداؤه عبر batching لمسار SIMD. #106569 (Nikita Taranov).
  • أُصبحت الإعدادات max_named_collection_num_to_throw وmax_table_num_to_throw وmax_replicated_table_num_to_throw وmax_view_num_to_throw وmax_dictionary_num_to_throw وmax_database_num_to_throw قابلة للتغيير دون الحاجة إلى إعادة تشغيل الخادم. #106821 (Maxim Orlovsky).
  • أُضيف دعم القيم REDUCED_REDUNDANCY وSTANDARD_IA وONEZONE_IA وGLACIER_IR وEXPRESS_ONEZONE (بالإضافة إلى STANDARD وINTELLIGENT_TIERING) للإعداد s3_storage_class_name. #107251 (Aditya Kumar).
  • أُضيف الإعداد materialized_postgresql_use_extended_date_and_time_types الخاص بوقت الإنشاء إلى database engine MaterializedPostgreSQL. افتراضيًا (عند تمكينه)، يُستدل على أعمدة PostgreSQL من النوعين date/timestamp على أنها Date32/DateTime64؛ أما عند ضبطه على 0 وقت CREATE DATABASE فيُستدل على النوعين الأضيق Date/DateTime. لا ينطبق هذا الإعداد على table engine MaterializedPostgreSQL. #107428 (Alexey Milovidov).
  • يدعم مُكمِّم Array SOME / ALL (expr OP SOME(array) / expr OP ALL(array)) الآن أيضًا predicates مقارنة الكلمات المفتاحية IS DISTINCT FROM وIS NOT DISTINCT FROM، وpredicates البحث في السلاسل النصية LIKE وILIKE وNOT LIKE وNOT ILIKE وREGEXP، بعد إعادة كتابتها إلى arrayExists / arrayAll. #107454 (Alexey Milovidov).
  • أُصلح تسرّب في الذاكرة كان يحدث عند فشل فتح قاعدة بيانات SQLite (على سبيل المثال، عند تمرير path يتعذّر فتحه إلى table function sqlite أو إلى database engine SQLite). #107807 (Alexey Milovidov).
  • في واجهة الويب (play.html)، تعرض تلميحة اختصار التشغيل الآن Cmd+Enter على Mac وCtrl+Enter على المنصات الأخرى بدلًا من عرض Ctrl/Cmd+Enter دائمًا، كما لا يظهر الجزء , +Shift to run all من التلميحة إلا عند وجود عدة استعلامات. #107817 (Alexey Milovidov). #108957 (Alexey Milovidov).
  • يدعم محرك الجداول Alias الآن القراءة باستخدام النسخ المتماثلة المتوازية عندما يكون الجدول الهدف من عائلة MergeTree. #107830 (Kai Zhu).
  • أُضيف نوع إحصاءات الأعمدة uniq_v2 — وهو بديل خفيف الوزن لإحصاءات uniq، ويستند إلى uniqCombined64 sketch. #107863 (Han Fei). كما اعتُبر نوع إحصاءات الأعمدة minmax مهملًا، وتغيّرت القيمة الافتراضية لـ auto_statistics_types إلى basic, uniq_v2. #108680 (Han Fei).
  • أصبحت دوال الذكاء الاصطناعي (aiGenerate, aiEmbed, aiClassify, aiExtract, aiTranslate) تعيد المحاولة الآن عند حدوث أعطال شبكية عابرة (إعادة تعيين الاتصال، وإخفاقات اتصال TLS، وحالات timeout، والعناوين غير القابلة للوصول) عندما يكون ai_function_max_retries مضبوطًا، بما يطابق سلوك إعادة المحاولة في table function ‏url. في السابق، كانت إعادة المحاولة تقتصر على استجابات أخطاء HTTP من جهة المزوّد. #107927 (Alexey Milovidov).
  • أصبحت عملية INSERT إلى جدول MergeTree تراعي الآن إلغاء الاستعلام وmax_execution_time أثناء كتابة عدد كبير من الأجزاء، بدلًا من احتمال استمرارها فترةً طويلة بعد إيقافها. #107929 (Michael Kolupaev).
  • في واجهة الويب (play.html)، يمكن الآن فتح أيقونة طرفية الويب في tab جديدة بالمتصفح بالنقر بالزر الأوسط أو باستخدام Ctrl/Cmd/Shift+click. #108006 (Alexey Milovidov).
  • لم يعد توليد SQL بالذكاء الاصطناعي في العميل يرسل المعامل temperature ما لم يُضبط صراحةً عبر ai.temperature في التهيئة. ويُصلح هذا توليد SQL بالذكاء الاصطناعي للنماذج التي ترفض المعامل temperature. #108014 (Alexey Milovidov).
  • أُضيف الجدول system.masking_policies واستبطان SHOW MASKING POLICIES إلى الإصدارات مفتوحة المصدر. وتبقى سياسات الإخفاء نفسها ميزةً في ClickHouse Cloud، لذا يكون الجدول فارغًا في الإصدارات مفتوحة المصدر، لكن استعلامات الاستبطان لم تعد تفشل مع ظهور خطأ. #108030 (Alexey Milovidov).
  • أصبح مستهلك Kafka المعتمد على Keeper يختار ترتيب الحصول على أقفال الأقسام المؤقتة عبر النسخ المتماثلة عشوائيًا، مما يحسّن عدالة توزيع الأقسام ويقلّل تنازع الأقفال. في السابق، لم يكن للخلط المقصود أي تأثير. #108033 (Alexey Milovidov).
  • أُضيف الإكمال التلقائي إلى واجهة الويب (play.html)، استنادًا إلى system.completions ومحلل SQL المعجمي المعتمد على WASM. #108059 (Alexey Milovidov).
  • يعرض clickhouse-client وclickhouse-local الآن تلميحات إكمال تلقائي أثناء الكتابة (نص “شبح” مضمن) لأفضل اقتراح مطابق عندما يكون المؤشر في نهاية الإدخال. وتُرتَّب الاقتراحات الأكثر صلة أولًا (المستخدمة مؤخرًا والمعرّفات الموجودة بالفعل في الاستعلام). تنقّل باستخدام Up/Down (أو Ctrl-Up/Ctrl-Down)؛ واقبل تلميحًا واحدًا أو التلميح المحدد باستخدام Tab أو Right، واقبل التلميح المحدد باستخدام Enter؛ كما يفتح Tab أيضًا قائمة الإكمال الكلاسيكية. يتحكم في ذلك الخيار الجديد --hints (مفعّل افتراضيًا؛ ويتطلب --highlight). #108070 (Alexey Milovidov).
  • دعم الدالة length لنوع البيانات QBit — إذ تُرجع بُعد المتجه كثابت. #108071 (Alexey Milovidov). ودعم CAST من QBit إلى Array، مع إعادة تكوين المتجه الأصلي — أي عكس التحويل الحالي من Array إلى QBit. #108072 (Alexey Milovidov).
  • تتضمن الطلبات المرسلة إلى كتالوجات بحيرات البيانات عبر REST (مثل OneLake) الآن ترويسة ClickHouse User-Agent. #108117 (Konstantin Vedernikov).
  • أصبح arrayFold الآن يراعي إلغاء الاستعلام وmax_execution_time. سابقًا، كان الطي على مصفوفة طويلة جدًا يُنفَّذ بالكامل داخل استدعاء دالة واحد ولا يمكن مقاطعته، لذا كان يتم تجاهل KILL QUERY والحدود الزمنية حتى يكتمل الطي. #108192 (Groene AI).
  • يقوم MVTEncodeGeom الآن بمواءمة الأشكال الهندسية مع شبكة البكسلات الصحيحة قبل القص، ويقص المضلعات باستخدام مكتبة wagyu، بحيث يكون الناتج المقصوص صالحًا (تُصلَح الحلقات ذاتية التقاطع) ومحاذيًا للحواف، بما يطابق PostGIS ST_AsMVTGeom. #108248 (Saarthak Gupta).
  • أُضيفت ProfileEvents لكل مرحلة قبل تنفيذ الاستعلام: ‏QueryParseMicroseconds وQueryAnalysisMicroseconds وQueryPlanBuildMicroseconds وQueryPipelineBuildMicroseconds. وهي توضّح أين يُستهلك الوقت قبل تنفيذ الاستعلام (التحليل النحوي، والتحليل، وبناء خطة الاستعلام، وبناء الـ pipeline)، وهي متاحة في system.query_log وsystem.events. #108282 (Jordi Villar).
  • أصبحت عمليات ALTER TABLE التي قد تؤدي إلى إنتاج بيانات وصفية للجدول تتجاوز max_query_size تُرفَض مسبقًا، مما يمنع الجداول من أن تصبح غير قابلة للتحميل بواسطة مكوّنات مثل توزيع DDL واستعادة النسخ المتماثلة. #108283 (Andrew Kravchuk).
  • أُضيفت الأعمدة settings وengine_settings إلى system.backups وsystem.backup_log. يكشف settings إعدادات النسخ الاحتياطي/الاستعادة المطلوبة لعملية ما (مثل allow_s3_native_copy وdeduplicate_files وstructure_only)، بينما يكشف engine_settings الإعدادات المستخدمة فعليًا من قِبل قارئ وكاتب محرك النسخ الاحتياطي (مثل إعدادات طلبات S3 مثل allow_native_copy، التي قد تختلف عما طُلِب بعد دمج تهيئة الـ endpoint). وهذا يتيح معرفة الإعدادات التي نُفِّذت بها فعليًا عملية BACKUP/RESTORE. #108334 (Julia Kartseva).
  • أُضيف عمود source إلى system.documentation يحتوي على مسار الملف المصدر الذي يُعرَّف فيه توثيق كل كيان. ويوثّق الجدول الآن أيضًا ترميزات الضغط، وأحداث profile، والمقاييس الحالية، والمقاييس غير المتزامنة، وجداول النظام نفسها (مع أعمدتها)، كما يتضمن توثيق الإعدادات الآن نوعها وقيمتها الافتراضية. #108346 (Alexey Milovidov). كما أصبحت القيمة الافتراضية الفارغة للإعدادات تُعرَض الآن على أنها سلسلة فارغة بدلًا من علامتَي backticks فارغتين. #108708 (Alexey Milovidov).
  • دعم عمليات القراءة غير المتزامنة من النسخ المتماثلة البعيدة (async_socket_for_remote) على MacOS عبر تنفيذ بدائيات polling المعتمدة على epoll فوق kqueue. ويتيح هذا للاستعلامات الموزعة قراءة الشظايا بالتوازي على MacOS بدلًا من قراءتها تسلسليًا. #108403 (Raúl Marín).
  • دعم BFloat16 في دوال الرياضيات الثنائية. #108442 (Zhang Yifan).
  • أصبح بإمكان MergeTree الآن قراءة تدفق مضغوط تستخدم كُتله ترميزات مختلفة. وهذا هو المتطلب المسبق على جانب القراءة لاختيار codec التكيفي (#105404). #108592 (Raufs Dunamalijevs).
  • أصبحت القيمة التلقائية لـ max_threads والإعدادات المشابهة تُعرض الآن في system.settings على أنها auto(8) بدلًا من 'auto(8)'؛ إذ كانت علامات الاقتباس المفردة المحيطة بها أثرًا قديمًا مضمَّنًا في القيمة. وقد جرى الحفاظ على التوافق بين الإصدارات: فما تزال الصيغة القديمة المحاطة بعلامات اقتباس مقبولة عند تحليل الإعدادات المستلمة من الخوادم الأقدم. #108657 (Alexey Milovidov).
  • عدة إصلاحات لتحسين سهولة الاستخدام في Web UI الخاصة بـ /schema: تحميل المخطط عند الضغط على Enter، وأشرطة تمرير تراعي السمة، وأسماء جداول أكثر وضوحًا، وتجميع متسق للجداول المستقلة على مستوى كل database، ومنع تحديد النص أثناء السحب، ونموذج authentication بأسلوب play (Credential Management API، وبيانات الاعتماد الممرَّرة عبر URL مع إزالة كلمة المرور، والتحقق المباشر من بيانات الاعتماد). #108724 (Alexey Milovidov).
  • لم يعد وضع التطبيق الكسول لقائمة الترحيل في فهرس النص تجريبيًا، ويمكن اختياره باستخدام text_index_posting_list_apply_mode = 'lazy' من دون allow_experimental_text_index_lazy_apply. كما أُعيدت تسمية إعداد عتبة الكثافة من text_index_density_threshold إلى text_index_lazy_intersection_density_threshold. #108814 (Anton Popov).
  • أُضيف نوع كتالوج باسم delta_sharing إلى DataLakeCatalog من أجل REST endpoint الخاصة بـ Iceberg في Databricks Delta Sharing، والتي تكون فيها مساحات الأسماء مسطحة وتتجاهل مرشح السرد parent. استخدمه بدلًا من catalog_type = 'rest' لمثل نقاط النهاية هذه، إذ قد يتعطل SHOW TABLES بخلاف ذلك. #108865 (Seva Potapov).
  • أُضيف خيار جديد إلى clickhouse-client/clickhouse-local باسم --echo-query-separator يطبع فاصلًا مخصصًا قبل الاستعلام المعروض بعد تنسيقه، مما يسهّل تمييز الاستعلام المكتوب عن نسخته المعاد تنسيقها. وهو معطّل افتراضيًا. #108888 (David Meng).
  • تحسينات على لوحة قواعد البيانات في واجهة الويب: يُعرض عدد الجداول بين قوسين بجوار اسم قاعدة البيانات عند توسيعها. #108891 (Alexey Milovidov). كما يعيد زر التحديث المجاور لقاعدة البيانات الموسَّعة تحميل قائمة جداولها. #108958 (Alexey Milovidov). وعند إعادة فتح اللوحة، تُستعاد قواعد البيانات التي كانت موسَّعة سابقًا. #108964 (Alexey Milovidov).
  • أصبح بالإمكان حساب الفائدة المجمّعة لفهارس التخطي في EXPLAIN WHATIF: إذ يعرض نسبة البيانات عند تقاطع جميع الفهارس الافتراضية المناسبة الموجودة. #108934 (Yarik Briukhovetskyi).
  • تم إصلاح مشكلة إعادة تعيين موضع التمرير الأفقي في جدول النتائج في واجهة الويب عند النقر على رابط داخل خلية ثم الرجوع إلى الصفحة. #108941 (Alexey Milovidov).
  • أصبح محرك قاعدة البيانات MySQL ومحرك الجدول ودالة الجدول يربطون الآن أنواع الأعمدة المكانية في MySQL (LINESTRING وPOLYGON وMULTILINESTRING وMULTIPOLYGON وGEOMETRY العامة) بالأنواع الهندسية المناظرة في ClickHouse بدلًا من String. ويتحكم في ذلك الخيار الجديد geometry ضمن الإعداد mysql_datatypes_support_level، وهو مفعّل افتراضيًا. ولا يزال POINT يُحوَّل دائمًا إلى Point. ويُربط العمود العام GEOMETRY بالنوع الشامل Geometry؛ وتؤدي قراءة قيمة لا يوجد لنوعها الفرعي مقابل في ClickHouse (MULTIPOINT وGEOMETRYCOLLECTION) إلى طرح استثناء وقت القراءة. #108944 (Alexey Milovidov).
  • واجهة الويب (play.html): تنقّل كامل بلوحة المفاتيح — تنقّل بمفاتيح الأسهم داخل لوحة قواعد البيانات وجدول النتائج، وإمكانية الوصول إلى أزرار شريط الأدوات ومبدّل السمة وقائمة التنزيل عبر لوحة المفاتيح، مع مؤشرات تركيز مرئية. #108972 (Alexey Milovidov).
  • واجهة HTTP: عند تقديم بيانات الاعتماد عبر معلمات URL (user/password) وكذلك عبر ترويسة Authorization، أصبحت معلمات URL الآن هي التي لها الأولوية بدلًا من رفض الطلب. ويُصلح ذلك مشكلة فشل تنزيل النتائج من واجهة الويب (play.html) مع AUTHENTICATION_FAILED (الخطأ 516) عندما يكون المتصفح قد تذكّر بيانات اعتماد Basic. #108980 (Alexey Milovidov).
  • أُعيدت show_data_lake_catalogs_in_system_tables لتكون الإعداد الذي يتحكم فقط في ظهور DataLakeCatalog في system.tables وsystem.columns وsystem.completions. كما أُضيف show_remote_databases_in_system_tables، وهو مفعّل افتراضيًا، لإتاحة إخفاء قواعد بيانات MySQL وPostgreSQL من جداول النظام تلك بشكل منفصل. #109082 (Pablo Marcos).
  • استخدام خوارزمية parsing دقيقة لـ float (الأقرب تمثيلًا) افتراضيًا، وتطبيق الإعداد precise_float_parsing على input formats (CSV وTSV وJSON وVALUES و…) وعلى القيم الحرفية الرقمية، وليس فقط على toFloat*/CAST. اضبط precise_float_parsing = 0 للحصول على السلوك السابق، وهو أسرع في بعض الحالات لكنه أقل دقة. يُغلق #60146. يُغلق #74647. يُغلق #68914. #109086 (Raúl Marín).
  • أصبح الاستعلام الذي يحتوي على تعبير الجدول الشائع واحدًا يُنسَّق الآن بنفس فواصل الأسطر والمسافات البادئة المستخدمة في الاستعلامات التي تحتوي على عدة تعبيرات جدول شائعة. سابقًا، كان WITH a AS (...) يُبقي تعبير الجدول الشائع في السطر نفسه مع WITH، بينما كانت حالتا وجود تعبيرين أو أكثر تضعان WITH في سطر مستقل مع إزاحة كل تعبير جدول شائع. #109092 (Groene AI).
  • واجهة مستخدم الويب: عندما يكون الإكمال المميز مطابقًا للكلمة المكتوبة بالفعل، أو لنفس الكلمة مع اختلاف حالة الأحرف (مثل عرض HASH للكلمة المكتوبة hash)، فإن الضغط على Right/Tab/Enter لم يعد يعيد كتابة الكلمة أو تلتهمه ميزة الإكمال التلقائي — بل ينقل موضع المؤشر أو يُدرج سطرًا جديدًا كما هو متوقع. #109106 (Alexey Milovidov). #109384 (Alexey Milovidov).
  • أُضيف إلى واجهة مستخدم الويب (play.html) تمييز الأقواس المتداخلة بالألوان، وتمييز الأقواس المتطابقة، وتمييز المعرّفات المتطابقة، وتمييز مجموعات الأرقام، بما يتوافق مع clickhouse-client. #109108 (Alexey Milovidov).
  • في واجهة مستخدم الويب، أصبح Tab وShift+Tab الآن يزيدان ويقللان المسافة البادئة للأسطر المحددة بمقدار 4 مسافات. #109110 (Alexey Milovidov).
  • واجهة مستخدم الويب: يُميَّز موضع خطأ الصياغة في محرر الاستعلام بخلفية حمراء. ويُزال هذا التمييز بمجرد أن يعيد المستخدم التركيز إلى المحرر. #109112 (Alexey Milovidov).
  • أصبح clickhouse-compressor --stat واكتشاف codec الافتراضي للأجزاء القديمة يُبلغان عن تلف رؤوس block على أنه تلف، بدلًا من الإبلاغ المضلل عن خطأ نهاية الملف. #109157 (Raufs Dunamalijevs).
  • أصبح ClickHouse Keeper يراعي الآن الإعداد os_collect_psi_metrics ويتخطى جمع PSI metrics عندما يكون معطّلًا. #109179 (Maxim Orlovsky).
  • في واجهة مستخدم الويب، عند عرض علامات تبويب الاستعلام، تُخفى معلمات الاتصال (host، user، password) خلف زر على شكل مفتاح في الزاوية العلوية اليمنى، وتُعرض في قائمة منسدلة عند الطلب. #109243 (Alexey Milovidov).
  • واجهة مستخدم الويب: تُعرض النتيجة ذات القيمة الواحدة (صف واحد، عمود واحد، مثل SHOW CREATE TABLE) بارتفاع كامل بدلًا من تقييدها بثلاثة أسطر. #109245 (Alexey Milovidov).
  • في واجهة مستخدم الويب، يؤدي الآن النقر على جدول في لوحة قواعد البيانات بزر الفأرة الأوسط، أو مع Shift، أو باستخدام مُعدِّل فتح علامة تبويب جديدة الخاص بالمنصة (Cmd على MacOS، وCtrl في غيره) إلى فتح استعلامه في علامة تبويب جديدة في واجهة مستخدم الويب. #109246 (Alexey Milovidov).
  • أصبح مفتاح query condition cache لملفات Parquet البعيدة (في object storage) يعتمد على ETag بالإضافة إلى المسار، بحيث لم يعد استبدال كائن في موضعه يؤدي إلى تقديم نتائج مخزنة مؤقتًا قديمة. #109310 (Alexey Milovidov).
  • في واجهة مستخدم الويب، لم تعد السلاسل النصية الفارغة وقيم NULL تُلوَّن في وضع التلوين categorical. #109342 (Alexey Milovidov).
  • واجهة الويب: يؤدي النقر على أيقونة جدول في لوحة قاعدة البيانات الآن إلى عرض قائمة أعمدته، مع أيقونات للأنواع، وشريط حجم يتناسب مع الحجم المضغوط، وتلميح يعرض الحجم المضغوط/غير المضغوط ونسبة الضغط. #109346 (Alexey Milovidov).
  • واجهة الويب: يُعرَض الآن عنوان علامة التبويب كاملًا كتلميح عند المرور فوقه إذا كان مقتطعًا. #109354 (Alexey Milovidov).
  • في واجهة الويب، يؤدي الآن النقر بالزر الأوسط على عنوان علامة التبويب (أو Ctrl/Shift/Cmd+النقر عليه) إلى تكرار علامة التبويب. #109357 (Alexey Milovidov).
  • واجهة الويب: غيّر حجم منطقتَي التقدم النهائي وإحصاءات الاستعلام بشكل متناسق حتى لا تلتفّا بصورة غير ملائمة عندما تكون نافذة المتصفح ضيقة. #109363 (Alexey Milovidov).
  • واجهة الويب: يؤدي الآن تحديد قاعدة بيانات في لوحة قواعد البيانات إلى استخدامها كقاعدة البيانات الافتراضية للاستعلامات التي تُشغَّل من المحرر. #109372 (Alexey Milovidov).
  • دعم reinterpret لـ Array من عناصر ثابتة الحجم على أنه String، وهو عكس reinterpret الحالي لـ String/FixedString على أنه Array. #109383 (Alexey Milovidov).
  • في واجهة الويب، لا تعرض مفاتيح تبديل الترميز اللوني لكل عمود عندما لا تحتوي النتيجة إلا على صف واحد كحد أقصى. #109385 (Alexey Milovidov).
  • السماح باستخدام CAST بين أنواع QBit التي تختلف في نوع العنصر و/أو stride، ما دام البعد يبقى نفسه (على سبيل المثال CAST(x AS QBit(Float64, N)) انطلاقًا من QBit(Float32, N)). التغييرات التي تقتصر على stride فقط لا تؤدي إلى فقدان للبيانات؛ أما تغييرات نوع العنصر فتتبع دلالات تحويل Array المقابلة (فعلى سبيل المثال قد يؤدي التحويل من Float32 إلى BFloat16 إلى فقدان في الدقة، كما أن accurateCast / accurateCastOrNull يرفضان الصفوف التي لا يمكن تمثيلها بدقة تامة). #109387 (Alexey Milovidov).
  • أصبحت الدالتان quantizeBFloat16ToInt8 و dequantizeInt8ToBFloat16 تقبلان الآن أيضًا وسيطات من نوع Array و QBit، مع تطبيق codec Lloyd-Max على المتجه بالكامل (وإرجاع Array/QBit من نوع العنصر المقابل)، بالإضافة إلى الأشكال scalar المتاحة سابقًا. #109398 (Alexey Milovidov).
  • واجهة الويب: يتضمن رابط Documentation الآن اسم المستخدم الحالي في عنوان URL. #109419 (Alexey Milovidov).
  • دعم arraySum و arrayAvg و arrayProduct للمصفوفات من BFloat16. #109420 (Alexey Milovidov).
  • يَقبل الآن محدِّد format على نمط MySQL وهو %f في parseDateTime / parseDateTime64 (ومتغيراتهما OrZero / OrNull) ما بين 1 و6 منازل كسرية، وتُفسَّر على أنها ميكروثوانٍ بمحاذاة لليسار مثل STR_TO_DATE في MySQL، بدلًا من اشتراط 6 بالضبط. كما أُصلِح أيضًا عدم محاذاة جداول PrettyCompact في أمثلة توثيق الدوال المضمنة. #109421 (Alexey Milovidov).
  • واجهة الويب: أصبحت علامات تبويب الاستعلامات دائمة الآن — إذ يحتفظ كل تبويب بنتيجته المعروضة (بما في ذلك الصور والمخططات) وباستعلامه قيد التشغيل عند الانتقال عنه ثم العودة إليه، كما تواصل الاستعلامات الطويلة العمل في الخلفية. وتعرض عناوين علامات التبويب مؤشر تحميل وشريط تقدم وعلامة إكمال لاستعلامها. #109425 (Alexey Milovidov).
  • واجهة الويب: يُعرَض الخطأ الآن بشكل صحيح عند فشل الاستعلام بعد أن يكون جزء من نتيجته قد بُث بالفعل، بدلًا من إظهار SyntaxError: Unexpected end of JSON input من جهة العميل (أو، عند استخدام http_write_exception_in_output_format، وسم الاستعلام الفاشل على أنه ناجح). #109430 (Alexey Milovidov).
  • أُضيفت الأعمدة المثبتة إلى واجهة الويب: يمكن تثبيت عمود من ترويسته بحيث يظل مرئيًا (ملتصقًا بالحافة) أثناء التمرير الأفقي لجدول النتائج. #109439 (Alexey Milovidov).
  • في لوحة المعلومات المتقدمة (/dashboard)، أصبح بالإمكان الآن إضافة مخططات لمقاييس محددة مباشرةً باستخدام اسم المقياس كما يظهر في الشيفرة المصدرية أو الوثائق، مما يسهّل إضافة عدة مقاييس أثناء جلسات استكشاف الأخطاء وإصلاحها. #109449 (Mikhail Artemenko).
  • واجهة الويب: أُصلحت مشكلة إغلاق القائمة المنسدلة لإعدادات الاتصال عند تحديد نص بالفأرة وسحبه إلى خارج حدودها. #109451 (Alexey Milovidov).
  • واجهة الويب: يؤدي المرور فوق ترويسة عمود في جدول النتائج الآن إلى إظهار اسم العمود الكامل ونوعه كتلميح، بحيث يمكن قراءة الترويسات المقتطعة كاملةً. #109463 (Alexey Milovidov). كما أُصلحت مشكلة اقتطاع عناوين ترويسات الأعمدة بعلامة حذف حتى عندما يكون العمود عريضًا بما يكفي لعرض العنوان كاملًا. #110397 (Alexey Milovidov).
  • دعم قواميس ssd_cache (بتخطيط SSD_CACHE) ومحرك الجداول FileLog في إصدارات macOS. #109493 (Raúl Marín).
  • واجهة الويب: عدم استعادة علامات التبويب ذات الاستعلامات الفارغة عند فتح الصفحة. #109529 (Alexey Milovidov).
  • إصلاح تلميحات الإكمال التلقائي غير المقروءة أثناء الكتابة والألوان الساطعة في العميل التفاعلي على الطرفيات التي لا تحتوي قيمة TERM فيها على 256 (مثل Ghostty و kitty و Alacritty و foot): إذ أصبحت الألوان الساطعة الآن تُخرَج دائمًا كرموز ألوان aixterm الساطعة بدلًا من الرجوع إلى الغامق + اللون الداكن، وهو ما تعرضه الطرفيات الحديثة كلون داكن يصعب قراءته على الخلفيات الداكنة. #109622 (Alasdair Brown).
  • تمكين ساحات jemalloc لكل CPU وتوصيف التخصيص في إصدارات macOS. #109684 (Raúl Marín).
  • السماح بتعديل بعض إعدادات المصادقة لقاعدة بيانات كتالوج بحيرة البيانات من نوع OneLake باستخدام ALTER DATABASE ... MODIFY SETTING. #110019 (alesapin).
  • أصبح محرك Hive الآن يقرأ البيانات الوصفية لملفات ORC (فهارس الحد الأدنى/الحد الأقصى، وعدد الصفوف) باستخدام قارئ ORC الأصلي في ClickHouse بدلًا من مهايئ ORC الخاص بـ Apache Arrow. #110086 (Alexey Milovidov).
  • تم تقليل حجم الملف التنفيذي بنحو ~10.5 MB عبر تنفيذ عمليات المقارنة والعمليات الحسابية على أزواج الأنواع المختلطة قليلة الاستخدام (Decimal مقابل عدد صحيح بعرض مختلف، والأزواج التي تتضمن Int128/UInt128/Int256/UInt256) من خلال التحويل إلى نوع مشترك بدلًا من نواة مُصرَّفة مخصّصة لكل توليفة من الأنواع. وتبقى الأزواج من النوع نفسه، والأزواج شائعة الاستخدام، وعمليات plus/minus/multiply المقيّدة بالذاكرة محتفظةً بنواها المخصّصة؛ كما تظل النتائج وأنواع النتائج والحالات الاستثنائية دون تغيير. #110131 (Alexey Milovidov).
  • أصبح الاستعلام الفرعي الموجود على الجانب الأيمن من IN، والذي يكون عموده الوحيد مصفوفة أعمق ببعد واحد من الوسيطة اليسرى، يُفسَّر الآن على أنه مجموعة عناصر المصفوفة (مثل قيمة حرفية لمصفوفة أو دالة تُرجع مصفوفة)، بدلًا من أن يفشل بخطأ مُربِك بسبب عدم تطابق الأنواع. على سبيل المثال، أصبح x IN (SELECT groupArray(x) FROM ...) يعمل الآن. #110169 (Alexey Milovidov).
  • لم تعد القراءة من محرك الجدول SQLite أو دالة الجدول sqlite تدخل في دوران مشغول يستهلك نواة CPU كاملة عندما تكون قاعدة بيانات SQLite مقفلة بواسطة اتصال آخر. أصبحت القراءة الآن في وضع خمول أثناء انتظار القفل، مع بقائها قابلة للإلغاء. #110248 (Groene AI).
  • قَرِّب قيم Elapsed والمعدل والنسبة في رسائل السجل ورسائل الاستثناء إلى ثلاثة أرقام، بحيث لا تعود الأرقام مثل 1.345844286 sec. تُطبع بالدقة الكاملة. #110277 (Alexey Milovidov).
  • في واجهة الويب (Play)، أصبح BFloat16 الآن يُتعرَّف عليه كعدد بفاصلة عائمة، وتُحاذى أعمدته إلى اليمين وتُلوَّن وفقًا لذلك. #110433 (Alexey Milovidov).
  • دعم عبارة SETTINGS في محرك الجدول PostgreSQL ودالة الجدول postgresql (على سبيل المثال SETTINGS postgresql_connection_pool_size = 50)، بما يحقق تكافؤ الميزات مع المحرك MySQL. #110614 (Alexey Milovidov).
  • أصبح SHOW CREATE TABLE (وكذلك SHOW CREATE VIEW / SHOW CREATE DICTIONARY) يقترح الآن جدولًا باسم مشابه في رسالة الخطأ عندما لا يكون الجدول المطلوب موجودًا، بالطريقة نفسها التي تفعلها استعلامات SELECT. #110633 (Alexey Milovidov).
  • تم تفعيل الإعداد merge_selector_enable_heuristic_to_lower_max_parts_to_merge_at_once افتراضيًا: إذ يقوم محدد الدمج الآن بخفض الحد الأقصى لعدد الأجزاء التي يمكن دمجها دفعةً واحدة تلقائيًا بناءً على مدى امتلاء القسم. راجع #91163. #110726 (Mikhail Artemenko).
  • اقبل أوامر التنظيف الخاصة بـ PostgreSQL وهي RESET وUNLISTEN وDISCARD باعتبارها عمليات بلا تأثير ضمن بروتوكول PostgreSQL السلكي، بدلًا من إرجاع خطأ في الصياغة لها. وهذا يحسّن التوافق مع برامج التشغيل مثل Skunk التي ترسل RESET ALL وUNLISTEN * أثناء إعداد الاتصال وتنظيفه. #110780 (Alexey Milovidov).
  • تم تغيير القيمة الافتراضية للإعداد auto_statistics_types من basic, uniq إلى basic, uniq_v2. #110878 (Han Fei).
  • أصبح randomHadamardTransform يحسب الآن تحويلًا دقيقًا يحافظ على الطول لأي طول متجه لا يزيد أكبر عامل فردي فيه على 64 (على سبيل المثال 3584 = 512 * 7، وهو شائع في نماذج embedding)، ما يوسّع العائلات المدعومة سابقًا 2^N و2^k * {12, 20} و2^k * 9. وأصبح تنفيذ تحويل كامل لطول لا يمكن تمثيله بدقة يطلق استثناءً الآن بدلًا من إضافة أصفار بصمت إلى متجه أطول؛ مرّر output_dims لحساب إسقاط مقتطع بطول اعتباطي. #111006 (Alexey Milovidov).
  • تم إصلاح استثناء LOGICAL_ERROR أثناء إنشاء نسخة احتياطية لقاعدة بيانات Replicated يجري حذفها وإعادة إنشائها بالتزامن؛ وأصبحت مثل هذه النسخ الاحتياطية تفشل الآن بوضوح مع CANNOT_GET_REPLICATED_DATABASE_SNAPSHOT. #100651 (Alexey Milovidov).
  • أصبح النظام يعرض الخطأ الحقيقي الأساسي عندما يتعذر فك أرشيف zip (على سبيل المثال، عند قراءة الأرشيف من S3 ورفض read buffer تنفيذ seek). سابقًا، كان الخطأ الفعلي مخفيًا خلف الرسالة العامة Couldn't unpack zip archive: Code = -100 / Couldn't open zip archive. #105103 (Groene AI).
  • تم إصلاح تلميح مربك من نوع “Maybe you meant X?” بعد إعادة تشغيل server (أو DETACH DATABASE/ATTACH DATABASE): إذ كان حذف جدول سبق حذفه قد يقترح الاسم الذي حُذف للتو كبديل. #106238 (Groene AI).
  • تم إصلاح logical error (Logical error: 'removed'، وكان يؤدي إلى إيقاف server في builds الخاصة بالتصحيح) في queue الخلفية الخاصة بحذف الجداول، وكان يُحفَّز عند إعادة استخدام معرّف UUID صريح نفسه عبر عدة استعلامات CREATE OR REPLACE TABLE، ما يؤدي إلى إدراج أكثر من جدول محذوف واحد يشترك في معرّف UUID نفسه ضمن queue. #107031 (Groene AI).
  • تم إصلاح logical error من نوع Inconsistent AST formatting كان يمكن أن يؤدي إلى إيقاف server في builds التصحيح وsanitizer عند استخدام lambda ذات اسم مستعار كمعامل لعامل وصول (عنصر tuple .N أو عنصر المصفوفة []) في موضع غير أول ضمن قائمة expression، مثل SELECT 1, ((p0, p1) -> p0 AS a7).4[3] FROM t. #107092 (Groene AI).
  • أصبحت cluster table function (urlCluster, fileCluster, s3Cluster, …) المتداخلة داخل distributed query أخرى، مثل clusterAllReplicas(..., urlCluster(...))، تُرفض الآن بخطأ BAD_ARGUMENTS بدلًا من الفشل مع logical error (Distributed task iterator is not initialized). #107107 (Groene AI).
  • إذا تمت مقاطعة OPTIMIZE ... DRY RUN بسبب query timeout (max_execution_time مع timeout_overflow_mode = 'break')، فإنها تعيد الآن TIMEOUT_EXCEEDED بدلًا من logical error متعلق بـ rows_sources (والذي كان يؤدي إلى إيقاف server في builds التصحيح/‏sanitizer). #107114 (Groene AI).
  • لم يعد يُسجَّل الخطأ غير الضار Net Exception: Socket is not connected أثناء إنهاء جلسة ZooKeeper على macOS. كما لم يعد clickhouse keeper-client يطبع هذا الخطأ الزائف إلى stderr عند الخروج. #107438 (Groene AI).
  • تم إصلاح overflow في عدد صحيح موقّع عندما يعيد refreshable materialized view محاولة refresh فاشلة مع ضبط refresh_retries على قيمة كبيرة جدًا (قريبة من الحد الأقصى لـ Int64). وكان هذا overflow قد يؤدي إلى إيقاف server في builds التي تستخدم undefined behavior sanitizer. #108005 (Groene AI).
  • إصلاح LOGICAL_ERROR (توقّف الخادم في إصدارات debug/sanitizer) عندما يستخدم JOIN عامل المقارنة الآمن مع null (<=> / IS NOT DISTINCT FROM) ويكون أحد المفاتيح استعلامًا فرعيًا قيَميًا، مثل ... JOIN t2 ON (SELECT x FROM t1) <=> t2.k، مع analyzer القديم (enable_analyzer = 0). يُرجع هذا الاستعلام الآن الخطأ العادي NOT_FOUND_COLUMN_IN_BLOCK بدلًا من logical error. #108123 (Groene AI).
  • أصبحت استعلامات vector search التي تحدد العمود _distance تُرجع خطأً مناسبًا بدلًا من الفشل بسبب logical error. #108423 (Robert Schulze).
  • إصلاح std::future_error (The associated promise has been destructed prior to the associated state becoming ready) الذي كان قد يظهر ويتسبب في توقّف الخادم في إصدارات debug وsanitizer عند فشل جدولة مهمة الإكمال النهائية غير المتزامنة لرفع الأجزاء المتعددة إلى S3/Azure (على سبيل المثال عند استنفاد مجمع الخيوط). أصبح الآن يُبلَّغ عن خطأ الجدولة الفعلي بدلًا من ذلك. #108730 (Groene AI).
  • تجنّب الإفراط في مخرجات server log ورسالة خطأ ضخمة عند compile regular expression كبيرة جدًا (على سبيل المثال، نمط LIKE أو match يحتوي على مئات الآلاف من wildcards)؛ إذ تفشل هذه الأنماط الآن بخطأ واضح هو CANNOT_COMPILE_REGEXP. #108821 (Raúl Marín).
  • إصلاح سلوك غير معرّف عند تحويل packet type في protocol إلى سلسلة نصية عندما تكون خارج النطاق (مثلًا في رسائل الخطأ Unexpected packet from server / Received ... packet) في حالة connection غير متزامنة أو خاضعة للاختبار العشوائي. #108885 (Groene AI).
  • إصلاح خطأ داخلي مُربك (Method getResultType is not supported for TABLE query tree node) عندما كان يُستخدم تعبير table بوصفه الـ argument الأيسر لعامل التشغيل IN؛ وتنتج هذه الاستعلامات الآن رسالة خطأ واضحة. #109412 (Alexey Milovidov).
  • إصلاح قراءة Iceberg table مع ملف البيانات الوصفية يكون رقم الإصدار فيه مكوّنًا بالكامل من أرقام، لكنه يتجاوز نطاق الأعداد الصحيحة ذات 32 بت (مثل v99999999999999999999.metadata.json). كان هذا الاسم يُنتج سابقًا الخطأ الغامض std::out_of_range (STD_EXCEPTION) بدلًا من الخطأ الواضح BAD_ARGUMENTS. #109619 (Groene AI).
  • إصلاح احتمال ظهور Logical error: 'ReadBuffer is canceled. Can't read from it.' عندما يفشل input format قائم على الصفوف (مثل TSV/CSV) في parse الإدخال، وتكون عملية القراءة الأساسية قد أُلغيت بالفعل (على سبيل المثال، جزء HTTP غير صحيح أو body مقتطع). ولم يعد إنشاء تشخيصات parse المفصلة يقرأ من buffer أُلغي. #109708 (Groene AI).
  • أصبحت تعبيرات filter expression في سياسات الصفوف التي تستخدم arrayJoin (أو الاسم المستعار unnest لها) تُرفض الآن بخطأ واضح؛ إذ كانت هذه policies تتسبب سابقًا في logical error من النوع column->size() == num_rows أثناء query time. #109753 (Raúl Marín). #109973 (Raúl Marín).
  • أصبحت قراءة Paimon table التي يحتوي مخططها على Nested type غير مدعوم (مثل حقل ROW) تُبلّغ الآن عن خطأ واضح BAD_ARGUMENTS يذكر النوع غير المدعوم، بدلًا من DB::Exception. (OK) مجرد مع رمز الخطأ 0 ومن دون رسالة. #109762 (Groene AI).
  • تم إصلاح LOGICAL_ERROR‏ (std::length_error) عند استخدام استعلام مع الإعداد التجريبي make_distributed_plan = 1 لقيمة كبيرة جدًا في distributed_plan_default_reader_bucket_count أو distributed_plan_default_shuffle_join_bucket_count. تُرفَض هذه القيم الآن بالخطأ INVALID_SETTING_VALUE. #109770 (Groene AI).
  • تم إصلاح LOGICAL_ERROR‏ (query tree node does not have valid source node) عندما كان تعبير الجدول الشائع التعاودي يحلّ معرّفًا من نطاق خارجي باعتباره عمودًا مترابطًا (مع allow_experimental_correlated_subqueries = 1). تُرجِع مثل هذه الاستعلامات الآن خطأ UNSUPPORTED_METHOD واضحًا. #109863 (Groene AI).
  • تم إصلاح تجاوز سعة لعدد صحيح موقّع عندما يتجاوز ORDER BY ... WITH FILL فجوة كبيرة جدًا في عمود Int64/UInt64 (مثل خطوة مقدارها 2 عبر فجوة قريبة من 2^63). كان هذا التجاوز سلوكًا غير معرّف في أدوات sanitizer، وكان يلتفّ بصمت في إصدارات الإصدار. #109937 (Groene AI).
  • تم إصلاح خطأ منطقي Bad cast from type DB::FunctionNode to DB::ConstantNode (يتسبب في إنهاء الخادم في إصدارات debug/sanitizer) عند تشغيل SELECT ... ORDER BY ... WITH FILL على جدول Distributed مع قيمة منخفضة لـ optimize_const_name_size. #109938 (Groene AI).
  • تم إصلاح خطأ منطقي Invalid number of rows in Chunk عندما يكون هدف INTERPOLATE اسمًا مستعارًا لعمود WITH FILL مع المحلل القديم (enable_analyzer = 0). تُرفَض مثل هذه الاستعلامات الآن بخطأ INVALID_WITH_FILL_EXPRESSION واضح. #110103 (Groene AI).
  • تم إصلاح خطأ منطقي (يتسبب في إنهاء الخادم في إصدارات debug/sanitizer) عندما تُمرَّر إلى الدوال indexHint/ignore/isZeroOrNull وسيطة يُحَلّ نوعها إلى Nothing، مثل داخل تعبيرات من قبيل indexHint(assumeNotNull(materialize(NULL))). #110192 (Groene AI).
  • تم إصلاح خطأ منطقي Too large size (...) passed to allocator كان يمكن أن يحدث عند ضبط قيمة خارج النطاق لإعداد حجم مخزن القراءة المؤقت مثل max_read_buffer_size أو max_read_buffer_size_local_fs. تُقيَّد هذه القيم الآن إلى 256 MiB عبر فحص سلامة الإعدادات، وكذلك في موضع الاستخدام لـ INSERT ... FROM INFILE، الذي يقرأ الملفات داخل clickhouse-client حيث لا ينطبق فحص السلامة. #110207 (Alexey Milovidov).
  • يُبلّغ CHECK TABLE الآن عن التلف الفعلي في جزء الإسقاط الذي فشل في تحميل بياناته الوصفية، بدلًا من الخطأ المضلل Columns doesn't match ... Expected: 0 columns. #110262 (Raúl Marín).
  • يُبلَّغ الآن عن عدم تطابق النوع الذي يحدث عندما يتعذر تحليل قيمة مقروءة من مصدر PostgreSQL (مثل postgresql table function أو PostgreSQL table engine) إلى نوع العمود المصرَّح به (على سبيل المثال، عمود text مصرَّح به كـ Int32) على أنه خطأ استعلام صحيح؛ بينما كان سابقًا يؤدي إلى إنهاء الخادم في إصدارات debug وsanitizer. #110264 (Groene AI).
  • دعم query profiler وmemory profiler وtrace profiler، وكذلك ترميز الرموز لـ system.trace_log على macOS. #109825 (Raúl Marín).
  • تحديث chdig إلى v26.7.1: ضغط تتبعات المكدس لأغراض المشاركة، وأنماط الاستعلامات، ودعم ذاكرة Arena المنفصلة، وتحسينات Perfetto، وإصلاحات التوافق. #110938 (Azat Khuzhin).
  • إصلاح الاستدلال غير الصحيح على الرتابة لـ intDiv عند استخدام مفتاح غير موقّع مقسوم على ثابت موقّع، وهو ما كان قد يعطّل تشذيب فهرس المفتاح الأساسي لشروط IN/NOT IN التي تتجاوز الحدّ الموقّع لنوع النتيجة؛ كما كانت إصدارات Debug تصطدم أيضًا بالخطأ LOGICAL_ERRORInvalid binary search result in MergeTreeSetIndex. #107586 (Groene AI).
  • تمت إضافة الإعداد allow_lossy_numeric_supertype (وهو معطّل افتراضيًا). عند تفعيله، فإن if وmultiIf وcoalesce وifNull وarray وmap عند استخدامها مع وسائط رقمية لا تملك نوعًا مشتركًا من دون فقدان (مثل Decimal وFloat64، أو Int64 وFloat64) يُحسم نوعها إلى Float64 بدلًا من Variant، بحيث يمكن استخدام النتيجة مع الدوال التجميعية مثل sum وavg وmin وmax. وتذكر رسائل الخطأ ذات الصلة بالدوال التجميعية الآن اسم الإعداد صراحةً. يُغلق #106707. #107236 (Groene AI).
  • بدء تشغيل نقطة نهاية Prometheus (للتكوينات المخصّصة للمقاييس فقط) وجمع المقاييس غير المتزامن قبل تحميل الجداول، بحيث تصبح المقاييس مرئية أثناء مرحلة تحميل البيانات الوصفية التي قد تطول. #108402 (Christoph Wurm).

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

  • إصلاح فشل TRUNCATE TABLE وDROP PARTITION على الجداول التي تحتوي على عدد كبير من كتل deduplication، إذ إن حذفها ضمن طلب ZooKeeper واحد قد يتجاوز الحد الافتراضي jute.maxbuffer البالغ 1 ميغابايت. #105991 (Clayton McClure). لا يؤثر هذا عليك إلا إذا كنت تستخدم Apache ZooKeeper (وهو غير موصى به) بدلًا من ClickHouse Keeper.
  • إصلاح استخدام أسماء الأعمدة المؤهلة (database.table.column) في عبارة WHERE الخاصة بالـ mutations، مثل DELETE FROM وALTER TABLE ... UPDATE/DELETE، على جداول عائلة MergeTree؛ إذ كانت هذه الاستعلامات تفشل سابقًا بسبب خطأ missing-columns. يغلق #71760. #109491 (Mikhail Artemenko).
  • إصلاح ذاكرة التخزين المؤقت لنتائج الاستعلام لاستعلامات PromQL. كانت dialect ‏promql تتجاوز فحص الدوال غير الحتمية، وكان من الممكن أن تعرض نتائج قديمة مرتبطة بـ now()؛ كما أن Prometheus HTTP API (/api/v1/query, /api/v1/query_range) لم يكن يخزن أي cache entries على الإطلاق. #110887 (Nikita Mikhaylov).
  • إصلاح فشل بدء تشغيل الخادم عندما يكون متغير البيئة TZ فارغًا. يغلق #68920. #68921 (Ardenwick).
  • تم إصلاح فشل بدء تشغيل الخادم عندما يشير محرك قاعدة البيانات Backup إلى نسخة احتياطية أصبحت غير متاحة (على سبيل المثال، عند حذف ملفاتها أو تعذر الوصول إلى طبقة التخزين الأساسية). تُحمَّل قاعدة البيانات الآن بدون جداول بدلًا من منع الخادم بالكامل من بدء التشغيل. #83188 (Vitaly Orlov).
  • عند استخدام inserts في الخلفية إلى جداول بمحرك Distributed، فإن التأخيرات الناتجة عن الأخطاء المتكررة عند إرسال البيانات إلى shards البعيدة تبدأ الآن في الانخفاض بمجرد حل تلك الأخطاء. سابقًا، كان التأخير يزداد فقط ولا يُعاد ضبطه مطلقًا. #87378 (Andrei Kochemirovskii).
  • إصلاح broken_data_files في system.distribution_queue، وكذلك إصلاح كون Metric ‏BrokenDistributedFilesToInsert تُبلغ دائمًا عن 0 للملفات التالفة التي يُعثر عليها عند فحص queue الخاصة بـ async-insert لمحرك Distributed أثناء بدء التشغيل. #92124 (KG.Xu).
  • إصلاح تعافي logging بعد خطأ امتلاء القرص. سابقًا، عندما يمتلئ قرص السجل، كان ClickHouse يدخل في حالة فشل ويواصل إغراق syslog برسائل error (بما قد يصل إلى أكثر من 100 غيغابايت/ساعة)، من دون أن يتعافى حتى بعد تحرير مساحة على القرص. الآن يتعافى نظام logging تلقائيًا بمجرد توفر مساحة على القرص، من دون الحاجة إلى إعادة تشغيل الخادم. #93127 (jaehanbyun).
  • تمرير بيانات اعتماد S3 الثابتة إلى عمليات قراءة جدول Unity DataLakeCatalog عند تعطيل vended_credentials، مما يمنع حالات فشل الوصول المجهول إلى تخزين الكائنات. #96910 (kgeg401).
  • إصلاح انهيار في شيفرة parsing الخاصة بالمخطط في محرك الجدول DeltaLake. #97112 (Kseniia Sumarokova).
  • إصلاح مشكلة أمنية كان يمكن من خلالها لعميل TCP غير موثَّق الاستعلام عن وجود جدول وحالة replication عبر منفذ interserver. #99854 (Shaohua Wang).
  • إصلاح خطأ نحوي عند ورود اسم مستعار بعد استعلام فرعي في DESCRIBE TABLE. يُصلح #100031. #100205 (Yarik Briukhovetskyi).
  • إصلاح استثناء في استعلام فرعي مترابط عندما تصبح الأعمدة الخارجية Nullable تحت group_by_use_nulls مع ROLLUP/CUBE. #100365 (Alexey Milovidov).
  • إصلاح توقّف للخادم (في بنى sanitizer) وفقدان صامت للبيانات أثناء بدء تشغيل الجدول عندما يتقاطع جزء MergeTree معاملاتي تم التراجع عنه مع جزء مُثبّت. #100992 (Tuan Pham Anh).
  • إصلاح مشكلة في indexOfAssumeSorted كانت تؤدي إلى إرجاع نتائج غير صحيحة لأعمدة Array(LowCardinality(String)) في جداول MergeTree. #101771 (Yash ).
  • إصلاح pruning غير صحيح للمفتاح الأساسي عندما يغلّف مفتاح الفرز في الجدول عمود Date داخل toDateTime (على سبيل المثال، ORDER BY toDateTime(date_column)) ويطبّق استعلام شرط تصفية على العمود الأصلي بمقارنة مثل WHERE date_column >= '...'. يحدث overflow في toDateTime(Date) لقيم Date التي تتجاوز نطاق DateTime (بعد 2106-02-07)، لذلك يصبح المفتاح المخزَّن غير رتيب؛ ولم يعد ClickHouse يستخدم pruning للمفتاح الأساسي لهذا الجمع بين المفتاح والشرط لأن ذلك قد يستبعد granules تحتوي على صفوف مطابقة. يُغلق #101744. #101814 (Nihal Z. Miaji).
  • إصلاح intDivOrNull وmoduloOrNull وpositiveModuloOrNull التي كانت تُرجع 0 بدلًا من NULL، وكذلك intDivOrNull وintDivOrZero اللتين كانتا تثيران استثناءً بدلًا من إرجاع NULL / 0، عندما تؤدي القسمة إلى floating-point exception (القسمة على صفر أو INT_MIN / -1)، بما في ذلك الوسائط المختلطة signed/unsigned. #101976 (Yarik Briukhovetskyi).
  • إصلاح استثناءات LOGICAL_ERROR عند قراءة جداول Iceberg أو DeltaLake في حالات طرفية مثل تحديثات metadata المتزامنة في Iceberg أو عمليات القراءة عبر merge table function فوق جداول DeltaLake. #102033 (Groene AI).
  • إصلاح فشل طلبات HTTP الصادرة (مثل الدالة aiGenerate، وurl table function، وS3) برسالة No route to host على المضيفات التي تعلن عن عنواني IPv4 وIPv6 معًا عندما تكون عائلة عناوين واحدة فقط قابلة للتوجيه. وأصبح HTTP connection pool الآن ينتقل إلى العنوان التالي الذي تم حلّه عندما يفشل العنوان الأول بخطأ شبكة، بدلًا من تمرير الخطأ مباشرةً من أول طلب. #103786 (Alexey Milovidov).
  • إصلاح توقّف للخادم أثناء RESTORE للنسخ الاحتياطية التي تحتوي على جداول ذات dependencies دورية. #103824 (Konstantin Bogdanov).
  • أصبح schema inference لأعمدة Arrow ‏time32/time64 (مثل SELECT * FROM file(..., 'Arrow')) يستنتج الآن Time64 بدلًا من DateTime64؛ وأي مكوّن لاحق يعتمد على النوع المستنتَج السابق سيلاحظ النوع الجديد بعد الترقية. كذلك، يمكن الآن تصدير قيم Time/Time64 إلى Arrow مع اختيار نوع الوقت المناسب في Apache Arrow بحسب precision. يُصلح #104038. #104316 (/bin/cat).
  • تم إصلاح حالة تسابق بين ALTER TABLE ... RENAME COLUMN وOPTIMIZE TABLE ... FINAL متزامن (أو أي merge في الخلفية) في MergeTree، كانت قد تؤدي بصمت إلى استبدال بيانات العمود المُعاد تسميته بقيم default. #104822 (Groene AI).
  • تم إصلاح خطأ منطقي Block structure mismatch أثناء تنفيذ INSERT متزامن بينما تكون ALTER TABLE ... RENAME COLUMN قيد التنفيذ، في database من نوع Atomic مع lazy_load_tables = 1 بعد DETACH DATABASE/ATTACH DATABASE. #104852 (Groene AI).
  • تم إصلاح groupConcat عند خلط الصياغة المعلَّمية والصياغة ذات الوسيطين، مثل groupConcat(',', 2)(x, '/'): كان parameter الخاص بحدّ الصفوف يُهمَل بصمت، لذا كانت كل row تُعاد بدلًا من العدد المطلوب؛ والآن يطغى Delimiter من الوسيط الثاني على parameter بشكل صحيح. #104882 (Yarik Briukhovetskyi).
  • تم إصلاح خطأ LOGICAL_ERROR (Expected one block from input stream) الذي كان يُطرَح بواسطة KILL QUERY/KILL MUTATION/KILL PART_MOVE_TO_SHARD/KILL TRANSACTION عندما تحتوي عبارة WHERE الخاصة بها على subquery لكل row، أو عندما يكون max_block_size صغيرًا بما يكفي بحيث يُصدر SELECT الداخلي على جدول system.* ذي الصلة أكثر من block واحد. #104927 (Groene AI).
  • تم إصلاح CAST من وحدات interval الأصغر إلى الأكبر، والذي كان يعيد نتائج خاطئة (على سبيل المثال، كان CAST(toIntervalSecond(60) AS IntervalMinute) يعيد 0 بدلًا من 1). يُغلق #104986. #105058 (Yarik Briukhovetskyi).
  • تم إصلاح خطأ منطقي (Assertion 'row < chunk.getNumRows()' failed) في queries من نوع LIMIT ... WITH TIES التي تعمل مع pipeline القراءة بالترتيب (optimize_read_in_order = 1 وread_in_order_use_virtual_row_per_block = 1). #105102 (Groene AI).
  • تم إصلاح تسرّب في refreshable materialized views (MATERIALIZED VIEW ... REFRESH ...): إذ كان يتعذر تنفيذ drop للـ table الداخلية المؤقتة التي يستبدلها refresh عبر EXCHANGE TABLES إذا كان حجمها أكبر من max_table_size_to_drop، لذلك كان كل refresh لاحق ينشئ table داخلية مؤقتة إضافية، ما يؤدي إلى نمو directory بيانات الـ view حتى امتلاء القرص. وأصبح drop الداخلي لمهمة refresh الآن يتجاوز max_table_size_to_drop وmax_partition_size_to_drop؛ فيما تظل وسائل الأمان هذه مطبّقة على DROP TABLE الصادر من المستخدم للـ view نفسها. يُغلق #104900. #105106 (Groene AI).
  • تم إصلاح خطأ غير متوقع DATA_TYPE_CANNOT_BE_USED_IN_KEY في queries ALTER التي لا تغيّر sorting key (مثل تغيير settings أو comments أو codecs أو إضافة column غير مفتاحي، إلخ) لجداول MergeTree التي تحتوي على SimpleAggregateFunction (أو نوع آخر مسموح فقط مع allow_suspicious_primary_key = 1) في sorting key. #105111 (Groene AI).
  • تم إصلاح حالة use-after-free عند الاستعلام عن أعمدة حالة النسخ المتماثلة في system.clusters (مثل is_active وunsynced_after_recovery وrecovery_time) أثناء إسقاط قاعدة بيانات Replicated أو فصلها. كذلك، أصبحت استثناءات Keeper غير الضارة التي كانت تُبتلع في هذا المسار من الشيفرة (إذ تُعامَل قاعدة البيانات المتأثرة على أنها غير متاحة مؤقتًا ويتم تخطيها) تُسجَّل الآن عند المستوى Information بدلًا من Error، لذلك لم تعد تصل إلى العملاء مع الإعداد الافتراضي send_logs_level = 'warning'. #105149 (Groene AI).
  • تم إصلاح مشكلة كانت تؤدي عند تشغيل عدة statements في clickhouse-local --ignore-error إلى إعادة طباعة كل statement لاحقة داخل رسالة الخطأ عند كل خطأ lexical أو خطأ ناتج عن عدم تطابق الأقواس. #105480 (Groene AI).
  • تم إصلاح تعطل نادر في الخادم عند إسقاط refreshable materialized views أو استبدالها بالتزامن مع جدولة تحديثها. #105588 (Groene AI).
  • أصبح ALTER TABLE ... DELETE وALTER TABLE ... UPDATE على جداول Iceberg التي لا يكون تنسيق ملف البيانات فيها Parquet مرفوضَين الآن برسالة الخطأ الواضحة NOT_IMPLEMENTED بدلًا من تعطل الخادم أو إفساد الجدول بصمت. #105893 (Groene AI).
  • تم إصلاح نتائج غير صحيحة من view معرّف باستخدام EXCEPT أو INTERSECT عندما يكون أحد المعاملات سلسلة UNION، وذلك بعد DETACH/ATTACH أو إعادة تشغيل الخادم. كان الـ formatter يفتقد إلى الأقواس حول عناصر UNION التابعة لـ INTERSECT/EXCEPT، لذلك أُعيد parse لـ SQL المخزن بأسبقية معكوسة. #105935 (Groene AI).
  • تم إصلاح اكتشاف بيانات JSON بالخطأ على أنها TSKV أثناء الاكتشاف التلقائي للتنسيق. يُغلق #100797. #106009 (Pavel Kruglov).
  • تم منع إنشاء skip index من نوع minmax مباشرة على columns من نوع JSON — إذ كان ذلك قد يؤدي لاحقًا إلى فشل عمليات insert مع الاستثناء NO_COMMON_TYPE عند إدراج arrays مختلطة الأنواع. أنشئ الـ index على subcolumns محددة النوع بدلًا من ذلك (مثل INDEX idx json.field TYPE minmax). #106094 (linhaojie).
  • تم إصلاح خطأ منطقي (Parsed partition value ... doesn't match partition value for an existing part with the same partition ID) كان يطرحه OPTIMIZE TABLE ... PARTITION ... واستعلامات أخرى تحل قيمة partition، في الجداول التي تستخدم مفتاح partition من النوع Time. #106202 (Groene AI).
  • تم إصلاح حالة كان فيها data part يُعلَّم خطأً على أنه يحتوي على projection معطوب بعد أن لا تترك lightweight delete أي projection part — سواء عند إعادة بناء الـ projection من دون أي rows ناتجة أو عند إسقاطه (lightweight_mutation_projection_mode = 'rebuild'/'drop'). وكانت هذه الحالة المعطوبة تعطل سابقًا optimization الخاصة بالـ projection للاستعلامات على ذلك الـ part. #106273 (Shaohua Wang).
  • تم إصلاح removeDirectory على أقراص object storage من نوع plain (مثل s3_plain)؛ إذ كان يحذف كل الملفات داخل directory غير فارغ كما لو أن الحذف تعاودي. أما الآن، فيفشل حذف directory غير فارغ بالخطأ CANNOT_RMDIR، بينما يتعامل الحذف التعاودي مع المحتويات صراحةً. #106281 (RinChanNOW).
  • تم إصلاح خطأ منطقي (Part ... doesn't exist) كان يمكن أن يؤدي إلى توقف الخادم أثناء recovery لعملية INSERT باستخدام quorum بعد خطأ عتادي في Keeper، عندما كان الـ quorum يُعلَّم في الوقت نفسه على أنه فشل. #106424 (Alexey Milovidov).
  • إصلاح استثناء LOGICAL_ERROR المتعلق بتكرار أسماء الأعمدة عند تطبيق سياسات الصفوف. #106438 (János Benjamin Antal).
  • إصلاح مشكلة في CREATE OR REPLACE TABLE وREPLACE TABLE كانت تتسبب في ترك جدول _tmp_replace_* عالقًا على القرص واستبدال الجدول الأصلي بجدول فارغ عندما يتجاوز الهدف الحالي max_table_size_to_drop. أصبح فحص الحجم يُجرى الآن قبل التبديل، بحيث يؤدي تجاوز الحد إلى إجهاض العملية بشكل سليم مع إظهار اسم الجدول الظاهر للمستخدم في رسالة الخطأ. #106782 (Groene AI).
  • إصلاح مشكلة في JSON_QUERY/JSON_VALUE/JSON_EXISTS كانت تُرجع Dynamic بدلًا من String/UInt8 عند استخدام وسيطات Dynamic. يُغلق #106461. #106877 (Pavel Kruglov).
  • إصلاح نتائج غير صحيحة عند الاستعلام من جدول ReplacingMergeTree باستخدام FINAL ومرشح على فهرس نصي بينما كان query_plan_optimize_lazy_final مفعّلًا. كان تحسين FINAL الكسول ينشئ خطوات قراءة لا تعكس القراءة المباشرة من الفهرس النصي، ولذلك كان المرشح يستبعد جميع الصفوف المطابقة. #106894 (Jimmy Aguilar Mena).
  • تطبيق query_masking_rules على الرسائل الملحقة بالاستثناءات، حتى لا تتسرّب بيانات الاعتماد المرمّزة بعنوان URL في اللواحق (in file/uri ...) الخاصة بالأخطاء الصادرة من table functions jdbc/odbc عند تهيئة قواعد الإخفاء. #106916 (Gaurav Dubey).
  • إصلاح مشكلة كانت تؤدي إلى وسم الأجزاء بأنها تالفة وفصلها عند أي إعادة تحميل للجزء (إعادة تشغيل الخادم، DETACH/ATTACH) في الجداول التي تحتوي على عمود LowCardinality(Nullable(...)) في مفتاح partition. منذ 26.5، لم يكن ملف فهرس minmax لكل جزء يُكتب عندما تكون القيمتان الدنيا والعظمى لمثل هذا العمود هما NULL، بينما كان فحص اتساق الجزء لا يزال يتطلب هذا الملف. الأجزاء المكتوبة بالإصدارات المتأثرة تفتقر إلى ملف فهرس minmax، وما تزال بحاجة إلى إعادة إرفاقها يدويًا. يُغلق #106837. #106945 (Pedro Ferreira).
  • إصلاح LOGICAL_ERROR نادر (Unexpected expression in JOIN ON section. Expected boolean (UInt8), got 'Nothing') عندما يُشير predicate غير قائم على المساواة في JOIN ... ON إلى عمود من النوع Nothing، مثل عمود ناتج عن ARRAY JOIN []. #106981 (Groene AI).
  • إصلاح LOGICAL_ERROR نادر (Attempt to release query context that does not exist) والانهيار المصاحب للخادم عند قراءة جداول MergeTree عبر cache disk لنظام الملفات أُنشئ باستخدام enable_filesystem_query_cache_limit = 1. #107028 (Groene AI).
  • إصلاح تعطل الخادم عند نقل جزء فارغ إلى قرص plain_rewritable (على سبيل المثال، باستخدام ALTER TABLE ... MOVE PARTITION ... TO DISK لجزء فارغ تم الاحتفاظ به بسبب remove_empty_parts = 0). #107040 (Groene AI).
  • إصلاح ترتيب صفوف غير صحيح في استعلامات ORDER BY على UNION ALL مع تفعيل optimize_read_in_order وread_in_order_use_virtual_row. يُغلق #106879. #107053 (Vladimir Cherkasov).
  • تم إصلاح LOGICAL_ERROR (Unsupported argument types) في الدالة geohashesInBox عندما كانت وسائط الإحداثيات تخلط بين القيم الثابتة وغير الثابتة، أو عندما كانت إحدى الإحداثيات من النوع BFloat16. وأصبحت الآن وسائط Float32 المختلطة بين الثابت وغير الثابت تعمل، بينما تُرفض وسائط BFloat16 برسالة خطأ واضحة. #107063 (Groene AI).
  • تم إصلاح نتائج خاطئة (صفوف مكررة) في SELECT DISTINCT فوق GROUP BY مع WITH CUBE أو WITH ROLLUP أو GROUPING SETS على المفاتيح نفسها. ولم تعد آلية التحسين query_plan_remove_redundant_distinct تزيل DISTINCT في هذه الحالات، لأن مُعدِّلات التجميع تُنتج صفوفًا إضافية مع ضبط أعمدة المفاتيح على القيم الافتراضية، ما قد يؤدي إلى تعارض مع قيم المجموعات الفعلية. #107072 (Groene AI).
  • تم إصلاح نتيجة خاطئة في OUTER JOIN عندما يكون عامل التصفية WHERE اقترانًا يتضمن حدًا ثابتًا (مثل p AND 1، أو WHERE p QUALIFY NULL حيث يُدمج QUALIFY NULL في WHERE). إذ كان يمكن دفع الحد الثابت إلى الجانب غير المحفوظ من الوصلة وإزالته من عامل التصفية بعد الوصلة، فتُنتج الوصلة صفوفًا غير متطابقة مع ضبط أعمدة ذلك الجانب على القيم الافتراضية، ثم تمر هذه الصفوف عبر عامل التصفية على نحو غير صحيح. #107084 (Groene AI).
  • تم إصلاح مشكلة عدم التقاط الدوال المعرفة من قبل المستخدم executable_pool المُهيأة باستخدام <lifetime> للتغييرات التي تطرأ على البرنامج النصي الأساسي. سابقًا، كان SYSTEM RELOAD FUNCTIONS وحده يعيد قراءة برنامج نصي عُدِّل؛ أما عمليات إعادة التحميل الدورية لـ <lifetime> فكانت تواصل تنفيذ الإصدار القديم. #107087 (Groene AI).
  • تم إصلاح استثناء LOGICAL_ERROR (Cannot find input column ... on its position in inputs of expression actions DAG) في استعلام فرعي قيَمي مترابط فوق مصدر يُسقِط معرّف العمود نفسه مرتين (مثل SELECT number, *) عندما يكون correlated_subqueries_default_join_kind = 'left'. #107112 (Groene AI).
  • تم إصلاح حالة تسابق بيانات في مجمّع التتبّع العام على مستوى الخادم بين خيط عمل يبدأ أداة التحليل الخاصة به وعملية إيقاف الخادم. #107307 (Groene AI).
  • لم تعد النسخ الاحتياطية التزايدية تخزّن بيانات اعتماد S3 في محدِّد <base_backup> داخل ملف البيانات الوصفية .backup. فالنسخ الاحتياطية المُنشأة باستخدام use_same_s3_credentials_for_base_backup = 1، أو باستخدام بيانات اعتماد صريحة للنسخة الاحتياطية الأساسية تطابق هذا المحدِّد، تخزّن علامة غير سرية ويمكن استعادتها من دون إعدادات إضافية وقت الاستعادة؛ أما النسخ الاحتياطية المُنشأة ببيانات اعتماد صريحة مختلفة للنسخة الاحتياطية الأساسية أو بوسائط مصادقة أساسية إضافية، فيجب تمريرها إلى RESTORE باستخدام الإعداد base_backup. وتظل النسخ الاحتياطية التي أنشأتها الإصدارات الأقدم باستخدام بيانات اعتماد مضمّنة قابلة للاستعادة. #107357 (Pablo Marcos).
  • تم إصلاح مشكلة في CSVWithNames وCSVWithNamesAndTypes حيث كانت الترويسة تحتوي على أعمدة أقل من البيانات عند تفعيل output_format_csv_serialize_tuple_into_separate_columns (وهو الإعداد الافتراضي). وتقوم الترويسة الآن (وكذلك صف الأنواع) بتسطيح أعمدة Tuple إلى حقولها الطرفية بأسماء منقوطة (مثل t.a وt.b)، بحيث يطابق عدد أعمدة الترويسة عدد أعمدة البيانات. ويتحكم إعداد جديد هو output_format_csv_header_serialize_tuple_into_separate_columns (القيمة الافتراضية 1) في هذا السلوك، ويمكن ضبطه على 0 لاستعادة الترويسة السابقة ذات الاسم الواحد. #107371 (Groene AI).
  • تم إصلاح قراءة جداول Iceberg v3 التي تحتوي ملفات بيانات Parquet فيها أعمدة row-lineage محجوزة (مثل _row_id)؛ ولم يعد قارئ Parquet الأصلي يطلق ICEBERG_SPECIFICATION_VIOLATION بسبب معرّفات الحقول المحجوزة التي ليست جزءًا من مخطط الجدول. #107377 (Greg Maher).
  • تم إصلاح توقّف نادر للخادم أثناء الإغلاق (std::future_error: The associated promise has been destructed prior to the associated state becoming ready) كان سببه إسقاط مهمة مجدولة من قائمة انتظار مجمّع الخيوط قبل تنفيذها. #107383 (Groene AI).
  • تم إصلاح محركي الجدول وقاعدة البيانات MaterializedPostgreSQL بحيث يمكن إجراء replication لجدول واحد أو قاعدة بيانات واحدة من schema غير افتراضي في PostgreSQL (materialized_postgresql_schema)، بما في ذلك الحالة التي توجد فيها جداول بالاسم نفسه في عدة schema ضمن قاعدة البيانات نفسها (إذ كانت سابقًا تتشارك publication وreplication slot ويحدث تداخل بينها). #107425 (Alexey Milovidov).
  • تم إصلاح توقّف MaterializedPostgreSQL عن replication لقاعدة بيانات كاملة (مع LOGICAL_ERROR: Columns number mismatch) عندما يتغير structure لجدول replicated واحد أثناء توقف الخادم. الآن يُتخطى الجدول المتأثر فقط، ويمكن استعادته باستخدام DETACH/ATTACH. #107427 (Alexey Milovidov).
  • لم يعد BACKUP لقاعدة بيانات MaterializedPostgreSQL يتعطل إلى الأبد مع Table ... were created or changed its definition during scanning، وأصبح الآن ينسخ بيانات الجدول احتياطيًا فعليًا (ويُفوَّض ذلك إلى ReplacingMergeTree الأساسي)، ويمكن استعادتها بعد ذلك كـ ReplacingMergeTree مستقل. #107433 (Alexey Milovidov).
  • تم إصلاح تراجع كان فيه تعيين compatibility = '26.6' (الذي يفعّل ضمنيًا partition strategy hive) يقبل بصمت {_partition_id} في مسارات جداول S3/object storage بدلًا من إطلاق BAD_ARGUMENTS. #107437 (Lefteris).
  • تم إصلاح تسرّب للذاكرة في mongo-c-driver المضمّن، وكان يمكن أن يحدث عند القراءة من MongoDB (على سبيل المثال، عبر MongoDB Dictionary أو mongodb table function) إذا أعقب خطأ قراءة قابل لإعادة المحاولة فشلٌ في اختيار الخادم أثناء إعادة المحاولة. #107448 (Groene AI).
  • تم إصلاح استثناء عند إدراج البيانات في جدول Iceberg أُنشئت metadata الخاصة به بواسطة external engine وكانت تُهمل المصفوفات الاختيارية snapshots أو metadata-log أو snapshot-log. أصبحت عمليات insert هذه تنجح الآن بدلًا من أن تفشل. #107473 (Shaohua Wang).
  • تم إصلاح اشتراط DELETE FROM (lightweight delete) لامتياز ALTER UPDATE بالإضافة إلى ALTER DELETE. يمكن الآن للمستخدم الذي مُنح ALTER DELETE فقط تشغيل DELETE FROM، كما هو موثق. #107491 (Shaohua Wang).
  • تم إصلاح NOT_FOUND_COLUMN_IN_BLOCK عند قراءة ملفات مقسّمة بأسلوب Hive مع use_hive_partitioning = 1 وعبارة WHERE/PREWHERE تُرشّح column حقيقيًا (غير افتراضي) مع تحديد column partition خاص بـ Hive أيضًا. #107505 (Groene AI).
  • تم إصلاح LOGICAL_ERROR (Different order of columns in UNION subquery) عندما يقرأ analyzer القديم (enable_analyzer = 0) مجموعة فرعية من columns من subquery تكون فيه فروع UNION التابعة عمليات set operations من نوع INTERSECT/EXCEPT. #107511 (Groene AI).
  • تم إصلاح تحويل قيم NULL بصمت إلى سلاسل فارغة عند إدراج بيانات Arrow/ORC في column من النوع LowCardinality(Nullable(...)). وكان هذا تراجعًا أُدخل في الإصدار 26.5. #107532 (Jimmy Aguilar Mena).
  • إصلاح خطأ منطقي (Stream ... variant_discr ... is not found) كان يمكن أن يحدث عند دمج أو قراءة جزء MergeTree ناتج عن mutation لجدول يحتوي على عمود Dynamic. #107562 (Alexey Milovidov).
  • تم إصلاح خطأ منطقي (WhichDataType(const_type).isArray()) أثناء تحليل المفتاح الأساسي عند استدعاء pointInPolygon باستخدام وسيطة polygon ثابتة من نوع مغلف مثل Variant أو Dynamic (على سبيل المثال، pointInPolygon((x, y), if(c, [(0, 0), ...], NULL))). #107589 (Groene AI).
  • تم إصلاح خطأ منطقي (Last stored last_written_position in meta file ... is bigger than current last_written_pos) في محرك FileLog كان يمكن أن يحدث عند حذف ملف خاضع للمراقبة ثم إعادة إنشائه مع إعادة استخدام نفس inode. #107617 (Groene AI).
  • إصلاح إيقاف نادر للخادم (std::future_error: The associated promise has been destructed prior to the associated state becoming ready) أثناء معالجة طلبات عميل ZooKeeper، عندما أُسقط Keeper request غير متزامن أثناء إرساله، على سبيل المثال تحت memory pressure. #107647 (Groene AI).
  • تم إصلاح RESTORE لجداول ReplicatedMergeTree بحيث يتم الاحتفاظ بالأجزاء ذات المحتوى المكرر من النسخة الاحتياطية بدلًا من إزالة تكرارها بصمت. #107652 (Pablo Marcos).
  • إصلاح مرشح الربط وقت التشغيل الذي كان ينتج نتائج خاطئة لأعمدة JSON. يغلق #107646. #107663 (Pavel Kruglov).
  • تم إصلاح نتائج غير صحيحة من distributed queries التي تحدد أعمدة ALIAS تشترك في expression فرعي واحد: إذ كان يمكن أن تصبح الأعمدة غير متطابقة وتُعاد القيم تحت العمود الخطأ. #107675 (Vladimir Cherkasov).
  • أصبحت الحصص المرتبطة بـ normalized_query_hash تحتسب الآن جميع الموارد (read_rows, read_bytes, result_rows, result_bytes, execution_time, written_bytes, errors) لكل query pattern، مثل عدادات عدد الاستعلامات، بدلًا من احتسابها ضمن حاوية مشتركة واحدة لكل مستخدم. #107681 (Alexey Milovidov).
  • تم إصلاح خطأ منطقي من نوع Block structure mismatch in UnionStep stream (إيقاف للخادم في builds الخاصة بـ debug/sanitizer، وCode: 49 في builds الإصدار) كان يحدث عندما كانت branches الشقيقة في UNION/INTERSECT/EXCEPT تختلف فقط في WHERE predicate، وتم طي predicate الخاص بأحد الفروع كثابت إلى عمود Const. #107719 (Groene AI).
  • إصلاح أخطاء منطقية (Bad cast) ناجمة عن إزالة غير متسقة لـ LowCardinality المتداخلة داخل أعمدة Variant وDynamic، على سبيل المثال في concat وformat وتحليل المفتاح الأساسي. يغلق #107598. #107773 (Pavel Kruglov).
  • تم إصلاح اختلال شديد في توزيع العمل مع parallel replicas عندما تحتوي الـ cluster على replicas غير نشطة (على سبيل المثال، entries قديمة متروكة بعد autoscaling). لم تعد هذه replicas تُحتسب من قبل coordinator القراءة، لذلك يُوزَّع العمل على replicas المتصلة بدلًا من تكدسه على واحدة فقط. #107805 (Alexey Milovidov).
  • إصلاح الاستثناء Not-ready Set is passed as the second argument الذي كان يمكن أن يحدث إذا فشل بصمت إنشاء مجموعة استعلام فرعي IN أثناء تحليل المفتاح الأساسي (على سبيل المثال، عند انتهاء مهلة استعلام فرعي مع overflow_mode = 'break')، ما كان يترك المجموعة غير مُنشأة نهائيًا ضمن مسار تنفيذ الاستعلام. #107924 (Alexey Milovidov).
  • إصلاح تعطل الخادم في predicate pushdown (enable_optimize_predicate_expression، المحلّل القديم) عندما يظهر استعلام فرعي UNION داخل شرط JOIN ... ON. #107930 (Groene AI).
  • إصلاح أخطاء CHECKSUM_DOESNT_MATCH وأخطاء قراءة Parquet الزائفة (وكذلك، لبعض formats، نتائج خاطئة بصمت) عندما يُستبدل كائن في S3 أو S3-compatible (مثل GCS) في مكانه أثناء قراءته. أصبحت هذه القراءات الآن تفشل بخطأ واضح قابل لإعادة المحاولة بدلًا من إرجاع بيانات مركبة من إصدارين مختلفين للكائن؛ ويتحكم في ذلك الإعداد الجديد s3_validate_etag_on_read (مفعّل افتراضيًا). #107934 (Shaohua Wang).
  • إصلاح فشل SELECT مع NOT_FOUND_COLUMN_IN_BLOCK على جدول يحتوي على skipping index من نوع البيانات set عندما تقوم ROW POLICY بتصفيته باستخدام شرط صحيح دائمًا مع تحقق من عمود غير مفهرس. #107971 (Shaohua Wang).
  • إصلاح parsing لمعاملات أمر executable user-defined function بحيث لا تُقبل placeholders ذات الأسماء الفارغة أو غير الصالحة كمعاملات. #107983 (Goutam Adwant).
  • إصلاح تراجع الأداء في subcolumns الخاصة بـ Map مع PREWHERE. يغلق #107912. نتج عن #99200. #107988 (Pavel Kruglov).
  • إصلاح كتابة خارج الحدود عند قراءة عمود Variant من block Native تالف تشير فيه discriminators إلى فهرس variant غير موجود. #107991 (uwezkhan).
  • إصلاح نتائج استعلام خاطئة بسبب pruning غير الصحيح للمفتاح الأساسي وpartition عند تطبيق toStartOfDay أو toStartOfISOYear أو toDaysSinceYearZero أو toRelativeSecondNum أو toRelativeMinuteNum أو toRelativeHourNum أو toRelativeWeekNum أو toRelativeDayNum أو toMonthNumSinceEpoch أو toYearNumSinceEpoch على Key column من نوع Date32 يحتوي على تواريخ خارج النطاق الذي يمكن للدالة تمثيله (وخاصة التواريخ السابقة لـ 1970-01-01). كانت هذه الدوال تُعرّف نفسها على أنها monotonic بالنسبة إلى primary index، لكنها كانت سابقًا تلتف مع مثل هذه الوسيطات، ما كان قد يؤدي إلى استبعاد الفهرس granules تحتوي فعليًا على صفوف مطابقة؛ أما الآن فهي تتشبع عند حدود نوع النتيجة الخاص بها وتبقى monotonic على كامل نطاق Date32. #108018 (Nihal Z. Miaji).
  • إصلاح accurateCastOrNull لـ Tuple يكون أحد عناصره من النوع Dynamic/Variant: كان NULL الحقيقي من المصدر يُعامَل على أنه فشل في التحويل. بالنسبة إلى عنصر هدف من النوع Nullable، يبقى NULL من المصدر الآن عنصرًا NULL (بما يتوافق مع مصدر عادي من النوع Tuple(Nullable(...)))؛ أما بالنسبة إلى عنصر هدف غير Nullable، فإن NULL من المصدر يجعل الـ tuple بالكامل NULL بدلًا من إنتاج القيمة الافتراضية للعنصر؛ بينما تظل حالات فشل parse/overflow تجعل الـ tuple بالكامل NULL. #108023 (Groene AI). كما تم إصلاح خطأ منطقي عند تحويل column من النوع Dynamic أو Variant متداخل داخل Tuple إلى element type غير Nullable باستخدام accurateCastOrNull أو accurateCastOrDefault. #108061 (Alexey Milovidov).
  • إصلاح numericIndexedVectorPointwiseMultiply الذي كان يعيد نتيجة فارغة عند الضرب في متجه كل قيمه واحد وله إعداد BSI ‏(bit-sliced index) مختلف. #108027 (Alexey Milovidov).
  • إصلاح toTime64 و CAST(... AS Time64) اللذين لم يكونا يقيّدان القيم الخارجة عن النطاق إلى نطاق Time64 في وضعي overflow ‏saturate و ignore، مما قد ينتج عنه قيم تظهر بشكل متطابق ولكن تُقارَن على أنها مختلفة. #108028 (Alexey Milovidov).
  • أصبح getClientHTTPHeader الآن يُعامَل بشكل صحيح على أنه non-deterministic، ولذلك لم تعد نتيجته تُعاد استخدامها بشكل غير صحيح بواسطة query result cache. #108029 (Alexey Milovidov).
  • أصبح clickhouse-client --port 9440 يفعّل تلقائيًا مرة أخرى connection آمنًا (TLS)؛ وكان هذا معطّلًا بسبب إعادة هيكلة توقفت معها عملية تمرير المنفذ إلى آلية التحقق من الاتصال الآمن. #108032 (Alexey Milovidov).
  • لم يعد error عابر أثناء refresh data parts الخاصة بـ table في وضع read-only يوقف نهائيًا مهمة refresh التي تعمل في background. #108034 (Alexey Milovidov).
  • إصلاح تأخر warnings الخاصة بفرط الحمل في memory/CPU/mutation داخل system.warnings بمقدار دورة واحدة عن asynchronous-metrics cycle (وغيابها في الدورة الأولى). #108035 (Alexey Milovidov).
  • أصبحت mongodb table function تقبل الآن oid_columns عند تمريره بوصفه argument مُسمّى (مثل oid_columns='_id') بدلًا من رفضه مع BAD_ARGUMENTS. #108039 (Alexey Milovidov).
  • إصلاح استثناء Bad cast from type DB::ColumnNullable to DB::ColumnVector<...> (خطأ منطقي) عندما يختار asterisk مؤهَّل (t.*) مفتاح JOIN USING ويكون ذلك الـ join متداخلًا تحت join من نوع PASTE/CROSS/الفاصلة أو join خارجي من نوع ON، مع join_use_nulls = 0. #108043 (Groene AI).
  • إصلاح التعامل غير الصحيح مع تأكيدات العرض الصفري (\b, ^, $) في دوال regexp “match all” وهي extractAll, extractAllGroupsVertical, extractAllGroupsHorizontal, countMatches و splitByRegexp. على سبيل المثال، يعيد extractAll('new york is the greatest', '\b(\w)') الآن بشكل صحيح الحرف الأول من كل كلمة بدلًا من كل حرف. #108047 (Alexey Milovidov).
  • تم إصلاح CREATE TABLE ... AS SELECT على قواعد بيانات Atomic، إذ كان يترك جدولًا فارغًا عند فشل الاستعلام — على سبيل المثال، عندما لا يملك المستخدم صلاحية الوصول إلى جدول مُشار إليه من subquery. سابقًا، كانت إعادة المحاولة تُبلغ بأن الجدول موجود بالفعل بدلًا من إظهار error الأصلي. يُنشأ الجدول الآن عبر temporary table ولا يظهر إلا بعد اكتمال تعبئته بالكامل. #108048 (Alexey Milovidov).
  • أصبح من الممكن الاستعلام عن قاموس range_hashed أو complex_key_range_hashed يستخدم نطاق DateTime64 أو Decimal أو نطاق أعداد floating-point باستخدام argument مطابق لـ dictGet/dictHas. سابقًا، كانت مثل هذه queries تفشل برسالة must be convertible to Int64، وكانت intervals المفتوحة النهاية في نطاقات Decimal/DateTime64 تُرجع default value بشكل غير صحيح. #108052 (Alexey Milovidov).
  • تم إصلاح استثناء (CANNOT_PARSE_TEXT) عند تحميل قاموس ذي مفتاح composite تكون فيه key columns ليست أول columns في تعريف القاموس، وذلك مع source محلي من ClickHouse يستخدم query صريحًا. تُطابق source columns الآن مع structure القاموس حسب name بدلًا من ترتيبها. #108053 (Alexey Milovidov).
  • تم إصلاح فشل table functionvalues مع ARGUMENT_OUT_OF_BOUND عند استخدام literal عشري لا يمكن تمثيله بدقة في column ذي نوع floating-point محدود الدقة (مثل 0.1 مع column من نوع Float32)، مثل SELECT * FROM values('x Float32', 0.1). أصبحت مثل هذه values الآن مقبولة وتُحوَّل إلى أقرب قيمة قابلة للتمثيل، بما يتوافق مع CAST وINSERT ... VALUES. #108055 (Alexey Milovidov).
  • تم إصلاح LOGICAL_ERROR ‏(No available columns) عند تنفيذ SELECT count() (أو غيره من queries البسيطة) على table مُنح فيه المستخدم صلاحية SELECT على ALIAS column فقط. #108056 (Alexey Milovidov).
  • تم إصلاح mapFilter وmapSortvariants الخاصة به) وmapConcat التي كانت تُسقط LowCardinality من نوعَي المفتاح والقيمة في Map. سابقًا، كان mapFilter على column من النوع Map(LowCardinality(String), String) يُرجع Map(String, String)، ما قد يُفسد metadata الخاصة بـ table أُنشئ عبر CREATE TABLE ... AS SELECT ويتسبب في فشل CHECK TABLE. #108057 (Alexey Milovidov).
  • تم إصلاح نتائج غير صحيحة عند استخدام hasToken على text indexes مع tokenizer غير splitByNonAlpha. #108066 (Robert Schulze).
  • تم إصلاح تجمّد SYSTEM RELOAD DICTIONARIES (وكذلك RELOAD DICTIONARY) عند مشاركة عدد كبير من قواميس MySQL المعرّفة في XML لمجموعة connection pool واحدة عبر share_connection. أصبحت هذه المجموعات الآن تلتزم بـ connection_pool_size وconnection_wait_timeout (القيمة الافتراضية 5 seconds) من configuration، بما يتوافق مع القواميس المعرّفة عبر named collections. #108083 (Alexey Milovidov).
  • أصبح استخدام EXISTS <dictionary> مسموحًا للمستخدم الذي يملك فقط privilegeSHOW DICTIONARIES على القاموس (وكان ذلك يتطلب سابقًا SHOW TABLES). #108084 (Alexey Milovidov).
  • تم إصلاح مشكلة في CREATE TABLE dst AS src SETTINGS ... (والصيغ المشابهة مع ORDER BY/PARTITION BY ولكن من دون ENGINE صريح) كانت تؤدي بصمت إلى إسقاط محرك الجدول المصدر، وعبارات التخزين (مثل table TTL والمفاتيح) والإعدادات. وأصبح الآن محرك الجدول وعبارات التخزين التي لم يجرِ تجاوزها تُورَّث من الجدول المصدر، كما تُدمَج الإعدادات المحددة فوق إعدادات الجدول المصدر. #108085 (Alexey Milovidov).
  • تم إصلاح فشل INSERT في جداول MergeTree مع الخطأ filesystem error: in rename: Permission denied على أنظمة الملفات المعتمدة على Windows ‏(WSL وCIFS/SMB وDocker Desktop bind mounts)، وكان السبب أن كاتب الجزء يترك واصفات الملفات مفتوحة أثناء إعادة تسمية دليل الجزء. #108089 (Alexey Milovidov).
  • تم إصلاح انهيار (إلغاء مرجعية مؤشر فارغ) عند الاستعلام عن جدول Hive من دون عبارة WHERE، مثل SELECT * FROM hive_table. #108094 (Alexey Milovidov).
  • تم إصلاح LOGICAL_ERROR ‏(“Unexpected return type from if”) عند قراءة عمود مع apply_mutations_on_fly = 1 بعد تنفيذ ALTER UPDATE col = ... WHERE <cond> بشرط غير ثابت أو غير محقق، يتبعه ALTER MODIFY COLUMN col <new type>. #108128 (Groene AI).
  • تم إصلاح toStartOfInterval وdateTrunc اللتين كانتا تعيدان قيمة مقربة بدلًا من بداية الفاصل الزمني الذي تقع ضمنه القيمة عندما تكون دقة الإدخال أعلى من وحدة الفاصل، مثلًا toStartOfInterval(toDateTime64('2023-10-09 10:11:12.000999', 6), INTERVAL 1 millisecond) كانت تعيد 10:11:12.001 بدلًا من 10:11:12.000. كما تأثر أيضًا التحميل الزائد الذي يستخدم origin صريحًا. يُغلق هذا #103535. #108186 (Yarik Briukhovetskyi).
  • تم إخفاء المعلومات الحساسة في العمود view_query ضمن system.query_views_log. #108214 (Valerii Mordovskii).
  • تم إصلاح حالة تعطل في جدول MergeTree مرفق بفهرس تخطٍّ قديم من نوع hypothesis (وهو نوع فهرس أُزيل وأُبقي عليه فقط من أجل توافق ATTACH). سابقًا، كانت عملية lightweight DELETE أو OPTIMIZE أو INSERT عادي أو SELECT مفلتر على مثل هذا الجدول تفشل مع ILLEGAL_INDEX ‏(“Index of type ‘hypothesis’ is no longer supported”)، وكانت mutation الخاصة بـ DELETE تعيد المحاولة إلى ما لا نهاية. أما الآن فيُعامل هذا الفهرس الميت على أنه خامل: يُمرَّر كما هو من دون تغيير أثناء merge/mutation، ويُتخطى عند insert وأثناء تخطيط الاستعلام، ولا يزال بالإمكان حذفه باستخدام ALTER TABLE ... DROP INDEX. #108217 (Groene AI).
  • تم إصلاح عدم عمل الإعداد type_json_allow_duplicated_key_with_literal_and_nested_object مع المسارات محددة النوع في JSON. #108218 (Pavel Kruglov).
  • تم إصلاح LOGICAL_ERROR ‏(Different list of shards in child plans) عند تشغيل استعلام مع make_distributed_plan = 1 على جدول MergeTree يحتوي على projection عادي أو تجميعي. #108256 (Groene AI).
  • تم إصلاح replaceRegexpOne وreplaceRegexpAll بحيث أصبحت . تطابق محارف السطر الجديد افتراضيًا، بما يتوافق مع بقية دوال regular expression. #108265 (linjiayu1025-collab).
  • إصلاح خطأ منطقي عند تحويل Array(Dynamic) أو Array(Variant) إلى QBit باستخدام accurateCastOrNull، مثل accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)'). #108288 (Groene AI).
  • أصبح index_granularity_bytes الآن مطبَّقًا على أعمدة حالة AggregateFunction. سابقًا، كان الحد الأقصى لبايتات الـ granule يُتجاهَل لهذه الأعمدة (مثل حالات uniqExact في جداول AggregatingMergeTree وprojections التجميعية)، ما كان ينتج granules أكبر بكثير من الحد المضبوط ويزيد من تضخيم القراءة واستهلاك الذاكرة وقت الاستعلام. #108297 (Groene AI).
  • إصلاح مشكلة تقييم شروط UPDATE/DELETE خفيفة الوزن مرتين، ما قد يؤدي إلى سلوك غير صحيح مع الشروط غير الحتمية وإلى عمل إضافي مع الشروط الحتمية. يغلق #86032. #108323 (ofeliacode).
  • إصلاح Exception في معالج HTTP معرّف مسبقًا عند غياب header من الطلب، رغم أن التعبير النمطي headers_regexp الخاص به يسمح بقيمة فارغة. #108324 (Vitaly Baranov).
  • إصلاح arrayPartialSort عند استخدام argument للحد غير ثابت. #108327 (Vitaly Baranov).
  • إصلاح مشكلة استمرار تنفيذ INSERT مُلغى أو تم KILL له لفترة طويلة أثناء بناء skip index (مثل فهرس set(0) غير محدود على عمود عالي الكاردينالية). أصبح بناء الفهرس الآن يتوقف سريعًا عند إلغاء الاستعلام. #108351 (Shaohua Wang).
  • إصلاح عدم استجابة SELECT من table function primes للإلغاء: عند استخدام step كبير (أو limit) كان الاستعلام قد يستمر في العمل لفترة طويلة بعد KILL QUERY أو انتهاء المهلة. وهو الآن يتوقف سريعًا. #108353 (Shaohua Wang).
  • إصلاح تحليل أسماء type names التي تتضمن substring INT ضمن الاسم (مثل اسم يشبه الدوال مثل quantileInterpolatedWeighted عند استخدامه في موضع نوع بيانات). كان يجري التعامل مع هذه الأسماء خطأً على أنها Integer types في MySQL، كما كانت أول مجموعة argument فيها (...) تُستهلك بصمت باعتبارها معدِّلًا لعرض العرض، ما قد يفسد round-trip لتنسيق الاستعلام. #108354 (Groene AI).
  • إصلاح حالة عدم اتساق كان فيها ARRAY JOIN غير صحيح متبوعًا بفاصلة وقائمة جداول بين قوسين يُفسَّر خطأً على أنه cross join بدلًا من رفضه. #108365 (Raúl Marín).
  • إخفاء arguments السرية للدوال مثل encrypt وdecrypt وHMAC في مخرجات EXPLAIN actions وEXPLAIN header وEXPLAIN PIPELINE عندما يكون format_display_secrets_in_show_and_select معطّلًا (وهو الوضع الافتراضي). #108386 (Raúl Marín).
  • إصلاح CREATE OR REPLACE لعرض materialized view قابل للتحديث مع هدف TO: كان يُرفَض خطأً لأن الجدول الهدف مملوك بالفعل للعرض الجاري استبداله. #108392 (Nikolay Degterinsky).
  • أُصلِح تعطل في الخادم (Received signal 4، تعليمة غير قانونية) كان يمكن أن يحدث بسبب دفق بروتوكول native TCP غير صالح أو غير متزامن. وأصبح الآن يُتحقق من أن العنوان الأولي الذي يرسله العميل هو host:port رقمي قبل تحليله، بدلًا من السماح بوصول منفذ غير رقمي إلى دالة getservbyname المحصورة في libc. #108410 (Groene AI).
  • أُصلِح تعطل في الخادم أثناء الإيقاف عند إيقاف قاعدة بيانات تُلقي استثناءً (على سبيل المثال، عندما تصطدم عملية flush لجدول بمهلة ZooKeeper). ولم يعد ما تبقى من تسلسل الإيقاف يُتخطى، بحيث تُفرَّغ الآن سجلات النظام وتُنضم خيوطها قبل خروج الخادم. #108417 (Groene AI).
  • أُصلِحت دوال regular expression (match, extract, extractAll, replaceRegexpOne, replaceRegexpAll، إلخ) التي كانت تُرجع بصمت نتائج خاطئة عندما كان النمط يحتوي على بايت NUL (\0). ويُعامَل NUL الآن على أنه بايت حرفي عادي، بما يتسق مع RE2. #108427 (Alexey Milovidov).
  • أُصلِح سلوك clickhouse-local الذي كان يُرجع ردًا فارغًا لطلبات HTTP OPTIONS عندما لا يكون http_options_response مُهيأً، مما كان يجعل واجهة الويب (/play) تعرض الاتصال على أنه معطّل رغم أن الاستعلامات كانت تعمل. #108428 (Alexey Milovidov).
  • أُصلِح استثناء LOGICAL_ERROR (“Invalid action query tree node …”) عند تنفيذ distributed query كانت تزيل التكرار من أعمدة ALIAS المكررة والمتطابقة بنيويًا، وتشير في الوقت نفسه إلى table function تحتوي على وسيطة named-collection بصيغة key = value (على سبيل المثال oss(s3_conn, filename = '...')). #108435 (Groene AI).
  • أُصلِح تعطل في الخادم (LOGICAL_ERROR: 'Unexpected exception in refresh scheduling') كان يمكن أن يحدث عند بدء التشغيل عندما تكون refreshable materialized view منسقة في قاعدة بيانات Replicated قد أُرفقت على Keeper لا يدعم علامة الميزة MULTI_READ (على سبيل المثال بعد خفض إصدار Keeper). وأصبح العرض الآن يتوقف بسلاسة بدلًا من إجهاض الخادم. #108441 (Groene AI).
  • أُصلِح خطأ NOT_FOUND_COLUMN_IN_BLOCK (مثل Column _part not found) عند تحديد الأعمدة الافتراضية من جدول MergeTree في وضع parallel replicas، بما في ذلك عبر SELECT * مع asterisk_include_virtual_columns = 1. #108451 (Groene AI).
  • يتطلب SYSTEM RESET DDL WORKER الآن امتياز SYSTEM RESET DDL WORKER الجديد. في السابق، كان بإمكان أي مستخدم موثَّق الهوية (بمن فيهم مستخدمو readonly) تشغيله وإعادة تعيين حالة عامل DDL مرارًا، مما كان يحجب DDL الخاصة بـ ON CLUSTER. #108460 (Groene AI).
  • قُيِّد مسار النموذج الخاص بـ catboostEvaluate بدليل user_files، مثل table function ‏file وdictionary sources. في السابق، كانت الدالة تقبل أي path في filesystem من دون التحقق من بقائه ضمن هذا النطاق، مما كان يتيح اختبار وجود ملفات خارج user_files والتسبب في reads لها. ويجب الآن أن تكون النماذج موجودة داخل user_files. #108463 (Groene AI).
  • تتطلب الدالة hasColumnInTable الآن امتياز SHOW COLUMNS على الجدول الهدف، وهو نفس الامتياز المطلوب لكل من DESCRIBE وSHOW CREATE TABLE. في السابق، كان بإمكان أي مستخدم استدعاء hasColumnInTable لاختبار أسماء الأعمدة والتحقق من وجود جدول وقاعدة بيانات من دون أي فحص لصلاحيات الوصول. #108464 (Groene AI).
  • تم إصلاح التخصيص المفرط للذاكرة عند إلغاء تسلسل حالات aggregate function الوسيطة المُصاغة لـ mannWhitneyUTest وrankCorr وlargestTriangleThreeBuckets وquantileGK وsequenceMatch/sequenceCount وgroupArrayIntersect. كان بإمكان حالة غير سليمة أن تعلن عددًا هائلًا من العناصر، فتجعل الخادم يحاول تخصيص عشرات الجيجابايتات انطلاقًا من بضع بايتات من الإدخال؛ وتُرفض هذه الحالات الآن بالخطأ TOO_LARGE_ARRAY_SIZE. #108465 (Groene AI).
  • التحقّق من هدف إعادة التوجيه في استجابة S3 301 Moved Permanently بمقارنته مع remote_url_allow_hosts (RemoteHostFilter). سابقًا، كانت معالجة AWS SDK للرمز 301 تتبع endpoint الذي يورّده المهاجم في الاستجابة (ترويسة Location أو العنصر <Endpoint>) من دون التحقق من المضيف، ما كان يتيح لخادم S3-compatible خبيث أو مخترَق إعادة توجيه ClickHouse إلى مضيف عشوائي (SSRF). وكان مسار إعادة التوجيه 307 يُجري هذا التحقق بالفعل؛ وأصبح المساران الآن متسقين. #108466 (Groene AI).
  • تم إصلاح تسرّب لبيانات الاعتماد، إذ كانت الإعدادات القديمة storage_aws_access_key_id وstorage_aws_secret_access_key وstorage_catalog_credential وstorage_auth_header الخاصة بـ database engine ‏DataLakeCatalog تظهر بنص واضح في system.databases.engine_full وSHOW CREATE DATABASE. وأصبحت الآن تُحجب على شكل [HIDDEN]. #108470 (Groene AI).
  • تم إصلاح تحديد هوية المستخدم ssl_certificate بحيث يطابق حرف البدل المفرد * مكوّن اسم واحدًا فقط بدقة (RFC 6125 6.4.3). سابقًا، كان حرف البدل في الموضوع CN أو DNS: SAN (على سبيل المثال *.corp.example.com) يطابق أيضًا الأسماء متعددة الأجزاء مثل evil.deep.corp.example.com، مما يتيح لحامل شهادة لنطاق فرعي أعمق أن يصادق بصفته مستخدم حرف البدل. ولم يتغير تطابق URI: SAN. #108472 (Groene AI).
  • تم إصلاح ثغرة SQL injection في MySQL wire protocol: إذ أصبحت وسيطة SHOW TABLE STATUS LIKE وقيمة SET <mysql_setting> المُرسلتان عبر MySQL interface (المنفذ 9004) تُحلَّلان وتُعاد صياغتهما بين علامتَي اقتباس بدلًا من دمجهما حرفيًا في query المعاد كتابته. كما تم إصلاح تجاهل KILL QUERY <id> عبر MySQL interface بصمت لمعرّفات الاتصال متعددة الأرقام. #108474 (Groene AI).
  • لم تعد القيم الحساسة التي تُمرَّر كمعلمات query string في HTTP (على سبيل المثال ربط معلمات param_* مثل param_secret_key/param_aws_secret_access_key، أو المعلمة password، أو معلمات signature بأسلوب S3) تُكتب حرفيًا في system.text_log أو OpenTelemetry spans. ويقوم سطر السجل Request URI الآن بحجب قيم المعلمات التي تبدو أسماؤها حساسة، مع استبدالها بـ [HIDDEN]. #108475 (Groene AI).
  • تم فرض configuration ‏http_forbid_headers أثناء schema inference للدالة الجدولية url وstorage engine ‏URL. سابقًا، كانت ترويسة محظورة لا تزال تُرسل عبر الشبكة أثناء استنتاج المخطط (على سبيل المثال مع التنسيق Regexp أو DESCRIBE)، وكان يمكن أن ينعكس جسم الاستجابة الخاص بها في خطأ parse، مما يسرّب الأسرار. ويجري الآن التحقق من عامل تصفية الترويسات قبل أي وصول إلى الشبكة في مسار الاستنتاج، بما يطابق السلوك الحالي لـ urlCluster. #108476 (Groene AI).
  • تم إصلاح النتائج الخاطئة عند استخدام SELECT ... SAMPLE ... مع query condition cache (الإعداد use_query_condition_cache، المفعّل افتراضيًا). #108488 (Groene AI).
  • تم إصلاح تعطل في الخادم (فيض في المكدس) كان يحدث بسبب التعبيرات المتداخلة بعمق مثل [[[ ... ]]] أو array(array( ... )) عندما تكون max_parser_depth مضبوطة على قيمة كبيرة. #108493 (Raúl Marín).
  • تم إصلاح تعليق محرك الجدول RabbitMQ إلى أجل غير مسمى عند تنفيذ DROP TABLE أو إيقاف الخادم، وذلك عندما يغلق الوسيط اتصال AMQP بسبب فقدان نبضات القلب من دون إرسال TCP RST. وأصبحت جميع استدعاءات حلقة الأحداث الحاجبة تملك الآن مهلة قدرها 30 ثانية، بحيث يكتمل الإيقاف دائمًا. #108497 (Aly Ayman).
  • ستُسجَّل الآن الاستعلامات الثانوية التي تُنفَّذ كجزء من الاستعلامات الداخلية على أنها استعلامات داخلية. #108506 (Miсhael Stetsyuk).
  • أصبح محرك الجدول ArrowFlight وtable function ‏arrowFlight يلتزمان الآن بقائمة السماح <remote_url_allow_hosts>. في السابق، لم يكن يجري التحقق من المضيف والمنفذ الخاصَّين بالاتصال، لذا كان يمكن للاستعلام الوصول إلى مضيفين غير موجودين في قائمة السماح. #108507 (Groene AI).
  • تفرض أوامر MySQL wire protocol COM_FIELD_LIST (mysql_list_fields) وCOM_INIT_DB (USE database) الآن نفس آلية access control المطبقة على مكافئاتها في SQL (SHOW COLUMNS/DESCRIBE وUSE). في السابق، كان يمكنها كشف أسماء أعمدة الجداول التي لا يملك المستخدم عليها سوى صلاحيات جزئية على الأعمدة، وكذلك تبديل قاعدة البيانات الحالية من دون امتياز SHOW DATABASES. #108508 (Groene AI).
  • أصبحت http_forbid_headers تُطابَق الآن دون اعتبار لحالة الأحرف. وأسماء HTTP header غير حساسة لحالة الأحرف، لذا فإن حظر Authorization يمنع الآن أيضًا authorization وAUTHORIZATION وغيرها من اختلافات حالة الأحرف. كما أصبحت أنماط header_regexp المُعدّة تُطابَق الآن دون اعتبار لحالة الأحرف من دون الحاجة إلى الراية الصريحة (?i). #108509 (Groene AI).
  • تم إصلاح تعطل في الخادم (خطأ تجزئة) كان يمكن أن يحدث عندما كان استعلام موزع يشير إلى MATERIALIZED CTE لم يُمثَّل ماديًا بعد بوصفه جدولًا خارجيًا، وكان المصدر البعيد يُنشأ عند الطلب. #108547 (Groene AI).
  • تم إصلاح نتائج خاطئة عندما كانت query condition cache (use_query_condition_cache = 1) تعيد استخدام استبعاد العلامات المشتق من skip index لاستعلام شغّل مجموعة مختلفة من skip indexes، على سبيل المثال مع use_skip_indexes = 0 أو ignore_data_skipping_indices أو وضع مختلف لـ use_skip_indexes_for_disjunctions. وأصبحت cache entries المشتقة من skip index تُفهرس الآن وفق المجموعة الفعلية من skip indexes التي شُغِّلت. #108548 (Groene AI).
  • تم إصلاح عدة أخطاء في changeYear وchangeMonth وchangeDay وchangeHour وchangeMinute وchangeSecond مع وسائط DateTime64: كان عمود النتيجة يُنشأ بالمقياس الافتراضي المضمّن 3 بدلًا من مقياس الوسيط، مما أدى إلى LOGICAL_ERROR (writeSlice expects same column types) عند تمرير النتيجة إلى arrayPushBack/arrayPushFront/arrayConcat؛ وكانت المدخلات بدقة النانوثانية (المقياس 9) تُطلق DECIMAL_OVERFLOW؛ وكانت المدخلات ذات الأجزاء دون الثانية قبل epoch تُرجع ثانية تقويمية غير صحيحة. كما تم أيضًا إصلاح timeSlots مع DateTime64، إذ كان يتجاهل مقياس وسيط Size الاختياري في نوع الإرجاع المعلن ويُرجع timestamps غير صحيحة لأكبر مقياس في Size. #108551 (Groene AI). #108681 (Takumi Hara). #108994 (Groene AI).
  • إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند استخدام اسم مستعار لـ compound predicate في GROUP BY ثم الرجوع إليه مرة أخرى، مع تفعيل enable_identifier_resolve_cache (وهو الإعداد الافتراضي). #108553 (Groene AI).
  • إصلاح خطأ منطقي (Equal values are not contiguous within the range assumed to be sorted) عند تشغيل DISTINCT على قراءة STREAM (SELECT DISTINCT ... FROM table STREAM). لم تعد تحسينات القراءة بالترتيب تُطبَّق على قراءات STREAM، لأنها تُنتج الصفوف وفق ترتيب الالتزام لا وفق ترتيب مفتاح الفرز. #108568 (Groene AI).
  • إصلاح مشكلة كانت تؤدي إلى أن تُرجع projections القيمة الافتراضية لنوع العمود (مثل 0) بدلًا من قيمة DEFAULT المعلنة له (مثل -1) في حالتين: عند قراءة عمود أُضيف باستخدام ALTER TABLE ... ADD COLUMN ... DEFAULT بعد إنشاء الـ projection (وكانت القراءات من base table صحيحة بالفعل)، وبعد انتهاء صلاحية TTL الخاصة بالعمود على Wide part. #108569 (Shaohua Wang). #109013 (Shaohua Wang).
  • إصلاح الخطأ ReadBuffer is canceled. Can't read from it. الذي كان قد يحدث عند إعادة محاولة الرفع إلى S3 (مثل نسخة احتياطية) بعد خطأ قراءة عابر. #108573 (Groene AI).
  • إصلاح مشكلة كانت تجعل ATTACH PARTITION ... FROM يرفض الجداول التي تكون primary keys فيها متكافئة ولكن مُعلنة بصيغ مختلفة (إحداهما PRIMARY KEY صريحة، والأخرى ضمنية من ORDER BY). #108590 (Jordi Orihuela).
  • إصلاح فشل direct read من text index عند وجود عدة text indexes ممثلة ماديًا جزئيًا. يُصلح هذا #108530. #108607 (Anton Popov).
  • إصلاح كشف metadata، حيث كانت DESCRIBE loop('db', 'table') و DESCRIBE loop(<inner table function>) تتجاوزان فحص الوصول إلى SHOW COLUMNS / المصدر، مما يتيح لمستخدم غير مخوّل قراءة مخطط أعمدة الجدول. #108624 (Groene AI).
  • إصلاح العمود الافتراضي _etag في محركي الجدول S3Queue و AzureQueue: إذ كان مُعلنًا لكنه لم يكن يُملأ مطلقًا، لذلك كان SELECT _etag يُرجع دائمًا سلسلة فارغة. وهو الآن يُرجع ETag الخاص بالكائن، مثل محرك S3 و table function ‏s3. #108625 (Groene AI).
  • إصلاح قراءة ملفات Arrow وArrowStream وملفات ORC المعتمدة على Arrow عندما كان عمود timestamp فيها يحمل إزاحة UTC رقمية ثابتة (مثل +05:30 و-08:00 و00:00) أو الوسم غير التابع لـ IANA وهو fixed بوصفه timezone له، إذ كان ذلك يفشل سابقًا مع Cannot load time zone ... (BAD_ARGUMENTS). #108633 (Groene AI).
  • إصلاح استثناء (LOGICAL_ERROR: Join is supported only for pipelines with one output port أو NOT_IMPLEMENTED: MergeJoinAlgorithm is not implemented for strictness Semi) عند استخدام join_algorithm = 'full_sorting_merge' مع join من نوع SEMI/ANTI، بما في ذلك عمليات join الناتجة عن فك الارتباط في correlated subquery من نوع EXISTS. وأصبح full_sorting_merge الآن يرفض تراكيب strictness/kind التي لا يمكنه تنفيذها، بحيث يعود المخطط إلى استخدام خوارزمية أخرى مفعّلة أو يُبلغ بأن join لا يمكن تنفيذه. #108658 (Groene AI).
  • تم إصلاح تجاوز سعة مخزن مؤقت في heap عند بناء فهرس نصي باستخدام positions = 1 على عدد كبير من الرموز القصيرة المختلفة. #108659 (Groene AI).
  • أصبح الآن يُبلَّغ عن أي استعلام يقرأ من S3 أو يكتب إليه ويُلغى (مثلًا بواسطة KILL QUERY) أثناء وجود طلب S3 قيد التنفيذ على أنه مُلغى، بدلًا من الإبلاغ عنه كخطأ مضلل في الشبكة أو S3. وعلى وجه الخصوص، أصبح أي نسخ احتياطي أو استعادة إلى S3 يتم إلغاؤه يُبلَّغ عنه الآن على أنه BACKUP_CANCELLED/RESTORE_CANCELLED في system.backups. #108673 (Julia Kartseva).
  • تم إصلاح حالة فشل عند بدء التشغيل، حيث كانت قاعدة بيانات DataLakeCatalog التي أُنشئت بإصدار أقدم (25.12 أو ما قبله) مع auth_header غير صحيح التنسيق، تتعذر تهيئتها بعد الترقية إلى 26.2 أو أحدث، مما كان يمنع الخادم من البدء. أصبح auth_header الآن يُتحقق منه فقط عند CREATE، وعند ATTACH يُنشأ الكتالوج بشكل كسول عند أول استخدام بدلًا من إنشائه أثناء بدء التشغيل، لذا لم تعد قاعدة بيانات كتالوج واحدة سيئة الإعداد أو غير قابلة للوصول تمنع بدء تشغيل الخادم. #108674 (Groene AI).
  • تم إصلاح خطأ منطقي (Sort order of blocks violated) أثناء الدمج، إلى جانب قراءات غير صحيحة، عندما يُستخدم عنصر LowCardinality غير قابل لـ NULL من عمود Nullable(Tuple(...)) كعمود فرعي، مثل استخدامه كمفتاح فرز. #108679 (Groene AI).
  • تم إصلاح تعطل محتمل (use-after-free) عندما يعمل SYSTEM FLUSH DISTRIBUTED بالتزامن مع DROP TABLE للجدول Distributed نفسه. #108684 (Groene AI).
  • تم إصلاح تعطل في فك ترميز Base64 لمفتاح حساب Azure، ويمكن الوصول إليه عبر azureBlobStorage (ودوال الجداول ووحدات التخزين المرتبطة بـ Azure) عندما لا يكون المفتاح Base64 صالحًا: إذ كانت قيمة بايت >= 0x80 تتسبب في قراءة خارج الحدود، وكان أي بايت غير صالح يؤدي إلى سلوك undefined. وأصبح الآن يُرفض المفتاح غير الصالح بشكل سليم. #108716 (Groene AI).
  • تم إصلاح الخطأ NUMBER_OF_COLUMNS_DOESNT_MATCH عندما يقرأ استعلام فرعي على جدول Distributed عمودَي ALIAS أو أكثر يتم توسيعهما إلى التعبير نفسه (مثلًا a1 String ALIAS toString(x), a2 String ALIAS toString(x)) ويغذي الاستعلامُ الفرعي استعلامًا خارجيًا، مثل SELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2). #108725 (Groene AI).
  • تم إصلاح مشكلة في CREATE OR REPLACE MATERIALIZED VIEW ... POPULATE كانت تترك العرض الجديد غير مشترك مع جدول المصدر الخاص به، مما كان يؤدي بصمت إلى إسقاط كل صف يُدرج بعد الاستبدال. #108728 (Alexey Milovidov).
  • تم إصلاح استثناء (Cannot find sharding key column، وفي بُنى debug و sanitizer كان يحدث إيقاف للخادم) عندما يكون مفتاح التجزئة لجدول Distributed تعبيرًا يختزله المحلل إلى ثابت، مثل if(1, toInt32(id), toInt32(id) + 1)، مع optimize_skip_unused_shards = 1. #108737 (Groene AI).
  • تم إصلاح خطأ منطقي (Bad cast from type DB::ColumnNullable to DB::ColumnString) واحتمال ظهور نتائج غير صحيحة عند استخدام group_by_use_nulls مع مفتاح تجميع ثابت من نوع LowCardinality في GROUPING SETS/ROLLUP/CUBE. #108771 (Alexey Milovidov).
  • تم إصلاح تعطُّل استبعاد partition والمفتاح الأساسي بصمت عندما يكون عمود المفتاح LowCardinality(FixedString) (أو LowCardinality(Nullable(FixedString))) ملفوفًا داخل دالة في المفتاح، مثل PARTITION BY sipHash64(k) % N مع WHERE k = 'literal'. كانت مثل هذه الاستعلامات تفحص جميع أقسام partition بدلًا من استبعادها. #108777 (Groene AI).
  • تم إصلاح خطأ منطقي (يؤدي إلى إيقاف الخادم في بنيات debug وsanitizer) عند إلغاء INSERT ... SELECT عبر جدول Alias، أو إلى جدول TimeSeries، من دون استثناء، مثلًا عند استخدام timeout_overflow_mode = 'break'. #108783 (Groene AI). #108796 (Shaohua Wang).
  • تم إصلاح خطأ منطقي من النوع Bad cast from type DB::ColumnSparse to DB::ColumnString (يؤدي إلى إيقاف الخادم في بنيات debug وsanitizer) عند تطبيق groupConcat على Tuple يكون عنصر String فيه مخزَّنًا بشكل sparse. #108790 (Groene AI).
  • تم إصلاح TYPE_MISMATCH في mapFilter وmapSort وmapReverseSort وmapPartialSort وmapConcat عندما تحتوي قيمة Map على Map متداخل مع LowCardinality، مثل mapFilter((k, v) -> 1, map('a'::LowCardinality(String), map('x'::LowCardinality(String), 'y'))). #108798 (Groene AI).
  • تم إصلاح عدم قيام insert_quorum = 'auto' برفض inserts مسبقًا عندما يكون عدد replicas الحية أقل من الأغلبية. أصبحت مثل هذه inserts تفشل الآن فورًا برسالة TOO_FEW_LIVE_REPLICAS بدلًا من كتابة جزء محلي ثم انتهاء المهلة لاحقًا مع UNKNOWN_STATUS_OF_INSERT. #108800 (Gagan Dhakrey).
  • تم إصلاح bug كان يجعل صف WITH TOTALS في JOIN يحتوي أحيانًا على قيم default (مثل 0) بدلًا من القيم الثابتة القادمة من استعلام فرعي ثابت على أحد جانبي join. كانت النتيجة الخاطئة تظهر فقط مع بعض ترتيبات join أو مع الإعداد query_plan_join_swap_table. #108807 (Vladimir Cherkasov).
  • تم إصلاح fault ناتج عن segmentation (إلغاء مرجع مؤشر فارغ) كان يمكن أن يحدث عند تنفيذ إيقاف الخادم بالتزامن مع إيقاف جدول S3Queue/AzureQueue. #108810 (Miсhael Stetsyuk).
  • تم إصلاح توقف عند بدء التشغيل (Cannot allocate ThreadStack, EINVAL) في بنيات glibc التي تعمل على معالجات CPU ذات حجم كبير لمكدس الإشارات (مثل Intel Sapphire Rapids / Granite Rapids مع نواة تدعم AMX)، حيث لم يكن حجم مكدس الإشارات البديل يُقرَّب إلى مضاعف لحجم الصفحة. #108813 (Groene AI).
  • تم إصلاح فشل الاستعلامات الموزعة أحيانًا برسالة UNEXPECTED_PACKET_FROM_SERVER (expected TablesStatusResponse, got ProfileInfo) عند إعادة استخدام connection من المجمّع كانت query ملغاة سابقة قد تركتها في حالة عدم تزامن. #108854 (Alexey Milovidov).
  • تم إصلاح خطأ منطقي (استثناء في إصدارات build النهائية، وإيقاف للخادم في إصدارات debug وsanitizer) كان يمكن أن يحدث عند استدعاء دالة لها أكثر من وسيط LowCardinality واحد على distributed table، مثل concatAssumeInjective((SELECT toLowCardinality('p')), s) عند استخدامها كمفتاح GROUP BY مع table function ‏remote. وكانت الرسائل هي Default functions implementation for LowCardinality is supported only with a single LowCardinality argument أو Expected the argument ... to have N rows, but it has M. #108871 (Groene AI).
  • تم إصلاح reinterpret(x, 'Decimal128(scale)') (وكذلك الأهداف Decimal32/Decimal64/Decimal256/DateTime64) الذي كان ينتج عمود نتائج يكون فيه scale الداخلي هو scale المصدر بدلًا من scale الهدف المطلوب، عندما كان المصدر والهدف من النوع الفيزيائي نفسه. كانت القيم صحيحة، لكن كائن العمود كان غير متسق بنيويًا مع نوعه المُعلَن. #108878 (Groene AI).
  • تم إصلاح LOGICAL_ERROR (New empty part is about to materialize but the directory already exist) كان يمكن أن يؤدي إلى إيقاف الخادم في إصدارات debug وsanitizer عندما تُنفَّذ عملية DROP/DETACH/MOVE/REPLACE PARTITION على جدول MergeTree بعد أن تكون عملية سابقة من هذا النوع قد انقطعت (مثل transaction جرى التراجع عنها أو تعطل) وتركت خلفها directory قديمًا باسم tmp_empty_<part>. وأصبح الآن يُستعاد هذا الـ directory القديم بدلًا من الفشل. #108879 (Groene AI).
  • تم إصلاح ClickHouse Keeper الذي كان يعيد القيمة dataLength = 0 بشكل غير صحيح في Stat ضمن استجابات Create2، وكذلك عميل ClickHouse ZooKeeper الذي لم يكن يفك تسلسل Stat في استجابات Create2. #108909 (unintended).
  • تم إصلاح clickhouse-local الذي كان يرفض قيمة خيار فارغة مكتوبة مباشرة بجوار الرمز = (مثل --format_csv_null_representation='')؛ وهو الآن يتصرف بالطريقة نفسها كما في --format_csv_null_representation "" و SET format_csv_null_representation = ''. #108910 (Vismay).
  • تم إصلاح LOGICAL_ERROR (Inconsistent AST formatting) كان يؤدي إلى إيقاف الخادم في إصدارات debug وsanitizer عند formatting لنوع البيانات Tuple الذي يجمع بين عناصر مسماة وغير مسماة (مثل Tuple(a UInt8, UInt16)). #108915 (Groene AI).
  • تم إصلاح خطأ segmentation fault عند دمج aggregate states الخاصة بـ uniqExact مع GROUPING SETS أو ROLLUP أو CUBE ومع max_threads > 1. #108928 (Raúl Marín).
  • تم إصلاح احتمال ظهور نتائج غير صحيحة أو reads خارج الحدود عندما يتم التراجع عن INSERT بعد حدوث خطأ في منتصف الدفعة (مثل جداول Buffer، أو asynchronous inserts، أو محركات Kafka/RabbitMQ/FileLog) أثناء تفعيل lazy replication للأعمدة (enable_lazy_columns_replication). #108935 (Groene AI).
  • أصبح join_any_take_last_row الآن مُطبَّقًا في جميع مسارات join المدعومة والمعتمدة على hash، بما في ذلك عمليات join التي تستخدم spilling to disk تلقائيًا. #108936 (János Benjamin Antal).
  • تم إصلاح bug في analyzer حيث كان FINAL على أحد جداول JOIN (مثل FROM t1 FINAL JOIN t2) يُطبَّق بشكل غير صحيح على الجداول الأخرى المنضمة أيضًا، مما كان قد يجعل مثل هذه الاستعلامات أبطأ. #108979 (Vladimir Cherkasov).
  • تم إصلاح LOGICAL_ERROR (“يتعذر العثور على العمود __grouping_set في ترويسة MergingAggregatedTransform مع grouping sets”، أو “لم يتم تعيين معلومات chunk لـ chunk في MergingAggregatedTransform”) الذي كان يمكن أن يحدث، عند تعطيل المحلل، مع UNION ALL/INTERSECT/EXCEPT إذا كان أحد الفروع يستخدم GROUP BY GROUPING SETS مع parallel replicas بينما يستخدم فرع آخر FINAL. #109003 (Groene AI).
  • تم إصلاح LOGICAL_ERROR في مخطِّط parallel replicas التلقائي، والذي كان يمكن أن يحدث عند تمكين automatic_parallel_replicas_mode مع ضبط parallel_replicas_min_number_of_rows_per_replica على قيمة أكبر من 0. #109011 (Groene AI).
  • تم إصلاح تخصيص مفرط للذاكرة أثناء استنتاج المخطط لتنسيق MsgPack: فلم يعد الإدخال التالف الذي يعلن رأس array/map/string/binary فيه عن عدد هائل من العناصر يتسبب في عملية تخصيص واحدة بحجم عدة غيغابايت، بل يُرفض الآن بوصفه إدخالًا غير صالح. ويعالج هذا حالة نفاد الذاكرة في إصدارات build النهائية (وحالة الإنهاء allocation-size-too-big عند استخدام أدوات sanitizer). #109019 (Groene AI).
  • تم إصلاح تجاهل use_client_time_zone لقيم string الحرفية من نوع DateTime/DateTime64 التي تُفسَّر على الخادم (INSERT غير المتزامن، والقيم الحرفية في SELECT). يمرِّر العميل الآن منطقته الزمنية المحلية باعتبارها session_timezone عند تمكين use_client_time_zone، بحيث تتطابق المعالجة على جانب الخادم مع مسار INSERT المتزامن. #109051 (Groene AI).
  • تم إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند تمكين query_plan_optimize_lazy_final مع مرشح WHERE مدفوع جزئيًا إلى PREWHERE (عبر optimize_move_to_prewhere_if_final). #109073 (Groene AI).
  • تم إصلاح خطأ عند استخدام النجمة المؤهلة مثل b.* في استعلام تكون فيه b اسمًا مستعارًا لجدول (أو subquery/CTE) ويتطابق اسمه مع اسم عمود غير مركب في جدول آخر. لم تعد مثل هذه الاستعلامات تفشل، وأصبحت تختار جميع أعمدة b بشكل صحيح. #109078 (Vladimir Cherkasov).
  • تم إصلاح الخطأ المنطقي Block structure mismatch in JoinStep (وهو إجهاض للخادم في إصدارات debug وsanitizer) عندما تُحوَّل subquery مترابطة إلى join وتحمل العلاقة المصدرية اسم العمود نفسه أكثر من مرة، مثل WITH t AS (SELECT number, * FROM numbers(3)) SELECT *, (SELECT t.number WHERE t.number >= 0) FROM t مع correlated_subqueries_default_join_kind = 'right'. #109114 (Groene AI).
  • تم إصلاح حالة تعليق كان فيها استعلام يقرأ عبر filesystem cache قد يواصل الانتظار لتنزيل جارٍ حتى بعد إلغائه باستخدام KILL QUERY، كما كان إسقاط refreshable materialized view أو تنفيذ SYSTEM STOP VIEW عليها، إذا كان تحديثها عالقًا في انتظار مماثل، يؤدي إلى الحظر. #109116 (Murphy).
  • تم إصلاح تجاهل الإعداد parallel_view_processing عند الإدراج في جدول يحتوي على materialized views — فمنذ الإصدار 25.10، كانت views تعمل دائمًا بالتوازي بغض النظر عن هذا الإعداد. #109170 (Antonio Andelic).
  • تم إصلاح حالة عدم اتساق في المحلل، إذ كانت قائمة الأعمدة في INSERT تقبل مطابِق أعمدة مؤهلًا مكتوبًا بصيغة t.* LIKE '<pattern>' / t.* ILIKE '<pattern>' لكنها ترفض صيغته القياسية t.COLUMNS('<regexp>')، مما كان يكسر إمكانية التحويل ذهابًا وإيابًا لتنسيق الاستعلام (ويتسبب أيضًا في إجهاض الخادم في إصدارات debug وsanitizer). #109176 (Groene AI).
  • تم إصلاح الزيادات غير الأحادية في ProfileEvents: إذ كان من الممكن زيادة العدّادين NetworkReceiveBytes وAIOWriteBytes بمقدار سالب (مما يؤدي إلى الالتفاف إلى قيمة ضخمة) عند انتهاء مهلة المقبس أو فشل AIO، كما كان MemoryOvercommitWaitTimeMicroseconds يُقاس باستخدام ساعة غير أحادية. #109180 (Azat Khuzhin).
  • تم إصلاح استنتاج المخطط لتنسيقات Arrow وArrowStream وAvro ولقارئات ORC وParquet القديمة، إذ كانت تُرجع Nullable(Tuple) لأعمدة البنية القابلة لأن تكون فارغة، رغم أن النوع Nullable(Tuple) غير مسموح به (عند تعطيل allow_experimental_nullable_tuple_type). كان DESCRIBE يُرجع نوعًا يرفضه CREATE TABLE، لذلك كان إنشاء جدول أو إدراج بيانات باستخدام المخطط المستنتج يفشل مع الخطأ Nullable Tuple type is not allowed. #109185 (Nihal Z. Miaji).
  • تم إصلاح نتيجة غير صحيحة لعبارتي EXISTS المترابطة والاستعلامات الفرعية ذات القيمة المفردة عندما يظهر الارتباط فقط في إسقاط الاستعلام الفرعي مع وجود عبارة WHERE غير مترابطة (إذ كان من الممكن أن يُقيَّم الاستعلام الفرعي إلى false / NULL لكل صف). يصلح #105760. #109186 (Dmitry Novik).
  • تم إصلاح CREATE USER ... HOST LIKE 'a', 'b'ALTER USER المكافئ له) الذي كان يحتفظ بصمت بالنمط الأول فقط. تُخزَّن الآن جميع أنماط HOST LIKE المحددة في قائمة السماح بالمضيفات الخاصة بالمستخدم. #109187 (Groene AI).
  • تم إصلاح حالة كان فيها فهرس نصي معرّف على mapValues(map) أو mapKeys(map) لا يُستخدم بصمت عند الاستعلام عن جدول عبر جدول بمحرك Distributed باستخدام analyzer. كان الفهرس يُستخدم للجدول المحلي وعبر دوال الجداول cluster/remote، لكن الاستعلام عبر جدول بمحرك Distributed كان يتجاوزه (ويفشل مع INDEX_NOT_USED تحت force_data_skipping_indices). #109188 (Groene AI).
  • تم إصلاح LOGICAL_ERROR زائف (There was an error on <host>: Cannot obtain error message (probably it's a bug)) كان يمكن أن يتسبب في إيقاف الخادم في بنى debug وsanitizer عند تشغيل استعلام DDL على قاعدة بيانات Replicated بعد أن تكون عقدة حالة finished الخاصة بكل مضيف في Keeper قد نُظِّفت بالفعل. #109192 (Groene AI).
  • تم إصلاح نسب SAMPLE ذات الأسّ الذي يتجاوز مقدارُه نطاق Int32 (مثل SAMPLE 1e-3000000000) والتي كانت تُعامَل بصمت على أنها SAMPLE 1. #109197 (Raúl Marín).
  • تم إصلاح التحقق من صلاحية الوصول لـ SYSTEM PREWARM PRIMARY INDEX CACHE ... ON CLUSTER، والذي كان يتطلب خطأً صلاحية SYSTEM PREWARM MARK CACHE بدلًا من SYSTEM PREWARM PRIMARY INDEX CACHE. #109198 (Raúl Marín).
  • تم إصلاح فشل استعلامات ALTER لجداول MergeTree المُنشأة بإعداد disk مخصص (SETTINGS disk = disk(...)). يصلح #63019. #109199 (Mikhail Artemenko).
  • تم إصلاح تعطل في الخادم عند الجمع بين حالات الدوال التجميعية cramersV وcramersVBiasCorrected وcontingency أو theilsU من سياق نافذة (OVER ()) ومن تجميع عادي عبر set operations متسلسلة (EXCEPT, INTERSECT) أو UNION ALL متداخلة، ثم قراءتها، على سبيل المثال عبر المُركِّب -Merge. #109200 (Groene AI).
  • إصلاح نتيجة غير صحيحة لـ ANY JOIN مع شرط ON ثابت (مثل t1 ANY INNER JOIN t2 ON 1): إذ كان الاستعلام يعيد حاصل الضرب الديكارتي الكامل بدلًا من ناتج ANY JOIN. #109207 (Vladimir Cherkasov).
  • تم إصلاح تعطل في الخادم عند asynchronous insert مع deduplication عندما يتسبب optimize_on_insert في أن تصبح inserted block فارغة (على سبيل المثال، الصفوف التي يكون مجموعها صفرًا في SummingMergeTree). #109229 (Den Kalantaevskii).
  • إصلاح SYSTEM DROP REPLICA وSYSTEM DROP DATABASE REPLICA ... FROM ZKPATH بحيث يرفضان مسارات ZooKeeper الفارغة أو التي تشير إلى الجذر فقط وقت التحليل باستخدام BAD_ARGUMENTS، ويوجِّهان مسارات Keeper المساعدة إلى Keeper المسمى، ويوحِّدان مسارات Keeper بحيث لا تتمكن فحوصات الحماية الذاتية المحلية من استهداف replica المقصودة بالخطأ أو تجاوزها. #109230 (Groene AI).
  • إصلاح أولوية إعدادات S3 بحيث تكون الأولوية لكتلة نقطة النهاية <s3> ذات نطاق URL على إعدادات <s3> الافتراضية في المستوى الأعلى. #109251 (Bharat Nallan).
  • تم إصلاح خلل كانت فيه قيم DEFAULT للأعمدة لا تُطبَّق عند INSERT INTO TABLE FUNCTION (مثل remote أو file) مع بيانات VALUES المضمنة عندما يحلل الخادم هذه البيانات بنفسه (send_table_structure_on_insert_with_inline_data = 0). وكان إدراج NULL صراحةً في عمود غير Nullable وله DEFAULT يتحول إلى 0 بدلًا من القيمة الافتراضية المعلنة. وأصبح الآن يتصرف مثل INSERT عادي إلى جدول وعبر HTTP protocol. #109258 (Groene AI).
  • إصلاح فشل CREATE TABLE ... AS SELECT من s3Cluster (وسائر cluster table functions مثل fileCluster/urlCluster) مع NOT_FOUND_COLUMN_IN_BLOCK داخل قاعدة بيانات Replicated. #109266 (Groene AI).
  • تم إصلاح SHOW TABLES وSELECT ... FROM system.tables اللذين كانا يعيدان نتائج مختلفة لقواعد بيانات Data Lake Catalog: إذ أصبحت الجداول التي لا يستطيع ClickHouse قراءتها مخفيةً الآن بشكل متسق في كلتيهما. #109273 (Smita Kulkarni).
  • تم إصلاح خلل كان يؤدي فيه دمج جدول MergeTree يحتوي على projections، مع تفعيل الإعداد enable_block_number_column أو enable_block_offset_column، إلى إنتاج projection parts تحتوي على العمود الزائد _block_number/_block_offset. وبعد ذلك لم يعد projection part المدمج يطابق تعريف projection ولا projection parts الناتجة عن الإدراج، لذلك كان CHECK TABLE وOPTIMIZE ... DRY RUN يبلغان عنه على أنه تالف (CORRUPTED_DATA). #109284 (Groene AI).
  • السماح بقراءة array من Avro مكوَّنة من سجلات ثنائية الحقول {key, value} إلى عمود Map في ClickHouse. وهذا هو الترميز الذي ينتجه Iceberg وSpark لـ MAP<K, V> ذي مفتاح غير نصي (إذ إن خرائط Avro الأصلية لا تدعم إلا المفاتيح النصية). في السابق، كان يمكن قراءة مثل هذا الملف على أنه Array(Tuple(key, value))، ولكن ليس على أنه Map(K, V)، إذ كان يفشل مع Type Map(...) is not compatible with Avro array. #109289 (Groene AI).
  • تم إصلاح تعطل في الخادم عند CREATE HYPOTHETICAL INDEX ... TYPE set (وكذلك ngrambf_v1/tokenbf_v1) عند إغفال وسيطة الفهرس المطلوبة. وتُرفَض هذه العبارات الآن برسالة خطأ واضحة. #109294 (Groene AI).
  • تم إصلاح LOGICAL_ERROR (Current component is empty) الذي كان يمكن أن تسببه عمليات mutation مثل KILL MUTATION على جدول MergeTree يخزّن بياناته الوصفية في Keeper، عند تمكين إعداد الخادم enforce_keeper_component_tracking. #109297 (Groene AI).
  • تم إصلاح قراءة timestamps من ORC التي تتجاوز تقريبًا سنة 2262 إلى عمود DateTime64 ذي scale أقل من 9. إذ كان قارئ ORC الأصلي يحوّل كل timestamp سابقًا عبر قيمة وسيطة ثابتة من نوع DateTime64(9)، مما يؤدي إلى overflow في Int64 عند مستوى النانوثانية ويرفض هذه القيم مع VALUE_IS_OUT_OF_RANGE_OF_DATA_TYPE، حتى عندما يكون scale المطلوب لـ DateTime64 (مثل DateTime64(6)، كما ينتجه Iceberg) قادرًا على تمثيل القيمة. وتُقرأ timestamps الآن مباشرةً وفق scale المطلوب، كما يُراعى date_time_overflow_behavior حتى عندما يتعذر على scale الهدف نفسه استيعاب القيمة. #109302 (Groene AI).
  • أصبح clickhouse-local، عند تشغيله كخادم (بعد SYSTEM START LISTEN HTTP)، يقدّم HTTP connections باستخدام output format الافتراضي TabSeparated، بما يتوافق مع clickhouse-server، بدلًا من الافتراضي التفاعلي PrettyCompact. ويعالج هذا مشكلة الاتصال بـ clickhouse-local عبر HTTP باستخدام برامج تشغيل مثل clickhouse-connect. وتظل جلسة terminal التفاعلية تعرض النتائج بصيغة PrettyCompact. #109362 (Alexey Milovidov).
  • تم إصلاح إخفاق عابر من النوع Code: 499 ... InvalidPart (S3_ERROR) في multipart uploads على S3. فقد قد يُبلغ MinIO، لفترة وجيزة، عن part تم رفعه للتو على أنه مفقود عند CompleteMultipartUpload؛ ويُعاد الآن هذا الخطأ كما هو الحال مع NoSuchKey الذي كانت تتم معالجته مسبقًا، وذلك ضمن الحدود التي يفرضها s3_max_unexpected_write_error_retries. #109364 (Groene AI).
  • تم إصلاح الخطأ UNKNOWN_IDENTIFIER في ALTER TABLE ... DROP COLUMN عندما يحتوي عمود آخر على expression من نوع DEFAULT أو MATERIALIZED يعرّف alias مضمنًا ويشير إليه. #109374 (Alexey Milovidov).
  • تم إصلاح data race (وما قد ينتج عنها من تعطل نادر) في الدمج المتوازي لحالات aggregate للدالة uniqExact مع sets ثنائية المستوى، وهو ما كان يمكن أن يحدث مع GROUPING SETS وROLLUP وCUBE. #109389 (Groene AI).
  • تم إصلاح خطأ (NOT_FOUND_COLUMN_IN_BLOCK، أو std::bad_function_call في الإصدارات الأقدم) عند تشغيل CREATE TABLE ... ON CLUSTER ... AS SELECT مع قراءة جدول Distributed على cluster يحتوي على shardين أو أكثر. #109407 (Alexey Milovidov).
  • تم إصلاح عمليات الدمج للجداول التي تحتوي على TTL ... GROUP BY (rollup): إذ كان يمكن إعادة جدولة parts التي جرى تجميعها بالكامل مسبقًا للدمج مرة تلو الأخرى إلى ما لا نهاية، كما كانت الجداول التي تحتوي على أعمدة MATERIALIZED أو persistent virtual columns مفعّلة تُعالَج بشكل غير صحيح — وتُجمَّع هذه الأعمدة الآن باستخدام any. يُغلق #105647. #109410 (Mikhail Artemenko). #109532 (Mikhail Artemenko).
  • تم إصلاح IN عند استخدام array column مجردة في argument الأيمن، إذ كانت تعيد بصمت نتيجة خاطئة (دائمًا false) أو تطرح استثناءً، بحيث أصبح x IN arr يتصرف مثل has(arr, x). #109416 (Alexey Milovidov).
  • تم إصلاح أخطاء UNKNOWN_IDENTIFIER في عمليات ALTER TABLE (RENAME/ADD/MODIFY COLUMN، وMATERIALIZE INDEX على table تحتوي على parts أُدرجت حديثًا) في جداول MergeTree التي تتضمن min-max index ضمنيًا على persistent virtual columns ‏_block_number/_block_offset (مفعّل عبر add_minmax_index_for_block_number_column/add_minmax_index_for_block_offset_column). #109428 (Groene AI). #110236 (Groene AI).
  • تم إصلاح LOGICAL_ERROR في arrayFold على argument غير ثابت من النوع Array(LowCardinality(T)) (على سبيل المثال arrayFold((acc, x) -> acc + x, materialize([1, 2, 3]::Array(LowCardinality(Int64))), toInt64(0)))؛ إذ كان يفشل مع Arguments of 'plus' have incorrect data types (وكان يتسبب في إيقاف server في بنى debug وsanitizer). #109462 (Groene AI).
  • تم إصلاح CHECK TABLE على table من نوع ReplicatedMergeTree كانت تُبلّغ عن part سليمة على أنها معطوبة عند حدوث خطأ ZooKeeper عابر وقابل لإعادة المحاولة (مثل فقدان connection) أثناء الفحص؛ وتظهر هذه الأخطاء الآن بدلًا من ذلك كخطأ query قابل لإعادة المحاولة. #109465 (Alexey Milovidov).
  • تم إصلاح أعطال segfault في groupArrayLastMerge وaggregate function ‏largestTriangleThreeBuckets: إذ أصبح deserialization لحالات aggregate function يُتحقق منه الآن، بحيث لا تؤدي الحالة المعطوبة إلى وصول إلى الذاكرة خارج الحدود. #109485 (Miсhael Stetsyuk). #109492 (Miсhael Stetsyuk).
  • تم إصلاح عدم فرض الحدّ العام max_rows_in_join / max_bytes_in_join على join algorithm ‏parallel_hash، إذ كان يمكن لـ query مع join_overflow_mode = 'throw' أن تنجح بصمت بدلًا من رفع SET_SIZE_LIMIT_EXCEEDED. #109488 (Hechem Selmi).
  • تم إصلاح قراءة Paimon tables المقسّمة حسب column من نوع BIGINT لا تتسع قيمته داخل Int32. وكانت قيم partition هذه تُقتطع (فعلى سبيل المثال كانت 9223372036854775807 تصبح -1)، مما كان ينتج عنه مسار partition خاطئ ويفشل مع خطأ filesystem. #109510 (Groene AI).
  • تم إصلاح crash عند قراءة Iceberg tables التي تحتوي على equality delete files. فإذا كانت column قابلة لأن تكون nullable في equality delete file لكنها غير nullable في table schema (أو العكس)، كانت values المقروءة من delete file تُدرج في column من نوع مختلف عبر cast غير متحقق منه (التباس في column type)، مما كان يفسد column ويتسبب في تعطل server. #109551 (Miсhael Stetsyuk).
  • تم إصلاح عدم سريان connect_timeout ومهلتَي القراءة والكتابة الخاصة بـ MySQL: إذ كان يمكن لمحاولة connection إلى MySQL server غير مستجيب أن تظل معلّقة لأكثر من دقيقتين حتى مع connect_timeout = 1، لأن الإشارات الدورية الخاصة بـ sampling query profiler كانت تواصل إعادة ضبط مهلة poll الداخلية في MySQL client. #109592 (Shaohua Wang).
  • تم إصلاح LOGICAL_ERROR (creation_csn is not set while removal_csn is set to 1) الذي كان يمكن أن يظهر عند تشغيل TRUNCATE غير معاملاتي بالتزامن مع معاملة غير مُعتمدة كانت قد أدخلت بيانات إلى الجدول نفسه. ولم يعد TRUNCATE من هذا النوع يزيل الأجزاء التي أنشأتها المعاملات التي لم تُعتمد بعد. #109598 (Tuan Pham Anh).
  • إصلاح أخطاء TYPE_MISMATCH عند قراءة أعمدة struct في Parquet عندما تختلف قابلية NULL الفعلية عن نوع ClickHouse المطلوب: إذ يمكن الآن قراءة مجموعة Parquet غير القابلة لـ NULL على أنها Nullable(Tuple(...))، كما يمكن لقارئ Parquet الأصلي قراءة struct قابل فعليًا لـ NULL (أي مجموعة OPTIONAL في Parquet) على أنه Nullable(Tuple(...)). #109615 (Groene AI). #109898 (Groene AI).
  • تم إصلاح فقدان صامت للبيانات عند إلحاق عبارة INSERT ... VALUES في دفق متعدد الاستعلامات بتعليق SQL ختامي (مثل VALUES (1) -- comment) ضمن مسار تحليل الإدراج المضمّن على جانب الخادم (send_table_structure_on_insert_with_inline_data = 0). إذ كان التعليق الختامي يُفسَّر على أنه بيانات صف بعد علامة الإنهاء ;، ما كان يؤدي إلى تخطي الاستعلامات التالية في الدفق بصمت. #109643 (Groene AI).
  • إصلاح خطأ segfault عند وصول استعلام خلال نافذة زمنية ضيقة أثناء إيقاف تشغيل الخادم بعد حدوث خطأ عند بدء التشغيل. #109675 (Miсhael Stetsyuk).
  • تم إصلاح فهارس التخطي القديمة (text وbloom_filter وغيرها) وprojections بعد materializing lightweight updates باستخدام ALTER TABLE ... APPLY PATCHES. سابقًا، كانت ملفات الفهرس وprojection التي تعتمد على عمود تم تحديثه عبر patch تبقى دون تغيير، لذلك كان يمكن أن تُرجع الاستعلامات التي تستخدمها نتائج غير صحيحة (مثل أن يفوّت hasToken صفًا مُحدَّثًا، أو أن تُرجع projection تجميعات قديمة بعد إزالة patch part المستهلَك). #109709 (Groene AI).
  • إصلاح مشكلة قيام system.tables بتخطي قواعد البيانات بصمت للمستخدمين الذين لديهم أذونات على مستوى كل قاعدة بيانات، عندما يقرأ الاستعلام العمودين name/database فقط. قُدِّمت في 26.2. #109723 (Samay Sharma).
  • إصلاح LOGICAL_ERROR عند كتابة عمود LowCardinality(Time) إلى تنسيق Arrow مع output_format_arrow_low_cardinality_as_dictionary = 1. #109730 (Groene AI).
  • إصلاح مشكلة قيام ObjectStorageQueue/AzureQueue (ودالة الجدول azureBlobStorage) بتخطي الكائنات بصمت عندما تُرجع object storage صفحة سرد فارغة مع token متابعة. يحدث هذا في Azure Blob Storage (على سبيل المثال عند عبور السرد حدًا داخليًا لـ partition)، وكان مكرّر السرد غير المتزامن يتعامل مع الصفحة الفارغة على أنها نهاية السرد ويتجاهل الـ token. أما الآن فأصبح يتبع token المتابعة. #109761 (Gal Ben Moshe).
  • تم إصلاح مشكلة تسبب partition pruning في عدم إرجاع أي صفوف لِـ Iceberg tables المقسّمة بحسب عمود timestamp (DateTime64). #109764 (Den Kalantaevskii).
  • إصلاح استثناء ILLEGAL_COLUMN في الدالة conv لوسائط FixedString؛ إذ تُحوَّل الآن بشكل صحيح إلى String. يغلق #109670. #109771 (hp).
  • أصبحت الدالة getClientHTTPHeader تتعامل الآن مع أسماء الترويسات على أنها غير حساسة لحالة الأحرف، وفقًا لـ RFC 9110؛ وعلى وجه الخصوص، باتت ترويسة authorization تُستبعَد الآن بغض النظر عن حالة الأحرف. إغلاق #103957. #109791 (Mikhail f. Shiryaev).
  • إصلاح مشكلة في max_execution_time (مع timeout_overflow_mode = 'throw') حيث كان أحيانًا لا يُلغي الاستعلام مطلقًا: فعندما يكون مراقب المهلة الداخلي بانتظار استعلام له موعد نهائي لاحق، قد يُغفَل تمامًا استعلامٌ بموعد نهائي أبكر يُسجَّل بعد ذلك، مما يسمح له بالاستمرار بعد حدّه الزمني بمدة طويلة. #109792 (Shaohua Wang).
  • تم إصلاح اسم الملف لملفات البيانات الوصفية لـ Iceberg المضغوطة بصيغة gzip. كان ClickHouse يكتبها بصيغة v{N}.gzip.metadata.json (رمز HTTP Content-Encoding)، بينما تتوقع مواصفة Iceberg الامتداد gz أي v{N}.gz.metadata.json. ونتيجةً لذلك، لم يتمكن Spark وغيره من القرّاء المعتمدين على كتالوج Hadoop من العثور على البيانات الوصفية التي كتبها ClickHouse. يكتب ClickHouse الآن v{N}.gz.metadata.json، وما يزال يقرأ الاسم القديم gzip حفاظًا على التوافق مع الإصدارات السابقة. #109812 (Groene AI).
  • تم إصلاح الخطأ NOT_IMPLEMENTED ‏(“Method getDataAt is not supported for Nullable(String)”) الذي كان يمكن أن ينشأ عند تنفيذ join مع enable_join_runtime_filters = 1 (مفعّل افتراضيًا منذ 26.2) عندما يكون مفتاح join في جهة البناء هو LowCardinality(Nullable(...)) مع قيم NULL، ويعود runtime filter إلى bloom filter الخاص به. #109824 (Groene AI).
  • لم تعد محركات قواعد البيانات الخارجية (مثل PostgreSQL) تدفع مقارنات النطاق (>=, >, <=, <) إلى الأسفل على أعمدة UUID. يرتّب ClickHouse وقواعد البيانات الخارجية معرّفات UUID بطريقة مختلفة، لذا كان دفع هذه الشروط إلى الأسفل يؤدي بصمت إلى إسقاط صفوف من النتيجة؛ وتُقيَّم هذه الشروط الآن داخل ClickHouse بدلًا من ذلك. #109833 (Vismay).
  • تم إصلاح انهيار في الخادم عند تمرير تعبير لامبدا في موضع تتوقع فيه دالة عالية الرتبة قيمةً فعلية (مثل المُراكِم في arrayFold، كما في arrayFold(lambda, arr, another_lambda)). وتُرفَض مثل هذه الاستعلامات الآن بخطأ ILLEGAL_TYPE_OF_ARGUMENT بدلًا من التسبب في الانهيار عندما يكون enable_analyzer = 0. #109840 (Groene AI).
  • تم إصلاح تعريف icebergLocal table function وIcebergLocal engine لنوع object storage على أنه azure بدلًا من local، وهو ما كان يؤدي إلى فشلهما في التحقق من نوع القرص (Disk type doesn't match) عند استخدامهما مع قرص محلي عبر SETTINGS disk = '...'. #109872 (Pedro Ferreira).
  • إصلاح قراءة جداول Iceberg المُقسَّمة بحسب عمود المصدر نفسه أكثر من مرة (على سبيل المثال PARTITIONED BY (hours(ts), ts)). وكانت مثل هذه الجداول تفشل سابقًا برسالة Cannot add column ...: column with this name already exists (ILLEGAL_COLUMN). #109895 (Groene AI).
  • إصلاح نتائج استعلام غير صحيحة ناتجة عن قيام فهرس المفتاح الأساسي باستبعاد الحبيبات على نحوٍ خاطئ في الجداول التي تحتوي على عمود مفتاح بترتيب معكوس (DESC) عندما لا تحتوي الأجزاء على علامة نهائية (granularity غير متكيفة، index_granularity_bytes = 0). #109901 (Nihal Z. Miaji).
  • تم إصلاح generateRandomStructure الذي كان يُنتج أحيانًا سلسلة بنية غير صالحة تتضمن نوعَي بيانات ملتصقين (مثل Decimal32(7)IPv4) عندما يتجاوز تداخل الأنواع حد العمق الداخلي، مما يجعل النتيجة متعذّرة التحليل. #109928 (Groene AI).
  • تم إصلاح الخطأ NOT_IMPLEMENTED (Method getDataAt is not supported for Nullable(String) in case if value is NULL) عند إنشاء فهرس text على Array(LowCardinality(Nullable(String))) (بما في ذلك حقول Nested المخزنة بهذه الطريقة) إذا كانت المصفوفة المفهرسة تحتوي على عنصر NULL. أصبحت عناصر NULL في المصفوفة الآن تُتخطى أثناء إنشاء الفهرس، بما يتوافق مع Array(Nullable(String)). #110055 (Groene AI).
  • تم إصلاح النتائج الخاطئة عند إنشاء skip index من نوع minmax على عمود LowCardinality(Nullable(...)): إذ كانت predicates من نوع WHERE/PREWHERE/HAVING ... IS NULL التي تُدفَع إلى طبقة التخزين تستبعد سابقًا كل granule وتُرجع 0 صفوف رغم أن العمود كان يحتوي على قيم NULL. #110061 (Groene AI).
  • تم إصلاح distinct_overflow_mode = 'break': أصبح DISTINCT الآن يُرجع النتيجة الجزئية المتراكمة حتى بلوغ الحد ويتوقف عن قراءة المصدر، كما هو موثّق. سابقًا، كانت الـ chunk التي تتجاوز max_rows_in_distinct / max_bytes_in_distinct تُهمَل (مما يؤدي إلى نتائج مقتطعة أو فارغة)، بينما كان الاستعلام يواصل القراءة والإدراج في مجموعة التجزئة حتى نهاية الإدخال، وقد ينتهي ذلك بـ MEMORY_LIMIT_EXCEEDED. #110075 (Sergey Kuznetsov).
  • تم إصلاح خطأ منطقي ChunkInfoRowNumbers does not exist عند تنفيذ OPTIMIZE TABLE على Iceberg table يحتوي على ملف بيانات بتنسيق غير Parquet (مثل ORC) أحدث من جميع position delete files. #110107 (Alexey Milovidov).
  • تم إصلاح max_bytes_in_distinct و max_bytes_in_set: إذ تُخزَّن مفاتيح السلاسل النصية في arena لم تكن تُحتسب ضمن فحوصات الحدود، لذلك كان DISTINCT / IN على مفاتيح السلاسل النصية قد يحتفظ بذاكرة تتجاوز حد البايتات بمقدار payload المفتاح بالكامل (من دون حد لطول المفتاح). أصبحت الحدود الآن تحتسب الـ arena، بما يطابق التوثيق؛ وقد تتجاوز الاستعلامات ذات مفاتيح السلاسل النصية القريبة من حد البايتات هذا الحد في وقت أبكر الآن (على نحو صحيح). #110120 (Sergey Kuznetsov).
  • تم إصلاح خطأ LOGICAL_ERROR (Bad cast from type ColumnLowCardinality to ColumnString) عندما يُغلّف identity (أو نتيجة استعلام فرعي قيَمي) قيمةً تحتوي على LowCardinality متداخلة ويستخدم الاستعلام WITH TOTALS/WITH ROLLUP. #110138 (Groene AI).
  • تم إصلاح قراءة ملفات Npy ذات الأبعاد الداخلية صفرية الحجم: أصبح عدد الصفوف المادية ونتائج count المحسّنة وغير المحسّنة متطابقًا الآن. #110146 (Yanjun Qiu).
  • تم إصلاح تضخّم بزمن تربيعي (وعدم الاستجابة لـ max_execution_time) في aggregation in order عند التجميع بحسب عدة مفاتيح يكون sort order فيها مجرد بادئة لمفتاح التجميع. #110159 (Alexey Milovidov).
  • تم إصلاح خطأ منطقي (Unexpected number of columns in result sample block) عندما يُحسَّن عامل تصفية يحتوي على استعلام فرعي مترابط (مثل exists((SELECT ...))) باستخدام convert_query_to_cnf أو optimize_and_compare_chain. #110187 (Alexey Milovidov).
  • تم إصلاح استثناء (UNION mode UNION_DEFAULT must be normalized) كان يحدث عندما تستخدم عملية mutation من نوع DELETE أو ALTER UPDATE عمليةً على المجموعات (UNION/UNION ALL/UNION DISTINCT/EXCEPT/INTERSECT) داخل استعلام فرعي في شرط WHERE أو في إسناد UPDATE. #110196 (Alexey Milovidov).
  • تم إصلاح الخطأ المنطقي ReadBuffer is canceled. Can't read from it. (توقف الخادم في بُنى debug/sanitizer) الذي كان يمكن أن يحدث أثناء قراءة أرشيف zip (مثلًا أثناء RESTORE من نسخة احتياطية بصيغة zip) بعد فشل قراءة سابقة من الأرشيف نفسه في منتصف التدفق. #110197 (Groene AI).
  • تم إصلاح بطء إيقاف تشغيل الخادم وعدم استجابة KILL MUTATION عندما كانت عملية mutation تحتوي على x IN (subquery) وتبني مجموعة الاستعلام الفرعي أثناء تحليل المفتاح الأساسي؛ ويُلغى الآن بناء المجموعة فورًا. #110198 (Alexey Milovidov).
  • يرفض Keeper الآن تعيين إعدادات coordination ‏max_requests_batch_size وmax_requests_append_size إلى 0 بدلًا من أن يعلق في حلقة append-entries لا نهائية في إعداد متعدد العُقد. #110200 (Alexey Milovidov).
  • تم إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند استخدام GROUP BY ALL على تعبير tuple مع ORDER BY. #110206 (Alexey Milovidov).
  • تم إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند تنفيذ INSERT في جدول يحتوي على قيد CHECK يشير إلى subcolumn (مثل x.null لعمود Nullable أو arr.size0 من Array). #110208 (Alexey Milovidov).
  • تم إصلاح قراءة Iceberg tables التي يشير فيها sort order الافتراضي إلى عمود يحتاج إلى وضعه بين علامتَي اقتباس (مثل @timestamp). وكانت هذه الجداول غير قابلة للقراءة لأن ORDER BY المُنشأ للتخزين كان يُبنى من اسم العمود الخام ويفشل تحليله مع SYNTAX_ERROR. #110233 (Groene AI).
  • تم إصلاح system.tables لقاعدة بيانات DataLakeCatalog ‏(Iceberg/Glue)، حيث كان يؤدي إلى إيقاف الاستعلام بالكامل أو إسقاط الجداول بصمت عندما يتعذر حل metadata لجدول واحد. ويظل هذا الجدول الآن مُدرجًا بالاسم مع قيم default/NULL للأعمدة التي تحتاج إلى كائن التخزين المفتوح (engine وtotal_rows وما إلى ذلك)، بغض النظر عن database_datalake_require_metadata_access. ولا يزال الوصول المباشر إلى الجدول المعطوب يُبلغ عن الخطأ. #110242 (Groene AI).
  • تم إصلاح احتمال حدوث تعطل (heap-buffer-overflow) عندما كان عمود حالة دالة aggregate من عائلة quantileTDigest يُستخدم كمفتاح GROUP BY ويُسلسَل بالتوازي بواسطة عدة threads. #110263 (Groene AI).
  • تم إصلاح فشل INSERT في جدول DataLakeCatalog على Microsoft Fabric / OneLake مع IncorrectEndpointError ‏(HTTP 400)، وذلك بتوجيه عمليات كتابة ADLS Gen2 ‏(DFS) إلى المضيف ذي نقطة النهاية .dfs بدلًا من المضيف .blob. ملاحظة: عند استخدام remote_url_allow_hosts، يجب إدراج مضيفَي Fabric ‏.blob (للقراءة) و.dfs (للكتابة) في قائمة السماح لتنفيذ INSERT. #110290 (Mohammad Lareb Zafar).
  • تم إصلاح إيقاف للخادم عند تحليل بعض استعلامات PRQL (SET dialect = 'prql'). كان حدوث panic داخل المصرّف prqlc يؤدي إلى إنهاء العملية بدلًا من الإبلاغ عنها كخطأ في الاستعلام. #110316 (Groene AI).
  • تم إصلاح نتائج استعلام خاطئة كانت تمر بصمت عندما كان projection part، المكتوب قبل تغيّر مجموعة أعمدة الـ projection (على سبيل المثال، بعد الترقية عبر إصدارات تُجسِّد مصدر عمود ALIAS بشكل مختلف، أو بعد أن يعيد ALTER TABLE ... MODIFY COLUMN توجيه عمود ALIAS يستخدمه projection)، يُقرأ عبر الـ projection أو يُدمج: إذ كان العمود المفقود يُملأ بقيم افتراضية بدلًا من البيانات الفعلية. تُقرأ هذه الأجزاء الآن من base table، وتعيد عمليات الدمج بناء الـ projection انطلاقًا من البيانات الأساسية. #110328 (Shaohua Wang).
  • تم إصلاح عدم التزام ORDER BY ... WITH FILL بـ max_execution_time وبطئه في الإلغاء عند توليد نطاق fill كبير (خصوصًا مع INTERPOLATE). #110332 (Alexey Milovidov).
  • تم إصلاح logical error (إيقاف للخادم في إصدارات debug/sanitizer) عند تنفيذ ALTER متعدد الأوامر مثل UPDATE ..., DELETE ... على Iceberg table. أصبحت مثل هذه mutations تُرفض الآن مع خطأ واضح NOT_IMPLEMENTED. #110347 (Groene AI).
  • تم إصلاح bug في parser حيث كان COMMENT يُفسَّر خطأً على أنه alias ضمني عندما ينتهي استعلام SELECT مباشرة بعد معرّف table مجرد (مثل ... FROM t COMMENT 'x')، مما كان يؤدي إلى خطأ صياغة مضلل بدلًا من تطبيق التعليق على الـ view/table. #110372 (Aditya Kumar).
  • تم إصلاح تعطل في الخادم (overflow أصلي في المكدس) عند نسخ أو إتلاف قيمة حرفية متداخلة بعمق من النوع Array/Tuple/Map/Object، مثل استعلام يحتوي على قيمة حرفية شديدة التداخل عند رفع max_parser_depth. #110393 (Raúl Marín).
  • تم إصلاح حالتين كان يمكن فيهما لـ vector search أن يعيد عددًا من rows أقل من المتوقع: إذ كانت قيم vector_search_index_fetch_multiplier الأقل من 1.0 قد تختزل عدد fetch المحسوب إلى الصفر وتنتج نتيجة فارغة (وأصبحت هذه القيم الآن مرفوضة)، كما يُتخطى الآن optimization الخاص بـ vector search لاستعلامات LIMIT ... WITH TIES، لأن هذا optimization يقيّد البحث بعدد N من المرشحين بالضبط ويحذف rows المتعادلة مع الصف رقم N. #110452 (Tamish Mhatre). #110453 (Tamish Mhatre).
  • تم إصلاح logical error ‏Expected CommonSubplanReferenceStep to reference CommonSubplanStep، والخطأ ‏Subplan cannot be used to build pipeline، وlogical error ‏Trying to extract chunk from ChunkBuffer before all inputs are finished في IN (subquery) عندما يحتوي الـ subquery على correlated subquery ويُبنى الـ set أثناء index analysis. #110491 (Alexey Milovidov).
  • تم إصلاح substitution الخاصة بـ query parameters داخل تعريفات عبارة WINDOW مسمّاة. سابقًا، كانت parameters هناك تُترك دون substitution بصمت، وكان parameter Identifier غير المعيَّن قد يؤدي إلى الاستثناء Logical error: '!part.empty()' أثناء EXPLAIN SYNTAX. #110506 (Alexey Milovidov).
  • تم إصلاح فشل بدء تشغيل الخادم لجداول MergeTree على object storage disks عندما يكون الملف المتبقي txn_version.txt.tmp قد أفسد metadata على مستوى disk. #110519 (Alexey Milovidov).
  • إصلاح خطأ منطقي في filesystem cache (Expected file ... not to exist) كان يمكن أن يحدث عند فشل تنزيل cache في الخلفية بسبب خطأ غير متعلق بـ filesystem (على سبيل المثال أثناء تشغيل OPTIMIZE على Iceberg table)، ما كان يترك ملف cache يتيمًا وفارغًا. #110549 (Groene AI).
  • تم إصلاح قراءة stream تالف بتنسيق Native عندما يكون عدد الأنواع في Dynamic أو عدد المسارات في JSON/Object قريبًا من SIZE_MAX: إذ أصبح هذا الإدخال المشوّه يُرفض الآن برسالة خطأ واضحة INCORRECT_DATA بدلًا من std::length_error غير الملتقط. #110590 (Alexey Milovidov).
  • تم إصلاح تعطل في الخادم ضمن database engine MaterializedPostgreSQL كان يمكن أن يحدث عندما يكون table في حالة detached (أو يتغير هيكله) بينما لا يزال مُدرجًا في قائمة انتظار المزامنة. #110596 (Alexey Milovidov).
  • تم إصلاح السلوك غير الصحيح لـ SET param_<name> في العميل (وأعلام --param_<name>) عندما يطابق اسم parameter اسم setting مضمّنًا مثل limit أو offset أو max_threads أو log_comment. وبحسب setting المتصادم، كان query يفشل مع CANNOT_PARSE_QUOTED_STRING، أو كانت value تُطبَّع بصمت (مثلًا max_threads=0 تصبح auto(N))، أو كان اسم alias الخاص بـ setting يُفقد. كما كان هذا النوع من parameter يُعطّل جميع أوامر SET param_* اللاحقة في الجلسة نفسها. #110597 (Raúl Marín).
  • إصلاح قراءة subcolumns التابعة لـ column يحتوي على expression من نوع DEFAULT ولم يتم materialize له في part (مثلًا بعد ALTER TABLE ADD COLUMN أو أثناء ALTER TABLE MATERIALIZE COLUMN): إذ كان subcolumn يُملأ بالقيم default الخاصة بالنوع بدلًا من ناتج expression DEFAULT بعد تقييمه، كما كانت دوال Distance functions للمتجهات المنقولة (cosineDistanceTransposed وغيرها) على أعمدة QBit هذه تفشل بخطأ SIZES_OF_ARRAYS_DONT_MATCH. يغلق هذا #110634. #110636 (Alexey Milovidov).
  • تم إصلاح LOGICAL_ERROR بعنوان Invalid partition key size: 0 كان يمكن أن يتسبب في فشل INSERT إلى table من نوع MergeTree ومقسّم إلى partition مع تفعيل non_replicated_deduplication_window، وذلك عندما تكون دفعة async insert قد خضعت لإزالة التكرار جزئيًا فقط (كانت بعض قيم insert_deduplication_token مكررة وبعضها جديدًا). #110651 (Groene AI).
  • أصبحت عملية flush الخاصة بـ asynchronous insert في الخلفية تتوقف سريعًا عند إنهائها باستخدام KILL QUERY؛ إذ كانت عملية flush لحمولة كبيرة مخزنة مؤقتًا تواصل التحليل حتى النهاية وتتجاهل الإلغاء سابقًا. #110652 (Shaohua Wang).
  • تم إصلاح نتائج خاطئة من GROUP BY مع optimize_aggregation_in_order وDISTINCT مع optimize_distinct_in_order عند وضعهما فوق JOIN من نوع partial_merge. فقد كان تحسين read-in-order يُمرَّر عبر partial-merge join، الذي يعيد ترتيب الإدخال الأيسر بحسب join key، وبالتالي لا يحافظ على الترتيب الأصلي لـ stream الأيسر، ما أدى إلى تجميع الصفوف بشكل غير صحيح. #110671 (Groene AI).
  • تم إصلاح overflow لعدد صحيح موقّع في toStartOfInterval عند استخدام عدد interval بالغ التطرف من MONTH أو WEEK أو DAY على قيم Date/Date32/DateTime64. #110688 (Groene AI).
  • إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK في الاستعلامات التي تحتوي على استعلام فرعي داخل FROM عند تشغيل النسخ المتماثلة المتوازية في وضع custom_key_sampling / custom_key_range. وكانت هذه الاستعلامات (مثل SELECT * FROM (SELECT id, k, v FROM t WHERE id < 20) ORDER BY k) تفشل سابقًا برسالة Not found column __table2.id in block .... #110690 (Groene AI).
  • تم إصلاح مشكلة رفض readWKT لسلاسل WKT التي تبدأ بمسافة بادئة (مثل readWKT(' POINT(1 2)'))، رغم أن قارئات readWKTPoint/readWKTPolygon/… المعرّفة نوعيًا تقبلها، وكذلك قواعد WKT نفسها. #110706 (Groene AI).
  • إصلاح خطأ منطقي (Column ... already added for reading، وهو ما يؤدي إلى إيقاف الخادم في buildات debug/sanitizer) عند استخدام predicate نفسه لفهرس نصي في كلٍّ من PREWHERE وWHERE ضمن استعلام على جدول Merge فوق جدول Distributed. #110710 (Groene AI).
  • إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK في دوال المسافة المنقولة على أعمدة QBit (مثل cosineDistanceTransposed) عند استدعائها باستخدام استعلام فرعي قياسي أو متجه مرجعي ثابت مع تفعيل النسخ المتماثلة المتوازية. وهذا يغلق #110719. #110729 (Alexey Milovidov).
  • إصلاح خطأ نادر من نوع LOGICAL_ERROR (Unexpected number of parts to remove from parts_queue؛ وهو ما يؤدي إلى إيقاف الخادم في buildات debug/sanitizer) في ReplicatedMergeTree عندما كانت عمليتا partition (مثل استعلامَي MOVE PARTITION/REPLACE PARTITION، أو عندما يتسابق أحدهما مع DROP_RANGE في الخلفية) تُلغيان فحص الجزء في الخلفية على ranges متداخلة في الوقت نفسه. #110738 (Groene AI).
  • تم إصلاح خطأ منطقي Hash is not set for serialization كان قد يحدث عندما يكون عمود ذو codec من نوع Quantized(...) مُغلّفًا داخل serialization أخرى، على سبيل المثال في جدول Merge فوق مصادر يكون فيها العمود ذو الاسم نفسه بأنواع مختلفة (مُدمجة في Variant). #110776 (Groene AI).
  • إصلاح تعليق الخادم عند ضرب state الخاصة بـ aggregate function من نوع median/quantile في ثابت صحيح ضخم (مثل medianState(x) * 18446744073709551615). إذ كان الاستعلام يصبح غير مستجيب للإلغاء وقد يستمر في العمل إلى أجل غير مسمى. #110779 (Groene AI).
  • إصلاح تعطل الخادم (قسمة عدد صحيح على صفر) عند استهلاك quota ذات interval بطول صفري (على سبيل المثال CREATE QUOTA q FOR INTERVAL 0 SECOND MAX queries = 1000). ويُرفض الآن عند إنشاء quota أي interval للحصة مدته غير موجبة. #110846 (Pedro Ferreira).
  • تم إصلاح مشكلة throwIf(notLike(col, pattern)) (وغيرها من حالات throwIf على دالة) التي كانت تتسبب في الرمي دون شرط عندما يكون col من نوع LowCardinality. إذ كان التنفيذ الافتراضي لـ LowCardinality يشغّل throwIf على الـ Dictionary بالكامل، والذي يحتوي دائمًا على default value المحجوزة حتى عندما لا يشير إليها أي row، لذا فإن وجود قيمة غير صفرية في ذلك الموضع غير المستخدم كان يؤدي إلى أن يرمي throwIf على بيانات لا تستوفي الشرط. #110864 (Groene AI).
  • تمرير الأدوار النشطة للاستعلام (SET ROLE أو المعلمة role) إلى العقد البعيدة عند قراءات النسخ المتوازية وقراءات Distributed عبر عنقود مؤمَّن بسرّ interserver؛ إذ كانت العقد البعيدة سابقًا تعود إلى الأدوار الافتراضية للمستخدم، ما كان يؤدي إلى تقييم سياسات الصفوف على نحو غير متسق مع العقدة البادئة. #110867 (Nikolay Degterinsky).
  • إصلاح جداول Iceberg التي كانت تنتج معرّفات حقول مكررة بعد ALTER TABLE ... ADD COLUMN عندما يحتوي المخطط الأولي على حقول متداخلة (Tuple/Array/Map). يسجّل last-column-id الآن أكبر معرّف حقل مُسنَد، بما في ذلك الأبناء المتداخلون، لذلك لم يعد العمود المضاف لاحقًا يعيد استخدام معرّف حقل متداخل، ولم تعد القراءات تفشل بسبب ICEBERG_SPECIFICATION_VIOLATION (Duplicate field id). #110884 (Groene AI).
  • إصلاح تعطل في builds الخاصة بـ FIPS عند استخدام مفتاح SSH من نوع Ed25519 (CREATE USER ... IDENTIFIED WITH ssh_key ... TYPE 'ssh-ed25519'، أو مثل هذا المفتاح في users.xml). ‏Ed25519 غير معتمد من FIPS؛ لذا تُرفض هذه المفاتيح الآن برسالة LIBSSH_ERROR واضحة. #110891 (Konstantin Bogdanov).
  • إصلاح النتائج منخفضة الدقة لدوال المسافة المنقولة على أعمدة QBit (cosineDistanceTransposed, L2DistanceTransposed, dotProductTransposed). كانت القيم المقتطعة إلى مستويات البت precision يُعاد بناؤها مع ملء البتات المحذوفة بالأصفار، ما كان يحرّف كل قيمة معاد بناؤها نحو الصفر ويؤدي إلى سلوك متدهور عند الدقة المنخفضة: بالنسبة إلى QBit(BFloat16) عند precision يساوي 1 لا يبقى سوى بت الإشارة، لذلك كانت كل قيمة تُعاد بناؤها إلى ±0.0 وكانت المسافة ثابتة نفسها لكل صف، من دون أي معلومات للترتيب. تُعاد الآن القيم المقتطعة إلى نقطة وسط محدودة ضمن خلية الدقة المتبقية (شيفرات Int8 الخام إلى مركز خليتها؛ مع الحفاظ على الأصفار الدقيقة واللانهايات)، بحيث تتيح قيمة precision الأصغر مبادلة الدقة بالسرعة من دون نتائج منحازة بشدة. أما النتائج ذات الدقة الكاملة فلم تتغير. هذا يغلق #110898. #110911 (Alexey Milovidov).
  • إصلاح تعطل في server (use-after-free) أثناء الإيقاف السلس بعد الاستعلام عن جداول Iceberg من جلسات استخدمت أيضًا جداول مؤقتة. #110914 (Miсhael Stetsyuk).
  • إصلاح LOGICAL_ERROR: Cannot sum Bools (إيقاف server في debug/sanitizer builds) عند دمج aggregate states الخاصة بـ sumMap/sumMapWithOverflow/sumMapFiltered مع قيم Bool جرى serialize لها بتنسيق الحالة القديم (الإصدار 0). ويصحح الإصلاح نفسه أيضًا حالتين صامتتين لنتائج خاطئة مع حالات Bool من الإصدار 0: لم تكن مفاتيح map من النوع Bool تُزال ازدواجيتها عبر الحالات، وكانت عملية compaction للقيم الصفرية تُسقط الإدخالات الخاطئة. #110922 (Groene AI).
  • إصلاح تعطل عند استخدام aggregate function مع combinator ‏-Tuple مع RESPECT NULLS وإنتاجها حالة وسيطة (-State، أو aggregation موزعة، أو WITH ROLLUP/WITH CUBE). كانت الوظيفة المدمجة تُسمّى باسم متغير الحالة الخاطئ، لذلك كان النوع AggregateFunction المُسلسَل يُحلّ مجددًا إلى تخطيط غير متوافق في الذاكرة عند round-trip. #110930 (Groene AI).
  • إصلاح PREWHERE (وسياسات مستوى الصف) على عمود في Iceberg أُعيدت تسميته عبر schema evolution، إذ كان يعيد بصمت 0 rows لملفات البيانات القديمة. تُرجِع مثل هذه الاستعلامات الآن الصفوف الصحيحة، بما يطابق WHERE. #110941 (Groene AI).
  • إصلاح LOGICAL_ERROR (LazyMaterializingTransform: Number of rows in lazy chunk N does not match number of offsets M) الذي قد يحدث في استعلامات البحث المتجهي عند استخدام vector_search_with_rescoring = 1 مع التجسيد الكسول عندما تتساوى عدة مسافات. #111003 (Groene AI).
  • إصلاح قراءة بيانات Arrow/ArrowStream التي تحتوي على أعمدة Array/Map متداخلة وفارغة، والمولَّدة بواسطة Apache Arrow Java < 19.0.0 (المضمَّن مع Apache Spark)، والتي كان يجري رفضها سابقًا بخطأ INCORRECT_DATA يفيد بأن مخزن offsets المؤقت صغير جدًا. #111101 (Raúl Marín).
  • إصلاح القراءات المتقادمة على أقراص plain_rewritable عند تمكين ذاكرة تخزين الصفحات المؤقتة. #111105 (Mikhail Artemenko).
  • إصلاح خطأ CANNOT_CONVERT_TYPE للثوابت من النوع Variant (بما في ذلك Geometry) في الاستعلامات الموزعة والاستعلامات التي تستخدم النسخ المتماثلة المتوازية. #111136 (Nikita Fomichev).
  • إصلاح خلل كان قد يتسبب في فشل قراءة الملفات الكبيرة من HDFS أو قراءتها بشكل غير صحيح عندما يتجاوز طلب قراءة واحد حد الحجم 32-بت الخاص بـ hdfsPread (INT_MAX). #98470 (Arup Chauhan).
  • إصلاح الاستخدام غير الصحيح لفهرس النص في مقارنات المساواة مع قيمة بحث فارغة. #108340 (Robert Schulze).
  • إصلاح حالة تعليق في SYSTEM SYNC MERGES مع محدد الدمج Manual عندما يتعذر وضع دمج مجدول ضمن مجموعة خلفية ممتلئة. #108770 (Alexey Milovidov).
  • إصلاح ATTACH TABLE ... AS REPLICATED الذي كان يتجاهل البيانات المعتمدة ويعيد إحياء الصفوف السابقة لـ mutation عند ترك ملف txn_version.txt.tmp متقادمًا على جزء بيانات. #108772 (Alexey Milovidov).
  • إصلاح حالة تسابق محتملة في ALTER TABLE ... MOVE PARTITION TO TABLE مع جداول MergeTree غير المتماثلة، والتي كان يمكن أن تنتج أجزاء بيانات متداخلة، لأن اعتماد الأجزاء المنقولة وتخصيص رقم الكتلة لم يكونا تحت القفل نفسه. #108922 (Mikhail Artemenko).
  • إصلاح قراءة جداول Iceberg المكتوبة بواسطة Databricks UniForm، الذي يكتب مخططًا شكليًا placeholder (مع قائمة حقول فارغة) في ملفات manifest. #108945 (Konstantin Vedernikov).
  • إصلاح استخدام ذاكرة بعد تحريرها عند قراءة جدول Hive غير مقسَّم إلى partition باستخدام عدة خيوط. #109164 (Alexey Milovidov).
  • إصلاح عدم إعادة مستوى سجل وحدة التحكم بعد بدء تشغيل الخادم عند تعيين logger.startup_console_log_level: إذ كان المستوى يُلتقط من مفتاح إعدادات خاطئ، لذلك ظلت وحدة التحكم على مستوى بدء التشغيل المرتفع طوال عمر الخادم. يغلق #103472. #109858 (Garrett Thomas).
  • إصلاح اختلالات عزل اللقطة في معاملات metadata الخاصة بأقراص plain_rewritable. يُصلح #92055. #110948 (Mikhail Artemenko).
  • إصلاح حالة توقّف (front() called on an empty vector) في clickhouse-client --login عندما لا يتم تمرير المضيف كوسيط --host صريح، مثلًا إذا كان مأخوذًا من --connection أو ملف الإعدادات أو متغير البيئة CLICKHOUSE_HOST. يغلق #103603. #110279 (Christoph Wurm).
  • إصلاح خطأ منطقي (!part.empty()) عندما تكون وسيطة lambda معرّفًا محاطًا بعلامات backtick ويحتوي اسمه على نقطة (مثل __table1.). كان هذا الاستعلام ينتج سابقًا استثناءً مُعالَجًا في إصدارات release، ويتسبب في توقّف الخادم في إصدارات debug وsanitizer أثناء تنسيق رسالة الخطأ. #108735 (Groene AI).
  • إصلاح LOGICAL_ERROR (No set is registered for key) في ALTER TABLE ... DROP COLUMN، وmutations الخاصة بـ ALTER TABLE ... DELETE/UPDATE، وDELETE FROM خفيف الوزن، على الجداول التي تحتوي على عمود ALIAS يستخدم تعبيره عامل التشغيل IN (بما في ذلك عبر عمود ALIAS آخر). #111039 (Pedro Ferreira).
  • إصلاح فقدان صامت للبيانات مع async inserts وإزالة التكرار (async_insert=1, async_insert_deduplicate=1). فعندما كانت عدة إدخالات async-insert ذات قيم insert_deduplication_token مختلفة تُدمج في عملية flush واحدة وتُكتب إلى partitions منفصلة، كان كل token يُسجَّل في سجل إزالة التكرار لكل partition لمستها عملية flush، وليس فقط في الـ partition التي انتهت فيها صفوفه. ونتيجةً لذلك، كان أي insert لاحق يعيد استخدام أحد هذه tokens في partition لم يسبق أن كتب إليها يُزال تكراره بصمت. والآن لم تعد tokens تُسجَّل إلا في الـ partition التي انتهت فيها صفوفها فعليًا. يغلق #111031. #111049 (Groene AI).
  • إصلاح استثناء LOGICAL_ERROR (ScatterExchangeStep should have one source shard, got 8) وظهور صفوف مكررة عند الاستعلام عن جدول Merge فوق جداول أو عروض Distributed مع الإعداد التجريبي make_distributed_plan = 1. يغلق #107946. #108401 (Groene AI).
  • إجراء serialize لعمود Nullable(Tuple(...)) كحقل CSV واحد بدلًا من تسطيحه إلى أعمدة منفصلة. سابقًا، كانت القيمة غير NULL تُكتب على شكل عدة حقول CSV، بينما كان NULL يُكتب كحقل واحد \N، مما جعل عدد الأعمدة يعتمد على الصف وأفسد ترويسات CSVWithNames/CSVWithNamesAndTypes وعمليات round-trip. #108959 (Groene AI).
  • إصلاح خطأ منطقي (KeyCondition uses PREWHERE output) في قارئ Parquet v3 عندما يشير شرط المفتاح على مستوى format إلى عمود لا تتم قراءته من ملف Parquet. #109267 (Groene AI).
  • إصلاح نتائج غير صحيحة لعمليات القراءة عبر table function مع FINAL أو SAMPLE عند استخدام serialize_query_plan = 1. وكذلك إصلاح مفتاح ذاكرة التخزين المؤقت لإحصاءات جدول hash الخاص بـ aggregation لِـ table functions، بحيث لم تعد table functions المختلفة تشترك في نفس مُدخل التخصيص المسبق. #109847 (Azat Khuzhin).
  • إصلاح تنظيف BACKUP ... TO Memory(...) عند فشله قبل الإنهاء النهائي: إذ كان النسخ الاحتياطي الفاشل يبقى مسجلًا، وبالتالي لا يمكن إعادة استخدام اسمه. #109947 (Julia Kartseva).
  • إصلاح العمليات الحسابية للحالات القصوى لـ interval في WITH FILL STEP ودوال interval للتاريخ/الوقت add* / subtract*: لم تعد الفروق الخارجة عن النطاق تعتمد على overflow الموقَّع، ولم يعد WITH FILL مع خطوة YEAR كبيرة جدًا يتعطل بسبب إرجاع التقويم إلى الخلف. #110158 (Groene AI).
  • إصلاح أخطاء 411 Length Required من خدمات Azure: أصبح نقل Azure عبر HTTP المعتمد على Poco يضبط Content-Length استنادًا إلى request body لعملاء SDK الذين لا يضبطونه بأنفسهم، مثل Azure Key Vault. #110299 (Konstantin Bogdanov).
  • لم يعد يُطبَّق تحسين FINAL الكسول (query_plan_optimize_lazy_final، وهو معطّل افتراضيًا) عندما يقرأ query وفق ترتيب مفتاح sorting، لأن plan الاستبدال الناتجة عنه لا تحافظ على هذا الترتيب وقد تُرجع نتائج بترتيب غير صحيح. كما لم يعد يُطبَّق عندما يُطبَّق LIMIT أصغر من عدد rows المطلوب قراءتها مباشرةً على step القراءة، لأن تمريرة بناء المجموعة الإلزامية تُفقد ميزة الإنهاء المبكر. #110576 (Nikolai Kochetov).
  • إصلاح مشكلة قيام readWKT وreadWKTPoint بإرجاع إحداثيات غير مهيأة (scalar) أو قديمة من row سابقة (vectorized) للقيمة POINT EMPTY. وأصبح POINT EMPTY يُرفَض الآن مع CANNOT_PARSE_TEXT، لأن Point في ClickHouse هو Tuple(Float64, Float64) ثابت ولا يملك تمثيلًا فارغًا. #110692 (Groene AI).
  • إصلاح التعامل الخاطئ مع timezone عند materializing أعمدة الجهة اليمنى في hash joins. يغلق #111033. #111074 (Yarik Briukhovetskyi).
  • إصلاح نتائج count() الخاطئة وسقوط rows عند ترشيح مفتاح من نوع String (أو FixedString أضيق) أو skip index من نوع minmax بمقارنة مع ثابت FixedString أعرض، مثل toFixedString('abc', 257) = string_col. كان كل من pruning لمفتاح primary وminmax يبنيان النطاق من الثابت المحشو بـ NUL ويتخطيان granules المطابقة على نحو خاطئ. #111106 (Groene AI).
  • إصلاح عمليات inserts غير المتزامنة بتنسيق Native بحيث لم يعد إدخال واحد مخزَّن مؤقتًا يصبح غير متوافق بعد ALTER ... MODIFY COLUMN يتسبب في فشل الدفعة بالكامل. يغلق #111064. #111108 (Mikhail f. Shiryaev).
  • إصلاح CREATE OR REPLACE لقاموس مع كائن من نوع آخر: كان يفشل مع CANNOT_DETACH_DICTIONARY_AS_TABLE بعد أن يكون الاستبدال قد committed بالفعل، مما يترك table يتيمة باسم _tmp_replace_*. #111142 (Nikolay Degterinsky).
  • إصلاح INCOMPATIBLE_TYPE_OF_JOIN لعملية join من نوع ANY على table بمحرك Join عندما كان filter WHERE على عمود من الجهة اليمنى يسمح لـ query planner بإعادة كتابة join إلى SEMI أو ANTI. فـ table بمحرك Join لها strictness معلنة وثابتة لا يمكن تغييرها، لذا أصبح هذا التحويل يُرفَض الآن لمثل هذه الجداول. #111362 (Groene AI).
  • إصلاح table function format التي كانت لا تُرجع أي columns عندما تُحلَّل بيانات الإدخال إلى zero rows (على سبيل المثال، مستند JSON فارغ أو FeatureCollection من GeoJSON بلا features). وهي الآن تُرجع نتيجة فارغة مع columns الصحيحة بدلًا من إطلاق NOT_FOUND_COLUMN_IN_BLOCK. يغلق #111390. #111428 (Groene AI).

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

  • أصبحت builds الخاصة بـ sanitizer تلتقط الآن تقرير sanitizer في المخزن المؤقت العام sanitizer_report، بحيث يتمكن محلل core dump من قراءته من core dump. #109333 (Miсhael Stetsyuk).
  • ابنِ musl من المصدر بدلًا من استخدام binaries المضمّنة. #97452 (Konstantin Bogdanov).
  • استخدام تطبيقات SIMD للدوال memcmp/memcpy/memmove/memset/bcmp/memmem من LLVM-libc. #107566 (Konstantin Bogdanov). وإصلاح تلف صامت في memmove في builds الخاصة بـ Debug عند -O0 (-DDEBUG_O_LEVEL=0) على الأجهزة التي تدعم AVX-512. #110904 (Konstantin Bogdanov).
  • إزالة استخدامات مكتبة curl من كامل codebase ومن مكتبات third-party المضمّنة. #108296 (Konstantin Bogdanov).
  • تم تحديث mariadb-connector-c إلى 3.4.9. #108328 (Konstantin Bogdanov).
  • تحديث libssh إلى 0.12.0. #108329 (Konstantin Bogdanov).
  • إصلاح تعليق عند تنفيذ COMMIT للمعاملة على MacOS. #108375 (Raúl Marín).
  • أُضيف خيار CMake باسم COMPRESS_DEBUG_SECTIONS لضغط أقسام Debug من نوع DWARF في object files (-gz)، ويُفعَّل تلقائيًا حيث يدعمه المصرّف، لتقليص دليل builds الخاصة بـ Debug؛ وتبقى binaries النهائية غير مضغوطة، لذلك لا يتأثر ترميز رموز stack trace وقت التشغيل. #109306 (Murphy). كما تُبنى الآن سلسلة أدوات LLVM المضمّنة مع zlib، بحيث يدعم clang الخاص بها -gz=zlib، وأُضيف أيضًا الرابط الرمزي المفقود clang++-21. #109596 (Murphy).
  • أصبحت builds الخاصة بـ Debug تُصرِّف الآن Rust crates المضمّنة مع معلومات Debug مخفّضة (debug = 1، مستوى cargo’s limited) ومن دون incremental cache (REDUCE_RUST_DEBUG_INFO، مفعّل افتراضيًا)، ما يقلّص build artifacts الخاصة بـ Rust (~12 → ~7 GB من الصفر) ويمنع النمو غير المحدود لذاكرة cache الخاصة بـ cargo عبر عمليات إعادة البناء. اضبط -DREDUCE_RUST_DEBUG_INFO=OFF لاستعادة DWARF الكامل وincremental compilation. #109471 (Murphy).
  • دعم exchange الخاص بـ distributed query المتدفقة وعمليات reads لـ STREAM على MacOS. #109769 (Raúl Marín).
  • ترقية libarchive من 3.8.7 إلى 3.8.8. #109874 (Robert Schulze).
  • ترقية c-ares من 1.34.6 إلى 1.34.8. #109905 (Robert Schulze).
  • تحديث krb5 لإصلاح CVE-2026-40355 و CVE-2026-40356. #109910 (Robert Schulze).
  • أُزيلت التبعية التابعة لجهة خارجية libpng. ويستخدم FORMAT PNG الآن مُشفِّر PNG صغيرًا مدمجًا بدلًا منه، ويعتمد على zlib المضمَّن. #110051 (Alexey Milovidov).
  • أُضيف تتبّع لتخصيصات C الخام (التي لا تمر عبر operator new) في memory tracker على macOS، وذلك عبر تغليف نطاق malloc الخاص بـ jemalloc، بحيث تُطبَّق عليها حدود الذاكرة. #110370 (Raúl Marín).
  • تُبنى الآن صور Docker ذات اللاحقة -distroless لكلٍّ من clickhouse-server وclickhouse-keeper انطلاقًا من مرحلة production الخالية من shell؛ بينما كان يجري سابقًا بناؤها من مرحلة debug وكانت تتضمّن /busybox/sh. يُغلق #105677. #105678 (ashishch432).
  • تحديث abseil-cpp إلى LTS 20260526.0. #108991 (Konstantin Bogdanov).

إصدار ClickHouse 26.6، بتاريخ 2026-06-25. العرض التقديمي، الفيديو

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

  • يزيل هذا التغيير الميزة allow_experimental_query_deduplication. ظلت هذه الميزة تجريبية لفترة طويلة، ولا توجد لها اختبارات، ولن تحظى بالدعم (إذ كانت الاختبارات الأولية غير مستقرة وقد أُزيلت في #49579). #99398 (Igor Nikonov).
  • تستخدم ميزة SYSTEM INSTRUMENT المستندة إلى XRay الآن arguments بدلًا من parameters: فقد أُعيدت تسمية العمود system.instrumentation.parameters إلى arguments، وأُعيدت تسمية الصياغة SYSTEM INSTRUMENT ADD ... HANDLER PARAMETERS ... إلى SYSTEM INSTRUMENT ADD ... HANDLER ARGUMENTS .... يجب تحديث أي استعلامات أو عمليات أتمتة تستخدم العمود أو الصياغة القديمة لاستخدام الأسماء الجديدة؛ إذ لم تعد الأسماء القديمة مدعومة. #103854 (Pablo Marcos).
  • أُعيدت تسمية الإعداد show_data_lake_catalogs_in_system_tables إلى show_remote_databases_in_system_tables مع توسيع نطاقه: عندما تكون قيمته 0 (القيمة الافتراضية)، تُخفى أيضًا قواعد بيانات MySQL وPostgreSQL من system.tables وsystem.columns وsystem.completions، بالإضافة إلى كتالوجات بحيرات البيانات. ويظل اسم الإعداد القديم محفوظًا كاسم مستعار. #104416 (Pablo Marcos).
  • تستهدف بنية x86 الافتراضية الآن x86-64-v3 ‏(AVX2) بدلًا من x86-64-v2 ‏(SSE4.2). ويتطلب ذلك معالج CPU يدعم AVX2 ‏(Intel Haswell أو أحدث، وAMD Excavator أو أحدث). إذا كان معالج CPU لديك لا يدعم AVX2، فاستخدم بنية amd64compat التي تستهدف x86-64 العادي. #105019 (Raúl Marín).
  • أصبح يُرفض استخدام Dynamic/Variant المتداخلة في تجميعات min/max وفهارس minmax. سابقًا، كان التحقق يقتصر على Dynamic/Variant في المستوى الأعلى فقط. يُغلق #104747. #105468 (Pavel Kruglov).
  • يرفض كل من icebergHash وicebergBucket الآن وسائط Int128 وUInt128 وInt256 وUInt256 وDecimal256 مع إظهار خطأ صريح. سابقًا، كانا يقتطعان القيم الأكبر بصمت وينتجان تجزئات متصادمة. لا تعرّف مواصفة Iceberg التجزئة إلا للأعداد الصحيحة ذات 32/64 بت وللأعداد العشرية ذات دقة تصل إلى 38؛ حوِّل إلى Int64 أو Decimal128 للحفاظ على السلوك السابق للقيم التي تتسع لها هذه الأنواع. #105866 (Raúl Marín).
  • أُضيف تحكم دقيق في تكرار عرض الاستعلامات في CLI. يقبل الخيار --echo الآن قيمة منطقية اختيارية ويعمل في كل من الوضع التفاعلي ووضع الدُفعات. ويتحكم الخياران الجديدان --echo-formatted و--echo-query-id في ما إذا كانت الاستعلامات المعاد عرضها تُنسَّق وما إذا كان query_id يُطبع، على التوالي. كما يتحكم الخيار --hilite/--highlight الآن أيضًا في تمييز الاستعلامات المعاد عرضها. وكأثر جانبي، أصبح --echo الآن خيارًا يقبل قيمة منطقية، لذا فإن أي استعلام موضعي يأتي مباشرة بعد --echo المجرد يُعامَل على أنه قيمته؛ استخدم --echo --query "..." أو --echo=false بدلًا من ذلك. #106191 (Alexey Milovidov).
  • أُزيلت دوال KQL ‏(Kusto) التجريبية array_sort_asc وarray_sort_desc، وكذلك الواجهات الخلفية الخاصة بها في SQL وهي kql_array_sort_asc وkql_array_sort_desc. كانت هذه الدوال تجريبية، ومنفذة بجودة منخفضة، وكانت مصدرًا لأخطاء في الصحة والمحلل. وتُرجع الاستعلامات التي تستخدم هذه الأسماء الآن UNKNOWN_FUNCTION. #108101 (Groene AI).
  • لم يعد ALTER TABLE ... REPLACE PARTITION ... FROM ... يحذف بصمت بيانات القسم في الوجهة عندما لا يحتوي جدول المصدر على أي أجزاء في القسم المطلوب. سابقًا، كان هذا الطلب يزيل قسم الوجهة ولا يكتب شيئًا بدلًا منه — وهو سلوك قد يتسبب بسهولة في فقدان البيانات. والآن، يُرفض هذا افتراضيًا مع BAD_ARGUMENTS. لاستعادة سلوك المسح الصامت السابق، اضبط الإعداد الجديد allow_replace_partition_from_empty_source = 1، أو اضبط compatibility على 26.5 أو أقل؛ ولحذف بيانات الوجهة صراحةً، استخدم ALTER TABLE ... DROP PARTITION. #104939 (Groene AI).
  • تتغير القيمة الافتراضية لإعداد الخادم insert_deduplication_version من compatible_double_hashes إلى new_unified_hash. تعمل إزالة التكرار عند الإدراج الآن على كتلة الإدراج بالكامل (لكل عملية insert) بدلًا من أن تعمل على مستوى كل جزء/قسم: تظل إعادة محاولة عملية insert نفسها خاضعة لإزالة التكرار، لكن لم تعد عمليتا insert مختلفتان تنتجان جزءًا متطابقًا تخضعان لإزالة التكرار بشكل متبادل، كما أن عمليات insert للصفوف نفسها بعد إعادة ترتيبها لم تعد تخضع لإزالة التكرار. اضبط insert_deduplication_version = compatible_double_hashes لاستعادة السلوك السابق. ويجب على المثيلات التي تُرقّى مباشرةً من إصدار كان يستخدم old_separate_hashes افتراضيًا أن تعمل أولًا باستخدام compatible_double_hashes حتى تنقضي أطول نافذة إزالة تكرار ذات صلة قبل الاعتماد على new_unified_hash. #107886 (Sema Checherinda).

ميزة جديدة

  • تمت إضافة دعم للاستعلامات المستمرة فوق جداول MergeTree، ويُنفَّذ ذلك عبر سلسلة من قراءات snapshot. وهذه خطوة أولى نحو دعم عام للاستعلامات المتدفقة. #105114 (Mikhail Artemenko).
  • تمت إضافة فهارس تخطٍّ افتراضية (what-if). استخدم CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ... لتعريف فهرس تخطٍّ افتراضي ضمن نطاق الجلسة، ثم EXPLAIN WHATIF SELECT ... لتقدير نسبة التخطي والتكلفة من دون إنشائه فعليًا. وتظهر الفهارس المعرّفة في الجدول الجديد system.hypothetical_indexes. #104608 (Yarik Briukhovetskyi).
  • أُضيفت واجهة ويب مضمّنة عند /schema إلى clickhouse-server تعرض بصريًا مخطط الاعتماديات بين الجداول، والعروض المادية، والعروض المادية القابلة للتحديث، والقواميس، والجداول الموزعة، والعروض. #105276 (Nikita Mikhaylov).
  • تمت إضافة دعم تنسيق الإخراج PNG، مما يتيح عرض نتائج الاستعلام مباشرةً على هيئة صور PNG. #74691 (Maksim Dergousov).
  • تمت إضافة اكتشاف وكيل البرمجة المعتمد على الذكاء الاصطناعي (Claude Code وCursor وCodex وGemini CLI وGoose وغيرها) الذي استدعى clickhouse-client أو clickhouse-local، وذلك استنادًا إلى متغيرات البيئة. ويُبلَّغ عن الوكيل المكتشَف في العمود الجديد client_agent ضمن system.query_log وsystem.query_thread_log وsystem.processes. #106619 (Alexey Milovidov).
  • تمت إضافة جدول نظام جديد باسم system.documentation يجمع التوثيق المرجعي المضمّن للمكوّنات الموحدة في النظام (الدوال، ومحركات الجداول، وأنواع البيانات، والإعدادات، والتنسيقات، وغيرها) في جدول واحد، مع عرض التوثيق بصيغة Markdown. #107463 (Alexey Milovidov).
  • أُضيف تنسيق الإدخال GeoJSON لقراءة مستندات FeatureCollection الخاصة بـ GeoJSON، بحيث يُنتج صفًا واحدًا لكل معلم مع الأعمدة id (String) وgeometry (Geometry) وproperties (Nullable(JSON)). وتُقرأ الأشكال الهندسية من الأنواع Point وLineString وMultiLineString وPolygon وMultiPolygon إلى النوع الأصلي Geometry في ClickHouse. أما GeometryCollection وMultiPoint، اللذان لا يستطيع النوع Geometry تمثيلهما، فيُطلقان استثناءً افتراضيًا، أو يمكن تخزينهما على هيئة NULL عبر الإعداد input_format_geojson_unsupported_geometry_handling. يساهم ذلك في #91533. #98124 (Mark Needham).
  • تمت إضافة دوال لتقديم Mapbox Vector Tiles مباشرةً من SQL: تقوم MVTEncodeGeom بإسقاط شكل هندسي إلى فضاء البكسل لبلاطة slippy-map وقصّه، وتقوم MVTEncode بتجميع الأشكال الهندسية المُسقطة لمجموعة ما في البايتات الثنائية لبلاطة أحادية الطبقة، بينما تُرجع MVTBoundingBox / MVTBoundingBoxMercator المربع المحيط بالبلاطة لتقييد الصفوف به. ويدعم ذلك الأشكال الهندسية من نوع النقاط والخطوط والمضلعات. كما يتوفر أيضًا تحت الأسماء البديلة الخاصة بـ PostGIS، وهما ST_AsMVTGeom وST_AsMVT. #106107 (Saarthak Gupta).
  • يدعم clickhouse-local الآن الاستعلامين SYSTEM START LISTEN وSYSTEM STOP LISTEN، مما يتيح تحويله إلى خادم يقبل اتصالات TCP وHTTP. #101143 (Alexey Milovidov).
  • تمت إضافة أمر help تفاعلي إلى clickhouse-client وclickhouse-local. تؤدي كتابة help <name> (وأيضًا /help وman و/man) إلى عرض توثيق دالة أو محرك جدول أو نوع بيانات أو تنسيق أو إعداد أو أي مكوّن آخر، مع تقديمه من Markdown داخل الطرفية مع تمييز صياغة SQL. وعندما تكون الكلمة ملتبسة، تُعرض جميع المطابقات، وعند عدم العثور عليها، تُقترح أسماء مشابهة. #108042 (Alexey Milovidov).
  • دعم الكتابة إلى Azure Data Lake Storage Gen2. #105406 (Konstantin Vedernikov).
  • إضافة التنسيق RowBinaryWithNamesAndTypesAndDefaults لتحسين دعم schema evolution. #105736 (Mark Zitnik).
  • تنفيذ ADD ENUM VALUES في استعلامات ALTER TABLE لتبسيط إضافة قيم جديدة إلى نوع Enum موجود، من دون الحاجة إلى إعادة تحديد جميع قيم Enum الحالية. #93830 (Ilya Golshtein).
  • أصبح العرض المادي القابل للتحديث يدعم الآن REFRESH DEPENDS ON لتشغيل عمليات التحديث استنادًا إلى تحديثات RMV آخر بدلًا من جدول زمني قائم على الوقت. (كانت REFRESH EVERY ... DEPENDS ON موجودة بالفعل، لكنها لم تكن قابلة للاستخدام بشكل موثوق لهذا السيناريو.) راجع توثيق CREATE MATERIALIZED VIEW. #104440 (Michael Kolupaev).
  • إضافة دعم لاختيار الأعمدة بحسب نمط الاسم باستخدام * LIKE '<pattern>' و* ILIKE '<pattern>'، بما في ذلك الصيغ المؤهلة مثل table.* LIKE '<pattern>' وtable.* ILIKE '<pattern>'. يطابق LIKE أسماء الأعمدة مع مراعاة حالة الأحرف، بينما يطابق ILIKE من دون مراعاة حالة الأحرف. #104569 (Yue Ni).
  • تمت إضافة صياغة ESCAPE التي تعرّف محرف إفلات مخصصًا في نمط LIKE، ما يتيح التعامل مع % و_ كمحارف حرفية بدلًا من wildcards. #99774 (Ilya Yatsishin).
  • إضافة إعدادي الجدول materialize_projections_on_insert وmaterialize_projections_on_merge لـ MergeTree. عندما يكون materialize_projections_on_insert = 0، تتخطى عمليات INSERT إنشاء projection parts، مما يحسّن throughput الإدراج للجداول التي تحتوي على projections كثيرة. وعندما يكون materialize_projections_on_merge = 1، تعيد عملية merge إنشاء projection مفقود من جميع source parts الخاصة به، بحيث يمكن إنشاء projections أثناء merges بدلًا من on insert. وتظل merges تجمع فقط بين parts التي تشترك في المجموعة نفسها من projections. #100993 (Christoph Wurm).
  • إضافة إعداد MergeTree جديد غير قابل للتغيير باسم allow_tuple_element_aggregation، وهو معطّل افتراضيًا. عند تفعيله، تقوم SummingMergeTree وAggregatingMergeTree وCoalescingMergeTree بتسطيح أعمدة Tuple بشكل متكرر وتجميع كل عنصر نهائي بصورة مستقلة أثناء merges، تمامًا كما لو كان عمودًا من المستوى الأعلى — إذ تقوم SummingMergeTree بجمعه، وتقوم AggregatingMergeTree بدمج حالة دالة التجميع الخاصة به، بينما تحتفظ CoalescingMergeTree بآخر قيمة غير NULL له. يجب تحديد هذا الإعداد عند إنشاء الجدول، ويُتجاهل بصمت من قِبل المحركات التي لا تدعمه. #98039 (johnjing).
  • دالتان جديدتان quantizeBFloat16ToInt8 وdequantizeInt8ToBFloat16: codec عددي يضغط مكونات التضمينات إلى 8-bit باستخدام مكمّم Gaussian Lloyd-Max ذي 256 مستوى، ويمكن استخراج شيفرات Int4/Int2/binary منه عبر اقتطاع البتات. #108102 (Alexey Milovidov).
  • أُضيفت الدالتان arrayTopK وarrayBottomK: - تُرجِع arrayTopK(k, array) أكبر K عنصرًا بترتيب تنازلي - تُرجِع arrayBottomK(k, array) أصغر K عنصرًا بترتيب تصاعدي. #104563 (Vitaly Baranov).
  • أُضيف جدول نظام جديد system.iceberg_files يعرض البيانات الوصفية لكل ملف في جداول Iceberg، بصف واحد لكل ملف بيانات أو حذف في اللقطة الحالية لكل جدول. ويغلق هذا #98777. #104415 (Asya Shneerson).
  • أُضيف جدول system.constraints الذي يوفّر معلومات عن جميع قيود CHECK وASSUME عبر كل الجداول، بما في ذلك اسم القيد ونوعه والتعبير الخاص به. #105337 (Pedro Ferreira).
  • أُضيف جدول جديد system.dictionary_layouts يسرد تخطيطات القواميس المتاحة مع الوثائق المضمّنة (description, syntax, examples, introduced_in, related). #106182 (Alexey Milovidov).
  • أُضيف جدول جديد system.dictionary_sources يسرد مصادر القواميس المتاحة مع الوثائق المضمّنة (description, syntax, examples, introduced_in, related). #106184 (Alexey Milovidov).
  • أُضيف جدول جديد system.data_skipping_index_types يسرد أنواع فهارس تخطي البيانات المتاحة مع الوثائق المضمّنة (description, syntax, examples, introduced_in, related). #106186 (Alexey Milovidov).
  • أُضيف جدول جديد system.disk_types يسرد أنواع الأقراص المتاحة مع الوثائق المضمّنة (description, syntax, examples, introduced_in, related). #106187 (Alexey Milovidov).
  • جرى تنفيذ SYSTEM RESTART DISK <name>: إذ يعيد الآن تحميل البيانات الوصفية الموجودة في الذاكرة الخاصة بالقرص، ويعيد فحص الأجزاء البيانية لجداول النسخ المتماثلة للقراءة فقط الموجودة عليه. يتيح هذا لنسخة متماثلة للقراءة فقط من جدول على تخزين plain_rewritable مشترك أن ترى، عند الطلب، البيانات التي كتبها خادم آخر، من دون انتظار refresh_parts_interval أو إعادة تشغيل الخادم. #106645 (Jordi Villar).
  • أصبحت صيغة PostgreSQL expr OP SOME(array) / expr OP ALL(array) (عندما لا يكون الطرف الأيمن استعلامًا فرعيًا) مدعومة الآن، ويُعاد كتابتها إلى has / NOT has في حالة =/<>، أو إلى دوال لامبدا في arrayExists / arrayAll مع عوامل المقارنة الأخرى. لا يُقبل ANY في صيغة المصفوفة لأن any هي أيضًا دالة تجميعية؛ استخدم SOME بدلًا من ذلك. وتستمر صيغة الاستعلام الفرعي لكل من ANY/SOME/ALL في التحويل إلى IN / NOT IN. #105129 (Alexey Milovidov).
  • أُضيفت استراتيجيتان جديدتان إلى load_balancing، هما hostname_longest_common_prefix وhostname_longest_common_suffix، وتُفضّلان النسخة المتماثلة التي يشترك اسم مضيفها مع اسم مضيف الجهة المُبادِئة في أطول بادئة مشتركة (أو لاحقة مشتركة، على الترتيب). وهما مفيدتان عندما يكون مركز البيانات مُشفّرًا كبادئة أو لاحقة في أسماء مضيفين تحتوي على مقاطع رقمية متفاوتة الطول، حيث تختار الاستراتيجيتان الحاليتان nearest_hostname وhostname_levenshtein_distance النسخة المتماثلة الخاطئة. #107360 (Denny [DBA at Innervate]).
  • أُضيفت معلومات شهادة عميل TLS (الموضوعات، والرقم التسلسلي، والجهة المُصدِرة، وفترة الصلاحية) إلى جدول system.session_log لتحسين الأوبزرفابيليتي للمصادقة المستندة إلى الشهادات. #107679 (Alexey Milovidov).
  • أُضيف مُعرّف اعتماد اختياري external_id للوصول المستند إلى الدور في S3. #106941 (Elian Gidoni).
  • أُضيف إعداد جديد لـ S3Queue باسم after_processing_move_preserve_path. عند تمكينه مع after_processing='move' وafter_processing_move_prefix، تُنقل الكائنات المُعالجة مع الحفاظ على مسار المصدر الكامل ضمن بادئة الوجهة بدلًا من تسطيحها إلى اسم الملف فقط. #105354 (Asya Shneerson).
  • أُضيف إعداد على مستوى الخادم باسم message_queue_disable_insertion لتعطيل الإدراج من محركات طوابير الرسائل (Kafka, RabbitMQ, NATS) إلى العروض المادية المرفقة. وهذا مفيد لسيناريوهات النسخ المتماثلة للقراءة فقط. #104911 (JIaQi Tang).
  • أُضيف LOCALTIME وLOCALTIMESTAMP (بصياغة SQL القياسية / PostgreSQL). ‏LOCALTIMESTAMP هو اسم بديل لـ now() (ويُرجع DateTime)؛ ويُرجع LOCALTIME الوقت الحالي من اليوم بوصفه قيمة Time. #106139 (Thomas Cabral).
  • أُضيفت date_part('unit', expr) بوصفها صياغة مختصرة لـ EXTRACT(unit FROM expr). جميع أنواع Interval القياسية والإضافات الخاصة بـ PostgreSQL (epoch, dow, doy, isodow, isoyear, century, decade, millennium) مدعومة. #105127 (Alexey Milovidov).
  • دعم متوافق مع PostgreSQL لـ EXTRACT(TIMEZONE_HOUR FROM dt) وEXTRACT(TIMEZONE_MINUTE FROM dt) لاستخراج جزأي الساعة والدقيقة من إزاحة المنطقة الزمنية، وكذلك EXTRACT(<unit> FROM INTERVAL n <unit>) / date_part('<unit>', INTERVAL n <unit>) لاستخراج القيمة من interval. #106227 (Vinayak Joshi).
  • أُضيف اسمان بديلان تجميعيان min_by وmax_by لـ argMin وargMax. #105712 (Joey Yu). هذه الأسماء البديلة غبية، فالمهندسون الحقيقيون يستخدمون أسماء ClickHouse الأصلية.
  • أُضيف REGEXP_SUBSTR بوصفه اسمًا بديلًا غير حساس لحالة الأحرف لـ regexpExtract لتحقيق التوافق مع Oracle/MySQL/Snowflake. #105122 (Alexey Milovidov).
  • أُضيف SESSION_USER بوصفه اسمًا بديلًا غير حساس لحالة الأحرف لـ currentUser() لتحقيق التوافق مع PostgreSQL / SQL القياسية. #106081 (Takumi Hara).
  • دعم مُعدِّل لاحق NULL / NOT NULL في ALTER TABLE ... ADD/MODIFY COLUMN، على غرار CREATE TABLE. #106150 (Takumi Hara).
  • يمكنك الآن استخدام الدالة h3PolygonToCellsWithContainment من h3 للاستفادة من خوارزميتهم الجديدة، التي تدعم أوضاع الاحتواء المعتمدة على المركز، والاحتواء الكامل، والتداخل. #104455 (Youssef Kadry).
  • يضيف العلامتين IPV4_PREFIX_BITS and IPV6_PREFIX_BITS عند إجراء Keying باستخدام IP_ADDRESS أو FORWARDED_IP_ADDRESS. #89270 (Aditya Chopra).
  • تقبل formatReadableTimeDelta الآن تعبير INTERVAL من نوع غير Month وYear كإدخال. #64315 (Francisco J. Jurado Moreno).
  • يمكن للمستخدم الآن تحديد وسيطة precision اختيارية للدوال formatReadableSize وformatReadableDecimalSize وformatReadableQuantity للتحكم في عدد الأرقام بعد الفاصلة العشرية. القيمة الافتراضية هي 2، مع الحفاظ على السلوك السابق. #104648 (Antonio Filipovic).
  • يضيف الإعداد output_format_float_precision للتحكم في عدد الخانات العشرية في المخرجات النصية للأعداد ذات الفاصلة العائمة. #99721 (phulv94).
  • أُضيف الإعداد output_format_always_write_decimal_point_in_float_and_decimal لعرض الفاصلة العشرية دائمًا مع الأعداد ذات الفاصلة العائمة وأعداد Decimal في التنسيقات النصية، حتى عندما تكون القيمة عددًا صحيحًا. على سبيل المثال، يُخرج 1. بدلًا من 1. وهو معطّل افتراضيًا. #62614 (Ilya Yatsishin).
  • يضيف دعمًا لعناصر config الجديدة لمعالجات HTTP: <url_prefix> و<full_url_prefix> (لمطابقة جميع المسارات تحت مسار أساسي، وهو مفيد مثلًا لمعالجات prometheus)، بالإضافة إلى <url_regexp> و<full_url_regexp> و<headers_regexp>. أما الصيغة القديمة <url>regex:...</url> فأصبحت Obsolete الآن. #107492 (Vitaly Baranov).
  • يدعم إحصاءات basic، وهي إحصاءات مدمجة لكل column تخزن الحد الأدنى/الأقصى الرقمي، ومتوسط طول السلسلة النصية، وعدد قيم NULL حيثما ينطبق ذلك. #106048 (Han Fei).
  • يدعم عقد TTL في ClickHouse Keeper، مع تفعيل اختياري عبر flag الميزة create_ttl. #100397 (Konstantin Vedernikov).
  • يقدّم ميزة memory reservation لأحمال العمل. راجع وثائق Workload scheduling. #82414 (Sergei Trifonov).

ميزة تجريبية

  • تنفيذ الاستعلامات الموزعة متعددة المراحل: يقسم المُخطِّط خطة الاستعلام إلى مراحل مترابطة عبر تبادلات scatter / broadcast / gather / shuffle، ثم يوزّع أجزاء الخطة على عُقد worker. وتُبث البيانات بين المراحل عبر TCP أو تُمرَّر عبر temporary files في object storage مشتركة. ويدعم هذا المسار distributed shuffle وbroadcast hash joins وshuffle aggregation وdistributed sort. هذه الميزة Experimental وهي معطلة افتراضيًا. #106020 (Alexander Gololobov). ويمكن الآن لمحرك distributed query plan التجريبي (make_distributed_plan) استخدام منفذ مختلف لكل worker لكل من توزيع المهام وstreaming exchange، ويُضبط ذلك لكل replica في <remote_servers> باستخدام stateless_worker_port وstreaming_exchange_port. وعند عدم تعيينهما، تُستخدم منافذ server السابقة على مستوى الخادم (stateless_worker_client.port وdistributed_query.streaming_exchange_port). وهذا يتيح تشغيل عدة workers على مضيف واحد. #107885 (Alexander Gololobov).
  • أُضيفت خوارزمية إعادة ترتيب join التجريبية dphyp لعمليات inner joins كخيار للإعداد query_plan_optimize_join_order_algorithm، وكذلك الإعداد query_plan_optimize_join_order_max_searched_plans، الذي يضع حدًا لبحث ترتيب join ويعود إلى الخوارزمية التالية في السلسلة عند تجاوز هذا الحد؛ اضبطه على 0 للحفاظ على سلوك البحث السابق غير المقيّد. #98798 (Alexander Gololobov).
  • أُضيفت الدالة aiEmbed لاستخدام واجهات LLM API في توليد embeddings من داخل ClickHouse. #102922 (George Larionov).
  • أُضيف canary تجريبي لـ Linux OOM: sacrificial child process يستهدفه قاتل نفاد الذاكرة (OOM) في Linux قبل عملية server الرئيسية. وعند تفعيله باستخدام oom_canary_enable، فإنه يخفف memory pressure عبر تنظيف caches الخاصة بالمُخصِّص، وإلغاء queries، وإلغاء عمليات الدمج، وتسجيل حدث في system.crash_log. وتتطلب الاستجابة لحالة OOM وجود دليل على OOM-kill من memory.events في cgroup v2. #101942 (Peng).
  • أصبحت واجهة web terminal عند /webterminal الآن ميزة جاهزة للإنتاج ومفعّلة افتراضيًا. ويجري التحكم فيها عبر إعداد server الجديد enable_webterminal؛ أما الإعداد السابق allow_experimental_webterminal فقد أصبح deprecated لكنه ما يزال مدعومًا حفاظًا على backward compatibility. ولتعطيل الـ endpoint، اضبط enable_webterminal على false. #106255 (Alexey Milovidov).
  • تدعم نقاط نهاية PromQL عبر HTTP الآن تحديد database وtable عبر URL query parameters (database=, table=, أو table=db.table). وقد أُزيل fallback الضمني السابق للجدول default.prometheus: فإذا لم تُحدِّد لا مواصفة handler ولا URL جدولًا، فسيُرجع handler الآن The time series table name is not set. وللاحتفاظ بالسلوك السابق، اضبط <table>default.prometheus</table> أو مرِّر table=... في URL. #107553 (Vitaly Baranov).
  • أُضيف دعم لدالة PromQL histogram_quantile في Table functions‏ prometheusQuery وprometheusQueryRange. ويتيح ذلك حساب quantiles على buckets الخاصة بـ Prometheus histogram التقليدي والمُعرَّفة بالوسم le. #103477 (Joe Smith).
  • أُضيف وضع lazy posting list apply mode إلى text index. وعند تفعيله عبر SET allow_experimental_text_index_lazy_apply = 1 وSET text_index_posting_list_apply_mode = 'lazy'، تُفك شيفرة posting lists عند الطلب على مستوى packed-block باستخدام أسلوب قائم على cursor بدلًا من تمثيلها كاملًا في Roaring Bitmaps، مما يقلل استهلاك الذاكرة ووقت CPU في text index queries الانتقائية. #100035 (Peng).
  • تمت إضافة دعم ABI الخاص بـ AssemblyScript لـ WebAssembly UDFs. يمكنك تجربة ABI الخاص بـ AssemblyScript بدون تثبيت سلسلة الأدوات محليًا باستخدام playground المستند إلى المتصفح، والذي يترجم شيفرة AssemblyScript ويحمّل وحدة WebAssembly الناتجة إلى ClickHouse المحلي. #104606 (Vladimir Cherkasov).
  • إتاحة إرفاق معالجات Prometheus على منفذ HTTP الرئيسي مع بادئة اختيارية. #104975 (James Cunningham).
  • تمت إضافة إعداد تجريبي في MergeTree باسم packed_skip_index_max_bytes يجمع التدفقات الفرعية الصغيرة لـ skip-index في أرشيف skp_idx.packed واحد لكل جزء، مما يقلل الضغط على inode عند تعريف عدد كبير من فهارس التخطي على جدول. ويُتخذ القرار لكل تدفق فرعي وقت الكتابة: فالتدفقات الفرعية التي يبقى حجمها المتسلسل دون العتبة تُوضَع في الأرشيف، بينما يحتفظ أي شيء أكبر بتخطيط skp_idx_<name>.idx2 / .mrk2 المستقل. ويمكن لجزء واحد أن يجمع بين التخطيطين. فهارس النص الكامل غير مدعومة وتظل دائمًا لكل ملف. القيمة الافتراضية هي 0 (التجميع معطّل). #105321 (Raúl Marín).
  • دعم serialization لـ Buffers في WebAssembly UDFs باستخدام ABI BUFFERED_V1، وإضافة webassembly_udf_enable_fuel كإعداد persisted لدالة WASM UDF. #105574 (Antonio Andelic).
  • إضافة إعداد تجريبي باسم use_reader_executor (معطّل افتراضيًا) يوجّه reads عبر ReaderExecutor جديد قائم على pipeline بدلًا من سلسلة read buffers الـ legacy. #106570 (Sema Checherinda). كما أُضيفت metrics خاصة بـ observability لمسار القراءة التجريبي use_reader_executor، بما في ذلك KPI لتكلفة القراءة المُنمذجة (ReaderExecutorModeledCostMsPerRequestedMiB). #106968 (Sema Checherinda). وتم تقديم المخزن المؤقت ChainedBuffers ضمن مسار القراءة التجريبي use_reader_executor، مع metric باسم ReaderExecutorChainedBufferBytes. #107210 (Sema Checherinda).
  • أصبح ترتيب الفرز التنازلي في sorting key الخاصة بـ MergeTree (مثل ORDER BY (time DESC, key)) مدعومًا دائمًا الآن، ولم يعد يتطلب الإعداد التجريبي allow_experimental_reverse_key، الذي أصبح مهملًا. #106440 (Nikita Mikhaylov).
  • أصبح Nullable(Tuple(...)) الآن في مرحلة Beta. وهو معطّل افتراضيًا؛ اضبط enable_nullable_tuple_type = 1 لاستخدامه. #107754 (Nihal Z. Miaji).

تحسين الأداء

  • تغييرات متنوعة في Keeper تجعله أسرع إجمالًا بنحو الضعف (تحسين التجميع، وتمرير الرسائل إلى القائد عبر خطوط الأنابيب، وتمرير إلحاقات السجل عبر خطوط الأنابيب). #101757 (Michael Kolupaev).
  • تقليل الحمل الإضافي لكل query في استعلامات SELECT البسيطة (التحليل النحوي، والتحليل، والتخطيط). على سبيل المثال، أصبح SELECT count() FROM hits عبر connection واحدة أسرع بنحو 50%. #104513 (Raúl Marín).
  • تحسين index analysis لـ primary key index في primary keys الطويلة وعالية الكاردينالية. بالنسبة إلى primary key طويل، أصبح زمن تشغيل index analysis يعتمد الآن أساسًا على تعقيد filter الخاص بـ query (أي key columns التي يستخدمها فعليًا)، لا على طول primary key — لذا فإن توسيع sorting key يضيف حملًا إضافيًا ضئيلًا جدًا إلى index analysis في queries التي تُجري filter على عدد قليل فقط من columns الخاصة به. أما في حالة primary key عالي الكاردينالية، حيث يحتفظ ClickHouse في الذاكرة فقط بـ prefix انتقائي من key columns ولا يحمّل الأعمدة اللاحقة، فإن index analysis يعمل الآن على هذا الـ in-memory prefix فقط بدلًا من المفتاح بالكامل. هذا التحسين مفعّل افتراضيًا، ويمكن تعطيله عبر الإعداد الجديد use_lightweight_primary_key_index_analysis. يغلق #65103. #91836 (Nihal Z. Miaji).
  • أصبح build الافتراضي لـ x86 يستهدف الآن x86-64-v3 ‏(AVX2) بدلًا من x86-64-v2 ‏(SSE4.2). ويتطلب ذلك CPU يدعم AVX2 ‏(Intel Haswell أو أحدث، AMD Excavator أو أحدث). إذا كان CPU لديك لا يدعم AVX2، فاستخدم build ‏amd64compat الذي يستهدف x86-64 القياسي. #105019 (Raúl Marín).
  • استخدام ipnsort وdriftsort ‏(sorting مستقر) — وهما منفذان بلغة C++ لتنفيذات الفرز في المكتبة القياسية لـ Rust — في عمليات sorts للمقارنة العامة. وهذا يسرّع ORDER BY على columns غير الرقمية وعمليات الفرز المستقرة، ويزيل إحدى أسوأ الحالات عند الإدخال المفروز عكسيًا. #106650 (Alexey Milovidov).
  • تحسين جديد لـ GROUP BY للمفاتيح عالية الكاردينالية والمتوزعة بالتساوي، يوزّع الصفوف عبر threads من خلال hash لمفتاح التجميع، بحيث يجمّع كل thread مجموعة منفصلة من المفاتيح من دون مرحلة merge. اضبط enable_sharding_aggregator = 1 لتفعيله. #104233 (Nihal Z. Miaji).
  • تفعيل prefetching لـ hash table في queries ‏GROUP BY ذات المفاتيح النصية، مما يحسّن أداء aggregation النصية عالية الكاردينالية بنحو 8%. #101007 (Le Zhang).
  • تقليل Peak memory usage عند merge نتائج two-level aggregation الجزئية ذات aggregate states الكبيرة (مثل groupArray)، وذلك بتحرير الحالات المصدرية لكل bucket تدريجيًا أثناء الـ merge بدلًا من إبقائها جميعًا نشطة حتى اكتمال الـ merge. #102330 (Yuri Fedoseev).
  • جرى تحسين التمثيل في الذاكرة لـ Enum DataType. ويمكن أن يتحسن استهلاك الذاكرة للجداول التي تحتوي على النوع Enum بما يصل إلى 10 أضعاف لمكوّن Enum. كما أن زمن استرجاع name حسب value (الرقم) مماثل أو أسرع. أما البحث حسب الاسم فأبطأ قليلًا، لكن هذا النمط من الوصول أقل شيوعًا. #95668 (Ilya Yatsishin).
  • إضافة تخزين مؤقت لحلّ المعرّفات لمنع تكرار حلّها أثناء query analysis. #88043 (Max Justus Spransy).
  • تحسين أداء تحليل الاستعلامات للاستعلامات التي تعمل على جداول تضم عدداً كبيراً من الأعمدة: إذ جرى تجنّب حساب قيم hash لعُقد الأعمدة (التي تتضمن تعبير الجدول المصدر بالكامل) عند عدم الحاجة إليها. وأصبح تحليل الاستعلامات الفرعية المتداخلة SELECT * فوق جدول يحتوي على نحو 1200 عمود أسرع الآن بحوالي 50 مرة. #106957 (Dmitry Novik).
  • تسريع تحليل الاستعلامات التي تتضمن عدداً كبيراً من استدعاءات الدوال أو استدعاءات دوال متداخلة بعمق، وذلك بإزالة قيمة hash زائدة لشجرة الاستعلام من cache تحليل الدوال. #107516 (Dmitry Novik).
  • إصلاح حالات التعطل الطويلة عند تسجيل الدخول وبدء الاستعلامات في مخزن الوصول المتماثل عند تغيّر عدد كبير من كيانات الوصول (سياسات الصفوف، والأدوار، والحصص، وملفات تعريف الإعدادات) دفعة واحدة. وأصبحت كل cache على مستوى الكيان تعيد الحساب مرة واحدة لكل Batch من الإشعارات بدلاً من مرة لكل كيان متغيّر، مما يزيل عملاً تربيعياً كان قد يُبقي قفل الوصول محتجزاً لعدة دقائق. #107672 (Azat Khuzhin).
  • مشاركة FixedHashMap الخاصة بـ hash join كعامل تصفية وقت التشغيل للربط على جهة probe. فعندما يكون جدول hash على جهة build من نوع FixedHashMap (أو يمكن تحويله إليه)، يُنشر بوصفه عامل تصفية وقت التشغيل ويستبدل Set/BloomFilter الذي كان BuildRuntimeFilterStep سيُثبّته في الحالة العادية. ويتحكم في ذلك الإعداد الجديد join_runtime_filter_from_fixed_hash_table (القيمة الافتراضية true). #105640 (Xiaozhe Yu).
  • تطبيق lazy لفهارس selector وفهارس replication في حالة وجود JOIN يتبعه LIMIT انتقائي أو TopN أو JOIN آخر. وللتحكم في عدد أعمدة الحمولة المطلوبة لتفعيل فهارس selector المؤجلة، استخدم الإعداد query_plan_min_columns_for_join_lazy_indexing (تعني القيمة 0 أن التحسين معطّل). وللتحكم في قيمة LIMIT التي يُطبَّق عندها هذا التحسين، استخدم الإعداد query_plan_max_limit_for_join_lazy_indexing. #106566 (Hechem Selmi).
  • أصبح الآن مسموحاً بإعادة ترتيب JOIN باستخدام DP (البرمجة الديناميكية) مع parallel replicas. #105889 (Nikita Taranov).
  • تحسين query plan عندما يستخدم JOIN عوامل تصفية وقت التشغيل (مع تفعيل enable_join_runtime_filters افتراضياً): إذ أصبح نموذج تكلفة إعادة ترتيب الربط يتجاوز WindowTransform (وغيره من plan step التي تحافظ على الصفوف) في الشجرة الفرعية اليمنى، ويستخدم عدد الصفوف الأساسي وNDV لكل عمود بدلاً من الرجوع إلى غياب الإحصاءات. #107229 (UnamedRus).
  • إزالة الافتراضية من عملية إخراج الصفوف غير المنضمّة في RIGHT وFULL join عبر تجميعها على شكل Batch. #105679 (Hechem Selmi).
  • دعم طريقتَي keys32 وkeys64 المعبأتين في HashJoin. #107202 (Nikita Taranov).
  • دعم طريقتَي keys32 وkeys64 المعبأتين في Set. #107564 (Nikita Taranov).
  • معالجة أكثر كفاءة للأعمدة القابلة للقيم الفارغة في aggregation. #106015 (Nikita Taranov).
  • تحسين أداء استعلامات LIMIT BY. #103349 (Nihal Z. Miaji).
  • تسريع استعلامات ORDER BY ... LIMIT BY عبر تنفيذ LIMIT BY داخل كل تدفق مرتّب متوازٍ أثناء Sort عندما تكون أعمدة LIMIT BY بادئة لـ ORDER BY. يقلّل ذلك عدد الصفوف التي تمر عبر دمج الفرز النهائي وأي مراحل لاحقة في خط المعالجة. يتحكم في هذا التحسين الإعداد الجديد query_plan_push_limit_by_into_sort (مُمكّن افتراضيًا). #104000 (Nihal Z. Miaji).
  • تسريع استعلامات SELECT ... LIMIT N BY <cols> عندما تكون <cols> بادئة لمفتاح الفرز في الجدول، أو تصبح كذلك بعد أن يثبّت WHERE col = const الأعمدة الأولى. عند تمكين ذلك، يقرأ MergeTree البيانات بترتيب المفتاح الأساسي، ثم يطبّق LIMIT BY التصفية أولًا في وضع التدفق مع ذاكرة O(1) لكل تدفق مرتّب، مما يستبعد معظم البيانات، ثم يُنفَّذ LIMIT BY العادي أخيرًا على البيانات المُقلَّصة للحصول على النتيجة النهائية. يتحكم في ذلك الإعداد الجديد optimize_limit_by_in_order (مُمكّن افتراضيًا). #105135 (Nihal Z. Miaji).
  • تسريع استعلامات LIMIT BY على جداول MergeTree المُقسَّمة إلى partitions عبر تنفيذ LIMIT BY داخل تدفق كل partition على نحو متوازٍ، بدلًا من دمج جميع التدفقات في تدفق واحد قبل تطبيق الحد. ينطبق ذلك عندما يكون partition expression دالة حتمية لأعمدة LIMIT BY، بحيث لا يمكن لأي مجموعة LIMIT BY أن تمتد عبر قسمين. يتحكم في ذلك الإعداد الجديد allow_limit_by_partitions_independently (مُمكّن افتراضيًا). #105126 (Nihal Z. Miaji).
  • تسريع استعلامات LIMIT BY عبر إزالة key expressions الزائدة: فيُسقَط المفتاح الذي يكون دالة حتمية للمفاتيح الأخرى (مثلًا LIMIT 5 BY x, f(x) تصبح LIMIT 5 BY x)، وتُستبدل الدالة الحقنية للمفتاح بالـ argument الخاص بها (مثلًا LIMIT 5 BY toString(x) تصبح LIMIT 5 BY x). يقلّل ذلك عدد تعبيرات التي تُقيَّم لكل row وتكلفتها. يتحكم في ذلك الإعدادان الجديدان optimize_limit_by_function_keys و optimize_injective_functions_in_limit_by، وكلاهما مُمكّن افتراضيًا. #106818 (Nihal Z. Miaji).
  • تسريع aggregation الموزّع على الشظايا، وتقسيم grace_hash join إلى buckets، وتقسيم window المتوازي، عبر استبدال تجزئة الأعمدة لكل chunk بنواة تستخدم CRC32C العتادي. #106538 (Harikrishnan Prabakaran).
  • تحسين L1Distance وL2Distance وL2SquaredDistance وLinfDistance وcosineDistance لوسائط Array باستخدام المعالجة المتجهية التلقائية متعددة الأهداف على x86-64-v4/v3. وبالنسبة إلى وسائط Array غير الثابتة، يمكن الآن لجميع هذه الدوال، باستثناء LpDistance التي تستخدم std::pow مع exponent وقت التشغيل، الاستفادة من kernels ذات معالجة متجهية من قِبل المصرّف. كما جرى الحفاظ على مسارات التسريع الحالية AVX-512 وSapphire Rapids لوسائط BFloat16 الثابتة في L2Distance وcosineDistance. #101310 (Peng).
  • تحسّن أداء الدالة {Norm}Distance وdotProduct. #106007 (Nikita Taranov).
  • تحسّن أداء الدالة arrayNorm. #106211 (Nikita Taranov).
  • تحسّن أداء dotProduct في بعض الحالات. #106210 (Nikita Taranov).
  • تحسين أداء مسارات AVX-512 ذات المعامل الثابت على اليسار لكل من L2Distance وcosineDistance على Array(Float32) وArray(Float64) وArray(BFloat16) عندما يكون طول المصفوفة قابلاً للقسمة تمامًا على عرض المعالجة المتجهية. #104625 (Sergey Kuznetsov).
  • تمكين توليد شيفرة AVX-512 لمعالجات amd، مع تحسين توليد الشيفرة للدالة arrayDistance. #106505 (Nikita Taranov).
  • تحسين أداء الدالتين L2DistanceTransposed وcosineDistanceTransposed لنوع البيانات QBit. #106701 (Raufs Dunamalijevs).
  • تحسين أداء الدوال encrypt وdecrypt وtryDecrypt وaes_encrypt_mysql وaes_decrypt_mysql بما يصل إلى عشرة أضعاف، مع استعادة الأداء المفقود نتيجة الترحيل من BoringSSL إلى OpenSSL 3.x ‏(24.4). #107339 (Konstantin Bogdanov).
  • تحسين أداء الدوال encrypt وdecrypt وhalfMD5 من خلال تجنب عمليات lookup الضمنية لكل صف على provider في OpenSSL 3.x. #99105 (Konstantin Bogdanov).
  • إضافة تنفيذ SIMD للدالة SHA1 يحسب قيم hash لعدة مدخلات بالتوازي باستخدام AVX-512، مما يحسن الإنتاجية. #105459 (Joanna Hulboj).
  • إضافة backend ‏AArch64 ASIMD/NEON لتنفيذ MD5 متعدد المخازن المؤقتة. #105563 (Venkata Vineel ).
  • دمج blocks المصدر قبل حساب الإسقاط أثناء MATERIALIZE PROJECTION لتقليل عدد projection parts المؤقتة وتقليل overhead الدمج. أدى ذلك إلى تسريع بنحو ~3.4x على table تضم 50 مليون صف. #100047 (Amos Bird).
  • تقليل latency لأوامر INSERT في جداول MergeTree التي تحتوي على skip indices على columns الخاصة بـ ORDER BY، وذلك عبر تجنب تبديلات الأعمدة غير الضرورية أثناء كتابة part (بنحو ~17% على workloads بنمط traces). #101101 (Amos Bird).
  • تمكين مسارات شيفرة SIMD الخاصة بـ Arrow (‏NEON على ARM، وSSE4.2/AVX2/AVX512 على x86)، واستخدامها لتسريع فك ترميز columns من نوع Parquet ‏FLOAT/DOUBLE المرمزة باستخدام BYTE_STREAM_SPLIT. #106376 (Raúl Marín).
  • تحسين أداء الإدراج لأعمدة LowCardinality التي تحتوي على فهارس bloom_filter. #106410 (Michael Jarrett).
  • تنفيذ نسخ blob بالتوازي في DiskObjectStorageTransaction::copyFile باستخدام thread pool مخصص لكل disk. #105089 (Asya Shneerson).
  • تجنب قراءة محتويات file عند استخدام input format ‏One مع table functions الشبيهة بالملفات مثل file وs3. #105157 (Yue Ni).
  • تسريع بدء تشغيل clickhouse على macOS بنحو 3x من خلال عدم تصدير الرموز الديناميكية، التي كان الرابط الديناميكي سيعالجها لولا ذلك عند كل تشغيل. #107768 (Raúl Marín).
  • تسريع تحميل filesystem cache عند بدء التشغيل من خلال تجنّب فتح directory إضافي لكل مفتاح cache. #107414 (Alexey Milovidov).
  • تسريع تحميل filesystem cache عند بدء التشغيل عبر تمكين خيوط سرد directory من المساعدة في تحميل metadata الخاصة بـ cache فور انتهاء السرد، بدلًا من ترك نصف الخيوط في حالة idle. #107416 (Alexey Milovidov).
  • تقليل overhead بدء تشغيل عملية clickhouse من خلال تحديث مكتبة WasmEdge المضمّنة، التي لم تعد تُنشئ قيمة hash سرية عشوائية في مهيّئ عام عند كل بدء تشغيل. #107869 (Raúl Marín).
  • أصبح بإمكان المفتاح الأساسي في MergeTree وفهارس التخطي الآن استبعاد granules عند تطبيق عامل تصفية يغلّف فيه ifNull أو coalesce شرطًا ما، مثل ifNull(key = 0, 0) أو coalesce(key = 0, 0). وكانت مثل هذه predicates — التي تُنشئها مولدات query غالبًا لتحويل مقارنة قد تكون NULL إلى قيمة منطقية محددة — غير مفهومة سابقًا لتحليل الفهارس، وبالتالي لم يكن ممكنًا تخطي granules. ويُوسّع هذا الإعداد الحالي allow_key_condition_coalesce_rewrite (المُمكَّن افتراضيًا). يغلق #106264. #106272 (Andy Zhao).
  • ينبغي أن يستهلك تقييم فهرس التخطي على أنواع DateTime64 قدرًا أقل من CPU في 26.6. #107707 (Shankar Iyer).
  • تحسين أداء تحليل text index في عمليات البحث متعددة token عبر تحسين التعامل مع token النادرة. #98226 (Anton Popov).
  • استخدام cache لمقاطع segments المضغوطة لقائمة الترحيل الخاصة بـ text index. #106299 (Anton Popov).
  • تحسين أداء generic exclusion search لطلبات query التي تحدد نطاقات متتالية كبيرة من الجدول. #93813 (Michael Jarrett).
  • تتشارك clients ‏S3 التي تستخدم endpoint وbucket نفسيهما cache واحدة، مما يتجنب تكرار discovery للمنطقة. يغلق #92482. #96802 (Andrey Zvonov).
  • إذا احتوت query على has(<constant array>, <expr>)، فسيقوم analyzer بتحويل العقدة لاستخدام تنفيذ in أسرع إذا كان ذلك ممكنًا. #97341 (Shankar Iyer).
  • عند جدولة job جديدة في ThreadPool، أيقِظ worker thread التي أصبحت idle مؤخرًا (LIFO) بدلًا من واحدة عشوائية. يقلل هذا من تجزؤ الذاكرة الناتج عن cacheات allocator الخاصة بكل thread. ولا يتغير ترتيب معالجة jobs. #100177 (Alexey Milovidov).
  • تحسين أداء Runtime Filters التقريبية وفهارس bloom filter. #100201 (Christoph Viebig).
  • السماح لـ ASOF JOIN باستخدام خوارزمية join ‏parallel_hash، مع تنفيذ مرحلة البناء بالتوازي عبر قيم مفاتيح المساواة المميّزة. في السابق، كان ASOF مستبعدًا دائمًا من parallel_hash. #105375 (Greg Maher).
  • تجنّب قراءة مدخلات غير محدودة لطلبات query ‏INTERSECT وEXCEPT عندما تجعل مدخلة فارغة النتيجة معروفة مسبقًا بأنها فارغة. #105393 (Yue Ni).
  • إضافة constinit لمجموعة متنوعة من مانعات MemoryTracker. #105490 (Azat Khuzhin).
  • تحسين أداء bitmapContains لحالات groupBitmap غير UInt64 عبر تجنّب استدعاءات rb_max المتكررة أثناء التحقق من النطاق. #105960 (Yue Ni).
  • تسريع الاستعلامات غير المتصلة لأعمدة LowCardinality المعتمدة على قاموس واحد. #103662 (Ivan Babrou).
  • إضافة مسار سريع لمرحلة probe في HashJoin عندما تحتوي الكتلة على صف واحد. #106008 (Nikita Taranov).
  • أصبحت predicates في استعلامات مثل SELECT ... FROM view(SELECT ... FROM remote(...)) WHERE ... تُدفَع الآن إلى الاستعلام المُرسَل إلى الـ shard البعيد. وكان التحسين allow_push_predicate_ast_for_distributed_subqueries يفتقر إلى حالة خاصة بـ table functions. #105986 (Nikolai Kochetov).
  • تفعيل enable_join_transitive_predicates افتراضيًا. #103724 (Alexander Gololobov).
  • إضافة دعم للدوال multiSearchAny وmultiSearchAnyUTF8 وmultiMatchAny في text indexes. كما جرى تحسين index analysis في text indexes للدالة match، بحيث يمكن الآن للأنماط التي تحتوي على مجموعات بديلة تخطي المزيد من granules. #106279 (Anton Popov).
  • السماح بدمج عوامل التصفية التي تُضاف بعد اختيار PREWHERE الأولي (predicate pushdown، أو Runtime Filters، أو PREWHERE صريح مع WHERE يحدده المخطط) في PREWHERE الحالي خلال تمريرة ثانية للمحسّن، بدلًا من بقائها كخطوة Filter منفصلة فوق قراءة MergeTree. #105445 (Yarik Briukhovetskyi).
  • يسجّل QueryConditionCache الآن granules التي تُستبعَد بالتصفية بشكل منفصل، حتى داخل دفعات القراءة التي تجتاز PREWHERE جزئيًا، مما يقلّل عدد العلامات التي تعيد الاستعلامات اللاحقة قراءتها عند استخدام condition نفسه. #105335 (Han Fei).
  • إضافة إعداد Keeper وهو nuraft_use_bg_thread_for_snapshot_io، والمفعّل افتراضيًا، بحيث يقرأ NuRaft كائنات snapshot من خيط خلفي بدلًا من worker threads الخاصة بـ Raft. #106285 (Antonio Andelic).
  • تقليل ذروة استخدام الذاكرة عند تطبيق snapshots المستلَمة في ClickHouse Keeper باستخدام KeeperMemoryStorage. #105851 (Antonio Andelic).
  • توجيه allocations الخاصة بـ LLVM/JIT إلى arena مخصّص في jemalloc. ويؤدي ذلك إلى تقليل تجزئة RSS الناتجة عن تداخل عمليات التتبّع طويلة العمر الخاصة بـ JIT مع allocations قصيرة العمر الخاصة بالاستعلامات. كما تُضاف مقاييس غير متزامنة جديدة هي jemalloc.jit_arena.active_bytes وjemalloc.jit_arena.dirty_bytes وCompiledExpressionCacheBytesMax وCompiledExpressionCacheCountMax لأغراض الرصد. وأصبح SYSTEM DROP COMPILED EXPRESSION CACHE الآن يحذف أيضًا مثيلات CHJIT الأساسية ويفرّغ JIT arena. #104113 (Raúl Marín).
  • إصلاح الزيادة المفرطة في حجز الذاكرة عند قراءة أعمدة Nullable(String) المتناثرة والمشفّرة بالقاموس من Parquet باستخدام القارئ native V3. #102805 (Francisco).
  • تم إصلاح CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM) على الأقراص المشفّرة بحيث لم يعد ينسخ البيانات بدلًا من إنشاء روابط صلبة إليها. #106731 (Nikita Mikhaylov).
  • تم تحسين تقدير cardinality في مُحسّن plan للاستعلام: فالعمود الناتج عن دالة حتمية أحادية الوسيط (مثل toYear(date)) يرث الآن عدد القيم المميزة لوسيطه باعتباره حدًا أعلى، بدلًا من تركه بلا إحصاءات، مما يؤدي إلى إعادة ترتيب أكثر دقة لعمليات join. #107757 (Alexander Gololobov).
  • تم تقليل الحمل الإضافي على CPU الناتج عن logging غير المتزامن عند ارتفاع معدلات السجلات، وذلك عبر إخطار consumer السجل فقط عند انتقال queue من فارغة إلى غير فارغة بدلًا من كل رسالة. #107352 (Nikita Mikhaylov).
  • تمت إزالة العمليات الحسابية المكررة أثناء query execution في مزيد من السيناريوهات. #106113 (Yarik Briukhovetskyi).
  • تمت موازاة معالجة نتيجة تعبير الجدول الشائع التعاودي: لم يعد GROUP BY أو أي إجراء آخر على نتيجة WITH RECURSIVE كبيرة الحجم مقصورًا على thread واحد. #107694 (Alexey Milovidov).
  • تم تحسين أداء البحث غير الحساس لحالة الأحرف عن substring (positionCaseInsensitiveUTF8 وILIKE وmultiSearchAnyCaseInsensitiveUTF8 والدوال ذات الصلة) عبر إضافة مسار NEON SIMD على ARM ونواة AVX2 أوسع على x86. #107882 (Raúl Marín).
  • تم إصلاح تراجع في throughput بنسبة تقارب 16% لبرنامج الترميز FPC ذي الفاصلة العائمة على ARM، وكان قد أُدخل عندما بدأت جداول التنبؤ الخاصة به تستخدم VectorWithMemoryTracking. #108182 (Groene AI).

تحسينات

  • يُحدِّث MemoryWorker الذي يعمل في الخلفية الآن الحد الصارم للذاكرة في الخادم بشكل دوري استنادًا إلى استخدام الذاكرة الحالي ومقدار الذاكرة الذي تُبلغ النواة بأنه متاح، بحيث يترك ClickHouse هامشًا للعمليات الأخرى التي تعمل على المضيف نفسه. الصيغة هي (resident memory + system MemAvailable) * max_server_memory_usage_to_ram_ratio. ويتحكم إعداد الخادم نفسه max_server_memory_usage_to_ram_ratio في كلٍّ من الحد الأقصى عند بدء التشغيل والضبط الديناميكي؛ اضبطه على 0 لتعطيلهما معًا. وللاحتفاظ فقط بالحد الثابت عند بدء التشغيل/إعادة التحميل (وهو سلوك الإصدارات السابقة)، اضبط إعداد الخادم الجديد memory_worker_dynamic_hard_limit على 0. #104964 (Alexey Milovidov).
  • دعم PostgreSQL client لـ C# في بروتوكول PostgreSQL. يُغلق هذا #18611. #80785 (Konstantin Vedernikov).
  • تستخدم mutations الآن analyzer. #98884 (Nikolai Kochetov).
  • أُضيف تحكم دقيق في إظهار الاستعلامات في CLI. وأصبح الخيار --echo يقبل الآن قيمة Boolean اختيارية، ويعمل في كلٍّ من الوضع التفاعلي وbatch mode. وتتحكم الخيارات الجديدة --echo-formatted و--echo-query-id في ما إذا كانت الاستعلامات المعروضة ستُنسَّق، وما إذا كان سيتم طباعة query_id، على التوالي. كما يتحكم الخيار --hilite/--highlight الآن أيضًا في تمييز الاستعلامات المعروضة. وكنتيجة جانبية، أصبح --echo الآن خيارًا ذا قيمة Boolean، لذا فإن الاستعلام الموضعي الذي يأتي مباشرة بعد --echo بدون قيمة صريحة يُعامَل على أنه قيمته؛ استخدم --echo --query "..." أو --echo=false بدلًا من ذلك. #106191 (Alexey Milovidov).
  • دعم تطور المخطط مع عمليات التحقق المتزامنة من الاتساق لكتالوجات بحيرة البيانات. #106102 (Konstantin Vedernikov).
  • السماح باستخدام cache disk لمحركات جداول بحيرة البيانات. #102017 (RinChanNOW).
  • إصلاح قراءة بيانات الجداول في قواعد بيانات DataLakeCatalog التي تستخدم catalog_type = 'onelake' عبر استخدام endpoint الخاص بـ OneLake Blob (.blob.fabric.microsoft.com) افتراضيًا. اضبط onelake_use_blob_endpoint = false للإبقاء على السلوك السابق لنقطة نهاية DFS (.dfs.fabric.microsoft.com). #106843 (Konstantin Vedernikov).
  • تحديث القيمة الافتراضية للإعداد persistent_processing_node_ttl_seconds في S3(Azure)Queue من 1 hour إلى 6 hours (وهو ما يمثل وقت التنظيف الناتج عن إعادة تشغيل غير نظيفة للخدمة، وما إلى ذلك). كانت القيمة الافتراضية السابقة مناسبةً لـ ttl لعُقد المعالجة، لكنها تُستخدم أيضًا لـ ttl لقفل bucket، الذي قد يبقى محتفَظًا به لمدة أطول، لذلك لم تكن ساعة واحدة كافية. #106838 (Kseniia Sumarokova).
  • خُفِّض الحجم الافتراضي لـ metadata cache الخاصة بـ Iceberg من 1 GB إلى 128 MB. #106492 (Konstantin Vedernikov).
  • تمرير query_id لمهمة streaming في S3Queue إلى عمليات insert في الجداول التابعة. #106494 (Christoph Wurm).
  • تعبئة used_storages في system.query_log باسم محرك التخزين عند الاستعلام عن الجداول عبر DataLakeCatalog. #100706 (Melvyn Peignon).
  • يمكنك التحقق من قيمتي operation وsummary الموجودة في snapshots الخاصة بـ Iceberg. يفيد ذلك في الاختبار وتصحيح الأخطاء. #106246 (Den Kalantaevskii).
  • أصبح طلب الرفع النهائي متعدد الأجزاء إلى S3 يُستكمَل الآن بشكل غير متزامن عبر متتبّع المهام، بحيث يمكن أن يتداخل مع رفع الجزء الأخير بدلًا من تشغيله تسلسليًا في مرحلة الإنهاء. #105487 (Asya Shneerson).
  • أُضيفت أربعة إعدادات جدول جديدة إلى MergeTree للتحكم في المعلمات الافتراضية للفهارس النصية: text_index_dictionary_block_size وtext_index_dictionary_block_frontcoding_compression وtext_index_posting_list_block_size وtext_index_posting_list_codec. تتيح هذه الإعدادات ضبط سلوك الفهرس النصي على مستوى الجدول من دون الحاجة إلى تحديد معلمات في كل تعريف فهرس. وتظل الوسيطات الصريحة لكل فهرس لها الأسبقية. #100626 (Anton Popov).
  • أصبح بإمكان projections تجاوز إعدادات MergeTree إضافية (الضغط، وتنسيق الأجزاء، والتسلسل) إلى جانب index_granularity، مع قائمة سماح للإعدادات المسموح بها والتحقق منها. #101170 (Amos Bird).
  • أُضيفت الأعمدة current_projection وcurrent_projection_progress وprojections_completed وprojections_remaining إلى system.merges لعرض تقدّم دمج projections. #102611 (Amos Bird).
  • أُصلحت مشكلة في PREWHERE مع استعلام IN الفرعي على أعمدة المفتاح الأساسي، إذ لم يكن يستخدم فهرس المفتاح الأساسي في Granule pruning، ما كان يؤدي إلى فحص كامل للجدول بدلًا من قراءة granules ذات الصلة فقط. #102570 (Nikita Mikhaylov).
  • تفرض الدالة h3PolygonToCells الآن الحد الأقصى لحجم المصفوفة عبر جميع المضلعات في MultiPolygon، وتتحقق من رموز الإرجاع الخاصة بمكتبة H3 الأساسية، وترفض وسائط MultiLineString بدلًا من إرجاع نتيجة فارغة بصمت. #106399 (Raúl Marín).
  • أُضيف جدول جديد مخصّص لـ Keeper فقط باسم system.keeper_snapshots، ويحتوي على معلومات عن snapshots المحلية في ClickHouse Keeper. #105571 (Miсhael Stetsyuk).
  • أُضيف جدول جديد مخصّص لـ Keeper فقط باسم system.keeper_changelogs، ويحتوي على معلومات عن ملفات changelog المحلية في ClickHouse Keeper (سجل Raft). #105617 (Miсhael Stetsyuk).
  • أُضيف جدول system.keeper_cluster مخصّص لـ Keeper فقط. ويحتوي على صف واحد لكل عضو في cluster الخاص بـ Raft كما يراه Keeper الحالي. #105646 (Miсhael Stetsyuk).
  • أُضيف المزيد من أحداث ملف تعريف Keeper (من جهة الخادم + جهة العميل) الخاصة بـ watches. يُغلق #97703. #105336 (Konstantin Vedernikov).
  • أُضيفت إعدادات coordination_settings في Keeper لـ NuRaft لتقييد قبول log entries غير المُعتمدة، ولتقييد الاستقصاء العكسي لـ append-entries. #106108 (Antonio Andelic).
  • أُضيف الإعداد enable_compression إلى table function ‏mysql، وtable engine ‏MySQL، وdatabase engine ‏MySQL، وDictionary ‏SOURCE(MYSQL)، وnamed collections. وعند تفعيله، يفاوض ClickHouse على Compression على مستوى بروتوكول MySQL لكل البيانات المنقولة عبر connection. #103229 (Bernard Lim).
  • تم تقليل زمن استجابة الإلغاء للاستعلامات التي تعمل عبر PostgreSQL wire protocol: إذ أصبح KILL QUERY الآن يوقف تسلسل الإخراج داخل chunk واحد بدلًا من انتظار إرسال الـ chunk بالكامل إلى العميل. #106535 (Roman Vasin).
  • تم تقليل زمن استجابة الإلغاء للاستعلامات التي تعمل عبر MySQL wire protocol: إذ أصبح KILL QUERY الآن يوقف تسلسل الإخراج داخل chunk واحد بدلًا من انتظار إرسال الـ chunk بالكامل إلى العميل. #107228 (Roman Vasin).
  • تم إصلاح قراءة طول auth_response في MySQL handshake، إذ كانت قيمة بايت الطول >= 128 تُفسَّر على أنها قيمة بحجم عدة غيغابايت لأنه كان يُقرأ كـ char موقَّع. #107384 (uwezkhan).
  • أصبح MaterializedPostgreSQL الآن يربط أعمدة PostgreSQL من النوع numeric(p, 0) ذات precision الأكبر من 76 (مثل numeric(78, 0) المستخدمة للأعداد الصحيحة بعرض 256 بت) مع Int256 في ClickHouse بدلًا من الفشل برسالة “Precision too big”. وتُرفَض القيم التي لا تتسع داخل Int256 مع رسالة error واضحة. #107431 (Alexey Milovidov).
  • إرسال Exception إلى العميل عند فشل إعداد TCP connection. #107317 (Nikolai Kochetov).
  • يمكن للمستخدمين الآن insert حقول Fixed من Avro لمتغيرات الأعداد الصحيحة 8 بت و16 بت و32 بت و64 بت. #98139 (Patrick Pichler).
  • أصبح format AvroConfluent الآن يعيد المحاولة في Confluent Schema Registry HTTP client عند الإخفاقات المؤقتة (مهلات النقل، ورفض connection، وأخطاء DNS، وأخطاء HTTP 5xx/408/429) باستخدام backoff أُسِّي، بدلًا من إيقاف عملية INSERT عند أول خلل شبكي. ويتحكم الإعدادان الجديدان format_avro_schema_registry_max_retries (القيمة الافتراضية 5) وformat_avro_schema_registry_retry_initial_backoff_ms (القيمة الافتراضية 100) في هذه السياسة. وتظل validation error الخاصة بـ schema (HTTP 409 أو Avro JSON غير صالح) قاتلة. #106661 (Groene AI).
  • تُسجَّل الآن الامتيازات في system.query_log.used_privileges لجميع عمليات التحقق من الوصول الممنوح، بما في ذلك تلك التي تمر عبر المسار isGranted غير المُطلِق للاستثناءات (checkAccessWithFilter). في السابق، كانت تُسجَّل فقط الامتيازات التي جرى التحقق منها عبر نقاط الدخول المُطلِقة للاستثناءات (checkAccess / checkGrantOption)، مما جعل READ ON FILE / READ ON S3 / READ ON AZURE / READ ON URL غير مرئية في سجل التدقيق بالنسبة إلى استعلامات DESCRIBE وCREATE TABLE AS والاستعلامات المشابهة التي تستخدم table functions file / s3 / azure / url. ولم يتغير فرض الوصول. #104693 (Alexey Bakharew).
  • أُضيفت المقاييس Asynchronous TotalUncompressedBytesOfMergeTreeTables وTotalUncompressedBytesOfMergeTreeTablesSystem، وتعرضان إجمالي uncompressed size للبيانات المخزنة في جداول MergeTree-family. #106364 (Alexey Milovidov).
  • أُضيف حدث profile باسم GlobalMemoryLimitExceeded لكي يتمكن Operators من مراقبة وقت بلوغ memory limit على مستوى الخادم بالكامل. #106466 (Sacheendra Talluri).
  • تمّ ملء العدّادات ProfileEvents الخاصة بـ ExecutableUserDefinedFunction* لوظائف UDF من النوع executable_pool. وأصبحت الآن قيمة عدد مرات الاستدعاء لكل نداء، ووقت التنفيذ الفعلي ووقت انتظار المجمّع، واستهلاك CPU للعمليات الفرعية وذروة الذاكرة، وبايتات stdin/stdout، مرئية في system.query_log.ProfileEvents. #105010 (Xu Jia) #105618 (Ilya Andreev).
  • أُضيفت المقاييس غير المتزامنة ExecutableUserDefinedFunctionMemoryResidentBytes وExecutableUserDefinedFunctionProcesses، وهما يبلّغان عن الذاكرة المقيمة (VmRSS) وعدد العمليات الحية لوظائف user-defined function من النوعين executable وexecutable_pool، بما في ذلك العمليات التابعة وعمّال المجمّع الخاملون. #107300 (Hanzi Jiang).
  • أُضيفت ثلاثة مقاييس غير متزامنة تعمل على Linux فقط — MemoryThreadStacksCount وMemoryThreadStacksVirtual وMemoryThreadStacksResident — وتبلّغ عن ذاكرة مكدسات pthread بشكل منفصل عن بقية الذاكرة المجهولة. ويجري تفعيلها عبر asynchronous_metrics_enable_heavy_metrics. ويتطلب ذلك Linux 5.17+ (prctl(PR_SET_VMA_ANON_NAME)) وإمكانية قراءة /proc/self/smaps؛ وإلا فلن تظهر هذه المقاييس وسيُبلّغ عن هذا القيد في system.warnings. #106230 (Raúl Marín).
  • أُتيحت المقاييس غير المتزامنة MemoryThreadStacks* (الحجم المقيم/الافتراضي وعدد مكدسات الخيوط) على macOS. #107752 (Raúl Marín).
  • أصبحت table engines تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة description وsyntax وexamples وintroduced_in وrelated في جدول system.table_engines. #106177 (Alexey Milovidov).
  • أصبحت database engines تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة description وsyntax وexamples وintroduced_in وrelated في جدول system.database_engines. #106178 (Alexey Milovidov).
  • أصبحت data types تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة description وsyntax وexamples وintroduced_in وrelated في جدول system.data_type_families. #106180 (Alexey Milovidov).
  • أصبحت تنسيقات الإدخال/الإخراج تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة description وexamples وintroduced_in وrelated في جدول system.formats. #106181 (Alexey Milovidov).
  • أصبحت combinators الخاصة بالدوال التجميعية تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة description وsyntax وexamples وintroduced_in وrelated في جدول system.aggregate_function_combinators. #106185 (Alexey Milovidov).
  • أُضيف خيار سطر الأوامر --chime إلى clickhouse-client وclickhouse-local والعميل المضمّن. عند انتهاء الاستعلام (سواء بنجاح أو بخطأ) بعد تشغيله لمدة لا تقل عن N ثانية، يكتب العميل المحرف التحكمي ASCII BEL (\x07) إلى stderr. وتحدّد بيئات terminal ما إذا كانت ستصدر صوتًا أو وميضًا مرئيًا وفقًا لتفضيلات المستخدم. ويكون هذا مفعّلًا افتراضيًا بعتبة قدرها 5 ثوانٍ؛ مرّر --chime N لتحديد عتبة مخصّصة أو --chime 0 للتعطيل. يغلق #92718. #104545 (Groene AI).
  • في clickhouse-client، عندما لا تدعم الطرفية اللصق بين الأقواس، تُدمَج الآن فواصل الأسطر المضمَّنة في الاستعلام متعدد الأسطر الملصَق داخل مخزن التحرير نفسه بدلًا من الانتقال إلى موجّه المتابعة لكل سطر. ويبقى الاستعلام الملصَق ضمن موجّه واحد، كما تتيح مفاتيح الأسهم التنقّل بين أسطره. وهذا تحسين يُقدَّم على أساس أفضل جهد ويعتمد على سلوك اللصق المعتاد المخزَّن مؤقتًا في TTY. #104299 (Alexey Milovidov). ويعمل الآن أيضًا عند تعطيل تمييز بناء الجملة (--highlight 0). #106665 (Alexey Milovidov).
  • أُضيفت آلية للتحكم في مقسّم الصفحات وقت التشغيل بأسلوب MySQL لكل من clickhouse-client وclickhouse-local. #105706 (Azat Khuzhin).
  • أصبح clickhouse-client الآن يراعي الطرفيات غير UTF-8: فعندما لا يكون ترميز محارف الطرفية هو UTF-8 (مثلًا عند استخدام LANG=C)، تعود تنسيقات Pretty إلى حدود شبكية ASCII بدلًا من طباعة محارف Unicode الخاصة برسم الصناديق، والتي قد تُفسد عرض الطرفية. #106213 (Alexey Milovidov).
  • جرى تنظيف سلاسل العرض التي يزوّد بها server عند معالجة packet ‏Hello في clickhouse-client (اسم server، وtime zone، واسم العرض، وأنماط ورسائل قواعد password) بحيث لا يتمكن server خبيث من حقن بايتات يعرضها client حرفيًا، مع تقييد حجمها أيضًا للحماية من allocation غير المقيّد. #105243 (Raúl Marín).
  • تعرض واجهة الويب الآن النتيجة على هيئة image عندما يستخدم query تنسيق output format للصور مثل FORMAT PNG، بدلًا من عرض raw bytes كجدول. #107638 (Alexey Milovidov).
  • أُضيف الإعداد output_format_pretty_use_nbsp_for_padding لعرض padding الخاص بتخطيط الجدول في تنسيقات Pretty ذات نمط الجدول باستخدام U+00A0 NO-BREAK SPACE عندما تكون output_format_pretty_grid_charset هي UTF-8. ويساعد ذلك على احتفاظ مخرجات Pretty المنسوخة بمحاذاة الجدول في الأدوات التي تطوي المسافات العادية. ويكون هذا الإعداد معطّلًا افتراضيًا، بينما يحتفظ خرج مجموعة المحارف ASCII بالمسافات العادية. #103559 (Ashrith Bandla).
  • يقوم برنامج التثبيت النصي universal الآن أيضًا بتثبيت clickhousectl في ~/.local/bin على Linux وmacOS، مع وصلة رمزية chctl. اضبط CLICKHOUSE_ONLY=1 لتخطي ذلك. #105399 (Alasdair Brown).
  • تم إصلاح الخطأ العارض Syntax error: Unterminated quoted string الذي كان قد يظهر بشكل متقطع عند تثبيت ClickHouse عبر curl https://clickhouse.com/ | sh بينما كان الملف التنفيذي clickhouse موجودًا بالفعل في الدليل الحالي. #106417 (Alexey Milovidov).
  • تم إصلاح ارتفاع اللوحة اليسرى في صفحة play.html عند فتح web terminal، بحيث يبقى زر toggle الخاص بالطرفية في الأسفل مرئيًا. #105087 (Alexey Milovidov).
  • تجنّب تحديد الاستعلام الوحيد في واجهة الويب بعد تشغيله. #105711 (Joey Yu).
  • توسّع واجهة SQL على الويب الآن محرر الاستعلام عندما لا يزيد ارتفاع الاستعلام على 30% من ارتفاع المحرر الحالي. #105713 (Joey Yu).
  • في واجهة الويب، رتّب أيقونات القائمة السفلية (طرفية الويب وGitHub) أفقيًا عند توسيع اللوحة اليسرى، مما يمنح قائمة قواعد البيانات والجداول مساحة رأسية أكبر. #106427 (Alexey Milovidov).
  • في واجهة الويب (play.html)، يؤدي الضغط على Escape الآن إلى إلغاء تنشيط الخلية المحددة حاليًا في جدول النتائج. #107777 (Alexey Milovidov).
  • تحسينات على لوحة قاعدة البيانات في واجهة SQL على الويب (Play): تلميح عند أيقونة قاعدة البيانات، وزر لإخفاء اللوحة، وإتاحة النقر على أسماء قواعد البيانات والجداول بعرض كامل، وإصلاح تغيّر عرض اللوحة عند ظهور شريط التمرير. #108013 (Alexey Milovidov).
  • إضافة إعداد خادم (min_allocation_size_to_throw_on_memory_limit) للسماح لأي عملية تخصيص بأن تُطلق MEMORY_LIMIT_EXCEEDED، مما يساعد على منع حالات نفاد الذاكرة (OOM). #105265 (Azat Khuzhin).
  • السماح بمصادقة NONE مع SSH (لمنع طلب كلمة المرور لمستخدمي no_password). #105476 (Azat Khuzhin).
  • إعادة تعيين قائمة المجموعات الإضافية في clickhouse su قبل إسقاط الامتيازات، بما يطابق سلوك /bin/su وsudo. سابقًا، كانت العملية التي أُسقطت امتيازاتها ترث المجموعات الإضافية للمستدعي. #105247 (Raúl Marín).
  • إضافة دعم BFloat16 إلى دوال predicate العددية (isFinite, isNaN). #105391 (Mohamed Hussain S).
  • تقليل استخدام الذاكرة في polygon dictionaries (polygon_index_cell, polygon_index_each) وجعل system.dictionaries.bytes_allocated يعكس بشكل صحيح فهرس البحث الذي تنشئه. #105431 (Raúl Marín).
  • إصلاح مستهلكي Kafka table engine الذين استمروا في استخدام فترة استطلاع قصيرة بعد تعيين partition، بحيث يعودون إلى القيمة المضبوطة kafka_poll_timeout_ms ويتجنبون عمليات استطلاع فارغة مفرطة، وأجزاءً مُدرجة أصغر، وعبئًا إضافيًا على الدمج بعد إعادة التوازن. #100431 (sugaf1204).
  • تحديد الأعمدة بحسب الموضع (بدلًا من الاسم) عند إزالة الأعمدة غير المستخدمة في query plan. يتيح ذلك إزالة الأعمدة غير المستخدمة عند وجود أسماء أعمدة مكررة. #100586 (János Benjamin Antal).
  • يُطلق ClickHouse استثناءً مناسبًا عند محاولة استخدام table_readonly مع المحركات المكررة، مع تحسين معالجة الاستثناءات لاستعلامات DDL (وDatabaseReplicated) المرتبطة بهذا الإعداد. #100950 (alesapin). لم يعد OPTIMIZE TABLE ... ON CLUSTER وعمليات DDL الأخرى تتعطل عندما يكون table_readonly = 1 في الجدول الهدف. ويُطلق الإعداد الآن رمز خطأ مخصصًا جديدًا هو TABLE_IS_PERMANENTLY_READ_ONLY، ويتعامل معه DDLWorker على أنه غير قابل لإعادة المحاولة (وهو مختلف عن TABLE_IS_READ_ONLY المؤقت الذي يظهر أثناء انقطاع ZooKeeper المؤقت في ReplicatedMergeTree). كما يُرفَض إعداد table_readonly الآن صراحةً مع ReplicatedMergeTree، سواء عند الإنشاء أو عبر ALTER MODIFY SETTING. متابعة لـ #97652. #105109 (Alexey Milovidov).
  • تم إصلاح تحديثات العرض المادي القابل للتحديث التي كان يمكن أن تفشل بخطأ UNKNOWN_TABLE بعد استبدال الجدول الهدف (على سبيل المثال عبر EXCHANGE TABLES أو الحذف ثم إعادة الإنشاء): إذ أصبح التحديث الآن يحدّد الجدول الهدف بالاسم بدلًا من الاعتماد على UUID قديم. #102724 (Seva Potapov).
  • أُضيف إعداد wait_for_part_commit_in_dependent_materialized_views (القيمة الافتراضية false). عندما يقرأ SELECT في عرض مادي مرة أخرى من جدول المصدر الخاص به (على سبيل المثال عبر INNER JOIN مع المصدر)، كان التنفيذ المتسلسل قد يفوّت الصف الذي يُدرج حاليًا، لأن الجزء المُدرج لا يُعتمَد إلا بعد تشغيل العروض التابعة. يؤدي تفعيل هذا الإعداد إلى اعتماد الجزء قبل تشغيل العروض التابعة، بحيث تتمكن من رؤية الصف قيد الإدراج، لكن على حساب تقليل insert parallelism. #105943 (Elmi Ahmadov).
  • عدم تجاهل الأخطاء الفادحة (مثل MEMORY_LIMIT_EXCEEDED) في tryDeserialize. #106808 (Azat Khuzhin).
  • التحقق من امتياز CREATE TEMPORARY TABLE عند الحاجة في InverseDictionaryLookupPass. #107098 (Azat Khuzhin).
  • إصلاح خطأ ILLEGAL_TYPE_OF_ARGUMENT في distributed queries مع serialize_query_plan = 1 التي تحتوي على lambda ذات argument ثابت (مثل arrayMap(t -> t.2, ...)). أصبحت الأعمدة الثابتة لعُقد INPUT في ActionsDAG محفوظة الآن أثناء serialization لـ query plan. #107124 (Alexey Milovidov).
  • أصبحت عملية إلغاء تسلسل حالات الدوال التجميعية contingency وcramersV وcramersVBiasCorrected وtheilsU تتحقق من أن الأعداد المخزنة تشكّل جدول contingency متسقًا، وتطرح استثناء CORRUPTED_DATA بخلاف ذلك. يُغلق #106899. #107185 (Nihal Z. Miaji).
  • الحفاظ على رموز الخطأ الأصلية للاستثناءات المغلّفة داخل arrow::Status. #107267 (Azat Khuzhin).
  • دعم keyed_by_normalized_query_hash للحصص المُعرّفة في إعدادات الخادم الثابتة (users.xml)، بما يطابق صياغة DDL الحالية CREATE QUOTA ... KEYED BY normalized_query_hash. #107654 (Alexey Milovidov).
  • لم يعد إعداد compatibility يطبّق الإعدادات المهملة، لذلك لم يعد يضع عليها علامة بأنها تغيّرت أو يُصدر تحذيرات بشأن الإعدادات المهملة. #107737 (Maxim Orlovsky).
  • لم تعد async inserts تسجّل القائمة الكاملة لـ query_ids عند مستوى trace/debug، وهو ما كان يمكن منذ 26.2 أن يتسبب في تضخّم text_log على الخدمات ذات حركة async insert الكثيفة. أصبحت الأسطر التفصيلية الآن عند مستوى test. #107852 (Sema Checherinda).
  • تحسين filesystem cache: منع إدخالات priority غير الصالحة من تثبيت KeyMetadata. متابعة لـ #106387. #107903 (Kseniia Sumarokova).
  • تحسين مقاييس FileCache. #106116 (Kseniia Sumarokova).
  • لا تطبع المقدمة “Stack trace (when copying this message, always include the lines below):” في رسائل الاستثناء عندما يكون تتبّع المكدس فارغًا فعلًا. #106524 (Alexey Milovidov).
  • إصلاح احتمال حدوث overflow في roundUpToMultiple عند حساب محاذاة حدود filesystem cache لإزاحات كبيرة جدًا. #92579 (Bharat Nallan).
  • أصبح EXPLAIN SYNTAX الآن ينسّق Operators على هيئة استدعاءات دوال بشكل متّسق في مخرجات الشرح (على سبيل المثال plus(1, 2) بدلًا من 1 + 2). #94681 (Mohamed Abdelhalim ).
  • تحسين التلميحات الخاصة بأسماء الجداول في رسائل الخطأ: لم تعد تقترح الاسم نفسه حرفيًا، وأصبحت تتضمن اسم قاعدة البيانات في الاقتراح (مثلًا: “Maybe you meant other_db.my_table?”). #95116 (Mathuranath Metivier).
  • تحسين رسالة الخطأ الخاصة بالمعرّفات غير المحلولة في الاستعلامات التي لا تحتوي على عبارة FROM، بحيث تقترح إضافتها. #101769 (Yash ).
  • إضافة خيار EXPLAIN PIPELINE لضغط سلاسل المعالجات المتكررة. #104662 (Yue Ni).
  • إصلاح قراءة heap-buffer-overflow أثناء إنشاء رسالة خطأ الصياغة (UTF8::computeWidthImpl عبر parseQuery.cpp) كانت تحدث عندما يتراجع parser إلى ما قبل أول فاصلة منقوطة / رمز نهاية الدفق؛ إذ كانت إصدارات release تُدرج بايتات من ذاكرة الكومة المجاورة ضمن الخطأ المعروض، بينما كانت إصدارات ASan تُوقف التنفيذ. #105086 (Groene AI).
  • جعل استراتيجية partition الخاصة بـ hive هي الافتراضية ضمن إعداد التوافق file_like_engine_default_partition_strategy. #86746 (Kseniia Sumarokova).
  • استخدام مكدس thread أكبر (8 MiB) على macOS لمطابقة القيمة الافتراضية في Linux، ما يعالج حالات تعطل server النادرة الناتجة عن stack overflow أثناء ترجمة JIT. #107033 (Raúl Marín).
  • لم يعد حد حجم التخزين المؤقت لـ clickhouse-local مضبوطًا برمجيًا على 1 GiB. وقد رُفعت القيمة الافتراضية إلى 1 TiB، ويمكن ضبطها عبر server setting ‏max_temporary_data_on_disk_size. #106689 (Alexey Milovidov).
  • إضافة الأمر read-checksums إلى clickhouse-disks. يقرأ ملف checksums.txt الخاص بـ MergeTreeDataPart ويطبعه كجدول مقروء للبشر ومفصول بعلامات الجدولة. #106901 (Asya Shneerson).
  • تمت إضافة الأمر read-bitmap إلى clickhouse-disks. #107834 (murphy-4o).
  • Chdig: تمكين TLS للاتصالات الآمنة (إذ كان الوضع السابق يؤدي إما إلى “unknown setting skip_verify” أو “connection reset by peer”). #105864 (Azat Khuzhin).
  • chdig v26.5.1. #105918 (Azat Khuzhin).
  • chdig v26.6.1 - {asynchronous_,}metric_log، وأنماط الاستعلامات، والخرائط الحرارية، والسجلات/التتبعات المخزنة على القرص (إذ كان قد يستهلك سابقًا >40GiB لساعة واحدة من التتبعات). #107678 (Azat Khuzhin).
  • تضبط إعدادات الخادم (programs/server/config.xml) الآن keep_alive_timeout على 30 (بدلًا من 10 سابقًا)، بما يتوافق مع القيمة الافتراضية الفعلية الموثقة والمطبقة. #107779 (Dan Checkoway).
  • تغيّرت القيمة الافتراضية لإعداد الخادم disk_connections_rcvbuf من 0 (الضبط التلقائي لـ TCP في النواة) إلى 204800 (200 كيلوبايت)، مما يضع حدًا أقصى لذاكرة التخزين المؤقت لاستقبال TCP لكل مقبس في اتصالات الأقراص الخاصة بتخزين الكائنات (S3/Azure/GCS). #107859 (Sema Checherinda).
  • يجمع مُحسِّن PREWHERE الآن المقترنات التي تشير إلى مجموعة الأعمدة نفسها قبل تقدير الانتقائية، بحيث تُقيَّم شروط مثل a > 2500 AND a < 2502 معًا كنطاق واحد بدلًا من معاملتها كمسندين مستقلين، مما ينتج عنه تقدير أكثر دقة للانتقائية. #106337 (Han Fei).
  • تمت إضافة تطبيقات للمقابس الآمنة والعادية تراعي silk fiber. #107680 (Miсhael Stetsyuk).
  • تم إصلاح رسالة خطأ مشوشة (بسبب تبديل الوسيطات) وخطأ مطبعي في الدالة nested. #108031 (Alexey Milovidov).
  • تمت إضافة أمر sed إلى clickhouse-disks يطبّق تعبير sed على مسار معيّن مباشرةً في مكانه. #107131 (Asya Shneerson).
  • تمت إضافة الإعداد materialized_postgresql_use_extended_date_and_time_types الخاص بوقت الإنشاء إلى محرك قاعدة البيانات MaterializedPostgreSQL. افتراضيًا (عند تمكينه)، يُستدل على أعمدة PostgreSQL ‏date/timestamp على أنها Date32/DateTime64؛ أما ضبطه على 0 وقت CREATE DATABASE فيؤدي إلى استنتاج النوعين الأضيق Date/DateTime. #107428 (Alexey Milovidov).

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

  • إتاحة حذف detached parts ذات اللاحقة tryN. #58957 (János Benjamin Antal).
  • إصلاح استثناء MULTIPLE_EXPRESSIONS_FOR_ALIAS في الاستعلامات التي تحتوي على أسماء مستعارة مكررة للإسقاط (مثل SELECT *, day + 365 AS day) داخل الاستعلامات الفرعية المتداخلة عند التشغيل باستخدام النسخ المتماثلة المتوازية. #80310 (Alexey Milovidov).
  • إصلاح خلل في splitMultipartQuery كان يتسبب في ظهور خطأ “Empty query” في الاستعلامات التي تنتهي بتعليق بعد الفاصلة المنقوطة. #85491 (Yarik Briukhovetskyi).
  • إصلاح استثناء في ARRAY JOIN: Function writeSlice expects same column types for GenericArraySlice and GenericArraySink، ويحدث ذلك عند استخدام الأنواع الرقمية LowCardinality (المشكلة #57243). #91784 (Jimmy Aguilar Mena).
  • إصلاح استثناء NOT_FOUND_COLUMN_IN_BLOCK عند استخدام LIMIT BY مع الأعمدة الثابتة إلى جانب DISTINCT و ORDER BY مع المحلل الجديد. #93195 (Ashrith Bandla).
  • إصلاح مشكلة إنشاء أعمدة NOT NULL بصمت على أنها Nullable عندما تكون data_type_default_nullable = 1 ويُنشأ الجدول في قاعدة بيانات Replicated أو عبر ON CLUSTER. #97572 (xiaohuanlin).
  • إصلاح استقرار الاتصال بـ HiveCatalog من خلال إضافة آلية إعادة محاولة تلقائية ومنطق لإعادة الاتصال للتعامل مع أخطاء TTransportException عند التواصل مع Hive Metastore. #98471 (Dmitriy Borisenko).
  • إصلاح الدالة nested (المستخدمة داخليًا بواسطة ARRAY JOIN) التي كانت تزيل LowCardinality من أنواع الأعمدة، مما يؤدي إلى تحوّل Array(LowCardinality(String)) إلى Array(String) في المخرجات. يغلق #95582. #98974 (Yash ).
  • إصلاح استثناء “Distributed task iterator is not initialized” عند استخدام url أو s3 أو table functions مشابهة في الاستعلامات مع تفعيل النسخ المتماثلة المتوازية. #100146 (Alexey Milovidov).
  • إصلاح استثناء logical error عند قراءة Iceberg tables التي رُقِّي إصدار التنسيق الخاص بها بواسطة أداة خارجية (مثل Spark). #100407 (Alexey Milovidov).
  • أصبحت الدوال like و ilike و notLike و notILike و match تدعم الآن haystack ثابتًا مع needle غير ثابت (مثل 'foo' LIKE pattern_column)، بعدما كان ذلك يؤدي سابقًا إلى ILLEGAL_COLUMN. #100479 (Yash ).
  • إصلاح عدد الصفوف غير الصحيح الذي يعيده استعلام MaterializedView مع query_plan_enable_optimizations = 0 عندما يربط العرض عمودًا صحيحًا بعمود Bool. #100692 (Maksim Moisiuk).
  • إصلاح استثناء (LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it') عند قراءة Iceberg tables التي تحتوي على data files بتنسيق ORC مع تفعيل PREWHERE optimization. #101206 (Groene AI).
  • إصلاح حالة سباق في RestCatalog. #101216 (Smita Kulkarni).
  • إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند تنفيذ select من VIEW فوق table تحتوي على projection عادي. #101218 (Amos Bird).
  • إصلاح البيانات الوصفية القديمة في FileLog عند حذف ملف ثم إعادة إنشائه. #101408 (Azat Khuzhin).
  • إصلاح إعادة ترتيب join التي كانت تؤدي بصمت إلى إسقاط الصفوف غير المتطابقة في RIGHT/LEFT JOIN عند ضمّها بفاصلة (cross) مع table أخرى، مثل t1 RIGHT JOIN t2 ON t1.c = t2.c, t3. كان query يعيد سابقًا نتيجة inner-join بدلًا من outer-join. #101684 (Groene AI).
  • إصلاح استهلاك clause ‏FORMAT من قِبل INSERT بدلًا من تطبيقها على مخرجات EXPLAIN في EXPLAIN INSERT INTO ... SELECT ... FORMAT .... #101772 (Yash ).
  • إصلاح الاختيار غير الصحيح لـ compression codec لأجزاء MergeTree عندما يكون workload setting ‏default_compression_codec على مستوى table مُعدًّا صراحةً. كانت الأجزاء المكتوبة on insert، وأثناء merges، ولـ projections تستخدم الـ codec الافتراضي على مستوى server بدلًا من الإعداد على مستوى table (ويشمل ذلك الآن أيضًا الجزء الفارغ الناتج عن mutation تحذف كل البيانات). #101784 (Yash ).
  • رفض قيم Float64 السالبة (مثل -100.5) في workload settings مثل max_bytes_per_second وmax_cpus وغيرها. سابقًا كان التحقق يقتصر على الأعداد الصحيحة السالبة، ما سمح للقيم العشرية السالبة بإنشاء عُقد scheduler معطوبة بصمت. يُغلق #101825. #101842 (Groene AI).
  • إصلاح LOGICAL_ERROR (“Port is not connected”، الرمز 49) التي كان يمكن أن تحدث عند تنفيذ queries تتضمن VIEW فيها aggregation داخل JOIN. #102574 (Jimmy Aguilar Mena).
  • إصلاح عدم اتساق البيانات الوصفية للجزء بعد mutations على columns ذات serializations غير الافتراضية. #102817 (Eduard Karacharov).
  • إصلاح تحديث البيانات الوصفية قبل تنفيذ mutation، ما يحل #96806. #102882 (Smita Kulkarni).
  • إصلاح بطء queries من نوع SELECT بشكل ملحوظ عند تشغيل عمليات INSERT متزامنة. سابقًا كانت pipeline الخاصة بـ INSERT تحجز CPU slots حتى max_threads عند بدء query حتى عندما لا تُستخدم معظم الـ slots مطلقًا، مما كان يحرم عمليات SELECT المتزامنة من الموارد. أصبح تخصيص CPU slot الآن قائمًا على الطلب: لا تطلب pipeline الـ slots إلا عند دفع عمل قابل للتوازي فعليًا. ينطبق ذلك على كلٍّ من التحكم في Concurrency والـ scheduler الاستباقي للـ CPU الخاص بـ workloads. ويعمل server setting الجديد concurrent_threads_lazy_allocation (القيمة الافتراضية true) كآلية تراجع. #102928 (Seva Potapov).
  • إصلاح تمرير NULL عند قراءة الأعمدة الفرعية المستخرجة من أعمدة Nullable(Tuple(...)). على سبيل المثال، في tup Nullable(Tuple(s Nullable(String)))، يُرجِع SELECT tup.s الآن NULL بشكل صحيح في الصفوف التي تكون فيها الـ tuple الخارجية NULL بدلًا من قيم المهملات. ويشمل ذلك جميع أنواع العناصر التي يمكنها تمثيل NULL: ‏Nullable وDynamic وVariant وLowCardinality(Nullable(...)). يُغلق #105356. #102942 (Nihal Z. Miaji).
  • إطلاق INCORRECT_DATA بدلًا من LOGICAL_ERROR عندما تكون البيانات التي يرسلها العميل بتنسيق Native format مقتطعة أو غير سليمة. #102975 (János Benjamin Antal).
  • إضافة فحص للإلغاء إلى عملية القراءة في ObjectStorage. يُغلق #98165. #103016 (Smita Kulkarni).
  • مراعاة input_format_binary_max_type_complexity عند فك ترميز معاملات aggregate function. يُغلق #102903. #103026 (Pavel Kruglov).
  • إصلاح استنتاج nullable لأعمدة geo في Parquet reader المستند إلى Arrow. يُغلق #101845. #103032 (Pavel Kruglov).
  • إصلاح recursiveRemoveLowCardinality الذي كان يمحو أسماء أنواع geometry المخصصة (مثل LineString مقابل Ring، وMultiLineString مقابل Polygon)، مما كان يؤدي إلى تفسير نوع geometry بشكل خاطئ. يُغلق #103207. #103041 (Joanna Hulboj).
  • إصلاح تجاهل input_format_max_block_size_bytes بصمت أثناء parsing لـ INSERT عندما تكون max_insert_block_size_bytes مساوية لـ 0 (القيمة الافتراضية). يقيّد هذا الإعداد الآن بشكل صحيح حجم blocks الناتجة عن row input formats. #103068 (Kirill Kopnev).
  • إصلاح قيام ClickHouse أحيانًا بإنتاج tokens غير صالحة لـ GSSAPI بسبب إزالة غير صحيحة للـ null byte اللاحقة. #103114 (Michael Jarrett).
  • إصلاح طيّ الثوابت في وقت analyzer للدوال ذات short-circuit (if وmultiIf وand وor وغيرها)، بحيث لم تعد branches غير القابلة للوصول إحصائيًا تثير استثناءات أثناء التحليل. على سبيل المثال، يُرجِع WITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n)) الآن 0 بشكل صحيح بدلًا من الفشل بخطأ قسمة على الصفر. #103157 (Peng).
  • يوسّع EXPLAIN SYNTAX parameterized views. #103263 (Jordi Villar).
  • إصلاح تلف البيانات عند كتابة Parquet (وصيغ أخرى تحتوي على trailer مثل ORC وArrow) إلى HDFS عبر INSERT INTO FUNCTION hdfs(...). منذ الإصدار 26.1، لم يكن WriteBufferFromHDFS يفرّغ buffer العمل الخاص به عند finalize()، لذا كانت آخر DBMS_DEFAULT_BUFFER_SIZE بايت — أو أقل — من كل ملف تُفقَد بصمت، بما في ذلك footer الخاص بـ Parquet PAR1. وكانت قراءة مثل هذه الملفات تُرجِع Not a Parquet file (wrong magic bytes at the end of file). #103268 (Groene AI).
  • إصلاح نتائج غير صحيحة وخطأ منطقي محتمل في الاستعلامات الفرعية المترابطة عند ضبط حدّ لحجم join (max_rows_in_join / max_bytes_in_join) مع join_overflow_mode = 'break'. إذ أصبح join المُنشأ داخليًا لتقييم الاستعلام الفرعي المترابط يتجاهل حدود المستخدم هذه، لذلك لم يعد يتوقف مبكرًا ويتسبب في إسقاط صفوف. #103322 (Groene AI).
  • إصلاح خلل كان يؤدي إلى أن ALTER TABLE ... MODIFY SETTING على جدول EmbeddedRocksDB قد يحفظ قيمة إعداد غير صالحة في ملف البيانات الوصفية للجدول حتى عندما يرفض الخادم الاستعلام. وعند إعادة تشغيل الخادم في المرة التالية، كان الجدول يفشل في الإرفاق مع CANNOT_PARSE_BOOL (أو خطأ parsing مشابه)، وفي قواعد البيانات التي تكون فيها إخفاقات التحميل قاتلة، كان الخادم يرفض البدء. وأصبحت قيم الإعدادات غير الصالحة تُرفض الآن قبل كتابة أي بيانات وصفية. #103417 (Groene AI).
  • إصلاح إجهاض للخادم عند إنشاء جدول باستخدام محرك تخزين كائنات (AzureBlobStorage, DeltaLakeAzure, S3, HDFS) مع عدد غير مدعوم من الوسائط. يُرجع الخادم الآن الخطأ NUMBER_OF_ARGUMENTS_DOESNT_MATCH بشكل واضح بدلًا من الإجهاض في بنيات debug/sanitizer. #103544 (Groene AI).
  • إصلاح انهيار في الخادم أثناء parsing لمعاملات نوعَي البيانات JSON وDynamic عندما تكون شجرة البنية المجرّدة (AST) مشوّهة بنيويًا (على سبيل المثال عند إنشائها بواسطة AST fuzzer): إذ كان يمكن أن يبقى تعبير المعامل equals(name, value) بأقل من عنصرين فرعيين، ثم يقوم DataTypeObject وDataTypeDynamic بفكّ الإشارة إليه من دون التحقق من الحدود. #103545 (Groene AI).
  • إصلاح أخطاء منطقية في المحلل عند تصادم أسماء الأعمدة داخل lambda مستخدمة في PREWHERE. يغلق #103584. #103627 (Pavel Kruglov).
  • إصلاح الخطأ المتقطع Logical error: 'Database <name> not found' من DataLakeConfiguration::getCatalog عند تحميل جدول بمحرك Iceberg داخل قاعدة بيانات عادية أثناء التحميل غير المتزامن للبيانات الوصفية. #103775 (Groene AI).
  • إصلاح أخطاء MULTIPLE_EXPRESSIONS_FOR_ALIAS التي كانت تُصدِرها النسخ المتماثلة البعيدة عند تشغيل استعلامات تشير إلى الأسماء المستعارة للإسقاط داخل PREWHERE / WHERE / HAVING / QUALIFY (مثل SELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c) أو عند تنفيذ SELECT * على self-join مع تداخل في أسماء الأعمدة، مع parallel replicas وparallel_replicas_local_plan = 0. يغلق #74324. #103806 (Groene AI).
  • إصلاح إجهاض للخادم عندما يستخدم استعلام مقارنات coalesce/ifNull متداخلة (مثل WHERE coalesce(a, b, coalesce(c, d), e) = const) على جدول MergeTree مع عدة skip indexes من نوع minmax وuse_skip_indexes_for_disjunctions = 1. وأصبحت الآن إعادة كتابة skip index للتعبير <op>(coalesce(...), const) تُطبَّق بشكل تعاودي على وسائط coalesce الداخلية، بحيث يطابق RPN الخاص بكل KeyCondition قالب RPN كما يفترضه بالفعل كود تتبّع الفصل. #103929 (Groene AI).
  • إصلاح تجاهل max_rows_to_transfer وmax_bytes_to_transfer بصمت في استعلامات GLOBAL IN وGLOBAL JOIN ضمن analyzer الجديد. ترفع هذه الإعدادات الآن الخطأ SET_SIZE_LIMIT_EXCEEDED (أو تتوقف، بحسب transfer_overflow_mode) عندما يتجاوز external table المُجسَّد الحد المُعدّ، بما يطابق سلوك analyzer القديم. يغلق #103333. #104119 (Groene AI).
  • إصلاح القراءات المفرطة لـ metadata الخاصة بـ catalog/S3 عندما يشير INSERT أو DDL statement إلى table غير موجود في database من نوع DataLake catalog مع تفعيل show_data_lake_catalogs_in_system_tables. كان مسار اقتراح تصحيح الخطأ المطبعي يحمّل metadata الكاملة لكل table في Iceberg على مستوى catalog بأكمله، مما قد يستنفد الذاكرة في catalogs الكبيرة. #104124 (DQ).
  • إصلاح انهيار (LOGICAL_ERROR “Columns are assumed to be of identical types, but they are different in Nullable” في builds التنقيح، وSIGSEGV بسبب مؤشر فارغ في ColumnString::compareAt في builds الإصدار) ونتيجة غير صحيحة كان يمكن أن تحدث في queries التي تستخدم direct join_algorithm مع table على الجانب الأيمن من نوع MergeTree عندما كانت query plan الخاصة بالبحث تعيد ترتيب columns أثناء optimization. كان يمكن أن تنتهي columns الخاصة بالجانب الأيمن في مواضع تحمل أسماء خاطئة، بحيث يرى عامل تصفية أو مقارنة على join key عمودًا من type غير صحيح. كُشف عنها بواسطة AST fuzzer تحت STID 2139-5111 وتم الإبلاغ عنها في #107272. #104174 (Groene AI).
  • رفض partition ID من نوع integer إذا كان خارج النطاق لـ Date بدلًا من حدوث overflow بصمت أو LOGICAL_ERROR في ALTER. #104250 (Azat Khuzhin).
  • تعطيل additional_table_filters مع parallel replicas وanalyzer من دون serialization لـ query plan. كان هذا قد يؤدي سابقًا إلى نتائج غير صحيحة. #104296 (Azat Khuzhin).
  • إصلاح قيام dictGetOrNull بالكتابة فوق columns الأخرى في إسقاط SELECT بالقيمة NULL بصمت عند استدعائه باستخدام Key column من نوع Nullable تكون قيمه Missing في Dictionary. كانت الدالة تُعدّل خريطة null المرتبطة بالإدخال في موضعها؛ وهي الآن تنشئ نسخة عميقة من result column قبل mutation. يغلق #73633. #104327 (Groene AI).
  • إصلاح patch part معطوب بعد ALTER TABLE ... DROP PARTITION ID 'patch-...' متبوعًا بـ DETACH/ATTACH TABLE. سابقًا كان part المغطي الفارغ يُكتب من دون partition.dat وsource_parts.dat، مما يؤدي إلى ظهور الإدخال broken-on-start_patch-... في system.detached_parts بعد attach التالي أو إعادة تشغيل الخادم. يغلق #93132. يغلق #102103. #104353 (Groene AI).
  • إصلاح INSERT المتدفق مع input_format_max_block_wait_ms لواجهة HTTP ولـ INSERT SELECT FROM input، بحيث تُكتب كتل الإدخال الجزئية إلى التخزين قبل انتهاء request. #104534 (Alexey Milovidov).
  • أُصلِح خلل كان يؤدي إلى أن تُرجِع الاستعلامات التي تجمع بين arrayJoin وORDER BY ... LIMIT بعد JOIN صفر صفوف بصمت. ولم يعد تحسين مخطط الاستعلام الذي يرفع تقييم الدالة فوق SortingStep يُطبَّق عندما يحتوي التعبير المرفوع على arrayJoin، لأن arrayJoin قد يغيّر عدد الصفوف. يغلق #82279. #104558 (Groene AI).
  • إصلاح حالة إجهاض نادرة للخادم أثناء إتلاف جدول من عائلة MergeTree. كان ذلك قد يحدث عندما يطلق shutdown استثناءً قبل توقف مجدول المهام الخلفية بالكامل: فإذا نُفِّذت مهمة في الخلفية خلال تلك النافذة الضيقة، فقد ترسل نداءً virtual عبر كائن تخزين مُتلف جزئيًا وتصطدم بـ __cxa_pure_virtual. #104561 (Groene AI).
  • إصلاح نتيجة غير متسقة في subcolumn المجمّع JSON عند استخدام type hint يحتوي على قيمة null. #104584 (Pavel Kruglov).
  • إصلاح نتائج خاطئة أو projection مفقود عندما يحتوي aggregate projection على عدة تجميعات sumIf بشروط IN (...) مختلفة. #104765 (Jimmy Aguilar Mena).
  • إصلاح عدد صفوف خاطئ ناتج عن arrayJoin() المستخدم داخل JOIN ON: إذ كانت النتيجة تُضرَب في طول المصفوفة مرة إضافية. #104785 (Shaohua Wang).
  • إصلاح deltaSumTimestamp الذي كان يُرجع نتائج خاطئة لأنواع الأعداد الصحيحة الموقعة عند عبور الصفر. يحل #104750. #104830 (Konstantin Bogdanov).
  • إصلاح عدم تطابق بنية الكتلة في UnionStep بعد دفع عامل التصفية إلى الأسفل مع ثوابت NULL. يغلق #104821. #104853 (Pavel Kruglov).
  • إصلاح الخطأ Logical error: 'Metadata is not initialized' الذي كان يظهر عند تنفيذ DELETE FROM على جدول Iceberg أو DeltaLake أو Hudi مُرفَق حديثًا إذا كان ملف البيانات الوصفية تالفًا أو يتعذر تحميله. ويُبلَّغ الآن بدلًا من ذلك عن استثناء عادي موجه للمستخدم، مع استمرار الخادم في العمل. يغلق #104891. #104917 (Groene AI).
  • أُصلِح عدم تحديث max_memory_usage_soft_limit آنيًا عند تغيّر الإعدادات. كان حد الذاكرة المرن يُحتسَب مرة واحدة عند بدء التشغيل ويُخزَّن مؤقتًا، لذلك لم تكن لإعادات تحميل الإعدادات اللاحقة أي فاعلية. وبعد هذا الإصلاح، يُعاد حساب الحد ويُطبَّق فورًا مع كل إعادة تحميل للإعدادات، من دون الحاجة إلى إعادة تشغيل Keeper. #104940 (Kai Zhu).
  • إصلاح تحليل الرموز في JIT على macOS بحيث لم يعد التجميع الفوري لـ sort وexpression وaggregate يفشل مع CANNOT_COMPILE_CODE: Could not find symbol _<name>. #104946 (Alexei Fedotov).
  • إصلاح استثناء (Received signal 6 (abort) في تقوية المتجهات، ويظهر على هيئة Tuple::back() على متجه فارغ) عند تنفيذ استعلام بالصيغة SELECT ... FROM <Distributed table> WHERE/HAVING/GROUP BY ... (sharding_key_column IN tuple()) مع تفعيل optimize_skip_unused_shards_rewrite_in ضمن analyzer الجديد. #104966 (Alexey Milovidov).
  • إصلاح توقّف الخادم بسبب Logical error: 'Inconsistent AST formatting' ‏(STID 1941-1bfa) في استعلامات مثل CREATE TABLE t (c0 Int CODEC(not((not(materialize(1), materialize(2)))), ZSTD)) ENGINE = Memory ضمن بنى debug / sanitiser. لم يعد المنسّق يُصدر أقواسًا خارجية زائدة حول استدعاء الدالة tuple(...) متعددة الوسائط عندما يظهر داخل قوائم وسائط CODEC / STATISTICS / BACKUP_NAME (حيث تكون الصيغة العاملية (a, b) معطّلة)، مما يحافظ على استقرار دورة format-parse-format ذهابًا وإيابًا. #104991 (Groene AI).
  • إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK الذي يطرحه ALTER TABLE ... MATERIALIZE INDEX على الأجزاء التي أُنشئت في 25.8 وتحتوي على skip index على column أُضيف عبر ALTER TABLE ... ADD COLUMN منفصل. أصبحت mutation الآن تقرأ بصورة صحيحة كل column مطلوب من كل skip index وprojection موجودَين مسبقًا على الجزء أثناء إعادة الحساب القسرية. يغلق #104872. #105039 (Groene AI).
  • إصلاح حالتين من LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materialized كانت تطرحهما الاستعلامات التي تستخدم enable_materialized_cte: ‏(1) materialized CTE مُعاد استخدامه ومُرشَّح بواسطة IN (subquery) فوق materialized CTE آخر، و(2) materialized CTE يُشار إليه مباشرةً وداخل مرشح WHERE ... IN (...) يصل إلى primary key في MergeTree عبر IN-subquery متداخل. كما تأثر EXPLAIN للاستعلامات نفسها أيضًا لأن العيوب كانت تظهر أثناء optimization للخطة. يغلق #101940، ويغلق #102320. #105041 (Dmitry Novik).
  • إصلاح تقدير selectivity الخاص بـPREWHERE لإحصاءات countmin في columns من نوع Float32. تسبّب عيبان في أن تُنتج إحصاءات countmin تقديرات خاطئة بصمت لـcolumns من نوع Float32: إذ كان ConditionSelectivityEstimator يتخطّى الإحصاءات بالكامل عندما يكون column type ‏(Float32) أضيق من literal type ‏(Float64)، فيعود إلى selectivity الافتراضية ويتجاهل sketch؛ كما أن StatisticsCountMinSketch::estimateEqual كان يُجري hash على أول N بايت من الكائن Field، لكن Field يخزّن Float32 على أنه Float64 (NearestFieldType<Float32> = Float64)، لذلك كان نمط البايتات المستخدم عند query time مختلفًا عن بايتات Float32 الفعلية المخزنة أثناء build. #105047 (Han Fei).
  • أصبحت استعلامات ATTACH TABLE name <clauses>; التي توفّر clauses للتخزين (ORDER BY وPARTITION BY وPRIMARY KEY وSAMPLE BY وTTL وUNIQUE KEY أو SETTINGS الخاصة بالـengine) من دون ENGINE تطرح الآن BAD_ARGUMENTS بدلًا من إعادة Attach للـtable بصمت باستخدام تعريفها المخزَّن وتجاهل clauses التي قدّمها المستخدم. وما تزال SETTINGS الخاصة بالجلسة على مستوى query (مثل log_comment) تُطبَّق. استخدم ATTACH TABLE t; لإعادة Attach باستخدام metadata المخزَّنة، أو ALTER TABLE t MODIFY SETTING ... بعد ATTACH لتغيير settings. #105068 (Groene AI).
  • إصلاح use-after-free في runningAccumulate عند استدعائها على column تُرجع aggregate function الخاصة به حالتها الخاصة (مثل uniqStateOrDefaultState وsumStateOrDefaultState وuniqStateForEachState). #105085 (János Benjamin Antal).
  • إصلاح خطأ في Web UI ‏(play.html): كان تشغيل query بينما يكون المؤشر بعد ; الختامية الوحيدة يُبلغ عن “empty query” بدلًا من تشغيل الاستعلام. #105107 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR: 'No user in current context, it's a bug' عند تنفيذ CREATE TABLE ... AS SELECT داخل قاعدة بيانات Replicated مع القراءة من system.current_roles أو system.enabled_roles. ينجح الاستعلام الآن ويُرجع مجموعة نتائج فارغة في سياق عامل DDL الداخلي هذا. #105150 (Groene AI).
  • تم إصلاح ILLEGAL_TYPE_OF_ARGUMENT عند دمج حالات التجميع quantileExactWeightedInterpolated أو quantileDD أو quantilePrometheusHistogram مع نظائرها بصيغة الجمع quantilesXxxMerge (والعكس صحيح). تشترك الصيغتان المفردة والجمع لهذه العائلات الثلاث من quantile في حالة التجميع الداخلية نفسها، لكنها لم تكن مُدرجة في جدول ربط الأسماء الداخلي، لذلك كان يُرفض دمج الحالة بين الدوال — وكذلك تحسين دمج الدوال لهذه العائلات. #105189 (Groene AI).
  • إصلاح النتائج غير الصحيحة للدوال toStartOfWeek وtoLastDayOfWeek وtoMonday وtoStartOfMonth وtoLastDayOfMonth وtoStartOfQuarter وtoStartOfYear عند استخدام وسائط Date32 وDateTime64 التي تقع نتيجتها خارج نطاق Date: فبدلًا من تجاوز السعة إلى تواريخ عشوائية، أصبحت النتائج قبل 1970-01-01 الآن مقيَّدة إلى 1970-01-01، والنتائج بعد 2149-06-06 مقيَّدة إلى 2149-06-06. ويُصلح هذا أيضًا نتائج الاستعلام الخاطئة (استبعاد parts وgranules بشكل غير صحيح) عند استخدام مثل هذه الدوال في WHERE على مفتاح Date32 أو DateTime64 يحتوي على قيم خارج النطاق. #105244 (Yarik Briukhovetskyi).
  • إصلاح خطأ منطقي في arrayRemove عندما تكون الوسيطة الأولى مصفوفة من Variant وكانت جميع بدائلها غير متوافقة مع نوع الوسيطة الثانية وكان variant_throw_on_type_mismatch معطّلًا. تتعامل الدالة الآن مع المقارنة على أنها “لا تتساوى مطلقًا” وتُرجع المصفوفة كما هي بدلًا من التسبب في فشل assertTypeEquality على جانب الخادم. #105248 (Groene AI).
  • يمكن الآن تنفيذ الاستعلام بنجاح حتى إذا فشل FileCache في إنشاء بعض الأدلة على القرص لأغراض التخزين المؤقت. #105250 (Den Kalantaevskii).
  • إصلاح توقّف الخادم مع Assertion 'px != 0' failed في ExtremesTransform عندما يواجه استعلام فيه extremes = 1 استثناءً (مثل MEMORY_LIMIT_EXCEEDED) بينما كان التحويل يبني أعمدة Extremes من أول chunk. يتلقى العميل الآن الاستثناء الأصلي بدلًا من تعطل الخادم. #105264 (Groene AI).
  • أصبح LEFT ANTI JOIN الآن يُرجع بشكل صحيح عمود مفتاح join من الجانب الأيمن بالقيم الافتراضية للصفوف غير المطابقة، بدلًا من تكرار قيمة المفتاح الأيسر. سابقًا، كان SELECT a.x AS l, b.x AS r FROM a LEFT ANTI JOIN b ON a.x = b.x قد يُرجع r = a.x للصفوف غير المطابقة، بينما كان ينبغي أن يُرجع القيمة الافتراضية (0 لـ Int32، و'' لـ String، وNULL لـ Nullable). كان التأثير مقتصرًا على عمود مفتاح join فقط؛ أما الأعمدة اليمنى غير المفتاحية فكانت تُضبط بالفعل على القيم الافتراضية بشكل صحيح. وظهر الخطأ نفسه في RIGHT ANTI JOIN كلما بدّل المُحسِّن الجانبين. يُغلق #99959. #105278 (Groene AI).
  • إصلاح فقدان البيانات في clickhouse-local عند تشغيله بشكل متكرر باستخدام --default_database غير default (على سبيل المثال clickhouse-local --path X -- --default_database=mydb): كان البحث عن معرّف UUID لقاعدة البيانات المحفوظة مُثبتًا على metadata/default، لذلك كان كل إعادة تشغيل تُنشئ معرّف UUID جديدًا وتُخفي جداول التشغيل السابق. يغلق #101831. #105284 (Groene AI).
  • إصلاح الخطأ المنطقي Mutation of Memory table produced incomplete output الذي كان يظهر عند تشغيل ALTER TABLE <memory_table> APPLY PATCHES أو ALTER TABLE <memory_table> APPLY DELETED MASK. لا تمتلك جداول Memory patch parts أو أقنعة حذف، لذا يُعامَل الأمران الآن بشكل صحيح على أنهما بلا تأثير. #105286 (Groene AI).
  • إصلاح الاستعلامات طويلة التشغيل مع Unity Catalog عبر تمرير معلمة table_id في طلب الاستعلام. #105303 (Konstantin Vedernikov).
  • إصلاح CANNOT_CONVERT_TYPE في Merge فوق Merge فوق Distributed مع distributed_group_by_no_merge=1. #105330 (Azat Khuzhin).
  • إصلاح تجاهل clickhouse local وclickhouse client للخيار --query/-q بصمت عند تمرير وسيطة موضعية لملف أيضًا. كلا الشكلين يُنتجان الآن BAD_ARGUMENTS بصورة متسقة. #105334 (Raúl Marín).
  • إصلاح قيام REPLACE TEMPORARY TABLE بإنشاء جدول جديد بصمت عندما لا يكون الهدف موجودًا. الآن يُصدر UNKNOWN_TABLE، بما يطابق دلالات REPLACE TABLE. استخدم CREATE OR REPLACE TEMPORARY TABLE للحفاظ على سلوك الإنشاء أو الاستبدال. #105373 (Groene AI).
  • إصلاح فشل عمليات القراءة طويلة التشغيل (مثل INSERT ... SELECT) من قاعدة بيانات DataLakeCatalog مع catalog_type = 'glue' بخطأ ExpiredToken بمجرد انتهاء صلاحية بيانات اعتماد جلسة AWS STS التي جرى التقاطها عند وقت تحميل البيانات الوصفية للجدول. تُحدَّث بيانات اعتماد AWS STS الآن أثناء تنفيذ الاستعلام، لذا تستمر هذه القراءات بعد انتهاء صلاحية الرمز المميز. #105381 (Pratima Patel).
  • إصلاح خطأ منطقي في LIMIT BY السالب في بعض الحالات عند استخدامه مع ARRAY JOIN. #105403 (Nihal Z. Miaji).
  • إصلاح تضخم read_bytes (وكذلك البايتات/الثانية المشتقة المعروضة في system.query_log وشريط التقدم وما إلى ذلك) عند قراءة ملفات Parquet. كان التنفيذ السابق يبلّغ عن الحجم المضغوط الإجمالي لـ row group عند كل chunk، لذا كانت قراءة K من أصل N من الأعمدة تؤدي إلى احتساب زائد بمقدار N / K. والآن لا يُجمَع إلا عبر الأعمدة المحددة. كما يُصلح أيضًا تتبع التقدم على مستوى الملف لجداول Iceberg، والذي لم يكن يبلّغ سابقًا عن حجم ملف البيانات مطلقًا. #105413 (Groene AI).
  • إصلاح احتمال حدوث segfault في الخادم في cluster table functions (s3Cluster, urlCluster, fileCluster, …) عندما يُنتج المخطِّط SELECT مع تعيين العلامة recursive_with ولكن من دون تعبير WITH. يغلق #105370. #105433 (Groene AI).
  • إصلاح النتيجة الخاطئة لـ countDistinct / uniqExact على الأعمدة من النوع Nullable عندما يكون count_distinct_optimization = 1 (كانت مجموعة NULL تُحتسب على نحو غير صحيح). #105439 (Raúl Marín).
  • تم إصلاح heap-buffer-overflow عند قراءة ملفات Arrow أو ArrowStream التي تحتوي على offsets وسيطة تالفة في عمود ثنائي أو نصي، وكذلك إلغاء مرجعية لمؤشر NULL عند قراءة أعمدة Arrow الموسومة جغرافيًا. #105449 (Raúl Marín).
  • التحقق من أنواع Dynamic/Variant في window PARTITION BY، إذ لم يكن يُتحقق منها سابقًا عندما يكون allow_suspicious_types_in_group_by معطّلًا. يُغلق #105028. #105450 (Pavel Kruglov).
  • إصلاح عدم عمل input_format_json_empty_as_default في تنسيقات JSONStrings*. يُغلق #104913. #105453 (Pavel Kruglov).
  • إصلاح إدراج NULL في عمود Variant عبر تنسيق VALUES أثناء parsing للتعبيرات. يُغلق #104909. #105455 (Pavel Kruglov).
  • إصلاح قيام dictGetOrDefault بإطلاق CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN عندما تكون الوسيطة الافتراضية تعبيرًا من نوع Nullable ويكون short_circuit_function_evaluation مفعّلًا مع مزيج من مفاتيح Dictionary الموجودة وغير الموجودة. #105461 (Raúl Marín).
  • إصلاح اقتطاع القيم بصمت في أعمدة Dynamic عندما يعود قارئ النص Quoted (Values) إلى String للأنواع المستنتجة غير المكتملة مثل Map(Array(Nothing), ...). سابقًا، كان مسار fallback يغلّف الحقل الخام بربط بسيط على شكل '...'، لذا كان وجود علامة اقتباس مفردة داخلية (وهي موجودة دائمًا في مثل هذه الحالات) يُنهي السلسلة المقتبسة مبكرًا، فتُفقد بقية القيمة. #105463 (Groene AI).
  • إصلاح SIGSEGV عند قراءة subcolumns لـ Dynamic من جدول Memory مضغوط بعد ALTER. يُغلق #104901. #105464 (Pavel Kruglov).
  • إصلاح تجاهل toFloat64/toUInt32/toString/إلخ. على Dynamic للإعداد cast_keep_nullable. يُغلق #104789. #105467 (Pavel Kruglov).
  • تضمين skip_first_lines في مفتاح cache الخاص بالمخطط لتنسيقات WithNames. يُغلق #104527. #105469 (Pavel Kruglov).
  • إصلاح segfault في server داخل uniqStateOrNull / uniqStateOrDefault / uniqOrNullState (وسلاسل combinator مشابهة فوق uniq) عند استخدامها مع GROUP BY ... WITH ROLLUP أو WITH CUBE أو WITH TOTALS ومع وسيطة Nullable. #105470 (Groene AI).
  • إصلاح استثناء NOT_FOUND_COLUMN_IN_BLOCK عند الجمع بين ORDER BY ... WITH FILL INTERPOLATE و LIMIT N BY مع تفعيل analyzer. يُغلق #103474. #105481 (Yakov Olkhovskiy).
  • إصلاح toStartOfMillisecond وtoStartOfMicrosecond اللتين كانتا تعيدان نتيجة منحرفة بنحو ثانية تقريبًا لقيم DateTime64 السالبة (ما قبل الحقبة الزمنية)، وإصلاح مشكلة signed-integer-overflow التي يرصدها UndefinedBehaviorSanitizer في toStartOfSecond وtoStartOfMillisecond وtoStartOfMicrosecond لمدخلات DateTime64 القريبة من INT64_MIN. #105482 (Groene AI).
  • إضافة إعداد توافق جديد analyzer_compatibility_prefer_alias_over_subcolumn (معطّل افتراضيًا). عند تفعيله، يفضّل المحلّل الجديد تفسير بادئة الاسم المستعار على مطابقة العمود الفرعي في Tuple / الأعمدة المنقوطة للمعرّفات متعددة الأجزاء، مما يعيد سلوك المفسّر السابق. وهذا يتجنب أخطاء AMBIGUOUS_IDENTIFIER (وما يتصل بها) عندما يُجري استعلام عملية join مع جدول يطابق اسمه جدولًا داخليًا ضمن تعبير الجدول الشائع/استعلام فرعي يستخدم SELECT * فوق join، حيث كان يمكن بخلاف ذلك أن تؤدي الأعمدة المعاد تسميتها بواسطة النجمة (مثل b.id) إلى تسرّب معرّفات الجدول الداخلي إلى النطاق الخارجي. #105491 (Vladimir Cherkasov).
  • أصبح استعلام بحث المتجهات الذي يُنفَّذ باستخدام تحسين index only يعيد الآن القيمة الصحيحة للدالة L2Distance() إذا كانت ضمن قائمة SELECT. إذ كانت الدالة تعيد بشكل غير صحيح قيمة المسافة L2-squared. لاحظ أن استعلام بحث المتجهات كان يعيد النتائج بالترتيب الصحيح، وأن التطبيقات التي تسترجع قيمة L2Distance() وتفسّرها صراحةً هي فقط التي كانت سترى القيمة المربعة. #105495 (Shankar Iyer).
  • إصلاح مشكلة نادرة في Kafka table engine الجديد، حيث كان يمكن التعامل مع الرسائل بشكل غير صحيح أثناء إعادة تعيين partition للموضوع، مما قد يؤدي إلى تخطي رسائل بعد التراجع عن الإزاحة. #105500 (János Benjamin Antal).
  • إصلاح استثناء (Trying to execute PLACEHOLDER action logical error) عند استخدام تعبير جدول شائع MATERIALIZED يكون جسمه استعلامًا فرعيًا مترابطًا كطرف أيمن لـ IN. ويُرفض هذا النوع من التعبيرات الآن في وقت التحليل، اتساقًا مع رفض النمط نفسه بالفعل عند الإشارة إلى تعبير الجدول الشائع مباشرةً في FROM. #105518 (Groene AI).
  • إصلاح عدم تطبيق الضغط على stdout/stdin عند تحديد format صراحةً. يغلق #104441. #105528 (Pavel Kruglov).
  • إصلاح SEGFAULT في إلغاء التسلسل لـ singleValueOrNull للنوع JSON. يغلق #103630. #105535 (Pavel Kruglov).
  • إصلاح قيام clickhouse-format --backslash بإسقاط بيانات INSERT VALUES بصمت. يغلق #103533. #105536 (Pavel Kruglov).
  • إصلاح عدم قيام variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=false بالتقاط الاستثناءات أثناء تنفيذ الدالة. يغلق #103484. #105543 (Pavel Kruglov).
  • إصلاح تجاهل input_format_try_infer_datetimes أثناء الإدراج في البيانات المشتركة في JSON. يغلق #103221. #105544 (Pavel Kruglov).
  • إصلاح histogram الذي كان يُنتج نتائج غير صحيحة مع المدخلات الصغيرة غير المرتبة. يغلق #103109. #105548 (Pavel Kruglov).
  • إصلاح التفاف DateTime عند القيم الخارجة عن النطاق في JSONExtract وعمليات إلغاء التسلسل النصية. يغلق #103094. #105551 (Pavel Kruglov).
  • إصلاح استخدام جدول الإدراج في دوال الجداول عند تفعيل optimize_trivial_insert_select. يغلق #103083. #105555 (Pavel Kruglov).
  • إصلاح تعبير CASE الذي كان يعيد الفرع ELSE بدلًا من THEN المطابق عندما كانت كلٌّ من قيمة التعبير وقيمة WHEN تساوي NULL. #105556 (Raúl Marín).
  • إصلاح تعطل في replxx ناتج عن بلوغ حد FD_SETSIZE الخاص بـ select (وقد استُبدل الآن بـ poll). سابقًا، كان هذا قد يؤدي إلى تعطل الخادم عند تمكين SSH أو واجهة الويب الطرفية. #105559 (Azat Khuzhin).
  • تحويل الأعمدة الفرعية إلى صورة مادية في executePartitionByExpression قبل تنفيذ التعبير. يغلق #103057. #105573 (Pavel Kruglov).
  • إصلاح الاستثناء NOT_FOUND_COLUMN_IN_BLOCK عندما يشير تعبير TTL إلى عمود فرعي. #105578 (Pavel Kruglov).
  • إصلاح تعطل في الخادم (SIGSEGV) يمكن لأي مستخدم لديه صلاحيات CREATE TABLE التسبب فيه عند إرسال CREATE TABLE ... TO INNER UUID '...' من دون clause ‏ENGINE عبر HTTP أو البروتوكول الأصلي. وكان الخطأ نفسه يؤدي أيضًا إلى تعطل client. يُبلغ parser الآن عن خطأ BAD_ARGUMENTS مناسب بدلًا من إلغاء مرجعية مؤشر null. #105579 (Groene AI).
  • إصلاح الدالة النافذية estimateCompressionRatio التي كانت تفقد البيانات المتراكمة بين الصفوف. يغلق #101738. #105581 (Pavel Kruglov).
  • إصلاح تعطل عند إدراج tuples بأحجام مختلفة في clause ‏VALUES نفسها داخل عمود String. يغلق #101727. #105582 (Pavel Kruglov).
  • أصبح استخراج قيمة partition في Hive يراعي الآن الإعداد cast_string_to_date_time_mode ويقبل طوابع زمنية بتنسيق ISO 8601 مع لواحق timezone (مثل +0000 و+00:00 وZ) في مفاتيح partition افتراضيًا. #105584 (Alexey Milovidov).
  • إصلاح الخطأ NOT_IMPLEMENTED في toString من DateTime مع Timezone يحتوي على قيمة NULL. يغلق #103712. #105587 (Yarik Briukhovetskyi).
  • إصلاح قراءة OOB في إلغاء التسلسل Native لعمود Dynamic المسطّح. #105666 (Pavel Kruglov).
  • إصلاح الخطأ LOGICAL_ERROR ‏(Unexpected return type from if) الذي كان يظهر أثناء تخطيط الاستعلام لتعبيرات if التي يكون نوع نتيجتها Variant، ويكون فيها الفرع الثاني أو الثالث عبارة عن if ذي شرط ثابت على قيمة UInt64 حرفية يمكن أن تلائم Int64. يغلق #105649. #105680 (Groene AI).
  • إصلاح نتائج غير صحيحة عند قراءة جدول Iceberg مع iceberg_use_version_hint = 1 بعد أن يقوم writer آخر (مثل الدالة الجدولية icebergLocal/icebergS3) من دون هذا الإعداد بتحديث الجدول. أصبح الآن version-hint.text يُزامَن بواسطة كل writer بمجرد وجود الملف، بحيث يرى القرّاء اللاحقون الذين يستخدمون هذا التلميح أحدث snapshot. #105682 (Groene AI).
  • إصلاح نقص صامت في العدّ في استعلامات SELECT عندما يكون use_query_condition_cache = 1 (الإعداد الافتراضي). كان استعلام بالنمط PREWHERE pk_prefix = X WHERE non_pk IN (...) على عمود يحتوي على bloom-filter skip index يفسد QueryConditionCache للمسند pk_prefix = X، بحيث إن استعلامًا لاحقًا وبسيطًا من نوع SELECT count() ... WHERE pk_prefix = X كان يعيد نتيجة غير صحيحة بعدد أقل من الواقع. تأثرت بذلك جميع إصدارات 26.x. #104781. #105686 (Groene AI).
  • إصلاح singleValueOrNullMerge الذي كان يعيد قيمة فعلية بدلًا من NULL عند دمج حالة كانت قد رصدت مسبقًا عدة قيم مميزة. #105734 (Minh Vu).
  • إصلاح استعادة التعافي من الأخطاء في input format ‏Template بعد الصفوف غير الصالحة. #105735 (Yue Ni).
  • إصلاح تعطل في الدالة الجدولية mongodb، وتخزين MongoDB، وdictionary source الخاصة بـ MongoDB عندما يكون اسم collection فارغًا أو يحتوي على بايتات NUL. #105776 (Raúl Marín).
  • إصلاح تنظيف snapshot في Keeper بعد فشل عمليات writes، بحيث تُنظَّف snapshots الجزئية بأمان ويمكن إعادة محاولة writes الفاشلة من دون تقديم latest_snapshot_meta. #105779 (Antonio Andelic).
  • إصلاح رفض ALTER TABLE ... CLEAR COLUMN لأعمدة columns_to_sum الصريحة في SummingMergeTree وCoalescingMergeTree. #105785 (Antonio Andelic).
  • إصلاح assertion في DatabaseCatalog::tryGetDatabase (وما ينتج عنه من الخطأ UNKNOWN_DATABASE في إصدارات release) عند إنشاء parameterized view يكون اسم database فيها مُمرَّرًا عبر query parameter، على سبيل المثال CREATE VIEW {db:Identifier}.v AS SELECT {p:UInt64}. تُستبدل الآن Parameters في أجزاء DDL من عبارة CREATE وقت الإنشاء، بينما تبقى Parameters في متن SELECT متاحة للاستبدال وقت استدعاء العرض. #105799 (Groene AI).
  • إصلاح الخطأ Bad get: has Decimal32, requested Decimal128 في sumMap وsumMapWithOverflow على عمود Nested(... Nullable(Decimal(P, S))) عندما تكون aggregate state مُسلسلة (مثل parallel replicas، أو sumMapState عبر formatter للحالة الثنائية، أو external aggregation). #105816 (Groene AI).
  • إصلاح الخطأين Expected ColumnLowCardinality, got String / Bad cast from type DB::ColumnString to DB::ColumnLowCardinality عند استخدام apply_mutations_on_fly = 1 على جدول يحتوي على عمليات mutation معلّقة أثناء التنفيذ من نوع UPDATE/DELETE كانت قد أُدرجت في الطابور قبل عملية mutation من نوع ALTER MODIFY COLUMN ... LowCardinality(...). #105847 (Raúl Marín).
  • أصبحت عمليات الكتابة في Iceberg تحافظ على قيم NULL في أعمدة partition من النوع Nullable(T). سابقًا، كانت قيمة NULL التي يكتبها ClickHouse تظهر كأنها القيمة الافتراضية للنوع الداخلي (0 في حالة int) عند قراءتها مرة أخرى بواسطة Spark أو قارئات Iceberg الأخرى. يُغلق #105852. #105862 (Groene AI).
  • إصلاح pushdown للمرشحات في Parquet وORC لمرشحات IN (subquery)، مما يتيح لعملية pruning على مستوى row-group/page/bloom-filter أن تعمل مع قراءات file وurl وs3 وobject storage. #105863 (Arsen Muk).
  • إصلاح القراءة بالترتيب لجداول Merge (باستخدام المحلّل الجديد). #105867 (Nikolai Kochetov).
  • إصلاح مشكلة إرجاع صفوف غير صحيحة في عمليات حذف المواضع merge-on-read في Iceberg v2 عندما يشير ملف حذف واحد إلى عدة data files وتُطبَّق عدة ملفات حذف من هذا النوع على ملف البيانات نفسه. أصبح القارئ المتدفق (use_roaring_bitmap_iceberg_positional_deletes = 0) الآن يرشّح صفوف ملفات الحذف بحسب file_path في C++ بدلًا من الاعتماد على pruning لمجموعات صفوف Parquet، مما يعيد الحفاظ على invariant الخاص بترتيب المواضع التصاعدي. #105888 (Groene AI).
  • إصلاح الخطأ Cannot find column في distributed queries التي تستخدم مرشح IN Array(...) مع المحلّل الجديد. #105894 (Nikolai Kochetov).
  • إصلاح SIGSEGV في ALTER TABLE ... MODIFY COLUMN ... Nullable(...) على جداول MergeTree عندما يُحذف، بالتزامن، عمود يحتوي على STATISTICS بواسطة أمر ALTER آخر. يُغلق #105912. #105917 (Groene AI).
  • إصلاح تعطل في الخادم كان قد يحدث عند إلغاء استعلام يقرأ من PostgreSQL — عبر postgresql table function، أو PostgreSQL table engine، أو dictionary بمصدر PostgreSQL — (على سبيل المثال باستخدام KILL QUERY)، إذا فشل إلغاء استعلام PostgreSQL البعيد. #105949 (Rory Shanks).
  • إصلاح تنسيق SYSTEM INSTRUMENT ADD بحيث تُفصل arguments الخاصة بالمعالج بمسافة واحدة، ورفض قوائم arguments غير الصالحة لـ SLEEP instrumentation التي تحتوي على أكثر من قيمتين أو على نطاق يكون فيه الحد الأدنى أكبر من الحد الأقصى. #105984 (Pablo Marcos).
  • إصلاح نتائج قد تكون غير صحيحة للاستعلامات التي تجمع بين outer join وinner join لاحق يشير إلى الجانب المزوِّد بقيم NULL في outer join. كان من الممكن أن تؤدي إعادة ترتيب join إلى اختيار خطة تسحب شروط inner join إلى عبارة ON الخاصة بـ outer join. #105992 (Vladimir Cherkasov).
  • إصلاح تعطل محتمل بسبب إرسال literal نصي كبير جدًا داخل الاستعلام. #105996 (Nikita Taranov).
  • إصلاح استثناء INVALID_WITH_FILL_EXPRESSION عند استخدام INTERPOLATE () (الفارغة) مع بادئة ترتيب في ORDER BY ومع تفعيل use_with_fill_by_sorting_prefix. تُستبعَد الآن أعمدة بادئة الترتيب بشكل صحيح من مجموعة الاستيفاء الضمنية، بما يطابق سلوك INTERPOLATE (col) عند تسمية العمود صراحةً. #106001 (Yakov Olkhovskiy).
  • إصلاح فشل عمليات partition في ALTER TABLE بصمت عند استخدام مفاتيح partition من النوع Bool. يغلق #101722. #106004 (Pavel Kruglov).
  • إصلاح JSONExtractRaw وJSONHas لمسارات JSON المعرّفة بأنواع والتي تتضمن قيمًا افتراضية. يغلق #101721. #106005 (Pavel Kruglov).
  • إصلاح إضافة البادئة ’/’ بشكل غير صحيح إلى basepaths الفارغة في إعدادات بحيرة البيانات. يغلق #105989. #106013 (thewisenerd).
  • إصلاح تحوّل محرك الجدول IcebergLocal إلى وضع القراءة فقط بعد دورة DETACH + ATTACH أو إعادة تشغيل الخادم، مما كان يؤدي إلى فشل كل عملية INSERT لاحقة مع Local object storage Local is readonly. (READONLY). #106016 (Groene AI).
  • إصلاح أعطال Keeper أثناء catch-up على العقدة follower عندما كان من الممكن أن يمتلئ طابور استجابات request dispatcher الجديد قبل بدء خيط الاستجابة. #106049 (Antonio Andelic).
  • تحسين التوافق مع المحلل القديم. إذا كان الجدول يحتوي على أعمدة مثل x.a Array, x.b Array, x String، فستُفضَّل المصفوفات عند ARRAY JOIN x. #106069 (Nikolai Kochetov).
  • إصلاح تعطيل ذاكرة التخزين المؤقت لنظام الملفات بصمت مع Azure Blob Storage (مثل جداول Delta Lake على Azure)، لأن البيانات الوصفية للكائن لم تكن تتضمن blob ETag. #106091 (thewisenerd).
  • إصلاح قيام system.dictionaries بإرجاع 0 صفوف عند وجود سحب جزئي لصلاحية SHOW DICTIONARIES. #106105 (Pavel Kruglov).
  • إصلاح تعطل الخادم عند الاستعلام عن جداول DeltaLake مع تفعيل allow_experimental_delta_kernel_rs ووجود بيانات اعتماد أو خيار يحتوي على بايتات غير صالحة (حدث panic في Rust FFI عبر الحد extern "C"). #106109 (Raúl Marín).
  • إصلاح النتائج غير الصحيحة للاستعلامات على الجداول التي يحتوي ORDER BY فيها على دالة متناقصة رتيبًا مثل (c0 / -42) أو intDiv(c0, -42). كان من الممكن أن تؤدي predicates على العمود الأساسي (مثل c0 < 0) إلى استبعاد granules تحتوي على صفوف مطابقة بشكل خاطئ، مما ينتج عنه نتائج ناقصة. يغلق #106084. يغلق #106124. يغلق #106080. #106136 (Nihal Z. Miaji).
  • إصلاح دعم استخدام WASM SQL UDFs في تعريفات MATERIALIZED VIEW. #106161 (Yue Ni).
  • أصبح Iceberg partition pruning يتعامل الآن بصورة صحيحة مع عوامل التصفية WHERE partition_col = (SELECT ... FROM ...) عندما يغلّف analyzer نتيجة الاستعلام الفرعي القيَمي داخليًا في _CAST(Const, 'TargetType') مع تطابق نوعَي المصدر والهدف. سابقًا، كانت مثل هذه العوامل تعطّل Iceberg partition pruning وتؤدي إلى full table scan. #106204 (Groene AI).
  • إصلاح المعامل --query_id في clickhouse local للسماح بتحديد معرّف استعلام مخصص. #106205 (Yue Ni).
  • تم إصلاح تجاهل فئة تخزين S3 (s3_storage_class / s3_storage_class_name) للكائنات المكتوبة عبر multipart upload على أقراص S3 وobject storage، مما كان يؤدي إلى إنشاء الكائنات الكبيرة بالفئة الافتراضية STANDARD. وأصبح اسم الخيار الآن مقبولًا بصيغتَي s3_storage_class وs3_storage_class_name للأقراص وobject storage والنسخ الاحتياطية. #106214 (Alexey Milovidov).
  • تم إصلاح مشكلة تعلّق Keeper أحيانًا عند بدء التشغيل عندما يكون الإعداد nuraft_max_log_gap_in_stream مضبوطًا على قيمة غير افتراضية (القيمة الافتراضية هي 0، أي تعطيل pipelining لطلبات append_entries). #106220 (Michael Kolupaev).
  • التحقق من سلامة حالة دالة التجميع DDSketch التالفة (مفاتيح bin) عند الإدراج بدلًا من قبول البيانات غير الصالحة. #106236 (Yarik Briukhovetskyi).
  • تم إصلاح عدم تطابق وضع coordinator عندما تتجاوز الاستعلامات الفرعية إعدادات التنفيذ بالترتيب. #106243 (Nikita Taranov).
  • إصلاح مشكلة عدم تطبيق optimize_skip_unused_shards (وفشل force_optimize_skip_unused_shards بشكل خاطئ) عند الاستعلام عن جدول Distributed عبر جدول Merge أو table function ‏merge، مع تطبيق predicate فوقه. #106250 (Nikolai Kochetov).
  • إصلاح قيام INTERPOLATE () بطرح الخطأ INVALID_WITH_FILL_EXPRESSION عندما تكون أعمدة ORDER BY مستخدمة بأسماء مستعارة في قائمة SELECT مع analyzer القديم. يغلق #106248. #106252 (Yakov Olkhovskiy).
  • تم إصلاح حالة abort عند إلغاء تسلسل حالة AggregateFunction(uniqTheta, ...) غير صالحة من إدخال RowBinary أو من query parameter. وأصبح الإدخال غير الصحيح يُرفض الآن بخطأ CORRUPTED_DATA بدلًا من أن يتسرّب على هيئة std::exception ويتسبب في إجهاض العملية عبر abortOnFailedAssertion. #106260 (Groene AI).
  • رفض بايتات IntervalKind الخارجة عن النطاق أثناء فك ترميز النوع في RowBinaryWithNamesAndTypes (input_format_binary_decode_types_in_binary_format = 1) مع إظهار خطأ INCORRECT_DATA واضح، بدلًا من إنشاء DataTypeInterval بنوع غير صالح قد يؤدي لاحقًا إلى سلوك غير معرّف في مسارات hash. #106261 (Groene AI).
  • إصلاح مشكلة التراجع عند فشل downgrade لـ SLRU في 26.1+. وإصلاح priority لتقسيم cache بين System/Data مع ميزة keep_free_space_ratio. #106286 (Kseniia Sumarokova).
  • قراءة العمود الفرعي null كمسار JSON في Nullable(JSON) بدلًا من خريطة القيم null. يُغلق #106085. #106295 (Pavel Kruglov).
  • إصلاح إرجاع RestCatalog::empty نتيجة غير صحيحة عندما يحتوي REST Catalog لـ Iceberg على جداول. #106301 (Lefteris).
  • تم إصلاح استثناء في استعلامات INNER JOIN مع جدول MergeTree أيسر فارغ عند تفعيل enable_parallel_replicas وquery_plan_use_new_logical_join_step وquery_plan_optimize_join_order_algorithm = 'greedy'. #106338 (Nikolai Kochetov).
  • تم إصلاح تحويل غير صحيح لقيم Float16 دون العادية إلى Float32 (مثلًا عند قراءتها من ملفات Numpy .npy) بسبب إزاحة زائدة بمقدار واحد في المانتيسا. #106343 (Joanna Hulboj).
  • إصلاح تعطل وخطأ محتمل NOT_FOUND_COLUMN_IN_BLOCK عند استخدام التحسين المعتمد على القيود (optimize_using_constraints) مع الاستعلامات الفرعية المترابطة. #106349 (Raúl Marín).
  • تم إصلاح قراءة خارج الحدود في sipHash64Keyed وsipHash128Keyed وsipHash128ReferenceKeyed عند إجراء hash لعمود تكون جميع مصفوفاته فارغة ولا يكون المفتاح ثابتًا. #106355 (Raúl Marín).
  • تم إصلاح قيام SYSTEM RELOAD CONFIG بإسقاط إعدادات Azure Blob Storage الخاصة بكل نقطة نهاية (مثل use_native_copy)، ما كان يؤدي إلى تجاهل الإعدادات المهيأة للقرص في BACKUP/RESTORE إلى أن يُعاد تشغيل الخادم. #106357 (Julia Kartseva).
  • إصلاح regexpExtract(haystack, pattern) بحيث تُرجع الأنماط التي لا تحتوي على مجموعة التقاط المطابقة كاملةً بدلًا من إطلاق INDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE. #106374 (Groene AI).
  • إصلاح استثناء LOGICAL_ERROR أثناء التنزيل المسبق لذاكرة التخزين المؤقت عندما يُستبدل كائن S3 بعيد بمحتوى أقصر بين الإدراج والقراءة. #106375 (Nikita Fomichev).
  • إصلاح ازدياد استخدام الذاكرة في ذاكرة التخزين المؤقت لنظام الملفات. #106387 (Kseniia Sumarokova).
  • إصلاح عدة حالات قراءة خارج حدود الكومة في قارئ تنسيق Arrow IPC (ArrowColumnToCHColumn). كان يمكن لملف Arrow غير صالح أن يعلن عن عدد صفوف أكبر مما تحتويه مخازنه المؤقتة، أو يعلن عن أطوال child في list/struct/map غير متسقة مع الأصل، أو يوفّر offsets غير رتيبة للقوائم، أو يقتطع bitmap صلاحية child، مما يؤدي إلى قراءات تتجاوز نهاية تخصيصات الكومة. يمكن الوصول إلى هذا من أي مستخدم لديه صلاحية SELECT عبر file() أو format() أو table functions أو مدخلات ArrowFlight. ويجري الآن التحقق من جميع مخازن البيانات وoffsets وview-struct وvalidity-bitmap قبل أي وصول إلى مؤشرات خام، كما يجري التحقق من اتساق أشكال وoffsets الخاصة بـ list/struct/map. #106395 (Raúl Marín).
  • تم إصلاح فشل النسخ الاحتياطية مع FILE_DOESNT_EXIST عندما يُجمَع هدف REPLACE الخاص بـ refreshable materialized view على قاعدة بيانات Replicated أو Shared، بينما لم تكن الـ materialized view قد أُنشئت بعد على الـ replica التي بدأت النسخ الاحتياطي. #106411 (Julia Kartseva).
  • إصلاح خطأ منطقي Column identifier ... is already registered عندما يحتوي الشرط في mutation (DELETE/UPDATE) على استعلام فرعي IN/EXISTS يقرأ من تعبير جدول افتراضي متداخل داخل استعلام فرعي آخر. #106414 (Alexey Milovidov).
  • إصلاح خطأ منطقي (Left and right columns have same names) في مُحسِّن ترتيب join كان قد يحدث في عمليات join المنفَّذة باستخدام النسخ المتماثلة المتوازية عندما تشترك علاقتان في مخطط الربط في أسماء الأعمدة نفسها. #106418 (Alexey Milovidov).
  • إصلاح خطأ منطقي عند إنشاء قاموس مضلعات من بيانات مصدر تحتوي على إحداثيات نقاط NaN أو لا نهائية. تُرفَض هذه الإحداثيات الآن برسالة خطأ واضحة. #106423 (Alexey Milovidov).
  • أُصلِح خلل كان يؤدي إلى احتواء العمودين used_privileges وmissing_privileges في system.query_log على سلاسل امتيازات متسرّبة من استعلامات سابقة غير مرتبطة تعود إلى مستخدم أو قاعدة بيانات أو جلسة مختلفة. #106425 (Alexey Milovidov).
  • أصبحت الدوال base58Encode وbase58Decode وtryBase58Decode تراعي الآن max_execution_time وإلغاء الاستعلام عند التعامل مع مُدخلات كبيرة، كما ترفض المُدخلات التي يزيد حجمها على 10 كيلوبايت بدلًا من الاستمرار في التنفيذ لفترة طويلة جدًا. ويمكن ضبط هذا الحد عبر الإعداد الجديد function_base58_max_input_size (تعطِّله القيمة 0). #106428 (Alexey Milovidov).
  • إصلاح نتائج غير صحيحة متقطعة لاستعلامات ORDER BY ... DESC عند قراءة الأجزاء العريضة بترتيب عكسي مع read_in_order_use_virtual_row_per_block = 1 وقيمة صغيرة لـ max_block_size. #106429 (Vladimir Cherkasov).
  • أُصلِح استثناء NOT_FOUND_COLUMN_IN_BLOCK عند الاستعلام عن جدول Iceberg أو S3 باستخدام WHERE مركّبة تحتوي على IS NOT NULL لعمود غير موجود في قائمة SELECT، وذلك عند استخدام القارئ الأصلي لـ Parquet V3. #106443 (Shaohua Wang).
  • يتيح للمستخدم تحديد ترويسات لـ HTTPDictionary باستخدام المجموعات المسماة. #106459 (Jan Rada).
  • إصلاح حالة كان يمكن أن يبقى فيها خيط عامل مرتبطًا بمجموعة خيوط قديمة بعد فشل CurrentThread::attachToGroup في منتصف العملية، مما يؤدي إلى فشل المهام اللاحقة على الخيط نفسه برسالة Thread is already attached to a group. #106462 (Mikhail f. Shiryaev).
  • أُصلِح استثناء كان يحدث عندما يستخدم استعلام بحث متجهي فهرسًا متجهيًا، ويستخدم أيضًا فهرس تخطٍّ آخر مثل minmax مع use_skip_indexes_on_data_read = 1. #106473 (Shankar Iyer).
  • أصبحت قيم enum غير الصالحة في Avro تُتحقَّق الآن وتُرفَض بخطأ بدلًا من التسبب في قراءة خارج الحدود وإنهاء التنفيذ عند إلغاء تسلسل بيانات Avro التالفة. #106476 (Miсhael Stetsyuk).
  • إصلاح تضخُّم تقارير التقدّم عند القراءة من جداول Iceberg باستخدام عوامل التصفية _file أو _path. سابقًا، كان تقدّم total_bytes_to_read يتضمن جميع الملفات من الـ manifest بغضّ النظر عن التصفية. #106491 (Pedro Ferreira).
  • تم إصلاح الاستثناء Bad cast exception في قواميس Redis التي تستخدم STORAGE_TYPE 'simple' مع تخطيط cache/direct ومفتاح سلسلة نصية واحد (معقّد)؛ وتعمل هذه القواميس الآن كما ينبغي، كما تُظهر المفاتيح المركبة فوق تخزين simple رسالة خطأ واضحة. #106501 (Vladimir Cherkasov).
  • تم إصلاح خلل كان يؤدي إلى نتائج خاطئة، إذ كان WHERE c0 = const لا يعيد أي صفوف للجداول التي تحتوي على ORDER BY f(c0) عندما يُقيَّم f(const) إلى NaN، مثل ORDER BY sqrt(c0) مع ثابت سالب. وكان تحليل المفتاح الأساسي يستبعد كل granule بشكل غير صحيح ويفسد query condition cache للاستعلامات اللاحقة. #106507 (Groene AI).
  • تم إصلاح عدم التزام LIMIT WITH TIES وLIMIT WITH TIES الكسري بـ Collation من ORDER BY ... COLLATE عند تحديد الصفوف المتعادلة. كانت الصفوف المتساوية وفقًا لـ Collation (على سبيل المثال '1' و'01' ضمن Collation رقمي) تُقارَن على مستوى البايتات، لذلك كان يجري إسقاط بعض الصفوف المتعادلة من النتيجة بشكل خاطئ. #106539 (Nihal Z. Miaji).
  • تم إصلاح تحسينات DISTINCT in order وLIMIT BY in order (بما في ذلك LIMIT BY السالب) التي كانت تُرجع نتائج خاطئة عندما يكون الإدخال مرتبًا باستخدام Collation (ORDER BY ... COLLATE). فالصفوف المتساوية وفقًا لـ Collation (على سبيل المثال 'a' و'A' ضمن Collation غير حساس لحالة الأحرف) تُرتَّب بحسب مفتاح Collation ولا تكون متجاورة من حيث القيمة، لذلك يُتخطّى الآن تحسين in order عند استخدام collator. #106564 (Nihal Z. Miaji).
  • تم إصلاح النتائج الخاطئة للاستعلام SELECT c, count() FROM t WHERE c GROUP BY c على الجداول التي تحتوي على _minmax_count_projection ضمني، أو projection تجميعي صريح، أو projection عادي: إذ كانت كل مجموعة تنهار سابقًا إلى صف واحد بمفتاح ثابت وإجمالي عدد الصفوف. #106590 (Groene AI).
  • تم إصلاح خلل كان يمنع المستخدمين من استخدام استعلامات فرعية ذات قيمة مفردة في الوسيطة الأولى لـ IN عندما تكون الوسيطة الثانية tuple غير ثابتة. #106610 (Yarik Briukhovetskyi).
  • تم إصلاح الاستثناء Mutation of Memory table produced incomplete output الذي كان يظهر عند تشغيل أوامر ALTER TABLE <memory_table> التي لا تؤثر في بيانات أي صف داخل محرك Memory، وهي APPLY PATCHES وAPPLY DELETED MASK وMATERIALIZE STATISTICS وMATERIALIZE INDEX وMATERIALIZE PROJECTION وREWRITE PARTS. لا تملك جداول Memory هذه البُنى، لذا تُعامل هذه الأوامر الآن على أنها عمليات لا تفعل شيئًا. #106621 (Groene AI).
  • تم إصلاح تجاهل session_timezone عند تسلسل أعمدة LowCardinality(DateTime) إلى text formats ‏(CSV وTSV وJSONEachRow وغيرها). سابقًا، بعد أول عملية كتابة لعمود LowCardinality(DateTime) على server، كان كل query لاحق يكتب هذا النوع من الأعمدة يعرض سلسلة الوقت المحلي وفق أي timezone صودفت أولًا، بغض النظر عن session_timezone. #106634 (Groene AI).
  • تم إصلاح LOGICAL_ERROR “Trying to get name of not a column: ExpressionList” الذي كانت تثيره queries تمرّر علامة النجمة داخل multiIf إلى وسيطة table function، مثل numbers(multiIf(*, ...), 2). ويرفض query الآن هذا المطابق غير القابل للحل باستخدام UNSUPPORTED_METHOD. #106647 (Groene AI).
  • إصلاح فشل الخادم في بدء التشغيل مع الخطأ Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0) عندما يحتوي جدول MergeTree على جزء skip-index بعدد صفري من granules وملف marks غير فارغ على القرص. #106675 (Groene AI).
  • رفض أنماط glob الخاصة بـfile الشاذة التي قد تتسبب في تكرار غير محدود عند سرد محتويات الدليل. يُفرَض الآن حد أقصى لعمق التكرار يبلغ 1000؛ وأي query يتجاوزه سيؤدي إلى الخطأ TOO_DEEP_RECURSION بدلًا من تعطل الخادم بسبب stack overflow. #106676 (Groene AI).
  • إصلاح توقف الخادم بسبب الخطأ Bad cast from type DB::ColumnNothing to DB::ColumnVector<char8_t> في FunctionIf::executeForConstAndNullableCondition عندما يُطوى شرط if/multiIf كثابت إلى Const(Nullable(Nothing)) (على سبيل المثال، استخدام فهرس خارج النطاق على مصفوفة فارغة مثل arraySort(x -> x, [])[toNullable(1)]). #106678 (Groene AI).
  • إصلاح الاستثناء 'Trying to read from input() twice.' الذي كان يظهر عند تغليف table function input داخل تعبير جدول شائع غير MATERIALIZED ثم الإشارة إليه من أكثر من موضع في query. أصبح query يُرفَض الآن بخطأ واضح INVALID_USAGE_OF_INPUT في مرحلة التخطيط. فـinput عبارة عن تدفق client أحادي الاستخدام، ولا يمكن استهلاكه إلا من source واحد في query plan. #106682 (Groene AI).
  • جعل FORMAT يُطبَّق أيضًا على مخرجات EXPLAIN في EXPLAIN ... INSERT ... SELECT ... FORMAT ... حتى عندما تسبق SETTINGS قيمة FORMAT أو عندما يكون output format هو Values. متابعة لـ #101772. #106686 (Alexey Milovidov).
  • إصلاح خطأ نادر زائف من نوع RESOURCE_ACCESS_DENIED (“Scheduler queue with resource request is about to be destructed”) لاستعلام كان قد مُنح بالفعل حق الوصول إلى مورد workload، وكان السبب إعادة استخدام كائن طلب محلي للخيط احتفظ بحالة فشل من طلب سابق. #106690 (Alexey Milovidov).
  • إصلاح حالة تسابق بين تدمير كائنات INATSConsumer واستدعاء INATSConsumer::onMsg عليها عبر callbacks في مكتبة NATS. #106692 (Miсhael Stetsyuk).
  • إصلاح match وextract وextractAll وcountMatches التي كانت تُرجع نتائج غير صحيحة للتعبيرات النمطية التي تتضمن محارف هروب ست عشرية أو ثمانية. #106709 (ofeliacode).
  • أصبحت طبقة TLS الداخلية لـ Raft في Keeper تحترم الآن الإعداد openSSL.client.verificationMode. في السابق، كان التحقق من certificate الخاصة بالنظير مفعّلًا دائمًا لاتصالات Raft بين عقد Keeper بغض النظر عن هذا الإعداد، لذا كانت القيمة none تُتجاهل بصمت. الآن، تؤدي none صراحةً إلى تعطيل certificate verification الخاصة بنظير Raft، بينما يؤدي غياب الإعداد إلى الإبقاء على السلوك السابق الآمن افتراضيًا. أما configuration التي تضبط none صراحةً فستتوقف بعد upgrade عن التحقق من certificates الخاصة بنظراء Raft، بما يتوافق مع السلوك المقصود من الإعداد. #106726 (Antonio Andelic).
  • إصلاح خطأ منطقي في نصوص البدء البرمجية في SYSTEM RELOAD CONFIG. بالإضافة إلى ذلك، أصبح يتم تحميل نصوص البدء البرمجية عند SYSTEM RELOAD CONFIG أيضًا (وظيفة متاحة حاليًا بشكل خاص فقط). #106727 (Miсhael Stetsyuk).
  • التراجع عن تغيير كان يجعل sumMap / المُركِّب -Map يرفضان أنواع القيم الرقمية ذات الأسماء المخصّصة (مثل SimpleAggregateFunction(sum, T) وBool) مع ظهور الخطأ ILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed، مما أدى إلى تعطيل عمليات التجميع التي كانت تعمل سابقًا. #106729 (Nikita Fomichev).
  • أُصلحت عدة مشكلات تتعلق بسلامة الذاكرة واستنزاف الموارد في قارئات التنسيقات التي يمكن الوصول إليها عبر مدخلات غير موثوقة: قراءة خارج حدود الكومة في معالجة أطوال مستويات التعريف/التكرار ضمن DataPageV2 في قارئ Parquet الأصلي، وفيض في المكدس في ملفات Parquet ذات البُنى شديدة التداخل، وعمليات تخصيص تجاهلت max_memory_usage عند تحليل هندسة GeoParquet بصيغ WKB/WKT وسلاسل/بايتات Avro. #106739 (Raúl Marín).
  • أُصلح فيض المخزن المؤقت في الكومة (تعطل server) في decodeHTMLComponent عند فك ترميز السلاسل التي تحتوي على كيانات HTML الموسَّعة &nGt; أو &nLt;، ويمكن لأي مستخدم الوصول إليه عبر تنفيذ SELECT واحد. #106741 (Raúl Marín).
  • أصبحت أوامر CREATE TABLE وALTER TABLE ADD INDEX وCREATE INDEX التي تستخدم GRANULARITY 0 مع skipping indexes تُرفض برسالة BAD_ARGUMENTS واضحة. سابقًا، كان هذا يؤدي إلى استثناء Inconsistent AST formatting في إصدارات التصحيح. #106783 (Groene AI).
  • أُصلح تجاهل Azure BACKUP/RESTORE لإعدادات endpoint في أقراص azure_blob_storage ذات الصيغة القديمة. #106784 (Julia Kartseva).
  • أُصلح استثناء Bad cast أثناء تقليم الأجزاء استنادًا إلى إحصاءات MinMax عندما يكون Key column من النوع LowCardinality ويكون ثابت predicate من النوع LowCardinality(Nullable(...)). #106793 (Groene AI).
  • إصلاح الأعمدة غير المتسقة (التي تؤدي لاحقًا إلى LOGICAL_ERROR) عند حدوث استثناء (مثل MEMORY_LIMIT_EXCEEDED) أثناء parsing. #106802 (Azat Khuzhin).
  • إصلاح المشكلة التي كانت تتسبب في أن يعيد server استجابة HTTP عند إرسال طلبات من عملاء HTTPS بعد ضبط keeper_server.http_control.secure_port. #106822 (linjiayu1025-collab).
  • إصلاح logical error في parseDateTime عند وجود بايتات إدخال غير ASCII. #106856 (Pavel Kruglov).
  • إصلاح SHOW CREATE ROW POLICY بحيث لم يعد يُخرج restrictive/permissive بأحرف صغيرة بدلًا من الأحرف الكبيرة، خلافًا لما هو متبع مع الكلمات المفتاحية الأخرى. #106865 (Valery Petrov).
  • إصلاح الحالة التي لم يكن فيها وضع parallel replicas يُطبَّق على view يحتوي على UNION بسبب وجود table فارغ داخل UNION. #106900 (Igor Nikonov).
  • إصلاح تعطل server ‏(SIGSEGV) عند قراءة بيانات Protobuf مقتطعة مع input_format_allow_errors_num > 0. #106905 (Andrey Tsarevskiy | Андрей Царевский ).
  • إصلاح استثناء THERE_IS_NO_COLUMN في distributed queries التي تتضمن optimization ‏optimize_rewrite_aggregate_function_with_if عندما تتطلب وسيطة الدالة التجميعية تحويلاً إلى النوع Nullable. #106908 (Yakov Olkhovskiy).
  • إصلاح استثناء (LOGICAL_ERROR) في عامل تصفية وقت التشغيل لـ JOIN عندما يحتوي مفتاح JOIN على نوع Variant أو Dynamic متداخل داخل Tuple أو Array أو Map، ويكون في الجانب الأيمن من JOIN قيمة مميزة واحدة فقط. #106931 (Groene AI).
  • تم إصلاح تجاوز سعة عدد صحيح موقّع (سلوك غير معرّف) في arrayLevenshteinDistanceWeighted وarraySimilarity عندما تحتوي مصفوفات الأوزان على قيم صحيحة كبيرة. وأصبحت المسافة الموزونة الآن تتراكم في عدد صحيح أوسع عند استخدام الأوزان الصحيحة، لذا لم تعد الأوزان الصحيحة الكبيرة تتسبب في تجاوز السعة وتظل النتائج دقيقة. #106934 (Groene AI).
  • إصلاح تعطل في الخادم (إلغاء مرجعية مؤشر فارغ) عند تنفيذ TRUNCATE أو DROP على جدول EmbeddedRocksDB بعد تحرير مقبض RocksDB الخاص به، مثل جدول read_only الذي أُفرغ دليل بياناته بواسطة TRUNCATE سابق. #106940 (Groene AI).
  • إصلاح استثناء (std::length_error يُبلَّغ عنه على أنه LOGICAL_ERROR) عند القراءة من table function *Cluster مثل urlCluster مع إعداد max_streams_for_files_processing_in_cluster_functions كبير جدًا. وأصبح عدد التدفقات الآن مقيّدًا بقيمة معقولة. #106946 (Groene AI).
  • إصلاح تعطل في الخادم (إلغاء مرجعية مؤشر فارغ لـ DB::IConnections) في RemoteQueryExecutor عندما يُلغى استعلام موزّع مباشرة قبل إرساله إلى shard. #106950 (Groene AI).
  • تم إصلاح مشكلة بقاء elapsed_us مساويًا للصفر دائمًا، واحتساب read_rows/read_bytes بأقل من قيمتهما الفعلية، في system.processors_profile_log وsystem.query_log لاستعلامات flush الخاصة بعمليات insert غير المتزامنة (AsyncInsertFlush). #106982 (Christoph Wurm).
  • إصلاح تعطل (Source column is not Map / SIGSEGV) عند دمج blocks مرتبة تحتوي على عمود Variant مع متغير Map يختلف ترتيب تخزينه المحلي عن ترتيبه العام. #107011 (Groene AI).
  • إصلاح خطأ منطقي conflicted_part_name.has_value() كان يظهر أثناء insert متزامن إلى جدول ReplicatedMergeTree عندما تكون inserted block قد خضعت لإزالة تكرار بالكامل، وكانت عقدة إزالة التكرار الخاصة بالجزء المتعارض قد أُزيلت بالفعل (على سبيل المثال بسبب DROP PARTITION متزامن). #107026 (Groene AI).
  • تم إصلاح استثناء (خطأ منطقي this->visited_views == right->visited_views) عند INSERT عندما تكتب materialized views اثنتان على source table نفسه إلى target table نفسه، بينما يقرأ view تابع ذلك الهدف، مع تفعيل materialized_views_squash_parallel_inserts. #107027 (Groene AI).
  • تم إصلاح الخطأ المنطقي Block structure mismatch in UnionStep stream (توقف الخادم في builds التصحيح/sanitizer، وCode: 49 في builds الإصدار) الذي كان يحدث عندما يقرأ أحد فروع UNION/INTERSECT/EXCEPT عمودًا مُسلسَلًا بصيغة Sparse، بينما يقرأ الفرع المقابل العمود نفسه باعتباره عمودًا كاملًا (على سبيل المثال عند الدفع إلى materialized view). #107041 (Groene AI).
  • تم إصلاح استثناء LOGICAL_ERROR عند الإدراج في جدول DeltaLake يحتوي على أعمدة لا تطابق مخطط الكتابة الخاص به (على سبيل المثال، عمود Nested يُفك إلى أعمدة فرعية، أو table function مع مجموعة أعمدة صريحة). أصبحت عمليات الإدراج هذه الآن تفشل بخطأ INCOMPATIBLE_COLUMNS ظاهر للمستخدم بدلًا من ذلك. يغلق #87402. #107058 (Groene AI).
  • تم إصلاح خطأ TYPE_MISMATCH (“Cannot convert string … to type …”) في استعلامات ORDER BY <numeric column> ... LIMIT n عندما كانت lazy materialization تضع عمودًا آخر قبل عمود الفرز. تُقرأ الآن عتبة top-K من عمود الفرز الصحيح. #107060 (Groene AI).
  • تم إصلاح خطأ نحوي عندما تأتي عبارة FORMAT أو SETTINGS أو INTO OUTFILE بعد SHOW ROW POLICIES أو SHOW MASKING POLICIES (مثل SHOW ROW POLICIES FORMAT TabSeparated). #107061 (Groene AI).
  • تم إصلاح العبارة المركبة ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO a التي تعيد استخدام اسم عمود تم تحريره (أي “تبديل”) بين أعمدة من أنواع مختلفة. كان الجزء materialized يسجّل نوع عمود غير صحيح، لذلك كان SELECT لاحقًا يفشل برسالة Conversion between numeric types and IPv6 is not supported (أو يتوقف عند تحميل الجزء في debug builds). #107064 (Groene AI).
  • تم إصلاح النتائج غير الحتمية للدالة roundDown عندما تحتوي مصفوفة الحدود على NaN. فقد كانت قيمة الإدخال نفسها قد تُرجِع حدًا finite أو NaN بحسب الصفوف المحيطة في الدفعة. يتم الآن تجاهل حدود NaN، لذا تعتمد النتيجة فقط على الحدود finite. #107065 (Groene AI).
  • تم إصلاح إطلاق quantileTDigest وquantileTDigestWeighted للخطأ DECIMAL_OVERFLOW مع الوسيطات Date وDateTime عندما تكون quantile المستوفاة كسرية لكنها ضمن النطاق (على سبيل المثال quantileTDigestWeighted(date, weight) على قيم تقع كلها ضمن النوع). تُقتطع النتيجة الكسرية الآن إلى نوع النتيجة، بما يتوافق مع quantilesTDigestWeighted؛ أما القيم الفعلية خارج النطاق فما زالت تؤدي إلى خطأ. يغلق: #106722. #107066 (Groene AI).
  • تم إصلاح إطلاق trimLeft وtrimRight وtrimBoth (وكذلك الأسماء البديلة ltrim وrtrim وtrim) للخطأ TOO_LARGE_STRING_SIZE عندما تكون character set المخصصة للتشذيب أطول من 16 محرفًا. أصبحت مجموعات التشذيب بأي طول مدعومة مجددًا. #107071 (Nikita Fomichev).
  • تم إصلاح الاقتطاع الصامت لقيم الأعداد الصحيحة الخارجة عن النطاق في تعريفات النوع Enum8/Enum16. أصبح Enum8('a' = 200) الآن يطلق ARGUMENT_OUT_OF_BOUND بدلًا من إنشاء Enum8('a' = -56) بصمت. #107081 (Groene AI).
  • تم إصلاح الترتيب غير الصحيح للصفوف (وظهور LOGICAL_ERROR برسالة “Rows are not sorted with permutation” في debug builds) في استعلامات ORDER BY ... LIMIT متعددة الأعمدة التي تُفرَز حسب أعمدة Nullable عندما تتساوى عدة صفوف في الأعمدة الأولى. #107094 (Groene AI).
  • إصلاح LOGICAL_ERROR (Expected the argument N to have X rows, but it has Y) عند تنفيذ دالة على عمود Dynamic ناتج عن JOIN على Dynamic (على سبيل المثال، الصفوف غير المنضمّة في RIGHT/FULL JOIN، أو استعلام EXISTS فرعي مترابط جرى فكّ ترابطه إلى join). #107095 (Groene AI).
  • إصلاح إعادة إنشاء جلسة ZooKeeper دون داعٍ عند إعادة تحميل الإعدادات. #107096 (Azat Khuzhin).
  • عدم الاحتفاظ بالـ mutex أثناء قراءات ZooKeeper عند تحديث كيانات الوصول. #107097 (Azat Khuzhin).
  • إصلاح استثناء Logical error: Too large size passed to allocator عند تنفيذ INSERT في جدول MergeTree عندما تكون adaptive_write_buffer_initial_size مضبوطة على قيمة كبيرة للغاية. ويُقيَّد الآن الحجم الابتدائي التكيفي لمخزن الكتابة المؤقت بالحد الأقصى للمخزن المؤقت. #107104 (Groene AI).
  • إصلاح LOGICAL ERROR (Bad cast from type DB::ColumnString to DB::ColumnLowCardinality) عند مقارنة ثابت Variant يحتوي على عضو LowCardinality بعمود مفتاح تكون فيه key expression دالة deterministic غير رتيبة (على سبيل المثال، skip index من نوع minmax على sipHash64(col)). #107111 (Groene AI).
  • إصلاح الخطأ المنطقي Bad cast from type DB::IColumn const* to DB::ColumnNullable const* عندما يُمرَّر asterisk مؤهل (t.*) على مفتاح JOIN ... USING إلى aggregate function، ويكون على الجانب الآخر من OUTER JOIN مفتاح Nullable (مع join_use_nulls = 0). #107129 (Groene AI).
  • إصلاح دفعات ALTER TABLE ... ON CLUSTER التي تمزج بين MODIFY SETTING/RESET SETTING وتغيير comment (على سبيل المثال MODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123) إذ كان يجري تطبيقها فقط على replica القائدة، مما يترك replicas الأخرى غير متطابقة. كما أُصلحت أيضًا حالة MODIFY COLUMN ... COMMENT الموضعية أو الخاصة بكل عمود عبر SETTINGS، التي كانت تُصنَّف خطأً على أنها تغيير محلي في metadata يقتصر على comment فقط، مما كان يستبعد إعادة ترتيب الأعمدة من metadata المكرّرة وقد يسبب INCOMPATIBLE_COLUMNS عند إعادة تشغيل replica. #107142 (Groene AI).
  • إصلاح LOGICAL_ERROR (“Table expression … data must be initialized”) الذي كان يظهر عندما يشير matcher asterisk مؤهل (على سبيل المثال x.*) إلى CTE تعاودي بالاسم داخل جزئه التعاودي نفسه. وتُوسِّع هذه المطابقات الآن أعمدة الجدول التعاودي، بالطريقة نفسها التي يفعلها فيها العمود المؤهل (x.a) أو matcher غير المؤهل (*) بالفعل في ذلك الموضع. #107144 (Groene AI).
  • إصلاح query results غير صحيحة تسببت فيها query condition cache عندما كانت mutations الفورية (apply_mutations_on_fly) أو patch parts تُرشّح الصفوف قبل PREWHERE. كان يمكن لاستعلام يقرأ باستخدام apply_mutations_on_fly = 1 أن يفسد cache، بحيث يؤدي إلى أن يتخطى استعلام لاحق مع apply_mutations_on_fly = 0 ونفس predicate علاماتٍ كان ينبغي قراءتها، ومن ثم يُرجع عددًا أقل من الصفوف. ويشمل هذا الإصلاح أيضًا سياسات الأمان على مستوى الصفوف، التي تُضاف مسبقًا كـ filter قبل PREWHERE: إذ كان يمكن لاستعلام يُشغَّل تحت row policy مقيِّدة أن يفسد cache لاستعلام لاحق يستخدم predicate نفسه من دون تلك policy. #107145 (Groene AI).
  • تم إصلاح BACKUP إلى AzureBlobStorage: كان نسخ ملف بيانات داخل نسخة احتياطية يكتب الكائن الهدف خارج دليل النسخة الاحتياطية. كما أصبحت عمليات التحقق من وجود كائنات النسخ الاحتياطي على وجهات S3 تستخدم طلبات HeadObject دقيقة بدلًا من السرد بحسب البادئة، مما يمنع المطابقات الخاطئة للمفاتيح ذات البادئات المتشابهة. #107153 (Pablo Marcos).
  • تم إصلاح تجاوز سعة عدد صحيح موقّع في quantileExactExclusive وquantilesExactExclusive وquantileExactInclusive وquantilesExactInclusive، كان يمكن أن يؤدي إلى نتيجة خاطئة لمدخلات Int64 التي تمتد عبر نطاق كبير. #107154 (Groene AI).
  • تم إصلاح LOGICAL_ERROR (“Unexpected exception in refresh scheduling”) كان يمكن أن يُدخل الخادم في حلقة تعطل عند إعادة التشغيل عندما يكون للعرض المادي القابل للتحديث تبعية REFRESH ... DEPENDS ON <name> ويطابق اسمها غير المؤهل اسم جدول مؤقت أو اسم تعبير جدول شائع. #107156 (Groene AI).
  • تم التأكد من عدم تشغيل سكربتات بدء التشغيل عند إعادة تحميل الإعدادات، لأن ذلك غير صحيح دلاليًا وغير متوقع للمستخدمين، وقد عُرف بأنه عرضة للأخطاء. #107187 (Miсhael Stetsyuk).
  • وُضع حد أقصى للقيمة القصوى لـ queue_size للحجز المسبق. #107205 (Elian Gidoni).
  • تم إصلاح الخطأ Argument ... of GROUPING function is not a part of GROUP BY clause في الاستعلامات التي تستخدم الدالة grouping مع تمكين الإعداد group_by_use_nulls. #107206 (Nikolai Kochetov).
  • تم إصلاح الترتيب غير الصحيح للنتائج في ORDER BY فوق UNION ALL عند تمكين optimize_read_in_order، وذلك عندما جرى تضييق مسار union بسبب إعدادات max_streams_for_union_step؛ ويتم الآن تخطي هذا التضييق عندما تعتمد الخطة على تدفقات إخراج UNION المرتبة. يغلق #106880. #107208 (Vladimir Cherkasov).
  • تم إصلاح احتمال فكّ إشارة مؤشر فارغ أثناء تحليل إعدادات الوكيل خلال المراحل المتأخرة من إيقاف الخادم. #107231 (Pedro Ferreira).
  • تم إصلاح استعلامات UPDATE خفيفة الوزن مع تمكين parallel replicas القديمة لجداول MergeTree غير المكررة. #107246 (Groene AI).
  • تم إصلاح توقف للخادم (std::out_of_range logical error) عند الإدراج في جدول Iceberg لا تتطابق فيه أسماء أعمدة كتلة الكتابة مع معرّفات الحقول في أحدث مخطط (على سبيل المثال، بعد أن يعيد كاتب متزامن تسمية عمود ضمن نافذة iceberg_metadata_staleness_ms). أصبح الإدراج الآن يفشل بخطأ استعلام واضح بدلًا من تعطل الخادم. #107279 (Groene AI).
  • تم إصلاح خلل تعذّر الإيقاف في الخادم ووضع local بسبب احتفاظ مجمّعات الخيوط الثابتة بالخيوط الخاملة إلى أجل غير مسمى إذا كان max_*_thread_pool_free_size > 0. #107291 (Miсhael Stetsyuk).
  • تم إصلاح تجاهل دالة الجدول s3 بصمت لقيمة partition_strategy الموضعية المكتوبة بأحرف صغيرة (مثل hive). #107297 (Julia Kartseva).
  • تم إصلاح التعامل مع low_cardinality_allow_in_native_format=0 في تجهيز الكتل المتوازية. #107319 (Azat Khuzhin).
  • إصلاح النتائج الخاطئة (وغالبًا الفارغة) من ORDER BY <col> LIMIT n عند تفعيل تحسين use_skip_indexes_for_top_k ووجود part يحتوي على skip index من نوع minmax على عمود الفرز بعد إزالة rows منه باستخدام lightweight DELETE. لم يعد التحسين يقدّم minmax القديم للأجزاء التي حُذفت منها rows باستخدام lightweight DELETE على الأجزاء التي تحتوي على أعلى rows الحية. #107320 (Groene AI).
  • إصلاح bug في ClickHouse Keeper حيث كانت metadata الخاصة بـ snapshot، والمبلّغ عنها عبر last_snapshot (وكذلك zk_latest_snapshot_size في mntr)، قد تتراجع بعد تثبيت snapshot قديم أو مكرر. وكان هذا قد يسمح أيضًا لـ snapshot محلي يحمل الفهرس نفسه بأن يستبدل snapshot file مسجّلًا في مكانه بينما كان لا يزال يُبث إلى peer أو يُرفع إلى S3. #107321 (Antonio Andelic).
  • إصلاح احتمال حدوث server stack overflow ‏(crash) عند قراءة schema أو Value متداخل بعمق في formats ‏MsgPack وBSON وORC وParquet وJSON وDeltaLake وIceberg وPaimon. ويُرفض الآن هذا الإدخال شديد التداخل مع إرجاع exception. #107341 (Raúl Marín).
  • إصلاح احتمال حدوث logical error في SYSTEM SYNC DATABASE REPLICA ... STRICT وجعل المُعدِّل STRICT يُطبَّق فعليًا على database replicas. #107344 (Pedro Ferreira).
  • إصلاح توقف server في builds الخاصة بـ debug/sanitizer عند قراءة table من نوع DeltaLake تكون فيها أسماء schema في ClickHouse تشير إلى column غير موجود في Delta column mapping، على سبيل المثال بعد إعادة تسمية column أو إسقاطه في Delta log. يفشل query الآن بدلًا من ذلك بخطأ INCORRECT_DATA يمكن التقاطه. #107347 (Groene AI).
  • إصلاح توليد ORDER BY ... WITH FILL لصفوف إضافية عندما يستخدم column في ORDER BY يسبق عمود الملء ترتيب Collation عبر COLLATE. وتُجمَّع rows الآن بحسب sorting prefix باستخدام ذلك الترتيب، بما يطابق sort order. #107365 (Groene AI).
  • إصلاح crash ‏(LOGICAL_ERROR في builds الخاصة بـ debug) وbug صامت يؤدي إلى نتائج خاطئة (في builds الخاصة بالإصدار) عند قراءة Iceberg table تعيد فيها metadata ربط schema-id موجود مسبقًا بـ schema مختلفة عبر إصدارات metadata. وتُرفض مثل هذه metadata الآن مع ICEBERG_SPECIFICATION_VIOLATION. #107370 (Groene AI).
  • إصلاح LOGICAL_ERROR ‏(Variant N (T) has size X, but expected Y) عند تطبيق function مثل toString أو concat على column من نوع Variant أو Dynamic يحتوي على variant واحد غير فارغ إلى جانب قيم NULL، وتُرجِع function column الإدخال الخاص بها دون تغيير. #107374 (Groene AI).
  • إصلاح Logical error: 'Duplicate announcement received for replica number N' الذي كان يمكن أن يحدث مع parallel replicas عندما يحتوي استعلام فرعي قيَمي على subqueries متداخلة تقرأ table نفسها. #107381 (Groene AI).
  • إصلاح getServerSetting لكي يعيد القيمة الفعلية السارية لـ server settings القابلة للتغيير أثناء runtime ‏(مثل max_server_memory_usage وmark_cache_size وmax_concurrent_queries وأحجام thread pool وغيرها)، بما يطابق ما يبلّغ عنه system.server_settings. #107388 (Alexey Milovidov).
  • إصلاح arrayResize عند استخدام وسيط حجم من النوع Decimal: يُفسَّر الحجم الآن وفقًا لقيمته الفعلية (على سبيل المثال، arrayResize([1, 2, 3], 1.5::Decimal(2, 1)) يعيد عنصرًا واحدًا) بدلًا من التمثيل الخام غير المُحجَّم. #107389 (Alexey Milovidov).
  • إصلاح LOGICAL_ERROR ‏(block.rows() == getRows()) الذي كان يظهر عند تنفيذ INSERT غير متزامن إلى جدول من نوع Alias عندما يكون use_strict_insert_block_limits مفعّلًا. #107400 (Groene AI).
  • إصلاح خطأ منطقي ‏(Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8) عندما يدفع تحسين إنزال شرط الفصل (المسند الجزئي) شرطًا فوق مفتاح USING الذي يوسّع JOIN نوعه. كما أُصلح تعطّل في الخادم (segmentation fault) في المُحلِّل عند حلّ المعرّفات في استعلامات JOIN ... USING التي تحتوي على فروع if/multiIf قابلة لطيّ الثوابت وتشير إلى معرّفات غير معروفة. #107407 (Groene AI).
  • إصلاح heap buffer overflow ‏(تعطّل في الخادم) في windowFunnel عند إنهاء حالة دالة تجميع مُشكّلة خصيصًا مع نوع حدث خارج النطاق، ويمكن لأي مستخدم الوصول إلى ذلك عبر SELECT واحد. #107412 (uwezkhan).
  • إصلاح سلوك غير معرّف عند تمرير قيمة فاصلة عائمة غير منتهية (مثل nan أو inf) كوسيط طابع زمني/مدة إلى دوال الجداول prometheusQuery / prometheusQueryRange. يرفع هذا الوسيط الآن BAD_ARGUMENTS بدلًا من إنتاج طابع زمني غير صالح. #107417 (Groene AI).
  • إصلاح توقّف MaterializedPostgreSQL بصمت عن نسخ التغييرات متماثلًا عندما يحتوي اسم قاعدة البيانات أو الجدول في PostgreSQL على أحرف كبيرة (إذ كان مستهلك pgoutput يطلب اسم publication غير موضوع بين علامتَي اقتباس ومحوّلًا إلى أحرف صغيرة، ما لا يطابق publication التي تحتفظ بحالة الأحرف). #107423 (Alexey Milovidov).
  • إصلاح استثناء ‏(Logical error: Not-ready Set is passed as the second argument for function 'in') عندما كان تعبير مفتاح ‏(ORDER BY أو PRIMARY KEY أو PARTITION BY أو INDEX للتخطي) يحتوي على عامل التشغيل IN مع جدول في الجهة اليمنى، مثل ORDER BY (x IN some_table). تُرفض تعبيرات المفاتيح هذه الآن وقت إنشاء الجدول. #107424 (Groene AI).
  • إصلاح نتائج غير صحيحة ناتجة عن التحسين optimize_rewrite_aggregate_function_with_if لدوال التجميع التي تحتفظ بقيم حمولة NULL (عائلة *_respect_nulls: ‏anyRespectNulls وfirst_value_respect_nulls وanyLast_respect_nulls وlast_value_respect_nulls). لم يعد التحسين يعيد كتابة f(if(cond, x, NULL)) إلى صيغة -If لمثل هذه الدوال. #107430 (Groene AI).
  • إصلاح استثناء زائف من النوع filesystem error: in last_write_time: No such file or directory عند سرد دليل تخزين الكائنات على قرص محلي (مثل جدول Iceberg على قرص local) بينما تُستبدل الملفات بالتوازي. وأصبح الآن يتم تجاهل الإدخال الذي يُزال بالتوازي بدلًا من إيقاف عملية السرد. #107432 (Groene AI).
  • إصلاح الخطأ THERE_IS_NO_COLUMN عندما يكون optimize_if_transform_strings_to_enum = 1 ويكون التعبير المُحسَّن لـ if/transform فوق قيم string الحرفية مفتاحًا في GROUP BY أو ORDER BY على جدول Distributed أو parallel replicas. #107455 (Groene AI).
  • تم إصلاح تعطل نادر في الخادم أثناء معالجة DISTINCT كان قد يحدث عند فشل تخصيص للذاكرة (على سبيل المثال، عند بلوغ حد الذاكرة) أثناء تهيئة مجموعة المفاتيح المميزة. #107467 (Groene AI).
  • تم إصلاح الخطأ LOGICAL_ERROR: Unexpected return type from materialize (وأخطاء عدم تطابق الأنواع المشابهة) عند استخدام apply_mutations_on_fly = 1 على جدول يحتوي على UPDATE معلّق يُطبَّق أثناء التنفيذ، وكان العمود المستهدف فيه يُقرأ أيضًا كمدخل لدالة بواسطة UPDATE سابق يُطبَّق أثناء التنفيذ، وذلك قبل mutation من نوع ALTER MODIFY COLUMN ... LowCardinality(...). #107475 (Groene AI).
  • تم إصلاح تقادم بيانات اعتماد AWS STS عند قراءة جداول DeltaLake عبر S3: إذ يحتفظ المحرك الآن بعميل S3 المزوَّد ببيانات الاعتماد المُحدَّثة عند تحديث اللقطة snapshot، لذلك لم تعد عمليات القراءة طويلة التشغيل تفشل بعد انتهاء TTL لرمز STS. كما أصبح موفّر بيانات اعتماد assume-role الخاص بـ STS يراعي أيضًا تحديث بيانات الاعتماد لأي وصول إلى S3 باستخدام STS. #107480 (Elmi Ahmadov).
  • تم إصلاح قيام SELECT ... FINAL و OPTIMIZE TABLE ... FINAL بإرجاع صفوف مكررة بعد CREATE TABLE ... CLONE AS أو ATTACH PARTITION ... FROM أو MOVE PARTITION ... TO TABLE عند اعتماد أجزاء من MergeTree عادي إلى ReplacingMergeTree أو SummingMergeTree أو AggregatingMergeTree. ويُعاد الآن ضبط merge level للجزء المُعتمَد إلى 0 عندما تختلف محركات المصدر والوجهة، بحيث تُزيل الوجهة التكرار عنه في عملية الدمج التالية. #107481 (Groene AI).
  • تم إصلاح underflow عددي صحيح في parser الخاص بـ PostgreSQL wire protocol، حيث كانت رسالة ذات حقل طول أقل من 4 تتسبب في التفاف size - 4 وحدوث resize/ignore بحجم مفرط. #107485 (uwezkhan).
  • أصبح تتبع إلغاء query أفضل أثناء انتظار quorum في ReplicatedMergeTree. #107513 (Nikita Taranov).
  • تم إصلاح الخطأ Not-ready Set is passed as the second argument for function 'in' (LOGICAL_ERROR) عند الاستعلام عن جدول يحتوي على مفتاح PARTITION BY مع استعلام فرعي من نوع IN/NOT IN ملفوف داخل expression أكبر، مثل WHERE (c0 IN (SELECT ...)) != 0. #107515 (Groene AI).
  • تم إصلاح تقييم currentUser() و user() و SESSION_USER و authenticatedUser() إلى سلسلة فارغة في مسار تفريغ asynchronous insert (مع async_insert = 1). وقد أثّر ذلك في تعبيرات الأعمدة DEFAULT/MATERIALIZED وmaterialized views التي تشير إلى هذه الدوال، إذ كانت تخزّن بصمت سلسلة فارغة بدلًا من المستخدم الذي قام بعملية الإدراج. #107541 (Groene AI).
  • مع enable_analyzer = 1 (وهو الإعداد الافتراضي)، أصبح الاستعلام عن جدول باسمه فقط، عندما لا يكون موجودًا إلا في قاعدة بيانات أخرى، يقترح الجدول الصحيح؛ فعلى سبيل المثال، يعرض SELECT * FROM functions الرسالة Maybe you meant system.functions?. سابقًا كان analyzer الجديد يعرض الخطأ Unknown table expression identifier من دون أي تلميح، بينما كان analyzer القديم يقدّم هذا الاقتراح المفيد بالفعل. #107550 (Groene AI).
  • أصبحت الذاكرة التي تستخدمها مكتبة rapidjson (في prettyPrintJSON و JSONMergePatch وparser JSON الخاص بـ rapidjson) تُحتسب ضمن memory tracker، بحيث تُرفَض المدخلات الشاذة بخطأ MEMORY_LIMIT_EXCEEDED بدلًا من الاستمرار في التخصيص بلا حدود. #107555 (Raúl Marín).
  • إصلاح LOGICAL_ERROR (updateFormatPrewhereInfo called more than once) الذي كان يظهر عند الاستعلام عن مصدر file() أو url() أو مصدر تخزين كائنات عند استخدام PREWHERE صريح وWHERE معًا، بينما كان optimize_prewhere_after_pushdown مفعّلًا. #107568 (Groene AI).
  • إصلاح تعطل (إلغاء مرجعية مؤشر فارغ) كان يمكن أن يحدث عند تنفيذ خطة استعلام موزعة محليًا (make_distributed_plan + distributed_plan_execute_locally) مع log_formatted_queries = 1. #107570 (Groene AI).
  • إصلاح توقف للخادم (std::terminate، الإشارة 6) أثناء تفكيك استعلام ذي خطة موزعة (make_distributed_plan = 1) عندما يفشل فحص حالة العامل في إعادة جدولة الفحص التالي (مثل CANNOT_SCHEDULE_TASK عند الإيقاف أو MEMORY_LIMIT_EXCEEDED). أصبح الاستعلام الآن يفشل بشكل سليم مع استمرار الخادم في العمل. #107575 (Groene AI).
  • إضافة فحوصات حدود مفقودة أثناء تحليل Elf وDWARF. #107579 (Michael Kolupaev).
  • إضافة فحوصات حدود مفقودة في قارئ ORC. #107580 (Michael Kolupaev).
  • إصلاح استثناء (Digest does not match خطأ منطقي) كان يمكن أن يحدث مع RENAME TABLE أو RENAME DATABASE أو CREATE OR REPLACE TABLE عند التعامل مع جدول TimeSeries داخل قاعدة بيانات Replicated. وأصبحت إعادة تسمية جدول TimeSeries مدعومة الآن. #107583 (Groene AI).
  • إصلاح ثغرة حجب خدمة بسبب استنفاد الذاكرة من دون مصادقة على منفذ بروتوكول MySQL. #107599 (Shaohua Wang).
  • إصلاح DROP TABLE لجدول TimeSeries في قاعدة بيانات Replicated، والذي كان سابقًا يسرّب الجداول الداخلية ويترك مهمة الإسقاط في الخلفية تعيد المحاولة بلا نهاية (وكان DROP TABLE ... SYNC يعلّق). #107604 (Groene AI).
  • إصلاح مشكلتين لاجتياز المسار في بروتوكول جلب الأجزاء المكرّرة، وكان من الممكن أن تسمحا لنسخة متماثلة خبيثة بكتابة ملفات خارج مجلد الجزء. #107606 (Antonio Andelic).
  • إصلاح الخطأ ‘Account must be specified error’ عند قراءة جدول Delta Lake عبر Azure. #107620 (Smita Kulkarni).
  • إصلاح ALTER TABLE ... REPLACE PARTITION على جدول MergeTree عادي، إذ كان يعيد إحياء الأجزاء التي تم استبدالها بعد إعادة تشغيل الخادم، مما يجعل الجدول يعيد كلًا من الصفوف البديلة والصفوف القديمة المستبدلة. #107623 (Groene AI).
  • إصلاح تعطل الخادم عند قراءة materialized view يكون هدفها جدول Distributed بينما يعمل الاستعلام مع enable_analyzer = 0. #107653 (Groene AI).
  • عند تعيين عدة quotas للمستخدم أو الدور نفسه، أصبحت تُفرَض جميعها معًا الآن (ويُرفَض الاستعلام إذا تم تجاوز أي منها)، بدلًا من فرض حصة واحدة فقط واختيارها بصورة غير حتمية. ويعرض SHOW QUOTA وsystem.quota_usage الآن جميع الحصص المفروضة على المستخدم الحالي. #107664 (Alexey Milovidov).
  • تم إصلاح قيام s3 ودوال الجداول الأخرى الخاصة بتخزين الكائنات بإطلاق LOGICAL_ERROR بدلًا من BAD_ARGUMENTS عند تكرار وسيطة من نوع مفتاح-قيمة، مثل s3('http://...', format = 'CSV', format = 'TSV'). #107670 (Groene AI).
  • تم إصلاح مشكلة عدم قابلية استخدام واجهة MySQL مع MySQL Connector/J 8.2.0 والإصدارات الأحدث (بما في ذلك 9.x). أصبح الحقل info في الحزمة OK الآن مُرمَّزًا بالطول، بما يتوافق مع MySQL server، بحيث يتمكن JDBC driver من الاتصال. #107693 (Alexey Milovidov).
  • تم إصلاح LOGICAL_ERROR (“Input nodes size mismatch in dag”) عند تنفيذ استعلام مع make_distributed_plan = 1 يجري ربطًا على مفتاح ملفوف بدالة، عندما لا يكون للطرفين نوع مشترك (على سبيل المثال ON intDiv(-1, t1.key) = t2.key مع مفتاح أيمن من النوع UInt64). #107701 (Groene AI).
  • لم تعد قراءة بيانات Arrow/ArrowStream ذات الأعمدة String/Binary الفارغة، التي ينتجها Apache Arrow Java < 19.0.0 (بما في ذلك Apache Spark)، تؤدي إلى إطلاق INCORRECT_DATA. #107764 (Raúl Marín).
  • تم إصلاح استثناء BAD_GET (“Bad get: has String, requested UInt64”) في تقدير column statistics الخاصة بـ countmin عندما يقارن استعلام عمودًا بقيمة حرفية من نوع مختلف لم تُحوَّل مسبقًا، مثل numeric_col IN (SELECT '5') أو string_col IN (SELECT 5). #107793 (Groene AI).
  • تم إصلاح تعليق دوال الجداول odbc وjdbc لعدة دقائق وتجاهلها إلغاء الاستعلام (KILL QUERY, max_execution_time) عندما يصبح الجسر غير مستجيب أثناء استنتاج بنية الجدول البعيد. #107809 (Alexey Milovidov).
  • تم إصلاح استثناء (Logical error: 'index >= result.start') عند تنسيق استعلام غير صالح يمزج بين الصيغتين الموضعية والمسمّاة للوسيطة السرية في دوال الجداول s3/gcs، مثل s3('url', 'a', 'b', secret_access_key = 'c'). #107818 (Groene AI).
  • تم إصلاح عدم قيام فهرس التخطي set بعملية pruning للحبيبات على أعمدة LowCardinality. #107868 (Konstantin Bogdanov).
  • تم إصلاح قيام إزالة تكرار الإدراج بحساب قيم hash خاطئة لأعمدة String وArray مع إعداد الخادم insert_deduplication_version = new_unified_hash: إذ كان يمكن أن تفشل عمليات الإدراج المتطابقة في إزالة التكرار لأن hash إزالة التكرار كان يعتمد على موضع الصف داخل كتلة الإدراج. #107915 (Sema Checherinda).
  • تم إصلاح النتائج غير الصحيحة لـ ORDER BY على أعمدة Nullable مع مفاتيح فرز متعددة على macOS (Apple Silicon)، والناجمة عن غياب توسيع الإشارة في مقارن الفرز المُصرَّف آنيًا (JIT). #107973 (Raúl Marín).
  • تم إصلاح تراجع الأداء عند قراءة أعمدة Dynamic باستخدام عدة خيوط. وكان السبب #100730. ويغلق #107942. #107997 (Pavel Kruglov).
  • أصبح إعداد data lake المهمل storage_catalog_url يُرفَض الآن بشكل صحيح بواسطة حارس الكتالوج (إذ كان التحقق سابقًا يقتصر على storage_catalog_type وstorage_aws_access_key_id)، كما أصبحت رسالة الخطأ تسرد جميع الإعدادات المهملة. #108040 (Alexey Milovidov).
  • إصلاح logical error Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t> عند قراءة query من نوع LIKE من index text عبر مسار fallback للقراءة المباشرة من column مخزّن بشكل sparse. #108068 (Groene AI).
  • شغّل دائمًا handlers الخاصة بانتهاء batch لذاكرة التخزين المؤقت للوصول، حتى إذا كانت الـ batch فارغة. #108124 (Azat Khuzhin).
  • إصلاح LOGICAL_ERROR (Column identifier is already registered) في بعض queries التي تستخدم UNION ALL. #100770 (Shaohua Wang).
  • إصلاح حالة use-after-free على mutex الخاص بـ workload storage أثناء إيقاف تشغيل server. #101447 (Tuan Pham Anh).
  • إصلاح حالة deadlock في ALTER DATABASE MODIFY COMMENT مع catalog Shared. #103683 (Nikolay Degterinsky).
  • أصبح المعرّف الفارغ المحاط باقتباس Unicode يُطلق الآن SYNTAX_ERROR بدلًا من CANNOT_PARSE_QUOTED_STRING. #104173 (leonard9893).
  • الحفاظ على أنواع parameter الأصلية لدوال التجميع timeSeries* بحيث تُحفَظ أنواع AggregateFunction بشكل صحيح في round-trip عبر إعادة إرفاق الجداول وparallel replicas. #104812 (Vitaly Baranov).
  • إصلاح LOGICAL_ERROR في materialized CTE تحت serialize_query_plan مع parallel replicas. #104896 (Igor Nikonov).
  • إصلاح overflow للأعداد الصحيحة الموقعة في الدوال timeSeries*ToGrid عندما تكون parameter التقادم (window) قريبة من INT64_MAX. #105319 (Groene AI).
  • لم تعد قيمة setting ‏compatibility تعيد apply_row_policy_after_final إلى false، لذا تُطبَّق row policies دائمًا بشكل صحيح مع FINAL. #105637 (Yarik Briukhovetskyi).
  • إصلاح clickhouse chdig client من خلال مراعاة SETPGROUP/RESETIDS/SETSIGDEF في stub الخاص بـ posix_spawn. #105858 (Azat Khuzhin).
  • إصلاح Exception أثناء فحوصات السلامة في merge-tree على projections عندما لم يكن executor الخاص بالدمج/التحوير مهيأً. #105919 (Mikhail Artemenko).
  • أثناء index analysis على projections، أصبح index ‏minmax يُحمَّل الآن من projection نفسه بدلًا من الجزء parent، ما ينتج نتائج صحيحة. #105940 (Mikhail Artemenko).
  • إصلاح Exception في addMonotonicChain لـ materialize(monotonic_chain(...)). #106050 (Nikolai Kochetov).
  • تم إصلاح فشل RESTORE على النسخ الاحتياطية التي تتضمن عناصر تابعة لـ MASKING POLICY. #106086 (Julia Kartseva).
  • تم إصلاح احتمال تلف الذاكرة عند توسيع دوال SQL المعرّفة من قبل المستخدم مع تفعيل prefer_column_name_to_alias. #106121 (Nikolai Kochetov).
  • أصبح القاموس الذي يستخدم اتصال الجسر يُعاد تحميله الآن بعد إعادة تشغيل الخادم، مع إعادة إنشاء الاتصال. يُغلق #106151. #106152 (Pedro Ferreira).
  • تم إصلاح filesystem cache لـ LocalObjectStorage. #106239 (Kseniia Sumarokova).
  • تم إصلاح المصدر البعيد المؤجل لدوال الجداول عند استخدام use_delayed_remote_source. #106470 (Nikolay Degterinsky).
  • تم إصلاح timeSeriesLastToGrid للطوابع الزمنية السابقة لبداية الشبكة وللطوابع الزمنية الواقعة خارج النافذة. #106504 (Vitaly Baranov). #106577 (Vitaly Baranov).
  • تم إصلاح LOGICAL_ERROR (Inconsistent AST formatting) عند احتواء اسم الدالة على query parameters. #106635 (Vitaly Baranov).
  • تم إصلاح خطأ منطقي عند حذف جدول قبل إلغاء تسلسل مهمة distributed plan. #106944 (Alexander Gololobov).
  • استخدم مقارنةً دقيقةً لمفاتيح GROUP BY من النوع Nullable. #107050 (Nikolai Kochetov).
  • تم إصلاح LOGICAL_ERROR (Trying to get name of not a column) الذي كان يظهر عندما لا تكون وسيطة table function تعبير عمود (على سبيل المثال، مطابقة * غير محلولة من multiIf/CASE). #107411 (Alexey Milovidov).
  • تم إصلاح النمو غير المحدود لذاكرة التخزين المؤقت للمنطقة الزمنية (DateLUT) عند معالجة عدد كبير من أسماء المناطق الزمنية غير الصالحة والمختلفة. #107464 (Alexey Milovidov).
  • اكتب إدخال part_log قبل الإبلاغ عن اكتمال mutation عادي في MergeTree. #107741 (Azat Khuzhin).
  • أصبح arrayFold الآن يتحقق من سلامة وسيطة Array الخاصة به في مواجهة الإدخال غير السليم. #107932 (Michael Kolupaev).
  • تم إصلاح حالة نادرة من data race واحتمال استخدام بعد التحرير في قارئ أرشيف skip-index المخزّن مؤقتًا لجزء MergeTree، وقد يحدث ذلك عندما يقرأ استعلام فهارس التجاوز بينما يكون الجزء قيد النقل أو إعادة التسمية. #107995 (Raúl Marín).
  • تم إصلاح تراجع الأداء في subcolumns الخاصة بـ Map مع PREWHERE. #107988 (Pavel Kruglov).
  • إصلاح parseDateTimeBestEffort عند استخدام منطقة زمنية، إذ كان يُطلق CANNOT_PARSE_DATETIME على الصفوف التي تحتوي على NULL في toString(Nullable(DateTime64)). #108310 (Yarik Briukhovetskyi).
  • تم إصلاح table function وengine ‏ArrowFlight اللذين كانا يرفضان named collection التي لا تتضمن المفتاح الاختياري dataset مع ظهور الخطأ No such key 'dataset'. #108041 (Alexey Milovidov).
  • تم إصلاح logical error بعنوان Inconsistent AST formatting لوظيفة window function بلا argument داخل تعريف CODEC أو engine (مثل CODEC(cume_dist() OVER (...)))؛ إذ تحتفظ هذه الوظيفة الآن بأقواسها بحيث ينجح الاستعلام في round-trip للتنسيق/التحليل. #107806 (Alexey Milovidov).
  • إصلاح hasToken عندما تحتوي الإبرة على فاصل، إذ كانت تُرجع النتائج بصمت عبر text index بدلًا من إطلاق BAD_ARGUMENTS. #108189 (Jimmy Aguilar Mena).
  • يمكن الآن إعادة الإعداد use_skip_indexes_on_data_read إلى قيمته default السابقة لما قبل 26.1 (false) عبر الإعداد compatibility، ما يوفّر مخرجًا من تراجع في الأداء حيث يُفشل مسار القراءة من البيانات تقليم نطاقات علامات skip-index الخاصة بـ minmax/set/bloom_filter. #108330 (egor romanov).
  • تم إصلاح crash محتمل (إلغاء مرجعية مؤشر فارغ) عندما لا يكون تجاوز database/db في named collection المُمرَّرة إلى remote/remoteSecure اسم database ثابتًا، مثل remote(nc, database = (SELECT 1)). ويفشل الاستعلام الآن برسالة error واضحة بدلًا من الانهيار. #108271 (Groene AI).
  • تم إصلاح refreshable materialized view التي كانت تعلق إذا فُقد اتصال ZooKeeper في لحظة غير مناسبة. #108234 (Michael Kolupaev).
  • إصلاح Bad cast from type DB::ColumnVector<...> to DB::ColumnTuple عند قراءة column من النوع Array(Tuple(...)) تكون قيمتها مملوءة بالقيم الافتراضية، مثلًا بعد ALTER TABLE ... ADD COLUMN أو بعد mutation غير مكتملة من ALTER TABLE ... CLEAR COLUMN طُبقت أثناء التشغيل. #107232 (Groene AI).
  • إصلاح logical error من نوع Bad cast from type DB::ColumnDynamic to DB::ColumnNullable عندما يُمرَّر مرجع صريح إلى مفتاح JOIN ... USING يكون common supertype الخاص به Dynamic إلى aggregate function، مثل count(t.key) IGNORE NULLS. #107289 (Groene AI).
  • إصلاح فقدان بيانات صامت على MergeTree العادي (non-replicated) عند تشغيل REPLACE PARTITION أو MOVE PARTITION أو DETACH PARTITION أو DETACH PART على partition لا تزال تحتوي على تصحيحات lightweight UPDATE لم تُطبّق بعد. وترفض هذه العمليات الآن الأمر، كما يفعل ReplicatedMergeTree بالفعل. #107386 (Groene AI).
  • إصلاح crash (‏SIGSEGV في إصدارات release، وassertion لعدم تطابق النوع في إصدارات debug) في has على Map بمفتاح Dynamic عندما تكون argument الخاصة بالبحث من نوع LowCardinality، مثل has(map('a'::Dynamic, ...), toLowCardinality('b')). #107956 (Groene AI).
  • تم إصلاح LOGICAL_ERROR (“عدم تطابق بنية block … بين ConvertingTransform وRemovingReplicatedColumnsTransform”) عند الإدراج في materialized view يكون جدول TO الهدف فيها يعرّف عمودًا من نوع Enum أوسع مما ينتجه SELECT الخاص بالعرض. ويُطبَّق الآن توسيع Enum الصحيح. #107648 (Groene AI).
  • تم إصلاح الخطأ NUMBER_OF_COLUMNS_DOESNT_MATCH عند الاستعلام عن جدول Distributed (أو عند استخدام parallel replicas) يحتوي على عدة أعمدة ALIAS تتوسع إلى التعبير نفسه، مع الإشارة إليها معًا في ORDER BY/GROUP BY/HAVING. #107913 (Yakov Olkhovskiy).
  • تم إصلاح سلوك غير معرّف (تمرير مؤشر NULL إلى memcpy) في الدالتين detectCharset وdetectLanguageUnknown عندما تكون سلسلة الإدخال أكبر من 32768 بايت ولا يمكن اكتشاف أي character set. #108250 (Groene AI).
  • تم إصلاح signed integer overflow (سلوك غير معرّف) في dateDiff مع الوحدتين hour وminute عند قيم DateTime64 القصوى القريبة من حدود نطاق Int64. #108229 (Groene AI).
  • تم إصلاح Too many marks في text index على merged part فارغ. #106867 (Azat Khuzhin).
  • تم إصلاح LOGICAL_ERROR (“نوع إرجاع غير متوقع من if”) عند قراءة عمود مع apply_mutations_on_fly = 1 بعد ALTER UPDATE col = ... WHERE <cond> مع condition غير ثابت أو false، يتبعه ALTER MODIFY COLUMN col <new type>. #108128 (Groene AI).
  • تم إصلاح إيقاف server (Logical error في IColumn::insertFrom) عند تحويل Array(Dynamic) أو Array(Variant) إلى QBit باستخدام accurateCastOrNull، مثل accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)'). #108288 (Groene AI).
  • تم إصلاح خطأ نحوي عند ورود alias بعد subquery في DESCRIBE TABLE (...) AS .... #100205 (Yarik Briukhovetskyi).
  • يُعامَل getClientHTTPHeader الآن بشكل صحيح على أنه non-deterministic، لذلك لم تعد نتيجة استعلامه تُعاد الاستفادة منها بشكل غير صحيح بواسطة query result cache. #108029 (Alexey Milovidov).

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

  • ابنِ delta-kernel-rs باستخدام الميزة default-engine-native-tls لكي يتمكن عميل HTTP الخاص به (reqwest) من إعادة استخدام OpenSSL المرتبط مسبقًا بـ ClickHouse. وهذا ليس سوى تفعيل جزئي لـ native-tls: إذ لا يزال object_store يفرض reqwest/rustls-tls-native-roots، لذا ينتهي الأمر بـ reqwest باستخدام الواجهتين الخلفيتين native-tls وrustls معًا. ويظل delta-kernel-rs معطّلًا تحت MSan في الوقت الحالي لأن ring لا يزال يُصرَّف عبر object_store (سواءً بصورة غير مباشرة عبر rustls أو مباشرةً لتوقيع HMAC لطلبات AWS)، كما أن شيفرة التجميع المكتوبة يدويًا فيه لا تُنشئ الرموز التي يتطلبها MSan (ويجري تتبّع ذلك في المشروع الأصلي على arrow-rs-object-store#585). #96856 (Austin Bonander).
  • أضف تحسين PGO (التحسين الموجَّه بملفات التعريف) وBOLT (أداة تحسين الثنائيات وتخطيطها) بعد الربط للملف التنفيذي clickhouse. تُجمَع ملفات التعريف من أعباء عمل CI وتُطبَّق كخطوة بأفضل جهد أثناء إصدارات البناء — وتعود كلتا المرحلتين إلى مخرجات غير مُحسَّنة إذا كان ملف التعريف قديمًا أو غير متوافق. وحتى الآن، لا توجد فوائد من PGO. #100938 (Alexey Milovidov).
  • أضف وضع --storage إلى clickhouse keeper-bench لإجراء اختبارات الأداء على KeeperStorage داخل العملية (in-process) (من دون شبكة، ومن دون raft، ومن دون state machine)، باستخدام قسمي الإعداد setup وgenerator نفسيهما كما في وضع الشبكة. #103081 (Michael Kolupaev).
  • أصلِح البناء مع ENABLE_AWS_S3=OFF. #105390 (Yue Ni).
  • حدِّث mongo-cxx-driver إلى r4.3.0. #105522 (Konstantin Bogdanov).
  • أصلِح البناء مع RapidJSON. #105674 (Ilya Golshtein).
  • سرِّع البناء بإزالة التضمينات غير المباشرة من ترويسات base/ واسعة الاستخدام، وحذف الشيفرة غير المستخدمة من Poco/Logger.h المضمَّن. #105702 (Raúl Marín).
  • تم تحديث libxml2 من 2.15.1 إلى 2.15.3. #105985 (Konstantin Bogdanov).
  • استخدم expat 2.8.1 داخل Poco. #105988 (Konstantin Bogdanov).
  • ارفع thrift إلى v0.23.0. #105993 (Konstantin Bogdanov).
  • استخدم الوسم REL_18_4 الخاص بـ postgres. #105994 (Konstantin Bogdanov).
  • رقِّ krb5 إلى 1.22.2. #106076 (Konstantin Bogdanov).
  • حدِّث نسخة curl المضمَّنة إلى 8.20.0. #106077 (Konstantin Bogdanov).
  • رُقِّي mariadb-connector-c إلى 3.1.29. مع الحفاظ على جميع التصحيحات ذات الصلة بـ ClickHouse. #106287 (Nikita Mikhaylov).
  • رُقِّيَت بصمات base image الخاصة بـ distroless لمعالجة ثغرات CVE في libssl3t64. #106360 (Rahul Nair).
  • استخدام wasmtime بالإصدار 45.0.1. #106836 (Konstantin Bogdanov).
  • رُقِّي openssl إلى 3.5.7. #106844 (Konstantin Bogdanov).
  • أصبح build الخاص بـ Distroless Docker يحدّث أيضًا الوسوم العائمة :X.Y-distroless و :X.Y.Z-distroless، وليس وسم الإصدار الكامل فقط. #106932 (Rahul Nair).
  • تعطيل ميزات curl غير المستخدمة، مثل مصادقة NTLM وملفات تعريف الارتباط و alt-svc و HSTS و DNS-over-HTTPS و netrc و MIME و AWS SigV4. #107226 (Konstantin Bogdanov).
  • جرى تحديث NuRaft بإصلاح لحالة livelock أثناء تثبيت snapshot كانت تحدث عند تنفيذ snapshot IO على الخيط الخلفي. ويظل إعداد Keeper ‏nuraft_use_bg_thread_for_snapshot_io معطّلًا افتراضيًا؛ ويقوم CI الآن بتعيين قيم عشوائية له لتغطية كلا الوضعين. #107338 (Antonio Andelic).
  • إصلاح build ‏abseil عندما يحتوي مسار checkout الخاص بـ ClickHouse على substring تطابق extension لترويسة. #107349 (zhiqiang).
  • تحديد cache size لذاكرة L2 من CPUID على x86_64 بدلًا من sysconf(_SC_LEVEL2_CACHE_SIZE) الخاص بـ glibc، إذ لا يتوفر تحت musl libc. #107469 (Konstantin Bogdanov).
  • زيادة حجم stack في builds الخاصة بـ musl إلى 8 MiB لدعم queries المتداخلة بعمق. #107470 (Konstantin Bogdanov).
  • اشتقاق مجموعة رموز مكتبة C المترجَمة محليًا في مكتبات Rust الثابتة من المكتبات المرجعية الفعلية بدلًا من قائمة سماح تُدار يدويًا، بحيث تشمل جميع builtins الخاصة بـ compiler-rt ودوال libm الخاصة بالمنصة. #107571 (Raúl Marín).
  • تحويل imageَي server و Keeper من distroless إلى gcr.io/distroless/base-nossl-debian13 بحيث لا يضمّان إلا المكتبات التي يرتبط بها ClickHouse فعليًا، مع التوقف عن pulling المكتبات التي نربطها نحن ربطًا ثابتًا. #107837 (Rahul Nair).
  • إعادة تفعيل 50 من الاختبارات عديمة الحالة على macOS (arm_darwin) التي كان يجري تخطيها لأنها stale، واستخدام fsync بدلًا من F_FULLFSYNC لمزامنة directory على macOS. #107887 (Raúl Marín).

إصدار 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 لكل مُدرَّج تكراري 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).
  • إضافة المُجزِّئ unicode_word إلى فهارس النص الكامل وإلى الدالة tokens. وهو يقسم النص باستخدام قواعد حدود الكلمات في Unicode: تتكوّن كلمات ASCII باستخدام محارف الربط (الشرطة السفلية، النقطتان، النقطة، وعلامة الاقتباس المفردة)، بينما تتحول محارف Unicode غير التابعة لـ ASCII إلى tokens أحادية المحرف. ملاحظة: يقبل الإصدار 26.3 هذا المُجزِّئ بالاسم unicode_word فقط؛ وقد أُعيدت تسميته إلى asciiCJK في الإصدار 26.4. #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).
آخر تعديل في ٢٧ أغسطس ٢٠٢٦