aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFilitov Mikhail <filitovme@gmail.com>2025-05-29 10:39:08 +0200
committerGitHub <noreply@github.com>2025-05-29 10:39:08 +0200
commit4ab3a5e265c54c5462eb7311554eaded2f9e6f9c (patch)
treeeba79a6d50aaf0abb3b1590cb206b0f630900b21
parentb96b2416cfb0094f2190bbca4a35b70c9d390a80 (diff)
downloadydb-4ab3a5e265c54c5462eb7311554eaded2f9e6f9c.tar.gz
Add udf compatibility test digest (#18910)
-rw-r--r--ydb/tests/compatibility/udf/test_datetime2.py (renamed from ydb/tests/compatibility/test_datetime2.py)16
-rw-r--r--ydb/tests/compatibility/udf/test_digest.py100
-rw-r--r--ydb/tests/compatibility/ya.make3
3 files changed, 111 insertions, 8 deletions
diff --git a/ydb/tests/compatibility/test_datetime2.py b/ydb/tests/compatibility/udf/test_datetime2.py
index d8269e75171..02576c33f30 100644
--- a/ydb/tests/compatibility/test_datetime2.py
+++ b/ydb/tests/compatibility/udf/test_datetime2.py
@@ -67,7 +67,8 @@ class TestDatetime2(MixedClusterFixture):
PRIMARY KEY(id)
) WITH (
- PARTITION_AT_KEYS = ({", ".join(str(i) for i in range(1, self.rows))})
+ PARTITION_AT_KEYS = ({", ".join(str(i) for i in range(1, self.rows))}),
+ AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = {self.rows}
);
"""
@@ -176,17 +177,18 @@ class TestDatetime2(MixedClusterFixture):
return f"""
SELECT
DateTime::MakeDate(DateTime::StartOfYear(DateTime::Split(d))),
- DateTime::MakeDate(DateTime::EndOfYear(DateTime::Split(d))),
DateTime::MakeDate(DateTime::StartOfQuarter(DateTime::Split(d))),
- DateTime::MakeDate(DateTime::EndOfQuarter(DateTime::Split(d))),
DateTime::MakeDate(DateTime::StartOfMonth(DateTime::Split(d))),
- DateTime::MakeDate(DateTime::EndOfMonth(DateTime::Split(d))),
DateTime::MakeDate(DateTime::StartOfWeek(DateTime::Split(d))),
- DateTime::MakeDate(DateTime::EndOfWeek(DateTime::Split(d))),
DateTime::MakeDate(DateTime::StartOfDay(DateTime::Split(d))),
- DateTime::MakeDate(DateTime::EndOfDay(DateTime::Split(d))),
DateTime::MakeDate(DateTime::StartOf(DateTime::Split(d), DateTime::IntervalFromDays(val))),
- DateTime::MakeDate(DateTime::EndOf(DateTime::Split(d), DateTime::IntervalFromDays(val)))
+ -- not supported in 24-4: https://st.yandex-team.ru/YQL-19644
+ -- DateTime::MakeDate(DateTime::EndOfQuarter(DateTime::Split(d))),
+ -- DateTime::MakeDate(DateTime::EndOfMonth(DateTime::Split(d))),
+ -- DateTime::MakeDate(DateTime::EndOfDay(DateTime::Split(d))),
+ -- DateTime::MakeDate(DateTime::EndOfWeek(DateTime::Split(d))),
+ -- DateTime::MakeDate(DateTime::EndOfYear(DateTime::Split(d))),
+ -- DateTime::MakeDate(DateTime::EndOf(DateTime::Split(d), DateTime::IntervalFromDays(val)))
FROM {self.table_name};
"""
diff --git a/ydb/tests/compatibility/udf/test_digest.py b/ydb/tests/compatibility/udf/test_digest.py
new file mode 100644
index 00000000000..81af87c5dfd
--- /dev/null
+++ b/ydb/tests/compatibility/udf/test_digest.py
@@ -0,0 +1,100 @@
+# -*- coding: utf-8 -*-
+import pytest
+from ydb.tests.library.compatibility.fixtures import MixedClusterFixture
+from ydb.tests.oss.ydb_sdk_import import ydb
+import random
+
+
+class TestDigest(MixedClusterFixture):
+ rows = 100
+ table_name = 'digest_test'
+
+ @pytest.fixture(autouse=True, scope="function")
+ def setup(self):
+ yield from self.setup_cluster()
+
+ def generate_create_table(self):
+ return f"""
+ CREATE TABLE {self.table_name} (
+ id Uint64,
+ text String,
+ number Uint64,
+ PRIMARY KEY(id)
+ ) WITH (
+ PARTITION_AT_KEYS = ({", ".join(str(i) for i in range(1, self.rows))}),
+ AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = {self.rows}
+ );
+ """
+
+ def generate_insert(self):
+ header = f"UPSERT INTO {self.table_name} (id, text, number) VALUES\n"
+ rows = []
+
+ for i in range(1, self.rows + 1):
+ text = f"Text_{random.randint(1000, 9999)}"
+ number = random.randint(1_000_000, 9_999_999)
+ rows.append(f'({i}, "{text}", {number})')
+
+ return header + ",\n".join(rows) + ";"
+
+ def q_digest(self):
+ return f"""
+ SELECT
+ Digest::Crc32c(text),
+ Digest::Crc64(text),
+
+ Digest::Fnv32(text),
+ Digest::Fnv64(text),
+
+ Digest::MurMurHash(text),
+ Digest::MurMurHash32(text),
+ Digest::MurMurHash2A(text),
+ Digest::MurMurHash2A32(text),
+
+ Digest::CityHash(text),
+ Digest::CityHash128(text),
+
+ Digest::NumericHash(number),
+
+ Digest::Md5Hex(text),
+ Digest::Md5Raw(text),
+ Digest::Md5HalfMix(text),
+
+ Digest::Argon2(text, "1234567890"),
+
+ Digest::Blake2B(text),
+ Digest::Blake2B(text, "key"),
+
+ Digest::SipHash(1, 2, text),
+ Digest::HighwayHash(1, 2, 3, 4, text),
+
+ Digest::FarmHashFingerprint(number),
+ Digest::FarmHashFingerprint2(number, number),
+ Digest::FarmHashFingerprint32(text),
+ Digest::FarmHashFingerprint64(text),
+ Digest::FarmHashFingerprint128(text),
+
+ Digest::SuperFastHash(text),
+
+ Digest::Sha1(text),
+ Digest::Sha256(text),
+
+ Digest::IntHash64(number),
+
+ Digest::XXH3(text),
+ Digest::XXH3_128(text)
+ FROM {self.table_name};
+ """
+
+ def test_digest_all(self):
+ with ydb.QuerySessionPool(self.driver) as session_pool:
+
+ query = self.generate_create_table()
+ session_pool.execute_with_retries(query)
+
+ query = self.generate_insert()
+ session_pool.execute_with_retries(query)
+
+ query = self.q_digest()
+ result = session_pool.execute_with_retries(query)
+ assert len(result[0].rows) > 0
diff --git a/ydb/tests/compatibility/ya.make b/ydb/tests/compatibility/ya.make
index e90c4150b28..e42fb342ee8 100644
--- a/ydb/tests/compatibility/ya.make
+++ b/ydb/tests/compatibility/ya.make
@@ -15,7 +15,8 @@ TEST_SRCS(
test_stress.py
test_statistics.py
test_rolling.py
- test_datetime2.py
+ udf/test_datetime2.py
+ udf/test_digest.py
)
SIZE(LARGE)