diff --git a/go/libraries/doltcore/sqle/dtablefunctions/dolt_log.go b/go/libraries/doltcore/sqle/dtablefunctions/dolt_log.go index 9ffe0076ade..48f1faba292 100644 --- a/go/libraries/doltcore/sqle/dtablefunctions/dolt_log.go +++ b/go/libraries/doltcore/sqle/dtablefunctions/dolt_log.go @@ -459,7 +459,10 @@ func (ltf *LogTableFunction) RowIter(ctx *sql.Context, row sql.Row) (sql.RowIter dbName := sess.Session.GetCurrentDatabase() headRef, err := sess.CWBHeadRef(ctx, dbName) - if err != nil { + if err == doltdb.ErrOperationNotSupportedInDetachedHead { + // In detached HEAD state, we can still resolve commits without a branch ref + headRef = nil + } else if err != nil { return nil, err } diff --git a/go/libraries/doltcore/sqle/enginetest/dolt_queries.go b/go/libraries/doltcore/sqle/enginetest/dolt_queries.go index d1381ed61b2..464b9568a8e 100644 --- a/go/libraries/doltcore/sqle/enginetest/dolt_queries.go +++ b/go/libraries/doltcore/sqle/enginetest/dolt_queries.go @@ -4992,6 +4992,40 @@ var LogTableFunctionScriptTests = []queries.ScriptTest{ }, }, }, + { + // https://github.com/dolthub/dolt/issues/9762 + Name: "dolt_log function in detached head state", + SetUpScript: []string{ + "CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));", + "CALL dolt_commit('-Am', 'create table');", + "CALL dolt_tag('mytag');", + "INSERT INTO test_table VALUES (1, 'test');", + "CALL dolt_commit('-Am', 'add data');", + "CALL dolt_tag('v2');", + }, + Assertions: []queries.ScriptTestAssertion{ + { + Query: "USE mydb/mytag;", + Expected: []sql.Row{}, + }, + { + Query: "SELECT COUNT(*) FROM dolt_log('mytag');", + Expected: []sql.Row{{2}}, + }, + { + Query: "USE mydb/v2;", + Expected: []sql.Row{}, + }, + { + Query: "SELECT COUNT(*) FROM dolt_log('v2');", + Expected: []sql.Row{{3}}, + }, + { + Query: "SELECT message FROM dolt_log('mytag') ORDER BY commit_order;", + Expected: []sql.Row{{"Initialize data repository"}, {"create table"}}, + }, + }, + }, } var BranchStatusTableFunctionScriptTests = []queries.ScriptTest{