package query

import "testing"

func TestSelectUseIndex(t *testing.T) {
	result := From("WorkQueue").
		Select([]string{"Name"}).
		UseIndex("idx_work_queue_claim").
		Build()

	want := "SELECT `WorkQueue`.`Id`, `WorkQueue`.`Name` FROM `WorkQueue` USE INDEX (`idx_work_queue_claim`)"
	if result.SQL != want {
		t.Fatalf("SQL = %q, want %q", result.SQL, want)
	}
}

func TestUseIndexIsIgnoredForWrites(t *testing.T) {
	result := Update("WorkQueue").
		UseIndex("idx_work_queue_claim").
		Set(map[string]interface{}{"Name": "updated"}).
		Where("Id", "work-1").
		Build()

	if result.SQL == "" {
		t.Fatal("expected update SQL")
	}
	if want := "USE INDEX"; containsSQL(result.SQL, want) {
		t.Fatalf("write SQL contains %q: %s", want, result.SQL)
	}
}

func containsSQL(sql, fragment string) bool {
	for i := 0; i+len(fragment) <= len(sql); i++ {
		if sql[i:i+len(fragment)] == fragment {
			return true
		}
	}
	return false
}
