package executor

import (
	"testing"

	"github.com/everything-on-mysql/cassandra-on-mysql/pkg/cql/parser"
)

func TestValidateViewSelectAllowsSimple(t *testing.T) {
	stmt, err := parser.NewParser("CREATE MATERIALIZED VIEW ks.mv AS SELECT id FROM ks.tbl WHERE id IS NOT NULL PRIMARY KEY (id)").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	create := stmt.(*parser.CreateMaterializedViewStatement)
	if err := validateViewSelect(create.Select); err != nil {
		t.Fatalf("unexpected error: %v", err)
	}
}

func TestValidateViewSelectRejectsFunctionInWhere(t *testing.T) {
	stmt, err := parser.NewParser("CREATE MATERIALIZED VIEW ks.mv AS SELECT id FROM ks.tbl WHERE now() > 0 PRIMARY KEY (id)").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	create := stmt.(*parser.CreateMaterializedViewStatement)
	if err := validateViewSelect(create.Select); err == nil {
		t.Fatal("expected function in WHERE clause to be rejected")
	}
}

func TestValidateViewSelectRejectsContains(t *testing.T) {
	stmt, err := parser.NewParser("CREATE MATERIALIZED VIEW ks.mv AS SELECT id FROM ks.tbl WHERE tags CONTAINS 'x' PRIMARY KEY (id)").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	create := stmt.(*parser.CreateMaterializedViewStatement)
	if err := validateViewSelect(create.Select); err == nil {
		t.Fatal("expected CONTAINS operator to be rejected")
	}
}
