يوجد نوع ثالث من الدوال تندرج ضمنه دالة ‘arrayJoin’. ويمكن أيضًا الإشارة إلى دوال الجداول على نحو منفصل.
الكتابة الصارمة للأنواع
إزالة التعبيرات الفرعية المشتركة
أنواع النتائج
الثوابت
معالجة NULL
- إذا كانت واحدة على الأقل من وسيطات الدالة هي
NULL، فستكون نتيجة الدالة أيضًاNULL. - سلوك خاص يُحدَّد بشكل منفصل في وصف كل دالة. في الشيفرة المصدرية لـ ClickHouse، تكون لهذه الدوال القيمة
UseDefaultImplementationForNulls=false.
الثبات
الدوال عالية الرتبة
المعامل -> ودوال lambda(params, expr)
->. يحتوي الجانب الأيسر من السهم على معلمة شكلية، ويمكن أن تكون أي ID، أو عدة معلمات شكلية — أي ID داخل tuple. أما الجانب الأيمن من السهم، فيحتوي على تعبير يمكنه استخدام هذه المعلمات الشكلية، بالإضافة إلى أي أعمدة في الجدول.
أمثلة:
أسماء الدوال وحدها كتعبيرات لامبدا
arrayMap(plus, ...) عدد وسيطات مقداره 2 لأن plus يأخذ وسيطتين، لذا فهو يعمل أيضًا مع مدخلات Tuple مثل arrayMap(plus, [(1, 10), (2, 20)])، حيث تُفك عناصر الـ Tuple إلى وسيطات لامبدا.
بالنسبة إلى الدوال الداخلية متغيرة الوسائط (مثل concat، التي تقبل أي عدد من الوسائط)، يعود عدد وسيطات لامبدا إلى عدد وسائط المصفوفة. وهذا صحيح للدوال عالية الرتبة مثل arrayMap وarrayFilter وarrayFold. أما الدوال عالية الرتبة التي تقبل معلمات ثابتة غير مصفوفية بالإضافة إلى المصفوفات — على سبيل المثال، arrayPartialSort(f, limit, arr) — فقد تؤدي أسماء الدوال متغيرة الوسائط المستخدَمة مباشرةً إلى عدد وسيطات غير صحيح، وفي هذه الحالة تكون لامبدا صريحة مطلوبة.
كذلك، لا تفك الدوال الداخلية متغيرة الوسائط مدخلات الـ Tuple تلقائيًا. على سبيل المثال، تُعاد كتابة arrayMap(concat, [('a', 'b'), ('c', 'd')]) إلى لامبدا أحادية، وهي ليست مكافئة لـ arrayMap((x, y) -> concat(x, y), [('a', 'b'), ('c', 'd')]). استخدم لامبدا صريحة عندما تريد تفكيك عناصر الـ Tuple إلى استدعاء متغير الوسائط.