an ORM-free SQL experience

write tests for delete stmt

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li 46362302 fef8e27d

verified
Changed files
+60 -96
+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 }