File size: 1,007 Bytes
e68a95d
 
 
 
b7dddbe
e68a95d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from __future__ import annotations

import time

from fastapi import APIRouter

from app.models.schemas import SqlValidationRequest, SqlValidationResponse
from app.services.sql_validator_service import SqlValidatorService

router = APIRouter()
_service = SqlValidatorService()


@router.post(
    "/sql/validate",
    response_model=SqlValidationResponse,
    summary="Validate a SQL query without executing it",
)
async def validate_sql(
    body: SqlValidationRequest,
):
    start = time.perf_counter()
    result = _service.validate(body.query, body.dialect)
    elapsed_ms = round((time.perf_counter() - start) * 1000, 3)
    return SqlValidationResponse(
        success=True,
        time_ms=elapsed_ms,
        valid=result["valid"],
        query_type=result["query_type"],
        dialect=result["dialect"],
        is_read_only=result["is_read_only"],
        errors=result["errors"],
        warnings=result["warnings"],
        tables=result["tables"],
        columns=result["columns"],
    )