| 735 | } |
| 736 | |
| 737 | func TestQuery_ConditionalOrWhereClause(t *testing.T) { |
| 738 | // Test building WHERE clause with only Or() calls - pattern from actual codebase |
| 739 | // This tests that the first Or() doesn't add " OR " prefix |
| 740 | where := Q() |
| 741 | |
| 742 | // First condition |
| 743 | environmentID := "prod" |
| 744 | where.Or("environment = ?", environmentID) |
| 745 | |
| 746 | // Multiple database conditions |
| 747 | databases := []struct { |
| 748 | InstanceID string |
| 749 | DatabaseName string |
| 750 | }{ |
| 751 | {"inst-1", "db-1"}, |
| 752 | {"inst-2", "db-2"}, |
| 753 | } |
| 754 | |
| 755 | for _, db := range databases { |
| 756 | where.Or("(db.instance = ? AND db.name = ?)", db.InstanceID, db.DatabaseName) |
| 757 | } |
| 758 | |
| 759 | // Build final UPDATE query |
| 760 | set := Q().Comma("project = ?", "proj-123") |
| 761 | q := Q().Space("UPDATE db SET ?", set).Space("WHERE ?", where) |
| 762 | |
| 763 | sql, args, err := q.ToSQL() |
| 764 | require.NoError(t, err) |
| 765 | require.Equal(t, "UPDATE db SET project = $1 WHERE environment = $2 OR (db.instance = $3 AND db.name = $4) OR (db.instance = $5 AND db.name = $6)", sql) |
| 766 | require.Equal(t, []any{"proj-123", "prod", "inst-1", "db-1", "inst-2", "db-2"}, args) |
| 767 | } |
| 768 | |
| 769 | func TestQuery_ConditionalOrOnlyDatabases(t *testing.T) { |
| 770 | // Test when only database conditions exist (no environment filter) |