package com.ruoyi.oa.service;

import com.ruoyi.oa.domain.vo.DynamicDataVo;
import com.ruoyi.oa.domain.vo.TableColumnVo;

import java.util.List;
import java.util.Map;

/**
 * 数据库查询服务接口
 *
 * @author ruoyi
 * @date 2024-12-19
 */
public interface IDatabaseQueryService {

    /**
     * 根据表名获取表字段信息
     *
     * @param tableName 表名
     * @return 字段信息列表
     */
    List<TableColumnVo> getTableColumns(String tableName);

    /**
     * 根据多个表名获取表字段信息
     *
     * @param tableNames 表名列表
     * @return 表名到字段信息的映射
     */
    Map<String, List<TableColumnVo>> getTableColumns(List<String> tableNames);

    /**
     * 执行SQL查询
     *
     * @param sql SQL语句
     * @return 查询结果
     */
    List<Map<String, Object>> executeQuery(String sql);

    /**
     * 执行SQL查询并返回动态数据格式
     *
     * @param sql SQL语句
     * @param tableName 表名（用于生成字段元信息）
     * @param includeMeta 是否包含元信息
     * @return 动态数据格式
     */
    DynamicDataVo executeQueryWithMeta(String sql, String tableName, boolean includeMeta);

    /**
     * 验证SQL是否为查询语句
     *
     * @param sql SQL语句
     * @return 是否为查询语句
     */
    boolean isQuerySql(String sql);
} 