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>
This commit is contained in:
135
markitect/query_paradigms/paradigms/visual_builder_paradigm.py
Normal file
135
markitect/query_paradigms/paradigms/visual_builder_paradigm.py
Normal file
@@ -0,0 +1,135 @@
|
||||
"""
|
||||
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"}]
|
||||
}
|
||||
"""
|
||||
Reference in New Issue
Block a user