Files
markitect-main/markitect/query_paradigms/paradigms/visual_builder_paradigm.py
tegwick 5143864a86 feat: implement comprehensive query paradigm zoo system (issue #62)
- Created extensible BaseQueryParadigm interface with standardized QueryResult format
- Implemented QueryParadigmRegistry for paradigm discovery and management
- Added 5 working paradigms: SQL, FTS, GraphQL, JSONPath, Natural Language
- Documented 9 additional paradigms: QBE, Batch Manipulation, Visual Query Builder, REST API, NoSQL, UNIX Pipeline, XPath/XQuery, RAG, Data Transformation
- Integrated full CLI interface: list, search, show, exec, categories commands
- Added comprehensive test suite with 23 test cases covering all components
- Auto-registration system enables easy addition of new paradigms
- Organized paradigms by category (structural, textual, semantic, visual, procedural, network) and complexity (beginner, intermediate, advanced)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-03 23:06:57 +02:00

135 lines
5.1 KiB
Python

"""
Visual Query Builder Paradigm - Drag-and-drop query construction.
"""
import time
from typing import Dict, Any, List, Optional
from ..base import BaseQueryParadigm, QueryResult
class VisualQueryBuilderParadigm(BaseQueryParadigm):
"""Visual query builder paradigm for drag-and-drop query construction."""
@property
def name(self) -> str:
return "Visual Query Builder"
@property
def description(self) -> str:
return "Drag-and-drop interface for building complex queries visually, generates SQL/GraphQL automatically"
@property
def category(self) -> str:
return "visual"
@property
def complexity(self) -> str:
return "beginner"
def execute(self, query: str, config: Dict[str, Any] = None) -> QueryResult:
"""Execute visual query (not yet implemented)."""
start_time = time.time()
# This is a documentation paradigm - not yet implemented
execution_time = (time.time() - start_time) * 1000
return QueryResult(
paradigm=self.name,
query=query,
execution_time_ms=execution_time,
result_count=0,
results=[],
metadata={
"status": "not_implemented",
"implementation_issue": "TBD - to be created",
"description": "Visual query builder provides drag-and-drop interface for constructing complex queries"
},
success=False,
error_message="Visual Query Builder paradigm not yet implemented. This paradigm will provide a web-based drag-and-drop interface."
)
def get_examples(self) -> List[Dict[str, str]]:
"""Get example visual query configurations."""
return [
{
"name": "Simple filter",
"description": "Drag file table, add author filter",
"query": "{'tables': ['files'], 'filters': [{'field': 'author', 'operator': 'equals', 'value': 'Alice'}]}"
},
{
"name": "Join with aggregation",
"description": "Join files and tags, count by tag",
"query": "{'tables': ['files', 'tags'], 'joins': [{'type': 'inner', 'on': 'file_id'}], 'groupBy': ['tag_name'], 'aggregates': [{'function': 'count', 'field': '*'}]}"
},
{
"name": "Date range with sorting",
"description": "Files created in last month, sorted by date",
"query": "{'tables': ['files'], 'filters': [{'field': 'created_at', 'operator': 'greater_than', 'value': '30 days ago'}], 'orderBy': [{'field': 'created_at', 'direction': 'desc'}]}"
},
{
"name": "Complex multi-table",
"description": "Files with tags and author info, filtered by multiple criteria",
"query": "{'tables': ['files', 'tags', 'authors'], 'joins': [{'type': 'left', 'on': 'file_id'}, {'type': 'inner', 'on': 'author_id'}], 'filters': [{'field': 'tag_name', 'operator': 'in', 'value': ['documentation', 'tutorial']}, {'field': 'author.department', 'operator': 'equals', 'value': 'Engineering'}]}"
}
]
def validate_query(self, query: str) -> tuple[bool, Optional[str]]:
"""Validate visual query configuration."""
try:
import json
config = json.loads(query)
if not isinstance(config, dict):
return False, "Visual query configuration must be a JSON object"
if 'tables' not in config:
return False, "Visual query must specify at least one table"
if not isinstance(config['tables'], list) or len(config['tables']) == 0:
return False, "Tables must be a non-empty list"
return True, None
except json.JSONDecodeError:
return False, "Visual query configuration must be valid JSON"
def get_syntax_help(self) -> str:
"""Get syntax help for visual query builder."""
return """Visual Query Builder Configuration:
The visual query builder uses JSON configuration that represents the visual elements:
Basic Structure:
{
"tables": ["table1", "table2"],
"joins": [{"type": "inner|left|right", "on": "field_name"}],
"filters": [{"field": "field_name", "operator": "equals|contains|greater_than|in", "value": "value"}],
"groupBy": ["field1", "field2"],
"aggregates": [{"function": "count|sum|avg|min|max", "field": "field_name"}],
"orderBy": [{"field": "field_name", "direction": "asc|desc"}],
"limit": 100
}
Filter Operators:
- equals: Exact match
- contains: Text contains substring
- greater_than, less_than: Numeric/date comparison
- in: Value in list
- between: Value between two values
Aggregate Functions:
- count: Count records
- sum: Sum numeric values
- avg: Average of numeric values
- min/max: Minimum/maximum values
Example:
{
"tables": ["files"],
"filters": [
{"field": "author", "operator": "equals", "value": "Alice"},
{"field": "created_at", "operator": "greater_than", "value": "2024-01-01"}
],
"orderBy": [{"field": "created_at", "direction": "desc"}]
}
"""