+60
-96
query_test.go
+60
-96
query_test.go
···
2
2
3
3
import (
4
4
"testing"
5
-
"time"
6
5
7
6
_ "github.com/mattn/go-sqlite3"
8
7
)
···
676
675
})
677
676
}
678
677
679
-
func TestSelectIntegration_ErrorHandling(t *testing.T) {
680
-
db := setupTestDB(t)
681
-
defer db.Close()
682
-
683
-
t.Run("Invalid table name", func(t *testing.T) {
684
-
s := Select("*").From("nonexistent_table")
678
+
func TestDeleteIntegration_BasicQueries(t *testing.T) {
679
+
tests := []struct {
680
+
name string
681
+
stmt delete_
682
+
expectedRows int64
683
+
}{
684
+
{
685
+
name: "Delete all users",
686
+
stmt: Delete().From("users"),
687
+
expectedRows: 6,
688
+
},
689
+
{
690
+
name: "Delete active users only",
691
+
stmt: Delete().
692
+
From("users").
693
+
Where(Eq("active", true)),
694
+
expectedRows: 4,
695
+
},
696
+
{
697
+
name: "Select users in Engineering",
698
+
stmt: Delete().
699
+
From("users").
700
+
Where(Eq("department", "Engineering")),
701
+
expectedRows: 3,
702
+
},
703
+
{
704
+
name: "Delete users with age > 30",
705
+
stmt: Delete().
706
+
From("users").
707
+
Where(Gt("age", 30)),
708
+
expectedRows: 2,
709
+
},
710
+
{
711
+
name: "Delete users with salary between 70000 and 80000",
712
+
stmt: Delete().
713
+
From("users").
714
+
Where(Gte("salary", 70000.0).And(Lte("salary", 80000.0))),
715
+
expectedRows: 3,
716
+
},
717
+
}
685
718
686
-
sql, args := s.MustBuild()
719
+
for _, test := range tests {
720
+
t.Run(test.name, func(t *testing.T) {
721
+
db := setupTestDB(t)
722
+
defer db.Close()
687
723
688
-
_, err := db.Query(sql, args...)
689
-
if err == nil {
690
-
t.Error("Expected error for nonexistent table, got nil")
691
-
}
692
-
})
724
+
sql, args, err := test.stmt.Build()
725
+
if err != nil {
726
+
t.Fatalf("Failed to build query: %v", err)
727
+
}
693
728
694
-
t.Run("Invalid column name", func(t *testing.T) {
695
-
s := Select("nonexistent_column").From("users")
729
+
res, err := db.Exec(sql, args...)
730
+
if err != nil {
731
+
t.Fatalf("Failed to execute query: %v", err)
732
+
}
696
733
697
-
sql, args := s.MustBuild()
734
+
count, err := res.RowsAffected()
735
+
if err != nil {
736
+
t.Fatalf("Failed to execute query: %v", err)
737
+
}
698
738
699
-
_, err := db.Query(sql, args...)
700
-
if err == nil {
701
-
t.Error("Expected error for nonexistent column, got nil")
702
-
}
703
-
})
704
-
}
705
-
706
-
func TestSelectIntegration_PerformanceBaseline(t *testing.T) {
707
-
db := setupTestDB(t)
708
-
defer db.Close()
709
-
710
-
start := time.Now()
711
-
for i := range 1000 {
712
-
_, err := db.Exec(`
713
-
INSERT INTO users (name, email, department, age, active, salary)
714
-
VALUES (?, ?, ?, ?, ?, ?)
715
-
`, "User"+string(rune(i)), "user"+string(rune(i))+"@example.com", "Engineering", 25+i%15, i%2 == 0, 50000.0+float64(i*100))
716
-
if err != nil {
717
-
t.Fatalf("Failed to insert test user: %v", err)
718
-
}
739
+
if count != test.expectedRows {
740
+
t.Errorf("Expected %d rows, got %d", test.expectedRows, count)
741
+
}
742
+
})
719
743
}
720
-
insertTime := time.Since(start)
721
-
t.Logf("Inserted 1000 users in %v", insertTime)
722
-
723
-
t.Run("Simple select performance", func(t *testing.T) {
724
-
s := Select("name", "email").
725
-
From("users").
726
-
Where(Eq("active", true))
727
-
728
-
sql, args := s.MustBuild()
729
-
730
-
start := time.Now()
731
-
rows, err := db.Query(sql, args...)
732
-
if err != nil {
733
-
t.Fatalf("Failed to execute query: %v", err)
734
-
}
735
-
defer rows.Close()
736
-
737
-
count := 0
738
-
for rows.Next() {
739
-
count++
740
-
}
741
-
queryTime := time.Since(start)
742
-
743
-
t.Logf("Selected %d rows in %v", count, queryTime)
744
-
if queryTime > time.Millisecond*100 {
745
-
t.Logf("Query took longer than expected: %v", queryTime)
746
-
}
747
-
})
748
-
749
-
t.Run("Complex query performance", func(t *testing.T) {
750
-
s := Select("name", "department", "salary").
751
-
From("users").
752
-
Where(
753
-
Eq("active", true).
754
-
And(Gt("salary", 60000.0)).
755
-
Or(Eq("department", "Engineering")),
756
-
).
757
-
OrderBy("salary", Descending).
758
-
Limit(50)
759
-
760
-
sql, args := s.MustBuild()
761
-
762
-
start := time.Now()
763
-
rows, err := db.Query(sql, args...)
764
-
if err != nil {
765
-
t.Fatalf("Failed to execute query: %v", err)
766
-
}
767
-
defer rows.Close()
768
-
769
-
count := 0
770
-
for rows.Next() {
771
-
count++
772
-
}
773
-
queryTime := time.Since(start)
774
-
775
-
t.Logf("Complex query returned %d rows in %v", count, queryTime)
776
-
if queryTime > time.Millisecond*200 {
777
-
t.Logf("Complex query took longer than expected: %v", queryTime)
778
-
}
779
-
})
780
744
}