mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-28 14:35:27 +08:00
generated a library that wraps the go expr parser, and embedded that into libmilvus-core.so issue: https://github.com/milvus-io/milvus/issues/45702 see `internal/core/src/plan/milvus_plan_parser.h` for the exposed interface <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Introduced C++ API for plan parsing with schema registration and expression parsing capabilities. * Plan parser now available as shared libraries instead of a standalone binary tool. * **Refactor** * Reorganized build system to produce shared library artifacts instead of executable binaries. * Build outputs relocated to standardized library and include directories. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Buqian Zheng <zhengbuqian@gmail.com>
81 lines
3.1 KiB
C++
81 lines
3.1 KiB
C++
// Copyright (C) 2019-2025 Zilliz. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
// or implied. See the License for the specific language governing permissions and limitations under the License
|
|
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace milvus {
|
|
namespace planparserv2 {
|
|
|
|
// SchemaHandle is an opaque handle to a registered schema.
|
|
// Valid handles are > 0. A handle of 0 indicates an invalid/unregistered schema.
|
|
using SchemaHandle = int64_t;
|
|
|
|
constexpr SchemaHandle kInvalidSchemaHandle = 0;
|
|
|
|
// Thread-safe wrapper for the Go plan parser.
|
|
//
|
|
// Thread safety guarantees:
|
|
// - RegisterSchema: Can be called concurrently. Each call returns a unique handle.
|
|
// - UnregisterSchema: Can be called concurrently. Returns error if schema is in use or already unregistered.
|
|
// - Parse: Can be called concurrently. Uses lock-free reference counting internally.
|
|
//
|
|
// Usage:
|
|
// auto handle = PlanParser::RegisterSchema(schema_proto);
|
|
// auto plan = PlanParser::Parse(handle, "field > 10");
|
|
// PlanParser::UnregisterSchema(handle);
|
|
class PlanParser {
|
|
public:
|
|
/**
|
|
* @brief Register a schema to the plan parser.
|
|
*
|
|
* Thread-safe. Each call returns a unique handle, even for identical schemas.
|
|
* The same schema can be registered multiple times, each with a different handle.
|
|
*
|
|
* @param schema_proto The serialized CollectionSchema protobuf.
|
|
* @return SchemaHandle A unique handle for the registered schema (> 0).
|
|
* @throws std::runtime_error if registration fails (e.g., invalid protobuf).
|
|
*/
|
|
static SchemaHandle RegisterSchema(const std::vector<uint8_t>& schema_proto);
|
|
|
|
/**
|
|
* @brief Unregister a schema from the plan parser.
|
|
*
|
|
* Thread-safe. Fails if the schema is currently being used by Parse() or already unregistered.
|
|
*
|
|
* @param handle The handle returned by RegisterSchema.
|
|
* @return Empty string on success, error message on failure.
|
|
*/
|
|
static std::string UnregisterSchema(SchemaHandle handle);
|
|
|
|
/**
|
|
* @brief Parse an expression string into a serialized PlanNode protobuf.
|
|
*
|
|
* Thread-safe and lock-free. Multiple threads can call Parse() concurrently
|
|
* with the same or different handles.
|
|
*
|
|
* @param handle The handle returned by RegisterSchema.
|
|
* @param expr The expression string to parse.
|
|
* @return std::vector<uint8_t> The serialized PlanNode protobuf.
|
|
* @throws std::runtime_error if:
|
|
* - handle is invalid or not found
|
|
* - schema was unregistered
|
|
* - parsing fails
|
|
*/
|
|
static std::vector<uint8_t> Parse(SchemaHandle handle, const std::string& expr);
|
|
};
|
|
|
|
} // namespace planparserv2
|
|
} // namespace milvus
|