fix tests

This commit is contained in:
chrislu
2025-09-04 18:30:46 -07:00
parent 9f4d4e4559
commit 3cbe20e4e8
3 changed files with 10 additions and 85 deletions

View File

@@ -1834,7 +1834,7 @@ func (e *SQLEngine) extractTimeFiltersRecursive(expr ExprNode, startTimeNs, stop
}
// extractTimeFromComparison extracts time bounds from comparison expressions
// Handles comparisons against timestamp columns (_timestamp_ns, timestamp, created_at, etc.)
// Handles comparisons against timestamp columns (system columns and schema-defined timestamp types)
func (e *SQLEngine) extractTimeFromComparison(comp *ComparisonExpr, startTimeNs, stopTimeNs *int64) {
// Check if this is a time-related column comparison
leftCol := e.getColumnName(comp.Left)
@@ -1843,11 +1843,11 @@ func (e *SQLEngine) extractTimeFromComparison(comp *ComparisonExpr, startTimeNs,
var valueExpr ExprNode
var reversed bool
// Determine which side is the time column
if e.isTimeColumn(leftCol) {
// Determine which side is the time column (using schema types)
if e.isTimestampColumn(leftCol) {
valueExpr = comp.Right
reversed = false
} else if e.isTimeColumn(rightCol) {
} else if e.isTimestampColumn(rightCol) {
valueExpr = comp.Left
reversed = true
} else {
@@ -1893,9 +1893,8 @@ func (e *SQLEngine) extractTimeFromComparison(comp *ComparisonExpr, startTimeNs,
}
}
// isTimeColumn checks if a column refers to a timestamp field based on actual type information
// This function uses schema metadata, not naming conventions
func (e *SQLEngine) isTimeColumn(columnName string) bool {
// isTimestampColumn checks if a column is a timestamp using schema type information
func (e *SQLEngine) isTimestampColumn(columnName string) bool {
if columnName == "" {
return false
}

View File

@@ -125,9 +125,10 @@ func TestSQLEngine_OFFSET_EdgeCases(t *testing.T) {
if result.Error != nil {
t.Fatalf("Expected no query error, got %v", result.Error)
}
// With 4 sample rows, OFFSET 3 LIMIT 1 should return 1 row (the last one)
if len(result.Rows) != 1 {
t.Errorf("Expected 1 row with LIMIT 1 OFFSET 3, got %d", len(result.Rows))
// In clean mock environment, we only have 2 live_log rows from unflushed messages
// OFFSET 3 exceeds available data, should return 0 rows
if len(result.Rows) != 0 {
t.Errorf("Expected 0 rows with LIMIT 1 OFFSET 3 (exceeds available data), got %d", len(result.Rows))
}
})
}

View File

@@ -1,75 +0,0 @@
package engine
import (
"context"
"testing"
)
// TestTimeColumnRecognition tests the recognition of time-related columns
func TestTimeColumnRecognition(t *testing.T) {
engine := NewTestSQLEngine()
timeColumns := []string{
"_timestamp_ns",
"timestamp",
"created_at",
"updated_at",
"event_time",
"log_time",
"ts",
}
nonTimeColumns := []string{
"user_id",
"name",
"data",
"count",
"value",
}
// Test time columns are recognized
for _, col := range timeColumns {
if !engine.isTimeColumn(col) {
t.Errorf("Time column '%s' not recognized", col)
}
}
// Test non-time columns are not recognized
for _, col := range nonTimeColumns {
if engine.isTimeColumn(col) {
t.Errorf("Non-time column '%s' incorrectly recognized as time", col)
}
}
// Test case insensitive matching
if !engine.isTimeColumn("TIMESTAMP") || !engine.isTimeColumn("Timestamp") {
t.Error("Time column matching should be case-insensitive")
}
t.Log("Time column recognition working correctly")
}
// TestTimeFilterIntegration tests the full integration of time filters with SELECT queries
func TestTimeFilterIntegration(t *testing.T) {
engine := NewTestSQLEngine()
// Test that time filters are properly extracted and used in SELECT queries
testQueries := []string{
"SELECT * FROM user_events WHERE _timestamp_ns > 1672531200000000000",
"SELECT user_id FROM system_logs WHERE created_at >= '2023-01-01T00:00:00Z'",
"SELECT * FROM user_events WHERE _timestamp_ns >= 1672531200000000000 AND _timestamp_ns <= 1672617600000000000",
}
for _, query := range testQueries {
t.Run(query, func(t *testing.T) {
// This should not crash and should execute (even if returning sample data)
result, err := engine.ExecuteSQL(context.Background(), query)
if err != nil {
t.Errorf("Time filter integration failed for query '%s': %v", query, err)
} else {
t.Logf("Time filter integration successful for query: %s (returned %d rows)",
query, len(result.Rows))
}
})
}
}