| 767 | } |
| 768 | |
| 769 | func TestQuery_ConditionalOrOnlyDatabases(t *testing.T) { |
| 770 | // Test when only database conditions exist (no environment filter) |
| 771 | where := Q() |
| 772 | |
| 773 | databases := []struct { |
| 774 | InstanceID string |
| 775 | DatabaseName string |
| 776 | }{ |
| 777 | {"inst-1", "db-1"}, |
| 778 | {"inst-2", "db-2"}, |
| 779 | } |
| 780 | |
| 781 | for _, db := range databases { |
| 782 | where.Or("(db.instance = ? AND db.name = ?)", db.InstanceID, db.DatabaseName) |
| 783 | } |
| 784 | |
| 785 | set := Q().Comma("project = ?", "proj-123") |
| 786 | q := Q().Space("UPDATE db SET ?", set).Space("WHERE ?", where) |
| 787 | |
| 788 | sql, args, err := q.ToSQL() |
| 789 | require.NoError(t, err) |
| 790 | // First Or() should NOT have " OR " prefix |
| 791 | require.Equal(t, "UPDATE db SET project = $1 WHERE (db.instance = $2 AND db.name = $3) OR (db.instance = $4 AND db.name = $5)", sql) |
| 792 | require.Equal(t, []any{"proj-123", "inst-1", "db-1", "inst-2", "db-2"}, args) |
| 793 | } |