From cbb9f788f33c51642a14f503f2d1fc1cf3f0d70a Mon Sep 17 00:00:00 2001 From: danilo-najkov-db Date: Wed, 11 Mar 2026 11:15:27 +0000 Subject: [PATCH 1/2] changes --- python/zerobus/tools/generate_proto.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/python/zerobus/tools/generate_proto.py b/python/zerobus/tools/generate_proto.py index 07da7df..ec46f19 100644 --- a/python/zerobus/tools/generate_proto.py +++ b/python/zerobus/tools/generate_proto.py @@ -541,7 +541,12 @@ def generate_proto_file(message_name: str, columns: List[Dict[str, str]], output # Collect all field definitions and nested message definitions fields_and_definitions = "" - for idx, col in enumerate(columns, start=1): + field_number = 1 + for col in columns: + # Skip protobuf reserved field numbers 19000-19999 + if field_number == 19000: + field_number = 20000 + field_modifier, proto_type, nested_def = get_proto_field_info( col["name"], col["type_text"], col["nullable"], struct_counter, 1 ) @@ -555,9 +560,11 @@ def generate_proto_file(message_name: str, columns: List[Dict[str, str]], output # Add field definition if field_modifier == "": - fields_and_definitions += f"\t{proto_type} {field_name} = {idx};\n" + fields_and_definitions += f"\t{proto_type} {field_name} = {field_number};\n" else: - fields_and_definitions += f"\t{field_modifier} {proto_type} {field_name} = {idx};\n" + fields_and_definitions += f"\t{field_modifier} {proto_type} {field_name} = {field_number};\n" + + field_number += 1 # Construct the main message proto_content.append(f"message {message_name} {{") From 1e119e42b7fe4217ca760e2037330a9119b96ec1 Mon Sep 17 00:00:00 2001 From: danilo-najkov-db Date: Wed, 11 Mar 2026 12:24:56 +0000 Subject: [PATCH 2/2] changes --- java/NEXT_CHANGELOG.md | 2 ++ .../zerobus/tools/GenerateProto.java | 5 +++++ python/NEXT_CHANGELOG.md | 2 ++ rust/NEXT_CHANGELOG.md | 2 ++ rust/tools/generate_files/src/generate.rs | 18 ++++++++++-------- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/java/NEXT_CHANGELOG.md b/java/NEXT_CHANGELOG.md index 13c2727..b570c30 100644 --- a/java/NEXT_CHANGELOG.md +++ b/java/NEXT_CHANGELOG.md @@ -8,6 +8,8 @@ ### Bug Fixes +- Fixed proto generation tool to skip reserved field numbers 19000-19999 for tables with more than 19000 columns + ### Documentation ### Internal Changes diff --git a/java/src/main/java/com/databricks/zerobus/tools/GenerateProto.java b/java/src/main/java/com/databricks/zerobus/tools/GenerateProto.java index 0662a7d..83fcd94 100644 --- a/java/src/main/java/com/databricks/zerobus/tools/GenerateProto.java +++ b/java/src/main/java/com/databricks/zerobus/tools/GenerateProto.java @@ -398,6 +398,11 @@ private static void generateProtoFile( // Add fields. int fieldNumber = 1; for (Map col : columns) { + // Skip protobuf reserved field numbers 19000-19999. + if (fieldNumber == 19000) { + fieldNumber = 20000; + } + String fieldName = (String) col.get("name"); String typeText = (String) col.get("type_text"); boolean nullable = (Boolean) col.get("nullable"); diff --git a/python/NEXT_CHANGELOG.md b/python/NEXT_CHANGELOG.md index d5e2f40..77fc517 100644 --- a/python/NEXT_CHANGELOG.md +++ b/python/NEXT_CHANGELOG.md @@ -8,6 +8,8 @@ ### Bug Fixes +- Fixed proto generation tool to skip reserved field numbers 19000-19999 for tables with more than 19000 columns + ### Documentation ### Internal Changes diff --git a/rust/NEXT_CHANGELOG.md b/rust/NEXT_CHANGELOG.md index 13c2727..b570c30 100644 --- a/rust/NEXT_CHANGELOG.md +++ b/rust/NEXT_CHANGELOG.md @@ -8,6 +8,8 @@ ### Bug Fixes +- Fixed proto generation tool to skip reserved field numbers 19000-19999 for tables with more than 19000 columns + ### Documentation ### Internal Changes diff --git a/rust/tools/generate_files/src/generate.rs b/rust/tools/generate_files/src/generate.rs index ac91802..5ce5e95 100644 --- a/rust/tools/generate_files/src/generate.rs +++ b/rust/tools/generate_files/src/generate.rs @@ -378,7 +378,13 @@ pub fn generate_proto_file( let mut struct_counter = 0; let mut fields_and_definitions = String::new(); - for (i, col) in columns.iter().enumerate() { + let mut field_number: usize = 1; + for col in columns.iter() { + // Skip protobuf reserved field numbers 19000-19999. + if field_number == 19000 { + field_number = 20000; + } + let (modifier, proto_type, nested_def) = get_proto_field_info( &col.name, &col.type_text, @@ -396,19 +402,15 @@ pub fn generate_proto_file( if modifier.is_empty() { fields_and_definitions.push_str(&format!( "\t{} {} = {};\n", - proto_type, - field_name, - i + 1 + proto_type, field_name, field_number )); } else { fields_and_definitions.push_str(&format!( "\t{} {} {} = {};\n", - modifier, - proto_type, - field_name, - i + 1 + modifier, proto_type, field_name, field_number )); } + field_number += 1; } // Constructing the main message.