()
| 579 | |
| 580 | #[test] |
| 581 | fn test_query_execution() { |
| 582 | let optimizer = ReadOnlyOptimizer::new(100); |
| 583 | let conn = rusqlite::Connection::open_in_memory().unwrap(); |
| 584 | let schema_cache = SchemaCache::new(3600); |
| 585 | |
| 586 | // Create a test table |
| 587 | conn.execute("CREATE TABLE users (id INTEGER, name TEXT, active BOOLEAN)", []).unwrap(); |
| 588 | conn.execute("INSERT INTO users VALUES (1, 'Alice', 1), (2, 'Bob', 0)", []).unwrap(); |
| 589 | |
| 590 | // Test simple query execution |
| 591 | let result = optimizer.execute_read_only_query(&conn, "SELECT * FROM users", &schema_cache).unwrap(); |
| 592 | assert!(result.is_some()); |
| 593 | |
| 594 | let response = result.unwrap(); |
| 595 | assert_eq!(response.columns, vec!["id", "name", "active"]); |
| 596 | assert_eq!(response.rows.len(), 2); |
| 597 | |
| 598 | // Test that stats are updated |
| 599 | let stats = optimizer.get_stats(); |
| 600 | assert_eq!(stats.total_queries, 1); |
| 601 | assert_eq!(stats.cache_misses, 1); |
| 602 | assert_eq!(stats.successful_optimizations, 1); |
| 603 | |
| 604 | // Test cache hit on second execution |
| 605 | let result2 = optimizer.execute_read_only_query(&conn, "SELECT * FROM users", &schema_cache).unwrap(); |
| 606 | assert!(result2.is_some()); |
| 607 | |
| 608 | let stats2 = optimizer.get_stats(); |
| 609 | assert_eq!(stats2.total_queries, 2); |
| 610 | assert_eq!(stats2.cache_hits, 1); |
| 611 | assert_eq!(stats2.cache_misses, 1); |
| 612 | assert!(optimizer.get_cache_hit_rate() > 0.0); |
| 613 | } |
| 614 | } |
nothing calls this directly
no test coverage detected