@@ -170,4 +170,69 @@ TEST(TabletSchemaTest, test_is_support_checksum) {
170170 ASSERT_FALSE (map_column2.is_support_checksum ());
171171}
172172
173+ // Test that partial schema has consistent num_short_key_columns when sort key columns
174+ // are not in the referenced columns (e.g. column-mode partial update on table with ORDER BY).
175+ TEST (TabletSchemaTest, test_partial_schema_short_key_consistency_with_separate_sort_key) {
176+ // Build a PK table schema: pk=k0, ORDER BY(k3, k2), num_short_key_columns=2
177+ TabletSchemaPB schema_pb;
178+ schema_pb.set_keys_type (PRIMARY_KEYS);
179+ schema_pb.set_num_short_key_columns (2 );
180+
181+ auto c0 = schema_pb.add_column ();
182+ c0->set_unique_id (0 );
183+ c0->set_name (" k0" );
184+ c0->set_type (" INT" );
185+ c0->set_is_key (true );
186+ c0->set_is_nullable (false );
187+
188+ auto c1 = schema_pb.add_column ();
189+ c1->set_unique_id (1 );
190+ c1->set_name (" k1" );
191+ c1->set_type (" INT" );
192+ c1->set_is_key (false );
193+
194+ auto c2 = schema_pb.add_column ();
195+ c2->set_unique_id (2 );
196+ c2->set_name (" k2" );
197+ c2->set_type (" INT" );
198+ c2->set_is_key (false );
199+
200+ auto c3 = schema_pb.add_column ();
201+ c3->set_unique_id (3 );
202+ c3->set_name (" k3" );
203+ c3->set_type (" INT" );
204+ c3->set_is_key (false );
205+
206+ auto c4 = schema_pb.add_column ();
207+ c4->set_unique_id (4 );
208+ c4->set_name (" k4" );
209+ c4->set_type (" INT" );
210+ c4->set_is_key (false );
211+
212+ // Set sort key to (k3, k2) — separate from primary key (k0)
213+ schema_pb.add_sort_key_idxes (3 );
214+ schema_pb.add_sort_key_idxes (2 );
215+
216+ auto src_schema = TabletSchema::create (schema_pb);
217+ ASSERT_NE (src_schema, nullptr );
218+ ASSERT_EQ (src_schema->num_short_key_columns (), 2 );
219+ ASSERT_EQ (src_schema->sort_key_idxes ().size (), 2 );
220+
221+ // Create partial schema with only [k0, k4] — no sort key columns included
222+ auto partial_schema = TabletSchema::create (src_schema, {0 , 4 });
223+ ASSERT_NE (partial_schema, nullptr );
224+ // num_short_key_columns must not exceed sort_key_idxes.size()
225+ ASSERT_LE (partial_schema->num_short_key_columns (), partial_schema->sort_key_idxes ().size ());
226+
227+ // Create partial schema with [k0, k2] — one of two sort key columns included
228+ auto partial_schema2 = TabletSchema::create (src_schema, {0 , 2 });
229+ ASSERT_NE (partial_schema2, nullptr );
230+ ASSERT_LE (partial_schema2->num_short_key_columns (), partial_schema2->sort_key_idxes ().size ());
231+
232+ // Create partial schema with all sort keys [k0, k2, k3] — both sort key columns included
233+ auto partial_schema3 = TabletSchema::create (src_schema, {0 , 2 , 3 });
234+ ASSERT_NE (partial_schema3, nullptr );
235+ ASSERT_LE (partial_schema3->num_short_key_columns (), partial_schema3->sort_key_idxes ().size ());
236+ }
237+
173238} // namespace starrocks
0 commit comments