package com.easyagents.federation.sql.execute;

import java.io.Serializable;

/**
 * 不可由 SQL 文本覆盖的 JDBC 执行限制。
 *
 * @param fetchSize 驱动抓取批次，0 表示驱动默认
 * @param maxRows 最大返回行数，0 表示不额外限制
 * @param queryTimeoutSeconds 查询超时秒数，0 表示驱动默认
 * @param readOnly 是否强制只读连接；正式 JDBC 路径必须为 true
 */
public record SqlExecutionOptions(
    int fetchSize,
    int maxRows,
    int queryTimeoutSeconds,
    boolean readOnly
) implements Serializable {

    /**
     * 校验执行限制。
     */
    public SqlExecutionOptions {
        if (fetchSize < 0 || maxRows < 0 || queryTimeoutSeconds < 0) {
            throw new IllegalArgumentException("execution limits must not be negative");
        }
        if (!readOnly) {
            throw new IllegalArgumentException("federation SQL execution must remain read-only");
        }
    }

    /**
     * 返回适合普通只读流式查询的默认配置。
     *
     * @return 默认配置
     */
    public static SqlExecutionOptions defaults() {
        return new SqlExecutionOptions(500, 0, 30, true);
    }
}
