package com.easyagents.federation.sql.compile;

/**
 * 调用方在 SQL 已校验并转换为 RelRoot 后执行的策略 SPI。
 */
@FunctionalInterface
public interface FederationSqlPolicy {

    /**
     * 返回策略实现的稳定版本，用于隔离计划缓存。
     *
     * <p>策略规则发生变化时应同步更新版本。默认版本适用于 Engine 生命周期内
     * 逻辑不变的无状态策略。</p>
     *
     * @return 稳定策略版本
     */
    default String version() {
        return "1";
    }

    /**
     * 校验已编译 SQL；拒绝时应抛出 FederationSqlException。
     *
     * @param context 策略上下文
     */
    void validate(SqlPolicyContext context);
}
