bq_validate_query_syntax
Validate BigQuery SQL syntax and identify errors before execution. Check query structure and receive detailed error reports to fix issues efficiently.
Instructions
Enhanced syntax validation with detailed error reporting
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL query to validate | |
| params | No | Optional query parameters (key-value pairs) |
Implementation Reference
- src/mcp_bigquery/server.py:613-635 (handler)Main handler function for the bq_validate_query_syntax tool. Instantiates SQLAnalyzer and delegates to its enhanced validation method.async def validate_query_syntax(sql: str, params: dict[str, Any] | None = None) -> dict[str, Any]: """ Enhanced syntax validation with detailed error reporting. Args: sql: The SQL query to validate params: Optional query parameters (not used in static analysis) Returns: Dict with validation results, issues, and suggestions """ try: analyzer = SQLAnalyzer(sql) result = analyzer.validate_syntax_enhanced() return result except Exception as e: return { "error": { "code": "ANALYSIS_ERROR", "message": f"Failed to validate query syntax: {str(e)}", } }
- Core implementation of enhanced syntax validation using static analysis with sqlparse and regex patterns for common issues, BigQuery specifics, and suggestions.def validate_syntax_enhanced(self) -> dict[str, Any]: """Perform enhanced syntax validation with detailed error reporting. Returns: Dictionary containing: - is_valid: Whether the SQL syntax appears valid - issues: List of potential syntax issues - suggestions: List of improvement suggestions - bigquery_specific: BigQuery-specific validation results """ issues = [] suggestions = [] # Check for common syntax issues issues.extend(self._check_common_syntax_issues()) # Check BigQuery-specific syntax bq_issues = self._check_bigquery_specific_syntax() issues.extend(bq_issues) # Generate suggestions based on issues suggestions = self._generate_suggestions(issues) # Only consider errors for validity, not warnings or info has_errors = any(issue.get("severity") == "error" for issue in issues) return { "is_valid": not has_errors, "issues": issues, "suggestions": suggestions, "bigquery_specific": { "uses_legacy_sql": self._uses_legacy_sql(), "has_array_syntax": self._has_array_syntax(), "has_struct_syntax": self._has_struct_syntax(), }, }
- src/mcp_bigquery/server.py:154-172 (registration)Tool registration in the MCP server's list_tools() handler, including name, description, and input schema.types.Tool( name="bq_validate_query_syntax", description=("Enhanced syntax validation with detailed error reporting"), inputSchema={ "type": "object", "properties": { "sql": { "type": "string", "description": "The SQL query to validate", }, "params": { "type": "object", "description": ("Optional query parameters (key-value pairs)"), "additionalProperties": True, }, }, "required": ["sql"], }, ),
- src/mcp_bigquery/server.py:350-352 (handler)Dispatch handler in the @server.call_tool() function that routes the tool call to the validate_query_syntax implementation.elif name == "bq_validate_query_syntax": result = await validate_query_syntax(sql=arguments["sql"], params=arguments.get("params")) return [types.TextContent(type="text", text=json.dumps(result, indent=2))]
- src/mcp_bigquery/server.py:157-171 (schema)Input schema definition for the tool, specifying required 'sql' parameter and optional 'params'.inputSchema={ "type": "object", "properties": { "sql": { "type": "string", "description": "The SQL query to validate", }, "params": { "type": "object", "description": ("Optional query parameters (key-value pairs)"), "additionalProperties": True, }, }, "required": ["sql"], },