@simonecoelhosfo/optimizely-mcp-server
Version:
Optimizely MCP Server for AI assistants with integrated CLI tools
117 lines • 4.03 kB
TypeScript
/**
* Enhanced Flattening Requirement Detection System - Phase 3.2 Task 3.2.3
*
* This system analyzes SQL queries to detect when array/object flattening is required
* and provides intelligent recommendations for optimal query execution strategy.
*
* Key Features:
* - Integrates with 100% validated AdvancedSQLParser
* - Detects array access patterns (variations.key, audiences.conditions)
* - Identifies nested object references requiring flattening
* - Provides performance impact estimates
* - Generates specific flattening strategies
* - Supports multi-stage query optimization
*/
type EntityType = 'flags' | 'experiments' | 'audiences' | 'attributes' | 'events' | 'pages' | 'campaigns' | 'categories' | 'flag_stats' | 'unknown';
export interface FlatteningRequirement {
entity: string;
entityType: EntityType;
flatteningType: 'ARRAY_TO_ROWS' | 'OBJECT_TO_COLUMNS' | 'JSON_EXTRACT' | 'HYBRID';
priority: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
fieldPath: string[];
accessPattern: string;
estimatedImpact: FlatteningImpact;
strategy: FlatteningStrategy;
}
export interface FlatteningImpact {
performanceGain: number;
memoryIncrease: number;
complexityReduction: number;
riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
affectedRowCount: number;
}
export interface FlatteningStrategy {
approach: 'PRE_FILTER_FLATTEN' | 'SELECTIVE_FLATTEN' | 'MATERIALIZED_VIEW' | 'DYNAMIC_UNNEST';
steps: FlatteningStep[];
alternativeApproaches: string[];
optimizationHints: string[];
}
export interface FlatteningStep {
order: number;
operation: string;
description: string;
sqlFragment: string;
estimatedCost: number;
}
export interface FlatteningAnalysisResult {
queryId: string;
originalQuery: string;
requiresFlattening: boolean;
requirements: FlatteningRequirement[];
overallComplexity: 'SIMPLE' | 'MODERATE' | 'COMPLEX' | 'EXTREME';
recommendedStrategy: 'DIRECT_EXECUTE' | 'SINGLE_FLATTEN' | 'MULTI_STAGE_FLATTEN' | 'MATERIALIZED_CACHE';
estimatedPerformanceGain: number;
potentialRisks: string[];
optimizedQueryPlan: string;
}
export interface OptimizelyFieldMapping {
entity: EntityType;
arrayFields: string[];
objectFields: string[];
nestedArrays: string[];
commonPatterns: string[];
flatteningComplexity: number;
}
export declare class EnhancedFlatteningDetector {
private optimizelyMappings;
private performanceMetrics;
constructor();
/**
* Main analysis method that detects flattening requirements
*/
analyzeQueryFlattening(parsedQuery: any, // From AdvancedSQLParser
entityType: EntityType, options?: {
strictMode?: boolean;
performanceThreshold?: number;
maxComplexity?: number;
}): FlatteningAnalysisResult;
/**
* Detect specific flattening requirements from parsed query
*/
private detectFlatteningRequirements;
/**
* Analyze a single dynamic reference for flattening requirements
*/
private analyzeDynamicReference;
/**
* Calculate priority for array flattening based on field importance
*/
private calculateArrayFlatteningPriority;
/**
* Calculate the performance impact of flattening
*/
private calculateFlatteningImpact;
/**
* Generate specific flattening strategy
*/
private generateFlatteningStrategy;
/**
* Initialize Optimizely-specific field mappings
*/
private initializeOptimizelyMappings;
/**
* Initialize performance metrics for estimation
*/
private initializePerformanceMetrics;
private detectImplicitArrayAccess;
private deduplicateAndPrioritize;
private comparePriority;
private analyzeQueryComplexity;
private generateOptimizationStrategy;
private estimatePerformanceGain;
private analyzeRisks;
private generateOptimizedQueryPlan;
private generateQueryId;
}
export {};
//# sourceMappingURL=EnhancedFlatteningDetector.d.ts.map