support limit with offset

This commit is contained in:
chrislu committed 2025-09-04 08:44:29 -07:00
1 parent e030913d9f
commit 20f61388bf
6 files changed
+607 -22

No files matched your search

+86
View File
@@ -92,6 +92,92 @@ func TestSQLEngine_SelectFromNonExistentTable(t *testing.T) {
}
}
func TestSQLEngine_SelectWithOffset(t *testing.T) {
engine := NewTestSQLEngine()
// Test SELECT with OFFSET only
result, err := engine.ExecuteSQL(context.Background(), "SELECT * FROM user_events LIMIT 10 OFFSET 1")
if err != nil {
t.Fatalf("Expected no error, got %v", err)
}
if result.Error != nil {
t.Fatalf("Expected no query error, got %v", result.Error)
}
// Should have fewer rows than total since we skip 1 row
// Sample data has 4 rows, so OFFSET 1 should give us 3 rows
if len(result.Rows) != 3 {
t.Errorf("Expected 3 rows with OFFSET 1 (4 total - 1 offset), got %d", len(result.Rows))
}
}
func TestSQLEngine_SelectWithLimitAndOffset(t *testing.T) {
engine := NewTestSQLEngine()
// Test SELECT with both LIMIT and OFFSET
result, err := engine.ExecuteSQL(context.Background(), "SELECT * FROM user_events LIMIT 2 OFFSET 1")
if err != nil {
t.Fatalf("Expected no error, got %v", err)
}
if result.Error != nil {
t.Fatalf("Expected no query error, got %v", result.Error)
}
// Should have exactly 2 rows (skip 1, take 2)
if len(result.Rows) != 2 {
t.Errorf("Expected 2 rows with LIMIT 2 OFFSET 1, got %d", len(result.Rows))
}
}
func TestSQLEngine_SelectWithOffsetExceedsRows(t *testing.T) {
engine := NewTestSQLEngine()
// Test OFFSET that exceeds available rows
result, err := engine.ExecuteSQL(context.Background(), "SELECT * FROM user_events LIMIT 10 OFFSET 10")
if err != nil {
t.Fatalf("Expected no error, got %v", err)
}
if result.Error != nil {
t.Fatalf("Expected no query error, got %v", result.Error)
}
// Should have 0 rows since offset exceeds available data
if len(result.Rows) != 0 {
t.Errorf("Expected 0 rows with large OFFSET, got %d", len(result.Rows))
}
}
func TestSQLEngine_SelectWithOffsetZero(t *testing.T) {
engine := NewTestSQLEngine()
// Test OFFSET 0 (should be same as no offset)
result1, err := engine.ExecuteSQL(context.Background(), "SELECT * FROM user_events LIMIT 3")
if err != nil {
t.Fatalf("Expected no error for LIMIT query, got %v", err)
}
result2, err := engine.ExecuteSQL(context.Background(), "SELECT * FROM user_events LIMIT 3 OFFSET 0")
if err != nil {
t.Fatalf("Expected no error for LIMIT OFFSET query, got %v", err)
}
if result1.Error != nil {
t.Fatalf("Expected no query error for LIMIT, got %v", result1.Error)
}
if result2.Error != nil {
t.Fatalf("Expected no query error for LIMIT OFFSET, got %v", result2.Error)
}
// Both should return the same number of rows
if len(result1.Rows) != len(result2.Rows) {
t.Errorf("LIMIT 3 and LIMIT 3 OFFSET 0 should return same number of rows. Got %d vs %d", len(result1.Rows), len(result2.Rows))
}
}
func TestSQLEngine_SelectDifferentTables(t *testing.T) {
engine := NewTestSQLEngine()