- 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>
135 lines
5.1 KiB
Python
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"}]
|
|
}
|
|
""" |