)]}'
{
  "commit": "8a704f32a25980a39e43c3352a73c395e9950cc4",
  "tree": "6eae5e21b50fccf277b413fbef89137152943e33",
  "parents": [
    "653e315ba5441707168c9c9a64f421037f305a4c"
  ],
  "author": {
    "name": "Wencong Liu",
    "email": "104502720+WencongLiu@users.noreply.github.com",
    "time": "Wed Oct 15 12:15:26 2025 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Oct 15 12:15:26 2025 +0800"
  },
  "message": "[feature] Introduce Python UDF / UDTF based on CPython multi-process runtime (#56877)\n\n### Overview\nThis PR introduces full support for Python User-Defined Functions (UDF)\nand User-Defined Table Functions (UDTF) in Doris, aligning with existing\nJava UDF/UDTF syntax while addressing key requirements like high\nconcurrency, dependency isolation, and batch processing capabilities.\n\n### Key Features \u0026 Implementations\n#### 1. Syntax Design for Python UDF/UDTF\n- **Python UDF**:\n- Follows standard `CREATE FUNCTION` syntax with `PROPERTIES` for\nconfiguration\n  - Mandatory properties:\n- `file`: HTTP path to UDF compression package (e.g., Aliyun OSS/Toutiao\nTOS: `https://tos.byted.org/user/udf.zip`)\n    - `symbol`: Entry point filename of user code\n    - `type`: Set to `PYTHON_UDF` to identify Python implementation\n  - Example:\n    ```sql\n    CREATE FUNCTION my_python_udf(INT) RETURNS INT PROPERTIES (\n        \"file\"\u003d\"https://tos.byted.org/user/udf.zip\",\n        \"symbol\"\u003d\"get_result\",\n        \"type\"\u003d\"PYTHON_UDF\"\n    );\n    ```\n\n- **Python UDTF**:\n  - Uses `CREATE TABLES FUNCTION` keyword (aligns with Java UDTF)\n- Mandatory return type: `ARRAY\u003cT\u003e` (element type maps to actual TF\noutput type)\n  - Shares same `PROPERTIES` configuration as UDF\n  - Example:\n    ```sql\nCREATE TABLES FUNCTION my_python_udtf(STRING, STRING) RETURNS\nARRAY\u003cSTRING\u003e PROPERTIES (\n        \"file\"\u003d\"https://tos.byted.org/user/udf.zip\",\n        \"symbol\"\u003d\"get_result\",\n        \"type\"\u003d\"PYTHON_UDF\"\n    );\n    ```\n\n#### 2. Python Code Specification\n- **UDF Code Requirements**:\n  - Entry function must be named `evaluate`\n- Number of `evaluate` parameters must match SQL function\u0027s input count\n- Supports 1:1 (single input → single output) or M:1 (multiple inputs →\nsingle output) semantics\n  - Example:\n    ```python\n    def evaluate(arg1, arg2):\n        # User-defined processing logic\n        return processed_result\n    ```\n\n- **UDTF Code Requirements**:\n  - Entry function must be named `evaluate`\n- Number of `evaluate` parameters must match SQL function\u0027s input count\n  - Uses `yield` to return multiple results (1:M semantics)\n  - Example:\n    ```python\n    def evaluate(text, delimiter):\n        # Split string by delimiter and return multiple results\n        for item in text.split(delimiter):\n            yield item\n    ```\n \n\n#### 3. Type Mapping (SQL ↔ Python 3)\n| SQL Type | Python 3 Type | Notes |\n\n|-------------------------|---------------------|----------------------------------------|\n| TINYINT/SMALLINT/INT/BIGINT | int | Numeric types |\n| BOOLEAN | bool | Boolean type |\n| FLOAT/DOUBLE | float | Floating-point types |\n| CHAR/VARCHAR/STRING | str | String types |\n| ARRAY\u003cT\u003e | list[T] | T supports numeric/string types |\n| MAP\u003cK, V\u003e | dict[K, V] | K/V support numeric/string types |\n\n#### 4. Runtime Architecture\n- **Multi-Process Model**:\n- Addresses Python GIL (Global Interpreter Lock) limitation (critical\nfor Python 3.12 and earlier; 3.13 lock-free mode is experimental)\n- Doris BE acts as **Client**; Python subprocesses act as **UDF\nServers**\n- 1:1 mapping between BE execution threads and UDF Servers (ensures\nconcurrency alignment)\n- UDF Servers are reused across multiple Pipeline Tasks within the same\nBE thread\n\n- **Inter-Process Communication**:\n  - Based on Python `marshal` module\u0027s C interface\n- Serializes Python objects to byte strings for pipe-based transmission\n- Ensures efficient and reliable data exchange between BE and UDF\nServers\n\n#### 5. Batch Execution Capability\n- **High-Concurrency Optimization**:\n- Introduces a batch processing interface that handles multiple input\nrows per `evaluate` call\n- Activated by adding the `\"batch_size\"` property (with value \u003e 1) in\nthe UDF registration SQL\n- Input parameter for batch processing becomes `batch_args` (a list of\ntuples, where each tuple represents one row of inputs)\n- SQL function signature remains unchanged (still declares individual\ninput/output types rather than list types)\n- Supports user-side multi-threading (via\n`concurrent.futures.ThreadPoolExecutor`) for parallel processing of\nbatch data\n- Delivers **multi-fold concurrency improvement**, particularly valuable\nfor LLM processing and external API call scenarios\n  - Example:\n    ```python\n    from concurrent.futures import ThreadPoolExecutor\n\n    def evaluate(batch_args) -\u003e list[int]:\n        # Multi-threaded processing example for batch inputs\n        with ThreadPoolExecutor(max_workers\u003d32) as executor:\n            # Process each row in batch_args using thread pool\nfutures \u003d [executor.submit(handle, arg1, arg2) for (arg1, arg2) in\nbatch_args]\n            return [f.result() for f in futures]\n    ```\n\n  - Corresponding SQL registration:\n    ```sql\n    use {database_name};\n    \nCREATE FUNCTION batch_process(STRING, FLOAT) RETURNS INT PROPERTIES (\n        \"file\"\u003d\"https://tosv.byted.org/obj/flow-byte-rag/pyudf.zip\",\n        \"symbol\"\u003d\"batch_process\",\n        \"type\"\u003d\"PYTHON_UDF\",\n        \"batch_size\"\u003d\"32\"  -- Triggers batch execution when value \u003e 1\n    );\n    ```\n\n#### 6. Dependency Isolation\n- Stores third-party dependencies of different UDFs in separate\ndirectories\n  - Eliminates dependency conflicts between UDFs\n\n### Compatibility Guarantee\n- Strictly based on CPython interpreter (ensures 100% compatibility with\nmachine learning libraries relying on C extensions)\n- Aligns with existing Doris UDF/UDTF syntax patterns (minimizes\nlearning cost for users)\n\nCo-authored-by: Wencong Liu \u003cliuwencong@bytedance.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bdee6fc7663b3a580f91cb04218f87e0d537adb4",
      "old_mode": 33188,
      "old_path": ".gitignore",
      "new_id": "6c6eb9b25f4e3b07d9d55a5235ba3009c2c575b6",
      "new_mode": 33188,
      "new_path": ".gitignore"
    },
    {
      "type": "modify",
      "old_id": "0305e886ef964a8afb95ec0e4e72212989b92b0a",
      "old_mode": 33188,
      "old_path": "be/CMakeLists.txt",
      "new_id": "0e15b8a84c36e4190f6b5d5430411a7efe87b7f9",
      "new_mode": 33188,
      "new_path": "be/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "61c0ecdea2f8238a35967e8d8768331934e5c3de",
      "old_mode": 33188,
      "old_path": "be/src/common/config.cpp",
      "new_id": "1b9e97a8ba08777544a85be1044bc706f3562dc0",
      "new_mode": 33188,
      "new_path": "be/src/common/config.cpp"
    },
    {
      "type": "modify",
      "old_id": "4b39be5f4c48fd02c90553ba606f99d090fa7f1b",
      "old_mode": 33188,
      "old_path": "be/src/common/config.h",
      "new_id": "6d9d1d716dc9be66f6b2e55f5f759de85526128f",
      "new_mode": 33188,
      "new_path": "be/src/common/config.h"
    },
    {
      "type": "modify",
      "old_id": "7663467b79a6e4d149f59291feadfa6cffaf432b",
      "old_mode": 33188,
      "old_path": "be/src/common/signal_handler.h",
      "new_id": "570f54301df11184fff35f224167df679a3f50f8",
      "new_mode": 33188,
      "new_path": "be/src/common/signal_handler.h"
    },
    {
      "type": "modify",
      "old_id": "b2754bc3c572e769848a054b185b930602c7610d",
      "old_mode": 33188,
      "old_path": "be/src/common/status.h",
      "new_id": "8d339e59cdf7cc17cca09a4ef69554e03db1c019",
      "new_mode": 33188,
      "new_path": "be/src/common/status.h"
    },
    {
      "type": "modify",
      "old_id": "8c7ef3ea3a9fb87ef41cadc01637e711a95c7655",
      "old_mode": 33188,
      "old_path": "be/src/pch/pch.h",
      "new_id": "06c6387fdaf871d3b982f83e4ad579089ce76dfa",
      "new_mode": 33188,
      "new_path": "be/src/pch/pch.h"
    },
    {
      "type": "modify",
      "old_id": "54b5646d1ab82c39ad5ff07032f619eda4e4f9ac",
      "old_mode": 33188,
      "old_path": "be/src/pipeline/exec/table_function_operator.cpp",
      "new_id": "29fa4c8bf8546959d9738702bd4af16fee94b92d",
      "new_mode": 33188,
      "new_path": "be/src/pipeline/exec/table_function_operator.cpp"
    },
    {
      "type": "modify",
      "old_id": "49dd242bfe78d9577f77490d3827e386feb1fd19",
      "old_mode": 33188,
      "old_path": "be/src/pipeline/exec/table_function_operator.h",
      "new_id": "8a7b7bd43d45d19ca5251754ea8cbb60d8836700",
      "new_mode": 33188,
      "new_path": "be/src/pipeline/exec/table_function_operator.h"
    },
    {
      "type": "modify",
      "old_id": "ab9d90846abbea166acf05f6dc85045ceea9ed58",
      "old_mode": 33188,
      "old_path": "be/src/runtime/user_function_cache.cpp",
      "new_id": "7b3e530e0c2f1ac2c9cb4686ac22931367f53fcd",
      "new_mode": 33188,
      "new_path": "be/src/runtime/user_function_cache.cpp"
    },
    {
      "type": "modify",
      "old_id": "5d1bff8b8664b758f4b661b29db948a5fea07df6",
      "old_mode": 33188,
      "old_path": "be/src/runtime/user_function_cache.h",
      "new_id": "5420c79de1ac836d2f40c64ee4d6ba16d23cc621",
      "new_mode": 33188,
      "new_path": "be/src/runtime/user_function_cache.h"
    },
    {
      "type": "modify",
      "old_id": "b85790f9ec1bb425ae96e6a5f82843bbb84241a8",
      "old_mode": 33188,
      "old_path": "be/src/service/doris_main.cpp",
      "new_id": "df3ce76f9c7b8dfe3c50bc6328ef5bac0665fa03",
      "new_mode": 33188,
      "new_path": "be/src/service/doris_main.cpp"
    },
    {
      "type": "modify",
      "old_id": "b40e24f7ea0b45e94a6248a0f57385124c26a140",
      "old_mode": 33188,
      "old_path": "be/src/vec/CMakeLists.txt",
      "new_id": "da8c47967d61bed23b0212a35d0f0f295a53241f",
      "new_mode": 33188,
      "new_path": "be/src/vec/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "723faaa97f8773fbebbd9dc4c8384fa30a4977ed",
      "old_mode": 33188,
      "old_path": "be/src/vec/columns/column_array.cpp",
      "new_id": "6946899fb034656090c28e1ec3394cd8a521b3cc",
      "new_mode": 33188,
      "new_path": "be/src/vec/columns/column_array.cpp"
    },
    {
      "type": "modify",
      "old_id": "83cb6eddb7ddec4851dd753512a3e1ac8d1465cd",
      "old_mode": 33188,
      "old_path": "be/src/vec/common/allocator.h",
      "new_id": "04d3723904541735b5cfa7dbf737df2340aa6e07",
      "new_mode": 33188,
      "new_path": "be/src/vec/common/allocator.h"
    },
    {
      "type": "modify",
      "old_id": "986f957d72b42d0986d0ea7ac2050c2de482ed59",
      "old_mode": 33188,
      "old_path": "be/src/vec/data_types/data_type.h",
      "new_id": "38159cf19aeb6d66fb6d0269045880c6a38a002e",
      "new_mode": 33188,
      "new_path": "be/src/vec/data_types/data_type.h"
    },
    {
      "type": "modify",
      "old_id": "7a2eb64af71084b7837de920a66867655e493f77",
      "old_mode": 33188,
      "old_path": "be/src/vec/exec/vtable_function_node.cpp",
      "new_id": "f51bb6e1add8ffee93fe0b47722257d440cad01d",
      "new_mode": 33188,
      "new_path": "be/src/vec/exec/vtable_function_node.cpp"
    },
    {
      "type": "modify",
      "old_id": "0b64fe47cc541f32cd6f339bfe0d57ab29d8acee",
      "old_mode": 33188,
      "old_path": "be/src/vec/exec/vtable_function_node.h",
      "new_id": "41dbd8bab642300a7c130c19b88fd327e0c5b394",
      "new_mode": 33188,
      "new_path": "be/src/vec/exec/vtable_function_node.h"
    },
    {
      "type": "modify",
      "old_id": "c72a897305a516b08518d803422bba9cb636b953",
      "old_mode": 33188,
      "old_path": "be/src/vec/exprs/table_function/table_function_factory.cpp",
      "new_id": "16af325801942c8e251a85381fee2d2edd8e9758",
      "new_mode": 33188,
      "new_path": "be/src/vec/exprs/table_function/table_function_factory.cpp"
    },
    {
      "type": "modify",
      "old_id": "a68a1763fc44e9055d5c946ccb1f2dddde518911",
      "old_mode": 33188,
      "old_path": "be/src/vec/exprs/table_function/table_function_factory.h",
      "new_id": "cd06c202f3778c33fb7804aa728cc3162aa1d426",
      "new_mode": 33188,
      "new_path": "be/src/vec/exprs/table_function/table_function_factory.h"
    },
    {
      "type": "modify",
      "old_id": "d0fbf3637277f176d9c9a23f1549262b8de1bcb4",
      "old_mode": 33188,
      "old_path": "be/src/vec/exprs/vectorized_agg_fn.cpp",
      "new_id": "62530c5017d53af891ee0df232587189e6eb1160",
      "new_mode": 33188,
      "new_path": "be/src/vec/exprs/vectorized_agg_fn.cpp"
    },
    {
      "type": "modify",
      "old_id": "2082a93d423f3de358431aa14718a26adef5c50d",
      "old_mode": 33188,
      "old_path": "be/src/vec/exprs/vectorized_fn_call.cpp",
      "new_id": "00eebaba8069020c0afa51403b5d3a16aad6ffcb",
      "new_mode": 33188,
      "new_path": "be/src/vec/exprs/vectorized_fn_call.cpp"
    },
    {
      "type": "modify",
      "old_id": "dfbfce2127dbeb96106d786e3d2b63b64c217f9d",
      "old_mode": 33188,
      "old_path": "be/src/vec/functions/function_fake.h",
      "new_id": "4c98af22088f3ac46943a183240c456f9470e6f6",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/function_fake.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a12eb329394d552d1efe874a164b29850f722c9d",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/array_converter.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1939ec01999c398e1469e80172b6116f2d2dedb1",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/array_converter.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3dd73f9f24ff5563c6214a2504e39cfa93ae4fc1",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/boolean_converter.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "777625e776157a6598b108f77fbbdf09acbd0cfa",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/boolean_converter.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "84df1b1339a05d9219d488ac00b2958fe7cca975",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/data_type_converter.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f55058bb08fa2cc3d08aebefa3e658801d9f5cb5",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/data_type_converter_factory.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "599bc2c20a6c85ee979604437b00f3ad0851ff6e",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/float_converter.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2727993ea67215d877da9f00ffb23fdff82687e4",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/float_converter.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "efbef9dabbd8f01fdcea4094ba0f6276e3be9619",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/int_converter.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ce8dd23bf31f24b0ad9086e738e4b93e68ca4fda",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/int_converter.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "770b6b7026898e15c0be7d5149b744f35ee93c8f",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/map_converter.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f6ae7c0213616b0114360eff6d529b17b2d617ff",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/map_converter.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e63d7bdfaf0bba25eda3d0603dd8bc9c15c1227d",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/string_converter.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "78dcba6a5d1ac483cda087177498e231f79e3266",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/string_converter.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "daf9c325dc55dfc5708691bcf6c2493167111972",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/struct_converter.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "98455e6a958e31b6e3f13fad5d75a3d591a5f4c8",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/data_types/struct_converter.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2a27574677bb9a7aacd630f9f50a9431fd9d4c99",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/engine/python_env.hpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "458a8c399d40477b1a7f86429c2ef28f3720fdb6",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/engine/python_object_buffer_pool.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "740696d266f0780bd10aa4a0bd9ab9978f3fc0fe",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/engine/python_udf_client.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "93071effaa60ee7728e033eb344775eef16b6e55",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/engine/python_udf_client.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "70cee5be00268c0c71494cd5f80498305627beaa",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/engine/python_udf_executor.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ad16d723f00b94017ecc623f1d74158428f587ac",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/engine/python_udf_executor.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5878242a5eb07269eaedff3016be2bd8d5f809f9",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/engine/python_udtf_executor.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fe3cac84d65e084ebd5dd7c788b1489b3eccfec3",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/engine/python_udtf_executor.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8dffa176bfab69a62d77b3218bc3a5548606d648",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/function_python_udf.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7ee9ea1ee5ebd10981e674fd798c662a5d72910c",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/function_python_udf.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fb4845d7504cef33c7b5eaeb1b07f30fde2a8374",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/function_python_udtf.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e3850c87fa886a0cf6e3e083a283cac0f5612060",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/client/function_python_udtf.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a78ae22ec34e4a89ca69ff459891a386db8c45df",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/common/interaction_channel.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8b689c94c3dc4763606e9b258a094dd00502ba56",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/common/interaction_channel.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "21c02a5279d347f00174953687c79759ec288f77",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/common/interaction_protocol.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d428440313f7a89b55108c2aa04292b88fd64067",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/server/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "80d6dff809ab556fe53e43beaaca57fa93af0e21",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/server/src/main.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b9054833f802ebb3e62407c84ecf3e8fe05b9a86",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/server/src/message_handler.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9d53e480b54603540008dc15af486124a48466b9",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/server/src/message_handler.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "97d866af646ad8377525d796011f2d890ae80c61",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/server/src/python_udf_server.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c0e44aad428ecc2072ec5b46d2635fb20fc9ee43",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/server/src/python_udf_server.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f32e88417d2faadd96f66360744766aaed728b4a",
      "new_mode": 33188,
      "new_path": "be/src/vec/functions/python/server/src/server_config.h"
    },
    {
      "type": "modify",
      "old_id": "d8c7786531da140496cb72d67b574363aef029cb",
      "old_mode": 33261,
      "old_path": "build.sh",
      "new_id": "389c04f62783196071f6b25fd810c4141b5d0abb",
      "new_mode": 33261,
      "new_path": "build.sh"
    },
    {
      "type": "modify",
      "old_id": "00b40b9fc9f35f39a9c31b294271881a021db22c",
      "old_mode": 33188,
      "old_path": "fe/fe-common/src/main/java/org/apache/doris/common/FeMetaVersion.java",
      "new_id": "c7fd6324a552b2ab0226c094d1b3e153bc9d2849",
      "new_mode": 33188,
      "new_path": "fe/fe-common/src/main/java/org/apache/doris/common/FeMetaVersion.java"
    },
    {
      "type": "modify",
      "old_id": "d94a0f4f680b39ca6585abf81618bf6a0ef9ee96",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4",
      "new_id": "0d8e4731bf89ab0b04ad1a57a384b85fa41a9807",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4"
    },
    {
      "type": "modify",
      "old_id": "a7f4326047258f08d2421bc9642d0f7846056803",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/cup/sql_parser.cup",
      "new_id": "7d8ba2ff7d920e25109e7c407cc333d0fcefd45c",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/cup/sql_parser.cup"
    },
    {
      "type": "modify",
      "old_id": "3db95cb6a9fd16b6976c8dc0444848d1a24cdde4",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java",
      "new_id": "ca3ab20161a2602ff7bd670a1772e184a91a2dec",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java"
    },
    {
      "type": "modify",
      "old_id": "b61c49c010458431a8846ca56f2ab78ee1768542",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java",
      "new_id": "d6bd7aa146e7aa8dc2e7e1222270504601307b0b",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java"
    },
    {
      "type": "modify",
      "old_id": "69199a81a539b7fd17b8ad0e6e551227740e1a5e",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/catalog/ColumnType.java",
      "new_id": "d958f8c2da89471f56a62933a84a7f761dc44169",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/catalog/ColumnType.java"
    },
    {
      "type": "modify",
      "old_id": "7dbf3a0ec0a1a9315c58b05997f74e084b9d641b",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/catalog/Function.java",
      "new_id": "b64d0e775a7e56ad967b3cf958bd2d5d8b0f8cf2",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/catalog/Function.java"
    },
    {
      "type": "modify",
      "old_id": "e6c7e073579bdc32bee4a863a49296538fc2e627",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java",
      "new_id": "04d77ffed8fa2b7c48f4968bb2d018a8452d5cc2",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java"
    },
    {
      "type": "modify",
      "old_id": "31d97e9b536270673d43739046d72d98a5be35dd",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java",
      "new_id": "20a9845ec00513665b8a39d1fbe7a54280a86c04",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java"
    },
    {
      "type": "modify",
      "old_id": "704f890d4ea5596f71f6328a6d02910bc508f919",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java",
      "new_id": "9deeaf16820576a80b414436a3c005bb1ef3b368",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java"
    },
    {
      "type": "modify",
      "old_id": "c4403a98bd00e4555ac8d515af78397acaaff4e2",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java",
      "new_id": "26d5db3501cefc1fe672dbaef879bde4d55a603d",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java"
    },
    {
      "type": "modify",
      "old_id": "3ed770e12ed21c0dbcba3ed461c5933fae001f3c",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdf.java",
      "new_id": "90738b6675189a2bbebd4ab86bface238e3b42ac",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/JavaUdf.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4dbc2e4625376a78c8729fc73cef1c5dceb8d949",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdtf.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bb5b647599ba6a8d893da86fdf8743694e443f77",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/udf/PythonUdtfBuilder.java"
    },
    {
      "type": "modify",
      "old_id": "f66d72f64092031a80804716558bcadd21300a80",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/TableGeneratingFunctionVisitor.java",
      "new_id": "5f44c8c0b3aaf616d1ce7db804db13dcb1867e16",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/TableGeneratingFunctionVisitor.java"
    },
    {
      "type": "modify",
      "old_id": "375fa5d49a3a95f355b6d9bcfb9302204e26ec89",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java",
      "new_id": "493167e66f77736d0987578ad9993f87b1e36861",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java"
    },
    {
      "type": "modify",
      "old_id": "98f368427953412c6691c7304668df2de5f48a11",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java",
      "new_id": "dedaffec7bfd767197941916b5e9c467b19178ee",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java"
    },
    {
      "type": "modify",
      "old_id": "b0657b54a7cd0e99167b3c779c2e764da5c5c776",
      "old_mode": 33261,
      "old_path": "gensrc/script/gen_build_version.sh",
      "new_id": "3ddc56268968a0019efbde67e40ac4a1424c4dcc",
      "new_mode": 33261,
      "new_path": "gensrc/script/gen_build_version.sh"
    },
    {
      "type": "modify",
      "old_id": "9290768e0dbe6524f3e255b48adf3c172ca295a0",
      "old_mode": 33188,
      "old_path": "gensrc/thrift/Types.thrift",
      "new_id": "dc550ccb5170f2e569b2cd72904870a7326cd8a2",
      "new_mode": 33188,
      "new_path": "gensrc/thrift/Types.thrift"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3376296a3cafd4f1dfa89e11a1d610c2932f1ed1",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/sanity/test_pythonudf_assertequal.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "41cb52194e89bdd7e4d69946839db58b991d6577",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/sanity/test_pythonudf_assertlessthan.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "eda9275d0bd7c74dcfd6d521ca3275543a594443",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudf_array.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7a293780a01f42b42ce917587c2e988f7605b4c9",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudf_boolean.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "48daad589bfe1cbfd23427fd1d9dd45bb57dd22c",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudf_float.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cd3a1de1f20db2d6b51f56a6915e5bb69663342b",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudf_int.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7c7cf58b2f038c11f6a188c2758f204c56dc0ada",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudf_map.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b1160ebf38bfd934b21af71c7a9be2a03c3afc5c",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudf_ret_map.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "59f2f7c776dd51400edcfcadc648d200079bd3d0",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudf_string.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "866fd08e7f052aadf2d4c7e851a211cddd2f1324",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudtf_array.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "907e4e402aba148cd50222debe32cb5d51e98e76",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudtf_float.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7d35ab6a1014ca9a8d96a5c149299eb9ac1de1d1",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudtf_int.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "62556750bb361534aee03859be3a39fda8541a45",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudtf_map.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "da31e541493c20ef1ddd775f11d280554159ae1c",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudtf_string.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f6410400043b6b6a026f89c52816aeb128c2124c",
      "new_mode": 33188,
      "new_path": "regression-test/data/pythonudf_p0/test_pythonudtf_struct.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f7593fcb81c893e8709cb55e5c577f144400c356",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/sanity/test_pythonudf_assertequal.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "16765e1a033abd21068b092cc448708d4959c34a",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/sanity/test_pythonudf_assertlessthan.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7ccf4befdefa67754750820eea63287a4a965634",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudf_array.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "da285f7cf4d7b54409581b89deaf3a574615c999",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudf_auth.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0c763e39aba138cbb86cd0f249af6b4be323400e",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudf_boolean.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "10fdef3bdd6e188749214d6e27b3a3e8cba8b900",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudf_float.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c81d1bfeae4ad14218a205aea147ebc32270178a",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudf_int.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4bad66f7fc75b049850c8745ba39fc066fc0193e",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudf_map.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "97aa2d5fc361996027e8d800add47947e52c39c8",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudf_ret_map.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9f0cd2ace7fec079d9bd73606d9560a257a58756",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudf_string.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9b6a14a1b220d45813702dd22867219f201129af",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudtf_array.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d0c22b0028f31ec6c7b48dee45e7ecb3a9305622",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudtf_float.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "893296ac35a40af6d653c296bccd1090ec5cbe93",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudtf_int.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "306e203300da2c7476571250ace9612521bbe998",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudtf_map.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ae722576f0b61e30d01fa2ce5eedd36972605db6",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudtf_string.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dbfeed4b6751b05ccee26536f5d6b92c7f1b8943",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/test_pythonudtf_struct.groovy"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8d113e15131cd116cad7dc76d89523153c3482c7",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/array_int_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2951fe277c2aa3e03ae9af8f0d498e955ac0de01",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/array_return_array_int_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "81b446bf37d2a375492574d7a7209d3bfbc7faa9",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/array_return_array_string_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "eb9b43fbf1afa31b406636556569aa58c7e66195",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/array_string_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2dce929422552aeae468751080b66bfe2fe27d99",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/assert_equal_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0eddfbd7a9660501d2f4d740b639f5f3eff945b1",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/assert_lessthan_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9c05b03f8a2dc194e8ee47d76e69dfba85bbf1ec",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/boolean_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9edb9ba7d20bed54e626c64bdcc181018c26dc1e",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/double_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4bc3b530cea8c7d1cc83ec4026b7bb36b16f348e",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/float_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1f36827ded34c969b75425286f4ce693762b9467",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/int_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e98fc5fc92ede7aaee74849779b0128e01aaeb18",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/map_int_double_ret_string_string_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d91db0dd32e7587b94491dd0d1868dac90d3a538",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/map_int_int_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "06ed2c9be76b95484f689e415ea7dc1ee202f089",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/map_ret_int_double_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cc70678d94114091be5205bf5369207c942ec359",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/map_ret_int_int_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "643346915f3eafd484272d09aea427b5ad1dfdf7",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/map_ret_string_string_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "302b5b4453bf7d9b3c86ed62e0e9d6e03c127118",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/map_string_string_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bc10ebe86c8af78232b0cddc352023282ae36709",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udf_scripts/string_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "99361cc3e4534fe847213aaa28618d9976461cb7",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udtf_scripts/array_int_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "25295a4b8158a4798cf238f55088d2af4a86c620",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udtf_scripts/array_string_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "22cd54b733314006d97224bdc522e464322509bd",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udtf_scripts/double_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "907dec2187125397e3a097999dc8a08e7ebc972e",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udtf_scripts/float_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "56969357573ca166938e327d19ddcce47549fd47",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udtf_scripts/int_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bef8c21d93df5146c99f0017a6e4782c68746c14",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udtf_scripts/map_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "58004cb48573d48faa3752e9c55120a9d169ee00",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udtf_scripts/string_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "111dc8da68190d5c01dc060743167dcb0ea42b7f",
      "new_mode": 33188,
      "new_path": "regression-test/suites/pythonudf_p0/udtf_scripts/struct_test.py"
    },
    {
      "type": "modify",
      "old_id": "588d28df4492a4b0200fab1293637c5d2998f469",
      "old_mode": 33261,
      "old_path": "run-regression-test.sh",
      "new_id": "9e862e84214bfa52708f5e379e205736cfeb9b97",
      "new_mode": 33261,
      "new_path": "run-regression-test.sh"
    },
    {
      "type": "modify",
      "old_id": "1215bacf069c9d0b3298312a2237d3327087ade2",
      "old_mode": 33261,
      "old_path": "thirdparty/download-thirdparty.sh",
      "new_id": "9d2452414cfc53010fa4da7f9ab73404a82fd816",
      "new_mode": 33261,
      "new_path": "thirdparty/download-thirdparty.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9b0bb175c58cc719060734afdd828407ae08d61e",
      "new_mode": 33188,
      "new_path": "thirdparty/patches/boost-1.81.0.patch"
    }
  ]
}
